設定概要
ファイアーウォールを設定する場合、基本的には以下の通りに設定する。INPUT方向 (外部 → サーバー) : デフォルト拒否。必要なポートのみ許可
OUTPUT方向 (サーバー → 外部) : デフォルト許可
今回設定する内容を図示したものが以下となる。
設定手順
それではiptablesを設定していく。iptablesでは、一つ一つのルールをコマンドで設定していく。1. ルールを全部削除する
既存のiptablesの設定が残っていると設定が綺麗にならないので、すべての設定を削除する。ただし、いきなり削除してしまうと、SSHといったリモート接続用の通信もできなくなってしまうので、デフォルトのポリシーをACCEPTに変えてから実施するようにする。# iptables -P INPUT ACCEPT
# iptables -P OUTPUT ACCEPT
# iptables -F
なお、FORWARDは利用しないので、DROPにしておく。
# iptables -P FORWARD DROP
ルールを確認するコマンドは以下の通り。すべてのルールがない状態となっている。
# iptables -L
------------------------------
Chain INPUT (policy ACCEPT)
target prot opt source destination
Chain FORWARD (policy DROP)
target prot opt source destination
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
------------------------------
2. 共通のルールを追加する
まずは共通のルールとして2つのルールを設定する。1行目はサーバー側から外部に通信した際の確立した通信を許可するルールで、2行目はループバックアドレスの通信を許可するルールとなる。# iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
# iptables -A INPUT -i lo -j ACCEPT
「ESTABLISHED」は接続が確立してACKフラグの付いたパケットのことであり、TCPの3-WAYハンドシェイクで通信確立後のすべての通信を許可する。「RELATED」はFTP DATAなどの通信を許可するための設定らしいので、一応許可しておく。
また、pingの応答を許可するために、Echo Reply (Type 0)とEcho Request (Type 8)を許可するルールを追加する。
# iptables -A INPUT -p icmp --icmp-type 0 -j ACCEPT
# iptables -A INPUT -p icmp --icmp-type 8 -j ACCEPT
3. 個別のルールを追加する
後は要件に応じて必要なポートを開ける。コマンドは以下を定型文として覚えてしまえばよい。-mオプションと-pオプションのプロトコルはそろえること。iptables -A INPUT -m state --state NEW -m <tcp/udp> -p <tcp/udp> --dport <port> -j ACCEPT
「NEW」は接続開始要求時のSYNフラグのみが付いたパケットを許可する設定となる。接続確立後は、「ESTABLISHED」の状態(ACKフラグ)が付いたパケットとなるので、先に設定した「確立した通信を許可」のルールにて通信が許可される。
例として、私の環境では以下のように設定した。
# iptables -A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT
# iptables -A INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT
# iptables -A INPUT -m state --state NEW -m tcp -p tcp --dport 443 -j ACCEPT
# iptables -A INPUT -m state --state NEW -m udp -p udp --dport 161 -j ACCEPT
# iptables -A INPUT -m state --state NEW -m udp -p udp --dport 162 -j ACCEPT
# iptables -A INPUT -m state --state NEW -m udp -p udp --dport 123 -j ACCEPT
# iptables -A INPUT -m state --state NEW -m tcp -p tcp --dport 10051 -j ACCEPT
# iptables -A INPUT -m state --state NEW -m udp -p udp --dport 514 -j ACCEPT
4. INPUTのデフォルトのポリシーをDROPに変更する
設定が完了したところで、デフォルトのポリシーをDROPに変更する。# iptables -P INPUT DROP
最終的な設定を確認すると、以下の通りになる。
# iptables -L
------------------------------
Chain INPUT (policy DROP)
target prot opt source destination
ACCEPT all -- anywhere anywhere state RELATED,ESTABLISHED
ACCEPT icmp -- anywhere anywhere icmp echo-reply
ACCEPT icmp -- anywhere anywhere icmp echo-request
ACCEPT all -- anywhere anywhere
ACCEPT tcp -- anywhere anywhere state NEW tcp dpt:ssh
ACCEPT tcp -- anywhere anywhere state NEW tcp dpt:http
ACCEPT tcp -- anywhere anywhere state NEW tcp dpt:https
ACCEPT udp -- anywhere anywhere state NEW udp dpt:snmp
ACCEPT udp -- anywhere anywhere state NEW udp dpt:snmptrap
ACCEPT udp -- anywhere anywhere state NEW udp dpt:ntp
ACCEPT tcp -- anywhere anywhere state NEW tcp dpt:zabbix-trapper
ACCEPT udp -- anywhere anywhere state NEW udp dpt:syslog
Chain FORWARD (policy DROP)
target prot opt source destination
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
------------------------------
5. 問題なければ設定を保存
通信に問題がなさそうであれば、設定を保存する。# service iptables save
------------------------------
iptables: ファイアウォールのルールを /etc/sysconfig/iptable[ OK ]中:
------------------------------
設定が以下のファイルに反映されていることを確認する。
# cat /etc/sysconfig/iptables
------------------------------
# Generated by iptables-save v1.4.7 on Sat Sep 2 09:11:41 2017
*filter
:INPUT DROP [220:23012]
:FORWARD DROP [0:0]
:OUTPUT ACCEPT [1692:292692]
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p icmp -m icmp --icmp-type 0 -j ACCEPT
-A INPUT -p icmp -m icmp --icmp-type 8 -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 -p udp -m state --state NEW -m udp --dport 161 -j ACCEPT
-A INPUT -p udp -m state --state NEW -m udp --dport 162 -j ACCEPT
-A INPUT -p udp -m state --state NEW -m udp --dport 123 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 10051 -j ACCEPT
-A INPUT -p udp -m state --state NEW -m udp --dport 514 -j ACCEPT
COMMIT
# Completed on Sat Sep 2 09:11:41 2017
------------------------------
以上で設定は完了となる。
0 件のコメント:
コメントを投稿