Since 12/1/2007
Home > Linux > CentOS5 > ファイアウォールの設定

CentOS5 ファイアウォールの設定 - itochif.com

CentOS5では、iptablesを使ってIPパケットフィルタテーブルの設定・管理を行う事ができます。ここでは基本的な設定だけにとどめ、今後使用するネットワークサービスに合わせて、それぞれのサービスの設定を紹介する時に変更していきます。

富士通

GNOME端末を起動する

CentOS5 GNOME端末 GNOME端末を起動します。GNOME端末の起動は画面左上のメニュー[アプリケーション]->[アクセサリ]->[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