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の設定は完了です。