Linux(CentOS 6) - iptablesの設定を変更し、http、httpsでのアクセスを許可する

  • 投稿日:
  • by

minimal install(ミニマルインストール)したCentOS 6.4は、iptables(ファイアウォール)の設定が自動的に有効になっているため、この設定を変更しない限り、httpdプロセスが実行中であっても、CentOSの外のネットワークからhttp、httpsでのアクセスができない。

つまり、CentOSでApacheによるWebサービスを提供していても、CentOSの外のネットワーク上にあるPCのブラウザからは、CentOSのWebサービスが提供するサイトを閲覧できない。

この問題を解決するには、(1)iptablesを無効にするか、(2)iptablesにhttp(80番ポート)、https(443番ポート)でのアクセスを許可する設定を追加すればよい。

以下に、それぞれの設定メモを記載する。

(0)共通作業

[root@test ~]# /etc/rc.d/init.d/iptables status   ←iptablesの稼働状況を確認する。(以下のメッセージであれば稼働していることが分かる。)
テーブル: filter
Chain INPUT (policy ACCEPT)
num  target     prot opt source               destination
1    ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0           state RELATED,ESTABLISHED
2    ACCEPT     icmp --  0.0.0.0/0            0.0.0.0/0
3    ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0
4    ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0           state NEW tcp dpt:22
5    REJECT     all  --  0.0.0.0/0            0.0.0.0/0           reject-with icmp-host-prohibited

Chain FORWARD (policy ACCEPT)
num  target     prot opt source               destination
1    REJECT     all  --  0.0.0.0/0            0.0.0.0/0           reject-with icmp-host-prohibited

Chain OUTPUT (policy ACCEPT)
num  target     prot opt source               destination

(1)iptablesを無効にする場合の作業

[root@test ~]# /etc/rc.d/init.d/iptables stop   ←iptablesをコマンドで停止する。
iptables: ファイアウォールルールを消去中:                  [  OK  ]
iptables: チェインをポリシー ACCEPT へ設定中filter         [  OK  ]
iptables: モジュールを取り外し中:                          [  OK  ]
[root@test ~]# /etc/rc.d/init.d/iptables status   ←iptablesの稼働状況を確認する。(以下のメッセージであれば稼働していないことが分かる。)
iptables: ファイアウォールが稼働していません。
[root@test ~]# chkconfig --list iptables   ←iptablesの自動起動設定を確認する。
iptables        0:off   1:off   2:on    3:on    4:on    5:on    6:off
[root@test ~]# chkconfig iptables off   ←iptablesの自動起動設定を無効化する。
[root@test ~]# chkconfig --list iptables   ←iptablesの自動起動設定が無効化されたことを確認する。
iptables        0:off   1:off   2:off   3:off   4:off   5:off   6:off

(2)iptablesにhttp(80番ポート)、https(443番ポート)でのアクセスを許可する設定を追加する場合の作業
[root@test ~]# iptables -L   ←iptablesの設定を一覧表示する。
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

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@test ~]# cat /etc/sysconfig/iptables   ←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
[root@test ~]# iptables -A INPUT -p tcp --dport 80 -j ACCEPT   ←HTTP(80番ポート)へのアクセスは許可する。
[root@test ~]# iptables -A INPUT -p tcp --dport 443 -j ACCEPT   ←HTTPS(443番ポート)へのアクセスは許可する。

しかし、これでは誤った設定をしたことになり、依然として、CentOSの外のネットワークからはhttp、httpsでのアクセスができない。

[root@test ~]# iptables -L -n --line-numbers   ←iptablesの設定をnum(ファイアウォールのルール番号)およびポート番号付で一覧表示する。
Chain INPUT (policy ACCEPT)
num  target     prot opt source               destination
1    ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0           state RELATED,ESTABLISHED
2    ACCEPT     icmp --  0.0.0.0/0            0.0.0.0/0
3    ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0
4    ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0           state NEW tcp dpt:22
5    REJECT     all  --  0.0.0.0/0            0.0.0.0/0           reject-with icmp-host-prohibited
6    ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0           tcp dpt:80
7    ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0           tcp dpt:443

Chain FORWARD (policy ACCEPT)
num  target     prot opt source               destination
1    REJECT     all  --  0.0.0.0/0            0.0.0.0/0           reject-with icmp-host-prohibited

Chain OUTPUT (policy ACCEPT)
num  target     prot opt source               destination

上記のiptablesの設定では、ルール番号6と7でhttpとhttpsを許可する前に、ルール番号5で全てのアクセスを拒否している設定になっている。

番号が若いルールの方がルールは優先されるため、これではhttpとhttpsでのアクセス許可を設定した意味がない。

そこで、http、httpsのルールは、ルール番号5に挿入して追加することとする。

