CentOS 6 - iptables がポート 80 経由の Web アクセスを阻止する

CentOS 6 - iptables がポート 80 経由の Web アクセスを阻止する

CentOS 6.2 で新しい Web サーバーをセットアップしていますが、Web 経由で接続できません。すべてが正しくセットアップされておりhttpd.conf、Apache も実行されているように見えるので、iptables の問題であると思われます。

以下に問題の原因となる可能性のあるものはありますか?

編集: iptables を停止すると正常に接続できるので、以下の部分で調整する必要があるはずです。すでにiptables -A INPUT -p tcp --dport 80 -j ACCEPTiptables を実行して保存し、再起動しましたが、違いはありませんでした。

# iptables -L
Chain INPUT (policy ACCEPT)
target     prot opt source               destination
ACCEPT     all  --  anywhere             anywhere            state RELATED,ESTABLISHED
ACCEPT     icmp --  anywhere             anywhere
ACCEPT     all  --  anywhere             anywhere
ACCEPT     tcp  --  anywhere             anywhere            state NEW tcp dpt:ssh
REJECT     all  --  anywhere             anywhere            reject-with icmp-host-prohibited
ACCEPT     tcp  --  anywhere             anywhere            tcp dpt:http

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination
REJECT     all  --  anywhere             anywhere            reject-with icmp-host-prohibited

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination

以下の回答のアドバイスに従ってください:

[root@staging ~]# iptables -N TCP
[root@staging ~]# iptables -A TCP -p tcp --dport 80 -j ACCEPT
[root@staging ~]# iptables-save > /etc/iptables/iptables.rules
-bash: /etc/iptables/iptables.rules: No such file or directory
[root@staging ~]# iptables-save
# Generated by iptables-save v1.4.7 on Thu Nov  8 14:09:09 2012
*filter
:INPUT ACCEPT [91:7480]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [70:6556]
:TCP - [0:0]
-A TCP -p tcp -m tcp --dport 80 -j ACCEPT
COMMIT
# Completed on Thu Nov  8 14:09:09 2012
[root@staging ~]# iptables-restore
^C
[root@staging ~]# service iptables start
iptables: Applying firewall rules:                         [  OK  ]

さらに編集: iptables を停止した後に iptables-save を実行したため、何も表示されませんでした。出力は次のとおりです。

# iptables-save
# Generated by iptables-save v1.4.7 on Thu Nov  8 14:39:10 2012
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [28:3344]
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT
-A INPUT -j REJECT --reject-with icmp-host-prohibited
-A INPUT -p tcp -m tcp --dport 80 -j ACCEPT
-A FORWARD -j REJECT --reject-with icmp-host-prohibited
COMMIT
# Completed on Thu Nov  8 14:39:10 2012

答え1

出力iptables-saveには、ルール 3 に関する次の追加情報が表示されますが、これは表示されませんiptables -L

出力からiptables -L考えると全てトラフィックが受け入れられます:

ACCEPT     all  --  anywhere             anywhere

ただし、iptables-save次のようになります:

-A INPUT -i lo -j ACCEPT

つまり、 はiptables実際にすべてのトラフィックを受け入れますが、ループバック インターフェイス ( ) からのみ受け入れますlo

これが、HTTP トラフィックが Web サーバーに到達しない理由です。許可されるトラフィックは、ルール 1 で確立された接続、pingルール 2 では ICMP (例 )、-A INPUT -p icmp -j ACCEPTルール 4 では SSH のみです-A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT

すると、ルール 5 ですべてが拒否されます-A INPUT -j REJECT --reject-with icmp-host-prohibited

つまり、ルール 6 に到達する前にすべての HTTP トラフィックが拒否されます。-A INPUT -p tcp -m tcp --dport 80 -j ACCEPT

なおすルール6(-A INPUT -p tcp -m tcp --dport 80 -j ACCEPT)を削除します。

iptables -D INPUT 6

そしてそれを(オプション-I)ルール5として挿入します:

iptables -I INPUT 5 -p tcp -m tcp --dport 80 -j ACCEPT

またはこれをインポートします:

# Generated by iptables-save v1.4.6 on Thu Nov  8 16:46:28 2012
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [40:5423]
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 80 -j ACCEPT
-A INPUT -j REJECT --reject-with icmp-host-prohibited
-A FORWARD -j REJECT --reject-with icmp-host-prohibited
COMMIT
# Completed on Thu Nov  8 16:46:28 2012

ファイルに保存して実行しますiptables-restore < file

編集: OP は、再起動後に新しいルールが失われることに気付きましたiptables

ここで説明されているように:http://wiki.centos.org/HowTos/Network/IPTablesルールを更新するたびに保存する必要があるので、次のコマンドを実行します。

# /sbin/service iptables save

変更を永続的にするには、 を使用します。これで、変更されたルールが によって読み込まれるようになりますiptables

答え2

私は iptables の達人ではありませんが、私の設定ではポートを開くために別のカスタム チェーンを使用しました。

iptables -N TCP
iptables -A TCP -p tcp --dport 80 -j ACCEPT

必ず保存してください

iptables-save > /etc/iptables/iptables.rules

ロードするには

iptables-restore < /etc/iptables/iptables.rules

^^ デーモンがロードしない場合は、上記の方法をすでに実行したとおっしゃっています (INPUT チェーンのみで、これは重要ではないと思います)。したがって、保存と再ロードが正しく行われていない可能性があります。iptables デーモンは正​​しく実行されていますか? 上記のコマンドを実行し、iptables -L を使用した後、新しく追加されたチェーンとルールが表示されることを確認してください。


さらにトラブルが発生した場合の対応として、iptables-save > location_of_rules CentOS 上の場所がわかりません。ただし、iptables -L を使用して新しいチェーンがそこにあるかどうかを確認してください。

また、Web サイトにアクセスできないことを確認することをお勧めします。これを行うには、(コンピューター上の) Web ブラウザーで URL http: //127.0.0.1/ を入力します (: と // の間のスペースは不要)。Web サイトにアクセスできる場合は、ルーターに問題があります。ファイアウォールでポートを開くには、ポート転送を行う必要があります。http://en.wikipedia.org/wiki/ポート転送

関連情報