iptablesが有効になっている場合のApacheアクセスエラー対処法

きちんとApacheが起動しているのに、他のPCからアクセスができない場合は、iptablesの設定に原因があるかもしれません。

iptablesとは、Linuxで、パケットフィルタリングおよびネットワークアドレス変換(NAT)の機能を提供するプログラム、またはその操作をするコマンドのことです。カーネル2.2以前ではipchainsまたはipfwadmといった実装が使われていましたが、2.4系になって、iptablesが一般的となっています。

問題が、iptablesの設定に起因するものなのかどうかを調べるためには、まず、iptablesによるパケットフィルタリングを一時的にOFFにしてみるのがいいかもしれません。

iptabelsサービスは以下のコマンドで停止することができます。

/etc/init.d/iptables stop

逆に起動する場合は、

/etc/init.d/iptables start

です。

サービスの停止により、ブラウザによるWebアクセスが可能になれば、原因がiptablesによるものだと判断できます。

この場合、iptablesの設定を確認してみましょう。設定は、「/etc/sysconfig/iptables」ファイルで行われています。

私がiptablesが原因でアクセスできなかった時には、以下のようになっていました。(インストールした時のデフォルトの状態です。)

:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT
-A INPUT -j REJECT --reject-with icmp-host-prohibited
-A FORWARD -j REJECT --reject-with icmp-host-prohibited
COMMIT

tcpだと、22番のssh接続しか有効になっていないことがわかります。ここに、80番ポートのhttp接続を加えれば、httpによるWebアクセスが可能になります。設定ファイルに、以下の一行を追加して、iptablesサービスを再起動してみましょう。

-A INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT

上記は、Webサーバへの接続要求パケットについての設定で、接続状態が”NEW”かつプロトコルが”tcp”かつ送信先ポートが”80″ならば、通信を許可する設定となっています。