CentOS6で動作するWebサーバーに外部からアクセスするための設定

前回まででCentOs6にapacheのインストールを済ませまして、これから設定をしていこうというところですが、その前にちょっと動作確認をしておこう、と思って手元のwinodowsマシンからサーバーにアクセスしてみました。

すると、ページが表示されなかったんです。

「あれ? apache動いてないのかな?」

と思ってサーバー側機器のブラウザを起動して、localhostにアクセスしてみるとこれがちゃんとアクセスできる。

「ん? もしかしてネットワークがつながってない?」

でもPINGを打ったらちゃんとつながる……。僕の知識ではこの程度の切り分けしかできず、ネットでアレコレ調べてみると、どうやらiptablesの設定に問題がある可能性がある、ことがわかりました。

試しに

service iptables stop

としてみるとwindowsマシンからアクセスできるようになりました。iptablesがこの問題に絡んでいることは間違いありません。

調べてみると、このiptablesというコマンドはNetfilterというパケット処理をするフレームワークを操作するコマンドだそうです。

実際に設定を見てみると、httpやhttpsのアクセスを許可する設定になっておらず、ping(ICMP)は許可する設定になっていたのでこのような現象となって表れたようです。

ですので、

-A INPUT -p tcp -m tcp --dport 80 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 443 -j ACCEPT

の2行を/etc/sysconfig/iptablesに追加してやって、iptablesを再起動するとアクセスできるようになりました。今回は設定ファイルを直接書き直しましたが、コマンドを打って保存するやり方もあって、そっちのほうがわかりやすい気がします。

ちなみにICMPに関するルールは

-A INPUT -p icmp -j ACCEPT

となっていましたので、試しに

-A INPUT -p icmp -j REJECT

とすると、宛先ポートに到達できませんというメッセージが返ってくるようになりました。

  • Aでルールの追加を宣言し、-pでプロトコルを指定 --dportで通信ポートを指定し、-jでパケットの処理方法を指定するようです。

このあたりは大変難しいですがとても重要そうなので、また調べていこうと思っています。

なお、今回はこちらのページこちらのページを参考にさせていただきました。