カスタム検索
|
Tweet |
|
|
Modified: 11 September 2005
ここでは、すべてのサーバーに共通に使う設定を説明します。以下の考え方(セキュリティポリシーという)での設定します。
1.一旦全部禁止とし、必要なものから許可していきます。
2.ループバック(自サーバのサービス)はすべて許可します。
3.PINGは、メンテナンスPCだけ相互に許可します。
4.SSHは、メンテナンスPCのみ許可します。
初期設定
まず、スクリプトの定義と設定の宣言をします。
- "THIS_HOST"は、このファイヤウオールを設定するサーバー
- "CONSOLE_HOST"は、通常用いるクライアントPC
#!/bin/sh THIS_HOST='192.168.0.15' CONSOLE_HOST='192.168.0.75' ANY='0.0.0.0/0'
全面禁止に設定
一旦、全面禁止(通信不能)にします。
# すべての設定をクリアする /sbin/iptables -F # すべてのチェインをクリアする /sbin/iptables -X # すべてのパケットを拒否にする /sbin/iptables -P INPUT DROP /sbin/iptables -P FORWARD DROP /sbin/iptables -P OUTPUT DROP
自分から自分へ(ループバック)は全部許可する
# ループバックはすべて許可する /sbin/iptables -A INPUT -i lo -j ACCEPT /sbin/iptables -A OUTPUT -i lo -j ACCEPT"-i lo" の "-i" は、インターフェースを指定することを意味します。"lo" は "127.0.0.1"で、いわゆる "localhost" を意味します。
PINGの設定
PING要求に対してどこからでも応答するのをやめ、メンテナンスPC(ネットワークの調査を行うときに用いるPC:$CONS_HOST)からの要求のみ許す。
# 特別なホストからのみpingを許可する /sbin/iptables -A INPUT -p icmp -s $CONSOLE_HOST --icmp-type 8 -d $THIS_HOST -j ACCEPT /sbin/iptables -A OUTPUT -p icmp -s $THIS_HOST --icmp-type 0 -d $CONSOLE_HOST -j ACCEPT逆に自分からメンテナンスPCへのPINGも、実用面から、許可しておきましょう。
# 特別なホストへのpingを許可する /sbin/iptables -A OUTPUT -p icmp -s $THIS_HOST --icmp-type 8 -d $CONSOLE_HOST -j ACCEPT /sbin/iptables -A INPUT -p icmp -s $CONSOLE_HOST --icmp-type 0 -d $THIS_HOST -j ACCEPT"--icmp-type 8" は、"Echo Request"(応答要求)のことです。
"--icmp-type 0" は、"Echo Reply"(返答)のことです。
icmpには、以下のようなタイプがあります。
0 Echo Reply 3 Destination Unreachable 4 Source Quench 5 Redirect 8 Echo Request 11 Time Exceeded 12 Parameter Problem 13 Timestamp Request 14 Timestamp Reply 15 Information Request 16 Information Reply 17 Address Mask Request 18 Address Mask Reply
TCPの基本設定
# SYNフラグのない新コネクションを拒否 /sbin/iptables -A INPUT -p TCP ! --syn -m state --state NEW -j DROP"-p TCP ! --syn -m state --state NEW" は、"TCP"に"SYN"フラグのない通信の開始("NEW")を意味します。当然これは、"DROP"です。
SSHの設定
メンテナンスにPC($CONS_HOST)からの要求のみ許す。
# メンテナンス用ホストから22/TCP(ssh)を許可 /sbin/iptables -A INPUT -p TCP -s $CONSOLE_HOST -d $THIS_HOST --dport 22 -i eth0 -j ACCEPT /sbin/iptables -A OUTPUT -p TCP -s $THIS_HOST --sport 22 -d $CONSOLE_HOST -o eth0 -j ACCEPT
上記設定のまとめ
以下のように、起動時に実行されるわけではありませんが、起動時に実行されるように記述します。
利用するサーバによって、最初の定義部分(赤文字と青文字)は変更が必要です。
"iptables.sh"という名前で保存しました。
#!/bin/sh
THIS_HOST='192.168.0.5'
CONSOLE_HOST='192.168.0.75'
ANY='0.0.0.0'
# すべての設定をクリアする
/sbin/iptables -F
# すべてのチェインをクリアする
/sbin/iptables -X
# すべてのパケットを拒否にする
/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
# 特別なホストからのみpingを許可する
/sbin/iptables -A INPUT -p icmp -s $CONSOLE_HOST --icmp-type 8 -d $THIS_HOST -j ACCEPT
/sbin/iptables -A OUTPUT -p icmp -s $THIS_HOST --icmp-type 0 -d $CONSOLE_HOST -j ACCEPT
# 特別なホストへのpingを許可する
/sbin/iptables -A OUTPUT -p icmp -s $THIS_HOST --icmp-type 8 -d $CONSOLE_HOST -j ACCEPT
/sbin/iptables -A INPUT -p icmp -s $CONSOLE_HOST --icmp-type 0 -d $THIS_HOST -j ACCEPT
# SYNフラグのない新コネクションを拒否
/sbin/iptables -A INPUT -p TCP ! --syn -m state --state NEW -j DROP
# メンテナンス用ホストから22/TCP(ssh)を許可
/sbin/iptables -A INPUT -p TCP -s $CONSOLE_HOST -d $THIS_HOST --dport 22 -i eth0 -j ACCEPT
/sbin/iptables -A OUTPUT -p TCP -s $THIS_HOST --sport 22 -d $CONSOLE_HOST -o eth0 -j ACCEPT
設定の実行
上記のスクリプトを以下のコマンドで実行します。
# sh iptables.sh
理屈上当たり前ですが、リモート(SSH)で設定している場合、SSH関連の設定を間違えると、実行した瞬間に接続が切れて、ハングアップしたようになります。
この場合は、直接つながっているコンソールから再設定するか、再起動が必要になります。