kakiro-webカキローウェブ

システム開発情報とコンピューター書籍の紹介サイト

CentOS6.7 64bit iptablesによるアクセス制御

当サイトでCentOS6.7 64bitへのインストール方法を紹介しているパッケージに関するiptablesの設定を、以下に示します。

以下の各コマンドで、プロンプトが「#」で開始しているものはrootユーザーでの実行、「$」で開始しているものは一般ユーザーでの実行となります。

Apacheへの外部からのアクセスを許可

HTTPでの外部からのアクセスは、iptablesによってデフォルトでは拒否されています。HTTPでの外部からのアクセスが可能となるようiptablesの設定を行います。

設定前の状態

アクセスを許可する前のiptablesの設定内容を、以下のコマンドで確認します。

※この例はデフォルトの設定内容になっています。

# iptables -L -n --line-number
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

アクセス許可の設定

HTTPでの外部アクセスを許可する設定を追加するには、以下のようなコマンドを実行します。

※アクセス元のIPアドレス等、別途制限が必要なものがある場合は、そのオプションの指定を追加してください。

# iptables -I INPUT 5 -m state --state NEW -p tcp --dport 80 -j ACCEPT
  • INPUTチェインでは、末尾に全ての接続を拒否する設定が行われていますので、「-A」オプションによる末尾への追加ではなく、「-I」オプションによる挿入を行うようにしています。
  • INPUTの後に指定している「5」は、挿入する位置を示すルール番号で、末尾で全ての接続を拒否している位置よりも前に挿入されるようにします。
  • 「--dport」オプションにより、ApacheがHTTPでのアクセスに使用しているポート80へのアクセスを許可しています。

アクセスを許可した後のiptablesの設定内容は、以下のようになります。

# iptables -L -n --line-number
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           state NEW tcp dpt:80
6    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

これによりApacheへの外部からのアクセスが可能になりますが、このままではOSの再起動後にはiptablesの設定前の状態に戻ってしまいます。

iptablesの設定内容は、ファイル「/etc/sysconfig/iptables」に保存されるようになっており、ここに設定を保存することで、OSの再起動後も設定を有効にすることができます。

iptablesの設定をファイル「/etc/sysconfig/iptables」に保存するには、以下のコマンドを実行します。

# service iptables save

設定ファイル「/etc/sysconfig/iptables」の設定前と設定後の内容も、以下に示しておきます。

設定前。

:(略)
-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
:(略)

設定後。

:(略)
-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 state --state NEW -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
:(略)

尚、追加したアクセス許可の設定を削除するには、以下のようなコマンドを実行します。

# iptables -D INPUT 5

これによりINPUTチェインからルール番号「5」のものが削除されます。

削除の設定を保存するには、以下のコマンドを実行します。

# service iptables save

SSLによるアクセス許可を追加

SSLを使用したHTTPSでの外部アクセスを許可する設定を追加するには、以下のようなコマンドを実行します。

※アクセス元のIPアドレス等、別途制限が必要なものがある場合は、そのオプションの指定を追加してください。

# iptables -I INPUT 6 -m state --state NEW -p tcp --dport 443 -j ACCEPT
  • 「--dport」オプションにより、ApacheがSSLを使用したHTTPSでのアクセスに使用しているポート443へのアクセスを許可しています。

iptablesの設定を保存するため、以下のコマンドを実行します。

# service iptables save

アクセスを許可した後のiptablesの設定内容は、以下のようになります。

# iptables -L -n --line-number
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           state NEW tcp dpt:80
6    ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0           state NEW tcp dpt:443
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

設定を保存した後の設定ファイル「/etc/sysconfig/iptables」の内容は、以下のようになります。

:(略)
-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 state --state NEW -m tcp --dport 80 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 443 -j ACCEPT
-A INPUT -j REJECT --reject-with icmp-host-prohibited
-A FORWARD -j REJECT --reject-with icmp-host-prohibited
COMMIT
:(略)

MySQLへの外部からのアクセスを許可

MySQLへの外部からのアクセスは、iptablesによってデフォルトでは拒否されています。MySQLへの外部からのアクセスが可能となるようiptablesの設定を行います。

iptablesによるアクセス制御の詳細につきましては、上記のApacheへの外部からのアクセスを許可する際の設定もご参照ください。

