これはLinodeでUbuntu 12.04 LTSを実行しているDrupalのウェブサイトです。最近、誰かがiptablesルールを変更し、多くの問題が発生し始めました。
これには以下が含まれます。
サーバーが外部サービスにアクセスできないため、Mollomスパム対策はDrupalサイトでは機能しません。 (詳細は下から)
Drupalレポート:「システムやネットワーク構成が原因でDrupalがWebページにアクセスできないため、機能が低下しました。」
サーバーはインターネットをpingできません。
ping google.com
ping: 不明なホスト google.com他のネットワークサービスが失敗しました。たとえば、
$ sudo ntpdate ntp.ubuntu.com終了、ネームサーバーが利用できません:名前解決が一時的に失敗する(-3)6月1日16:42:34 ntpdate [7420]:ネームサーバーが利用できません:名前確認が一時的に失敗する(-3)
apt-get更新エラーhttp://us.archive.ubuntu.comPrecision Release.gpgは
一時的に "us.archive.ubuntu.com"エラーを解決できません。http://security.ubuntu.comPrecision-security Release.gpg は
一時的に「security.ubuntu.com」を確認できません。サーバーが正しく機能していません。以下のエラーは、iptablesルールのためにインターネットにアクセスできないことに関連していますか?
メモリ不足: プロセス 2300(mysqld) 終了スコア 129 またはサブプロセスを犠牲にしてプロセス 2300(mysqld) 終了60 または犠牲サブシャットダウンプロセス 5937(mysqld) total-vm: 344040kB, anon-rss: 78988kB, file-rss: 0kB
Drupalエラーの詳細は次のとおりです。 Drupalの設定は変更されていません。 iptablesにのみ以下があります。
1. HTTP 要求の状態が失敗しました。システムまたはネットワーク構成で Drupal が Web ページにアクセスできないため、機能が低下しました。これはWebサーバーの設定やPHP設定によって発生する可能性があり、利用可能なアップデートに関する情報をダウンロードしたり、コレクタフィードをインポートしたり、OpenIDを介してログインしたり、他のネットワーク依存サービスを使用したりするには解決する必要があります。 Drupalがページにアクセスできると確信していますが、まだこのメッセージが表示されている場合は、$ conf ['drupal_http_request_fails'] = FALSE;をsettings.phpファイルの下部に追加できます。
2. Mollom API Key サービスエラー Mollom API Key を確認できません。後でもう一度お試しください。この問題により、会員は当社のサイトに登録したりコメントを残したりすることができません。
以下は、現在(問題のある)iptablesルールです。 (しかし、ポート2222はもともとSSHポートでした。誰かがSSHを再びポート22に変更しましたが、明らかにiptablesにポート2222を開いたままにしましたが、これは別の質問です。)
# iptables -nL
Chain INPUT (policy DROP)
target prot opt source destination
fail2ban-apache-overflows tcp -- 0.0.0.0/0 0.0.0.0/0 multiport dports 80,443
fail2ban-apache tcp -- 0.0.0.0/0 0.0.0.0/0 multiport dports 80,443
DROP all -- 69.30.238.162 0.0.0.0/0
DROP all -- 121.205.199.140 0.0.0.0/0
DROP all -- 137.117.129.250 0.0.0.0/0
DROP all -- 117.26.252.26 0.0.0.0/0
DROP all -- 112.111.165.71 0.0.0.0/0
DROP all -- 175.42.95.145 0.0.0.0/0
ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:80 state NEW,ESTABLISHED
ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:2222 state NEW,ESTABLISHED
ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:443 state NEW,ESTABLISHED
ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:22
ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:2222
Chain FORWARD (policy DROP)
target prot opt source destination
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp spt:80 state ESTABLISHED
ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp spt:2222 state ESTABLISHED
ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp spt:443 state ESTABLISHED
ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp spt:22
ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp spt:2222
Chain fail2ban-apache (1 references)
target prot opt source destination
RETURN all -- 0.0.0.0/0 0.0.0.0/0
Chain fail2ban-apache-overflows (1 references)
target prot opt source destination
RETURN all -- 0.0.0.0/0 0.0.0.0/0
私の質問:私はFail2banの設定について何も知らないので、基本機能を復元するために実行できる最小の変更は何ですか?
アップデート:Michael Kjörlingの答えに基づいて更新されたiptablesルールは次のとおりです。そうですか?
# cat iptables.modified.rules
# Generated by iptables-save v1.4.12 on Sat Jun 1 21:26:17 2013
*security
:INPUT ACCEPT [60016:6837978]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [60450:61970107]
COMMIT
# Completed on Sat Jun 1 21:26:17 2013
# Generated by iptables-save v1.4.12 on Sat Jun 1 21:26:17 2013
*raw
:PREROUTING ACCEPT [72450:7582406]
:OUTPUT ACCEPT [60450:61970107]
COMMIT
# Completed on Sat Jun 1 21:26:17 2013
# Generated by iptables-save v1.4.12 on Sat Jun 1 21:26:17 2013
*nat
:PREROUTING ACCEPT [7899:447793]
:INPUT ACCEPT [7787:439884]
:OUTPUT ACCEPT [5818:4357219]
:POSTROUTING ACCEPT [5818:4357219]
COMMIT
# Completed on Sat Jun 1 21:26:17 2013
# Generated by iptables-save v1.4.12 on Sat Jun 1 21:26:17 2013
*mangle
:PREROUTING ACCEPT [72450:7582406]
:INPUT ACCEPT [72450:7582406]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [60450:61970107]
:POSTROUTING ACCEPT [60450:61970107]
COMMIT
# Completed on Sat Jun 1 21:26:17 2013
# Generated by iptables-save v1.4.12 on Sat Jun 1 21:26:17 2013
*filter
:INPUT DROP [44:2387]
:FORWARD DROP [0:0]
:OUTPUT ACCEPT [78:41503]
:fail2ban-apache - [0:0]
:fail2ban-apache-overflows - [0:0]
-A INPUT -s 69.30.238.162/32 -j DROP
-A INPUT -s 121.205.199.140/32 -j DROP
-A INPUT -s 137.117.129.250/32 -j DROP
-A INPUT -s 117.26.252.26/32 -j DROP
-A INPUT -s 112.111.165.71/32 -j DROP
-A INPUT -s 175.42.95.145/32 -j DROP
-A INPUT -p tcp -m multiport --dports 80,443 -j fail2ban-apache-overflows
-A INPUT -p tcp -m multiport --dports 80,443 -j fail2ban-apache
-A INPUT -i eth0 -p tcp -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -i eth0 -p tcp -m tcp --dport 443 -m state --state NEW,ESTABLISHED -j ACCEPT
-A INPUT -i eth0 -p tcp -m tcp --dport 80 -m state --state NEW,ESTABLISHED -j ACCEPT
-A INPUT -i eth0 -p tcp -m tcp --dport 22 -j ACCEPT
-A INPUT -p udp -m state --state RELATED -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A fail2ban-apache -j RETURN
-A fail2ban-apache-overflows -j RETURN
COMMIT
# Completed on Sat Jun 1 21:26:17 2013
答え1
OOMキラーの出現はあなたの問題に関連している可能性が高く、間違いなく役に立ちません。スワップスペースを増やすか、RAMを増設してください。何か他のものがなければ、カーネルOOMキラーが被害者を探し始めたときにサーバーがプロセスを終了し続けたくないでしょう。悪い。
つまり、ICMPまたはUDP(またはTCP)ベースのDNSを使用できないことがわかりました。インターネット上で正常に動作するホストはICMPパケットを受け入れる必要があり、DNSサーバーを実行している場合はTCPとUDPを介してポート53通信を開く必要があります。
外部の当事者が利用可能なサービスに影響を与えることなく、合理的な構成にさらに合うように最小限の変更は簡単です。
iptables -A INPUT -p tcp -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -p udp -m state --state RELATED -j ACCEPT
iptables -A INPUT -p icmp -j ACCEPT
(テストされていないので、コマンドラインの構文が少し異なる場合がありますが、これはポイントです。)
通常、パフォーマンス上の理由から、これらのルールは関連するiptablesチェーンの最上位またはその近くにあります。これにより、TCPまたはUDPだけでなく、ICMPメッセージを介してサーバーへのすべてのアウトバウンド応答が許可されます。 ICMPは次のとおりです。批判的インターネットでうまく機能しているホストの場合は、ブロックしたい場合は次のものをping
使用できます。たくさんICMPエコー要求をブロックするより具体的な規則がそれです。ただし、よく知られているポート80が開いていると、実際にはあまり役に立ちません。トラブルシューティングはより複雑になります。
出力接続ルールも、接続戦略が実行しない操作を実行しないため、重複します。これを排除するだけでiptables -F OUTPUT
構成が複雑になり、すべての発信パケットに対してわずかなパフォーマンスが低下しますが、利点はありません。さらに、ほとんどの権限を持つソースポートを指定しますが、これはユーザーが望むものとほとんど一致しません。