[root@test ~]# iptables -I INPUT 5 -p tcp --dport 80 -j ACCEPT   ←HTTP(80番ポート)へのアクセスは許可する。
[root@test ~]# iptables -I INPUT 5 -p tcp --dport 443 -j ACCEPT   ←HTTPS(443番ポート)へのアクセスは許可する。
[root@test ~]# iptables -L -n --line-numbers   ←iptablesの設定をnum(ファイアウォールのルール番号)およびポート番号付で一覧表示する。
Chain INPUT (policy ACCEPT)
num  target     prot opt source               destination
1    ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0           state RELATED,ESTABLISHED
2    ACCEPT     icmp --  0.0.0.0/0            0.0.0.0/0
3    ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0
4    ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0           state NEW tcp dpt:22
5    ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0           tcp dpt:443
6    ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0           tcp dpt:80
7    REJECT     all  --  0.0.0.0/0            0.0.0.0/0           reject-with icmp-host-prohibited
8    ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0           tcp dpt:80
9    ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0           tcp dpt:443

Chain FORWARD (policy ACCEPT)
num  target     prot opt source               destination
1    REJECT     all  --  0.0.0.0/0            0.0.0.0/0           reject-with icmp-host-prohibited

Chain OUTPUT (policy ACCEPT)
num  target     prot opt source               destination
[root@test ~]# iptables -D INPUT 9   ←最初に設定したhttpとhttpsの誤ったルール9が残っていたので削除する。
[root@test ~]# iptables -D INPUT 8   ←最初に設定したhttpとhttpsの誤ったルール8が残っていたので削除する。
[root@test ~]# iptables -L -n --line-numbers   ←iptablesの設定をnum(ファイアウォールのルール番号)およびポート番号付で一覧表示する。
Chain INPUT (policy ACCEPT)
num  target     prot opt source               destination
1    ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0           state RELATED,ESTABLISHED
2    ACCEPT     icmp --  0.0.0.0/0            0.0.0.0/0
3    ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0
4    ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0           state NEW tcp dpt:22
5    ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0           tcp dpt:443
6    ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0           tcp dpt:80
7    REJECT     all  --  0.0.0.0/0            0.0.0.0/0           reject-with icmp-host-prohibited

Chain FORWARD (policy ACCEPT)
num  target     prot opt source               destination
1    REJECT     all  --  0.0.0.0/0            0.0.0.0/0           reject-with icmp-host-prohibited

Chain OUTPUT (policy ACCEPT)
num  target     prot opt source               destination

以上の作業で、CentOSの外のネットワークからhttp、httpsでのアクセスができるようになっているはずなので、接続できていることを確認する。

なお、以上の作業では設定が「保存されていない」ので、設定を保存するために、以下の作業も必要。

[root@test ~]# /etc/rc.d/init.d/iptables save   ←設定したiptablesの情報を保存する。この作業をしないと、iptables再起動時またはOS再起動時に、今回設定したiptablesの内容が消えてしまう。
iptables: ファイアウォールのルールを /etc/sysconfig/iptable[  OK  ]中:
[root@test ~]# /etc/rc.d/init.d/iptables restart   ←iptablesを再起動する。
iptables: ファイアウォールルールを消去中:                  [  OK  ]
iptables: チェインをポリシー ACCEPT へ設定中filter         [  OK  ]
iptables: モジュールを取り外し中:                          [  OK  ]
iptables: ファイアウォールルールを適用中:                  [  OK  ]
[root@test ~]# iptables -L -n --line-numbers   ←iptablesを再起動しても、設定が失われていないことを確認する。
Chain INPUT (policy ACCEPT)
num  target     prot opt source               destination
1    ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0           state RELATED,ESTABLISHED
2    ACCEPT     icmp --  0.0.0.0/0            0.0.0.0/0
3    ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0
4    ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0           state NEW tcp dpt:22
5    ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0           tcp dpt:443
6    ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0           tcp dpt:80
7    REJECT     all  --  0.0.0.0/0            0.0.0.0/0           reject-with icmp-host-prohibited

Chain FORWARD (policy ACCEPT)
num  target     prot opt source               destination
1    REJECT     all  --  0.0.0.0/0            0.0.0.0/0           reject-with icmp-host-prohibited

Chain OUTPUT (policy ACCEPT)
num  target     prot opt source               destination
[root@test ~]# cat /etc/sysconfig/iptables   ←iptablesの設定ファイル(テキスト)に、設定が追記されていることを確認する。
# Generated by iptables-save v1.4.7 on Mon May  6 01:23:59 2013
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [157:40257]
-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 443 -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 Mon May  6 01:23:59 2013
[root@test ~]# chkconfig --list iptables   ←iptablesの自動起動設定を確認する。
iptables 0:off 1:off 2:on 3:on 4:on 5:on 6:off

SNS:
この記事に付けられているタグ: Apache , CentOS 6 , iptables , Linux