Webサーバへのアクセスとファイアウォールについて
以前までWebアプリケーションのテストをPythonのワンライナーで行っていた。
今回きちんとWebサーバでテストしようと思って、同一ネットワーク内にWebサーバを構築してテストすることにした。
環境
サーバマシンのOS Scientific Linux 6.5
Webサーバ Apache 2.2
始めからインストールしてあったので、/etc/httpd/conf/httpd.confをいじいじ。
sudo service httpd start
でWebサーバを起動。
[fumifumi@PC21 ~]$ sudo service httpd start
httpd を起動中: [ OK ]
起動した。
サーバマシンでブラウザを開いて、localhostでアクセスすると、無事ページが表示された。
次に、ネットワーク内の別のマシンでブラウザを開いてアクセスしてみた。
アクセスできない。
ググってみると、考えられる原因はSELinuxかファイアウォールらしい。
一つずつ調べてみた。
・SELinux
SELinuxには3つのモードがある。
モード | 説明 |
---|---|
Enforcing | SELinuxのパーミッションのチェックを行い、アクセスを拒否する。 |
Permissive | SELinuxパーミッションのチェックはするが、実際にアクセスの拒否はしない。 |
disabled | 無効 |
現在の動作モードはgetenforceコマンドで確認できる。
$ getenforce
Enforcing
以下のコマンドで、SELinuxを一時的に無効化できる。
$ sudo setenforce 0
有効化するときはこれ。
$ sudo setenforce 1
無効化して、アクセスしてみたものの、同様にアクセスできなかったので、
原因はSELinuxではなかったようだ。
ファイアウォール
まず、ファイアウォールを止めてアクセスしてみる。
$ sudo service iptables stop
んで、アクセスしてみると、ページが表示できた!
ということで、原因はファイアウォールだった。
iptablesの設定を変更して、80ポートへの接続を許可する必要があるらしい。
iptablesの設定は、/etc/sysconfig/iptablesで変更できる。
初期設定は以下の通り。
# Firewall configuration written by system-config-firewall
# Manual customization of this file is not recommended.
*filter
: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
これに1行追加する。
# Firewall configuration written by system-config-firewall
# Manual customization of this file is not recommended.
*filter
: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
#permit http
-A INPUT -p tcp --dport 80 -j ACCEPT
-A INPUT -j REJECT --reject-with icmp-host-prohibited
-A FORWARD -j REJECT --reject-with icmp-host-prohibited
COMMIT
変更を保存して、iptablesを再起動する。
$ sudo service iptables restart iptables: チェインをポリシー ACCEPT へ設定中filter [ OK ]
iptables: ファイアウォールルールを消去中: [ OK ]
iptables: モジュールを取り外し中: [ OK ]
iptables: ファイアウォールルールを適用中: [ OK ]
アクセスしてみると、無事にアクセスすることができました。
終わり。