ファイアウォールの設定(iptables編)

フォローする

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

全ホスト(ブロードキャストアドレス、マルチキャストアドレス)宛パケットはログを記録せずに破棄