Linux(CentOS)にてBizRobo!サーバを立てる場合のiptablesの初期設定について、例を用いて解説します。
デフォルトルールの設定
#!/bin/bash
LAN=eth0
LOCALNET_MASK=`/sbin/ifconfig $LAN|sed -e 's/^.*Mask:\([^ ]*\)$/\1/p' -e d`
LOCALNET=$LOCALNET_ADDR/$LOCALNET_MASK
/etc/rc.d/init.d/iptables stop
# Default Rules
/sbin/iptables -P INPUT DROP # 受信はすべて破棄
/sbin/iptables -P OUTPUT ACCEPT # 送信はすべて許可
/sbin/iptables -P FORWARD DROP # 通過はすべて破棄
自ホストからのアクセスをすべて許可
/sbin/iptables -A INPUT -i lo -j ACCEPT
内部から行ったアクセスに対する外部からの返答アクセスを許可
/sbin/iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
SYN Cookiesを有効にする
# ※TCP SYN Flood攻撃対策
/sbin/sysctl -w net.ipv4.tcp_syncookies=1 > /dev/null
sed -i '/net.ipv4.tcp_syncookies/d' /etc/sysctl.conf
echo "net.ipv4.tcp_syncookies=1" >> /etc/sysctl.conf
ブロードキャストアドレス宛pingには応答しない
# ※Smurf攻撃対策
/sbin/sysctl -w net.ipv4.icmp_echo_ignore_broadcasts=1 > /dev/null
sed -i '/net.ipv4.icmp_echo_ignore_broadcasts/d' /etc/sysctl.conf
echo "net.ipv4.icmp_echo_ignore_broadcasts=1" >> /etc/sysctl.conf
ICMP Redirectパケットは拒否
sed -i '/net.ipv4.conf.*.accept_redirects/d' /etc/sysctl.conf
for dev in `ls /proc/sys/net/ipv4/conf/`
do
/sbin/sysctl -w net.ipv4.conf.$dev.accept_redirects=0 > /dev/null
echo "net.ipv4.conf.$dev.accept_redirects=0" >> /etc/sysctl.conf
done
Source Routedパケットは拒否
sed -i '/net.ipv4.conf.*.accept_source_route/d' /etc/sysctl.conf
for dev in `ls /proc/sys/net/ipv4/conf/`
do
/sbin/sysctl -w net.ipv4.conf.$dev.accept_source_route=0 > /dev/null
echo "net.ipv4.conf.$dev.accept_source_route=0" >> /etc/sysctl.conf
done
フラグメント化されたパケットはログを記録して破棄
/sbin/iptables -A INPUT -f -j LOG --log-prefix '[IPTABLES FRAGMENT] : '
/sbin/iptables -A INPUT -f -j DROP
1秒間に4回を超えるpingはログを記録して破棄
# ※Ping of Death攻撃対策
/sbin/iptables -N LOG_PINGDEATH
/sbin/iptables -A LOG_PINGDEATH -m limit --limit 1/s --limit-burst 4 -j ACCEPT
/sbin/iptables -A LOG_PINGDEATH -j LOG --log-prefix '[IPTABLES PINGDEATH] : '
/sbin/iptables -A LOG_PINGDEATH -j DROP
/sbin/iptables -A INPUT -p icmp --icmp-type echo-request -j LOG_PINGDEATH
全ホスト(ブロードキャストアドレス、マルチキャストアドレス)宛パケットはログを記録せずに破棄
# ※不要ログ記録防止
/sbin/iptables -A INPUT -d 255.255.255.255 -j DROP
/sbin/iptables -A INPUT -d 224.0.0.1 -j DROP
113番ポート(IDENT)へのアクセスには拒否応答
# ※メールサーバ等のレスポンス低下防止
/sbin/iptables -A INPUT -p tcp --dport 113 -j REJECT --reject-with tcp-reset
iptalbesに対する許容ポートを設定します。
#----------------------------------------------------------#
#Kapow設定用(50000:CC用、50080、50443:MC用)
#----------------------------------------------------------#
/sbin/iptables -A INPUT -p tcp --dport 50000 -j ACCEPT
/sbin/iptables -A INPUT -p tcp --dport 50080 -j ACCEPT
/sbin/iptables -A INPUT -p tcp --dport 50443 -j ACCEPT
#----------------------------------------------------------#
# サービス公開用設定 #
#----------------------------------------------------------#
# 環境構築用ルール(SSH全ホスト受付、VNC受付)
/sbin/iptables -A INPUT -p tcp --dport 22 -j ACCEPT
#/sbin/iptables -A INPUT -p tcp --dport 5900 -j ACCEPT
# HTTP,HTTPS, MySQL
/sbin/iptables -A INPUT -p tcp --dport 80 -j ACCEPT
/sbin/iptables -A INPUT -p tcp --dport 443 -j ACCEPT
/sbin/iptables -A INPUT -p tcp --dport 3306 -j ACCEPT
# 上記のルールにマッチしなかったアクセスはログを記録して破棄
/sbin/iptables -A INPUT -m limit --limit 1/s -j LOG --log-prefix '[IPTABLES INPUT] : '
/sbin/iptables -A INPUT -j DROP
/sbin/iptables -A FORWARD -m limit --limit 1/s -j LOG --log-prefix '[IPTABLES FORWARD] : '
/sbin/iptables -A FORWARD -j DROP
変更情報を保存してiptablesを再起動します。
# サーバー再起動時にも上記設定が有効となるようにルールを保存
/etc/rc.d/init.d/iptables save
# ファイアウォール起動
/etc/rc.d/init.d/iptables start