設定前の状態

アクセスを許可する前のiptablesの設定内容を、以下のコマンドで確認します。

※この例はデフォルトの設定に、HTTPでの外部アクセス許可を追加した内容になっています。

# iptables -L -n --line-number
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           state NEW tcp dpt:80
6    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

アクセス許可の設定

MySQLへの外部アクセスを許可する設定を追加するには、以下のようなコマンドを実行します。

※アクセス元のIPアドレス等、別途制限が必要なものがある場合は、そのオプションの指定を追加してください。

# iptables -I INPUT 6 -m state --state NEW -p tcp --dport 3306 -j ACCEPT
  • INPUTチェインでは、末尾に全ての接続を拒否する設定が行われていますので、「-A」オプションによる末尾への追加ではなく、「-I」オプションによる挿入を行うようにしています。
  • INPUTの後に指定している「6」は、挿入する位置を示すルール番号で、末尾で全ての接続を拒否している位置よりも前に挿入されるようにします。
  • 「--dport」オプションにより、MySQLが使用しているポート3306へのアクセスを許可しています。

アクセスを許可した後のiptablesの設定内容は、以下のようになります。

# iptables -L -n --line-number
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           state NEW tcp dpt:80
6    ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0           state NEW tcp dpt:3306
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

iptablesの設定がOSの再起動後も有効になるよう、設定ファイル「/etc/sysconfig/iptables」に保存するため、以下のコマンドを実行します。

# service iptables save

設定ファイル「/etc/sysconfig/iptables」の設定前と設定後の内容も、以下に示しておきます。

設定前。

:(略)
-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 state --state NEW -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
:(略)

設定後。

:(略)
-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 state --state NEW -m tcp --dport 80 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 3306 -j ACCEPT
-A INPUT -j REJECT --reject-with icmp-host-prohibited
-A FORWARD -j REJECT --reject-with icmp-host-prohibited
COMMIT
:(略)

PostgreSQLへの外部からのアクセスを許可

PostgreSQLへの外部からのアクセスは、iptablesによってデフォルトでは拒否されています。PostgreSQLへの外部からのアクセスが可能となるようiptablesの設定を行います。

iptablesによるアクセス制御の詳細につきましては、上記のApacheへの外部からのアクセスを許可する際の設定もご参照ください。

設定前の状態

アクセスを許可する前のiptablesの設定内容を、以下のコマンドで確認します。

※この例はデフォルトの設定に、HTTPでの外部アクセス許可を追加した内容になっています。

# iptables -L -n --line-number
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           state NEW tcp dpt:80
6    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

アクセス許可の設定

PostgreSQLへの外部アクセスを許可する設定を追加するには、以下のようなコマンドを実行します。

※アクセス元のIPアドレス等、別途制限が必要なものがある場合は、そのオプションの指定を追加してください。

# iptables -I INPUT 6 -m state --state NEW -p tcp --dport 5432 -j ACCEPT
  • INPUTチェインでは、末尾に全ての接続を拒否する設定が行われていますので、「-A」オプションによる末尾への追加ではなく、「-I」オプションによる挿入を行うようにしています。
  • INPUTの後に指定している「6」は、挿入する位置を示すルール番号で、末尾で全ての接続を拒否している位置よりも前に挿入されるようにします。
  • 「--dport」オプションにより、PostgreSQLが使用しているポート5432へのアクセスを許可しています。

アクセスを許可した後のiptablesの設定内容は、以下のようになります。

# iptables -L -n --line-number
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           state NEW tcp dpt:80
6    ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0           state NEW tcp dpt:5432
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

iptablesの設定がOSの再起動後も有効になるよう、設定ファイル「/etc/sysconfig/iptables」に保存するため、以下のコマンドを実行します。

# service iptables save

設定ファイル「/etc/sysconfig/iptables」の設定前と設定後の内容も、以下に示しておきます。

設定前。

:(略)
-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 state --state NEW -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
:(略)

設定後。

:(略)
-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 state --state NEW -m tcp --dport 80 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 5432 -j ACCEPT
-A INPUT -j REJECT --reject-with icmp-host-prohibited
-A FORWARD -j REJECT --reject-with icmp-host-prohibited
COMMIT
:(略)

iptablesによるアクセス制御については、以上です。