Webセキュリティの小部屋

Twitter のフォローはこちらから Facebook ページはこちら RSSフィードのご登録はこちらから
公開日:2014年1月12日
最終更新日:2020年8月8日

CentOS に iptables の設定を行う (IPv4)

はじめに

CentOS 6.x に iptables の設定を行います。

iptables は IPv4 用のパケットフィルターになります。

設定の確認

以下のコマンドを実行して、iptables が 3:on になっていることを確認します。3:on になっていると起動時に実行されるようになります。

# chkconfig iptables --list
iptables       0:off   1:off   2:on    3:on    4:on    5:on    6:off

もし、3:off になっていた場合は、以下のコマンドで 3:on にします。
# chkconfig iptables on

iptables の汎用設定

iptables の汎用設定をします。

設定は、直接 iptables のファイルを編集します。

# vi /etc/sysconfig/iptables

以下の内容をコピー&ペーストしてください。余計な改行や空白が入るとうまく動作しないようなので注意してください。また、サーバー側で SSH サービスのポートを 10022 に設定しています。
*filter
:INPUT   ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT  ACCEPT [0:0]
:RH-Firewall-1-INPUT - [0:0]

-A INPUT -j RH-Firewall-1-INPUT
-A FORWARD -j RH-Firewall-1-INPUT
-A RH-Firewall-1-INPUT -i lo -j ACCEPT
-A RH-Firewall-1-INPUT -p icmp --icmp-type any -j ACCEPT
-A RH-Firewall-1-INPUT -p 50 -j ACCEPT
-A RH-Firewall-1-INPUT -p 51 -j ACCEPT
-A RH-Firewall-1-INPUT -p udp --dport 5353 -d 224.0.0.251 -j ACCEPT
-A RH-Firewall-1-INPUT -p udp -m udp --dport 631 -j ACCEPT
-A RH-Firewall-1-INPUT -p tcp -m tcp --dport 631 -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

# SSH(22,10022,22->delete after), HTTP, HTTPS
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 10022 -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 80    -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 443    -j ACCEPT

-A RH-Firewall-1-INPUT -j REJECT --reject-with icmp-host-prohibited

COMMIT

設定を有効にします。
# service iptables restart

Nmap によるポートスキャン

ポートが正しく設定されているかどうか、Nmap を使用してポートスキャンを行い確認します。

# nmap -p 1-10022 hostname

Starting Nmap 6.40 ( http://nmap.org ) at 2014-01-18 07:00 JST
Nmap scan report for hostname (133.242.xxx.xxx)
Host is up (0.037s latency).
Not shown: 10017 filtered ports
PORT      STATE  SERVICE
22/tcp    closed ssh
80/tcp    open   http
443/tcp   open   https
631/tcp   closed ipp
10022/tcp open   unknown

Nmap done: 1 IP address (1 host up) scanned in 29.18 seconds

Http, HTTPS, SSH(unkown) のポートが開いていることが分かります。逆に言えば、それ以外のポートの開放は不要ということになります。

最低限の iptables の設定

Nmap のポートスキャン結果を受けて、最低限の iptables の設定を以下のようにします。SSH の22番ポートが削除されてるので、使用する場合はご注意ください。

*filter
:INPUT   ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT  ACCEPT [0:0]
:RH-Firewall-1-INPUT - [0:0]

-A INPUT -j RH-Firewall-1-INPUT
-A FORWARD -j RH-Firewall-1-INPUT
-A RH-Firewall-1-INPUT -i lo -j ACCEPT
-A RH-Firewall-1-INPUT -p icmp --icmp-type any -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

# SSH(22,10022,22->deleted), HTTP, HTTPS
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 10022 -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 80    -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 443    -j ACCEPT

-A RH-Firewall-1-INPUT -j REJECT --reject-with icmp-host-prohibited

COMMIT

設定を有効にします。
# service iptables restart

Nmap によるポートスキャン

再度、Nmap によるポートスキャンを実施し、設定が正しいか確認します。

# nmap -p 1-10022 hostname

Starting Nmap 6.40 ( http://nmap.org ) at 2014-01-18 06:52 JST
Nmap scan report for hostname (133.242.xxx.xxx)
Host is up (0.039s latency).
Not shown: 10019 filtered ports
PORT      STATE SERVICE
80/tcp    open  http
443/tcp   open  https
10022/tcp open  unknown

Nmap done: 1 IP address (1 host up) scanned in 48.28 seconds

最低限必要なポートだけ空いているので、問題ないと判断できます。

まとめ

iptabels の設定を行う記事はネット上に多いですが、実際にポートスキャンを行って設定が正しく行われているか確認する記事が少ないことが気になっています。

Nmap を使用するのは、正直敷居が高いかもしれませんが、ポートスキャンを行って設定が正しいか確認することをお勧めします。

最低限必要な CentOS セキュリティ設定

最低限必要な CentOS セキュリティ設定を以下の記事にまとめていますので、こちらもどうぞ。

参考サイト


スポンサーリンク





カテゴリー:Linux

“CentOS に iptables の設定を行う (IPv4)” への2件のフィードバック

  1. asdf より:

    # chkconfig iptables –list
    の出力がip6tablesのになってますね

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA