iptablesの基本設定(ファイアウォール)

VPSサービスでは上位回線側でファイアウォールの機能は提供されておりません。そのため、iptablesを利用して不要なアクセスの遮断(パケットフィルタリング)を行うことを推奨致します。基本的なサービスを許可するサンプルも掲載しておりますので是非ご活用ください。

本マニュアルは、以下のOSをご利用のお客様向けのものとなります。その他の環境をご利用の場合は、「firewalldの基本設定」マニュアルをご確認ください。

  • CentOS 6.X (32bit/64bit)
  • CentOS 5.X (32bit/64bit) ※ 新規のインストールはできません
  • Scientific Linux 6.X (32bit/64bit) ※ 新規のインストールはできません
  • Debian GNU/Linux 9 amd64 (64bit) ※ 新規のインストールはできません
  • Ubuntu 16 amd64 (64bit)
iptablesの概要

iptablesはLinuxでパケットフィルタリング等のネットワーク操作を行うソフトウェアです。

本マニュアルでは不要なアクセスの遮断を行うファイアウォールとしての利用を想定し、「WEB,メール,FTP,SSH,」を許可し、それ以外の接続を拒否する例を紹介します。

※ VPSサービスではネットワーク上位にファイアウォール機器を設置しておりませんので、iptablesによる不要なアクセスの遮断を行うことをお勧めしております。

iptablesの起動・停止・状態確認

iptablesの起動や停止、状態の確認を行うコマンドは以下の通りです。

/etc/init.d/iptables start|stop|restart|status|save

  • start : iptablesを起動します。
  • stop : iptablesを停止します。
  • restart : iptablesを再起動します。
  • status : iptablesの状態を表示します。
  • save : iptablesの設定を保存します。

まずiptablesが起動しているかの確認を行います。

【実行例】

[root@L0000000 sppd]# /etc/init.d/iptables status
ファイアウォールは停止
[root@L0000000 sppd]#

「ファイアウォールは停止」と表示された場合は、以下のようにコマンドを入力し起動します。起動後、念のためiptablesの状態を確認します。

正常に起動している場合、iptabelsのポリシー情報が表示されます。

[root@L0000000 sppd]# /etc/init.d/iptables start
iptables ファイアウォールルールを適用中:                   [  OK  ]
iptables モジュールを読み込み中ip_conntrack_netbios_ns     [  OK  ]
[root@L0000000 sppd]# /etc/init.d/iptables status
テーブル: filter
Chain INPUT (policy ACCEPT)
num  target     prot opt source               destination
1    RH-Firewall-1-INPUT  all  --  0.0.0.0/0            0.0.0.0/0

Chain FORWARD (policy ACCEPT)
num  target     prot opt source               destination
1    RH-Firewall-1-INPUT  all  --  0.0.0.0/0            0.0.0.0/0

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

Chain RH-Firewall-1-INPUT (2 references)
num  target     prot opt source         destination
1    ACCEPT     all  --  0.0.0.0/0      0.0.0.0/0
・・・中略・・・
10   REJECT     all  --  0.0.0.0/0      0.0.0.0/0       reject-with icmp-host-prohibited

[root@L0000000 sppd]#
[root@L0000000 sppd]#

iptablesを停止する場合は、startと入力したところをstopにしてください。

[root@L0000000 sppd]# /etc/init.d/iptables stop
ファイアウォールルールを適用中:                            [  OK  ]
チェインポリシーを ACCEPT に設定中filter                   [  OK  ]
iptables モジュールを取り外し中                            [  OK  ]
[root@L0000000 sppd]# /etc/init.d/iptables status
ファイアウォールは停止
[root@L0000000 home]#
iptablesの自動起動

サーバーを再起動したとき、iptablesも自動で実行するように設定を行います。まず、自動起動が設定されているかの確認を行います。

/sbin/chkconfig --list サービス名

【実行例】

[root@L0000000 ~]# /sbin/chkconfig --list iptables
iptables        0:off   1:off   2:off   3:off   4:off   5:off   6:off
[root@L0000000 home]#

2〜5の項目(ランレベル)について「off」と「on」で状態が表示されます。「off」の場合、自動起動はされません。

Linuxでは、基本的に2〜5の項目が「on」になっていればサービスの自動起動を行います。上の実行例ですと、iptablesは全ての項目(ランレベル)で、自動起動しない状態になっています。

iptablesが自動で実行されるように設定します。

/sbin/chkconfig --level ランレベル サービス名 on|off

  • on : 自動実行を有効にします。
  • off : 自動実行を無効にします。

2〜5の項目(ランレベル)のとき、自動起動するように設定します。

実行しても画面には何も表示されませんので、再度iptablesがサーバー起動時に自動実行されるかの確認を行います。

【実行例】

[root@L0000000 ~]# /sbin/chkconfig --level 2345 iptables on
[root@L0000000 ~]# /sbin/chkconfig --list iptables
[root@L0000000 ~]# iptables        0:off   1:off   2:on    3:on    4:on    5:on    6:off
[root@L0000000 home]#

2〜5の項目(ランレベル)について「on」と表示されていれば問題ありません。

iptablesの基本設定

