CentOS5 ファイアウォールの設定 - itochif.com
GNOME端末を起動する
iptablesでパケットフィルタリングの設定
iptablesでパケットフィルタリングの設定を行います。GNOME端末で[/usr/bin/system-config-securitylevel]コマンドを入力して起動するGUIツールや、[/usr/bin/system-config-securitylevel-tui]から簡易設定をする事ができます。しかし、これらの設定ツールでは細かい挙動の制御には向かないため、iptablesコマンドを使用してパケットフィルタリングの設定を制御します。設定の変更を容易にするため、スクリプトを作成します。
# touch /usr/local/sbin/iptables.sh # chmod 0700 /usr/local/sbin/iptables.sh # vi /usr/local/sbin/iptables.sh ------------------------------ 次の行からiptables.shファイルの中身 #!/bin/bash # ---------------------------------------- # # 変数の定義 # # ---------------------------------------- # # ----- インターフェイス名 IF1='eth0' # ----- IPアドレスの取得 IP1="`/sbin/ifconfig $IF1 | grep 'inet addr' | cut -d : -f 2 | cut -d \ -f 1`" # ----- メンテナンス用ホストのIPアドレス TRUST='192.168.10.51' # ----- DNSサーバのIPアドレス DNS1='192.168.10.1' # ----- ブロードキャストアドレスの取得 BCAST1="`/sbin/ifconfig $IF1 | grep 'inet addr' | cut -d : -f 3 | cut -d \ -f 1`" # ---------------------------------------- # # iptablesの初期設定 # # ---------------------------------------- # # ----- すべてのチェインの中身を削除する /sbin/iptables -F # ----- ユーザー定義チェインを削除する /sbin/iptables -X # ----- filterのデフォルトチェインを破棄に設定する # ----- この設定は、これ以降のどのルールにも一致しなかった場合に適用される /sbin/iptables -P INPUT DROP /sbin/iptables -P OUTPUT DROP /sbin/iptables -P FORWARD DROP # ----- ユーザー定義チェインの作成 # ----- 不正なフラグを持つパケットをログに記録して破棄するチェイン /sbin/iptables -N CHKFLAG /sbin/iptables -N LOGBADFLAG /sbin/iptables -A LOGBADFLAG -j LOG --log-prefix '[BAD FLAG] :' /sbin/iptables -A LOGBADFLAG -j DROP /sbin/iptables -A CHKFLAG -p tcp ! --syn -m state --state NEW -j LOGBADFLAG /sbin/iptables -A CHKFLAG -p tcp --tcp-flags SYN,RST SYN,RST -j LOGBADFLAG /sbin/iptables -A CHKFLAG -p tcp --tcp-flags SYN,FIN SYN,FIN -j LOGBADFLAG /sbin/iptables -A CHKFLAG -p tcp --tcp-flags ACK,FIN FIN -j LOGBADFLAG /sbin/iptables -A CHKFLAG -p tcp --tcp-flags ACK,PSH PSH -j LOGBADFLAG /sbin/iptables -A CHKFLAG -p tcp --tcp-flags ACK,URG URG -j LOGBADFLAG /sbin/iptables -A CHKFLAG -p tcp --tcp-flags FIN,RST FIN,RST -j LOGBADFLAG /sbin/iptables -A CHKFLAG -p tcp --tcp-flags ALL ALL -j LOGBADFLAG /sbin/iptables -A CHKFLAG -p tcp --tcp-flags ALL NONE -j LOGBADFLAG /sbin/iptables -A CHKFLAG -p tcp --tcp-flags ALL FIN,URG,PSH -j LOGBADFLAG /sbin/iptables -A CHKFLAG -p tcp --tcp-flags ALL SYN,FIN,URG,PSH -j LOGBADFLAG /sbin/iptables -A CHKFLAG -p tcp --tcp-flags ALL SYN,RST,ACK,FIN,URG -j LOGBADFLAG /sbin/iptables -A CHKFLAG -p tcp --tcp-option 64 -j LOGBADFLAG /sbin/iptables -A CHKFLAG -p tcp --tcp-option 128 -j LOGBADFLAG # ----- ログに記録して破棄するチェイン /sbin/iptables -N LOGDEFAULT /sbin/iptables -A LOGDEFAULT -j LOG --log-prefix '[DROP DEFAULT] :' /sbin/iptables -A LOGDEFAULT -j DROP # ---------------------------------------- # # iptablesの設定 # # これ以降に記載されたルールとパケットを # # 上から順に評価し、一致した時点で # # 許可/拒否/破棄の動作が行われる # # ---------------------------------------- # # ----- ループバックインターフェースの入出力を許可する /sbin/iptables -A INPUT -i lo -j ACCEPT /sbin/iptables -A OUTPUT -o lo -j ACCEPT # ----- ブロードキャストアドレス宛のパケットを記録せずに破棄する /sbin/iptables -A INPUT -i $IF1 -d $BCAST1 -j DROP # ----- 不正なフラグを持つパケットをログに記録して破棄する /sbin/iptables -A INPUT -j CHKFLAG /sbin/iptables -A OUTPUT -j CHKFLAG # ----- ※この下に受け入れる接続を記述する # ----- 名前解決 /sbin/iptables -A OUTPUT -p udp -o $IF1 -d $DNS1 -s $IP1 --dport 53 -m state --state NEW -j ACCEPT /sbin/iptables -A OUTPUT -p tcp -o $IF1 -d $DNS1 -s $IP1 --dport 53 -m state --state NEW -j ACCEPT # ----- メンテナンス用ホストからのpingを許可する /sbin/iptables -A INPUT -p icmp --icmp-type echo-request -i $IF1 -s $TRUST -d $IP1 -j ACCEPT # ----- メンテナンス用ホストからのssh接続を許可する(先頭の#を消す) #/sbin/iptables -A INPUT -p tcp -i $IF1 -s $TRUST -d $IP1 --dport 22 -m state --state NEW -j ACCEPT # ----- セッション確立済済みの通信を許可する /sbin/iptables -A INPUT -i $IF1 -m state --state ESTABLISHED,RELATED -j ACCEPT /sbin/iptables -A OUTPUT -o $IF1 -m state --state ESTABLISHED,RELATED -j ACCEPT # ----- どれにも一致しなかった入出力をログに記録する /sbin/iptables -A INPUT -j LOGDEFAULT /sbin/iptables -A OUTPUT -j LOGDEFAULT # ---------------------------------------- # # テーブルの保存とサービスの再起動 # # ---------------------------------------- # # ----- これらの変更を保存する(/etc/sysconfig/iptablesに保存される) /sbin/service iptables save # ----- iptablesサービスを再起動する /sbin/service iptables restart ------------------------------ iptables.shファイル終了 # /usr/local/sbin/iptables.sh図1.iptablesの設定
この設定を基本として、今後変更を加えていきます。
現在のIPパケットフィルタテーブルの詳細を表示するには以下のコマンドを入力します。
# /sbin/iptables -n -L -v
結果は省略
掲載日 2/24/2008
更新日 3/13/2008
更新日 3/13/2008
CentOS5では、iptablesを使ってIPパケットフィルタテーブルの設定・管理を行う事ができます。ここでは基本的な設定だけにとどめ、今後使用するネットワークサービスに合わせて、それぞれのサービスの設定を紹介する時に変更していきます。