himetani's blog

備忘録など。

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でアクセスすると、無事ページが表示された。

次に、ネットワーク内の別のマシンでブラウザを開いてアクセスしてみた。

f:id:himetani:20140402182937p:plain

アクセスできない。

ググってみると、考えられる原因は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 ]

アクセスしてみると、無事にアクセスすることができました。

終わり。