一般的なWEB/メールサーバーとして利用できるiptablesのサンプルとなります。これを利用することでSSH/FTP/HTTP/HTTPS/SMTP/POP/Submission/SMTPoverSSL/POPoverSSLを開放し、他のポートを閉じる設定が行えます。また、PINGに1秒当たりの制限をかけています。 ※ FTPのパッシブモード(PASVモード)には対応しておりません。

サーバーをセキュアに運用を行う場合最低限これだけは行っておくことをお勧め致します。

※iptablesの設定時、VPSに接続できなくなってしまった場合はコントロールパネルよりVNC接続をご利用ください。

まず、iptablesを設定するためのスクリプトを作成します。viで[fwset.sh]というファイルを作成します。

[root@L0000000 ~]# vi fwset.sh

viの画面になったら、以下のコマンド全てをコピー&ペーストします。

#!/bin/bash

# フィルタリングルールを消去する
/sbin/iptables -F

# デフォルトポリシーを設定
/sbin/iptables -P INPUT DROP
/sbin/iptables -P FORWARD DROP
/sbin/iptables -P OUTPUT DROP

# ループバックを許可する
/sbin/iptables -A INPUT -s 127.0.0.1 -d 127.0.0.1 -j ACCEPT
/sbin/iptables -A OUTPUT -s 127.0.0.1 -d 127.0.0.1 -j ACCEPT

# プライベートアドレスが使われているパケットを破棄
/sbin/iptables -A INPUT -i eth0 -s 10.0.0.0/8 -j DROP
/sbin/iptables -A INPUT -i eth0 -d 10.0.0.0/8 -j DROP
/sbin/iptables -A INPUT -i eth0 -s 172.16.0.0/12 -j DROP
/sbin/iptables -A INPUT -i eth0 -d 172.16.0.0/12 -j DROP
/sbin/iptables -A INPUT -i eth0 -s 192.168.0.0/16 -j DROP
/sbin/iptables -A INPUT -i eth0 -d 192.168.0.0/16 -j DROP

# 基本サービスを許可, SSH FTP HTTP HTTPS SMTP POP Submission SMTPoverSSL POPoverSSL
/sbin/iptables -A INPUT -p tcp -m state --state NEW -m tcp --dport 20 -j ACCEPT
/sbin/iptables -A INPUT -p tcp -m state --state NEW -m tcp --dport 21 -j ACCEPT
/sbin/iptables -A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT
/sbin/iptables -A INPUT -p tcp -m state --state NEW -m tcp --dport 25 -j ACCEPT
/sbin/iptables -A INPUT -p tcp -m state --state NEW -m tcp --dport 80 -j ACCEPT
/sbin/iptables -A INPUT -p tcp -m state --state NEW -m tcp --dport 110 -j ACCEPT
/sbin/iptables -A INPUT -p tcp -m state --state NEW -m tcp --dport 443 -j ACCEPT
/sbin/iptables -A INPUT -p tcp -m state --state NEW -m tcp --dport 587 -j ACCEPT
/sbin/iptables -A INPUT -p tcp -m state --state NEW -m tcp --dport 995 -j ACCEPT

# すでにコネクションを確立しているものは許可
/sbin/iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT

# Ping of Death対策
/sbin/iptables -A INPUT -p icmp --icmp-type echo-request -m limit --limit 1/s -j ACCEPT

# 外への接続は全て許可
/sbin/iptables -P OUTPUT ACCEPT

# 保存 + iptables再起動
/etc/init.d/iptables save
/etc/init.d/iptables restart

# 設定が適用されているか確認
/sbin/iptables -L

スクリプトの保存が終わったら、パーミッションを700に設定し、スクリプトを実行します。

[root@L0000000 ~]# chmod 700 fwset.sh
[root@L0000000 ~]# ./fwset.sh
ファイアウォールのルールを /etc/sysconfig/iptables に保存中[  OK  ]
ファイアウォールルールを適用中:                            [  OK  ]
チェインポリシーを ACCEPT に設定中filter nat               [  OK  ]
iptables モジュールを取り外し中                            [  OK  ]
iptables ファイアウォールルールを適用中:                   [  OK  ]
iptables モジュールを読み込み中ip_conntrack_netbios_ns     [  OK  ]
Chain INPUT (policy DROP)
target     prot opt source               destination
ACCEPT     all  --  localhost.localdomain  localhost.localdomain
DROP       all  --  10.0.0.0/8           anywhere
DROP       all  --  anywhere             10.0.0.0/8
DROP       all  --  172.16.0.0/12        anywhere
DROP       all  --  anywhere             172.16.0.0/12
DROP       all  --  192.168.0.0/16       anywhere
DROP       all  --  anywhere             192.168.0.0/16
ACCEPT     tcp  --  anywhere             anywhere            state NEW tcp dpt:ftp-data
ACCEPT     tcp  --  anywhere             anywhere            state NEW tcp dpt:ftp
・・・中略・・・
Chain FORWARD (policy DROP)
target     prot opt source               destination

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination
ACCEPT     all  --  localhost.localdomain  localhost.localdomain

Chain RH-Firewall-1-INPUT (0 references)
target     prot opt source               destination
[root@L0000000 home]#

以上でiptablesの設定は完了です。