Linux:iptablesで防ぐ「DoS/DDoS攻撃」対策

Linuxパケットフィルタリング型のファイアウォール機能「iptable」を用いた、DoS/DDoS攻撃対策を行います。ICMP,DNS,SSHをブロックする設定には、応答回数を制限する「hashlimit」を応用します。(2015/12/23作成)

Unsplash / Pixabay

DoS/DDoS攻撃とは

DoS(Denial of Service:サービス妨害)攻撃は、正常なサービスの運営を妨害する攻撃で>す。F5キーを押し続けて大量のリクエストをし続けてサーバーをパンクさせるとか、考えられる全てのパスワードをチャレンジする総当り攻撃などとても怖いです。また、単一のクライアントからの攻撃だけでなく、トロイの木馬で感染させられた大量の端末を用いて総攻撃を掛けるDDoS(Distributed Denial of Service:分散サービス妨害)攻撃は、十分と思われる対策が施された大手Webサイトもパンクするような攻撃力を持っています。(出典:Developers.IO)

0.環境

$ cat /etc/redhat-release 
CentOS release 5.11 (Final)

$ sudo /sbin/iptables --version
iptables v1.3.5

1.設定

iptableの初期化
/sbin/iptables -P INPUT ACCEPT
/sbin/iptables -P FORWARD DROP
/sbin/iptables -P OUTPUT ACCEPT
/sbin/iptables -F

ローカルループバックI/Fからのパケットを許可
/sbin/iptables -A INPUT -i lo -j ACCEPT

stateな通信(接続済みの通信)を許可
/sbin/iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

特定の「許可するIPアドレス」を追加する場合
/sbin/iptables -A INPUT -s {許可IP} -j ACCEPT

特定の「拒否するIPアドレス」を追加する場合
/sbin/iptables -A INPUT -s {拒否IP} -j DROP

サービスポートを許可(例:80番/443番)
/sbin/iptables -A INPUT -p tcp --dport 80 -j ACCEPT
/sbin/iptables -A INPUT -p tcp --dport 443 -j ACCEPT

ICMP対策
/sbin/iptables -A INPUT -p icmp --icmp-type echo-request -m hashlimit --hashlimit-name ping_of_death --hashlimit 1/s --hashlimit-burst 10 --hashlimit-mode srcip --hashlimit-htable-expire 300000 -j ACCEPT

DNS対策
/sbin/iptables -I INPUT -p udp -m state --state NEW --dport 53 -m hashlimit --hashlimit-burst 5 --hashlimit 1/m --hashlimit-mode srcip --hashlimit-htable-expire 120000 --hashlimit-name named-limit -j ACCEPT

SSH対策
/sbin/iptables -A INPUT -p tcp -m state --syn --state NEW --dport 22 -m hashlimit --hashlimit-name t_sshd --hashlimit 1/m --hashlimit-burst 1 --hashlimit-mode srcip --hashlimit-htable-expire 120000 -j ACCEPT

他INPUTポートをすべて拒否
/sbin/iptables -P INPUT DROP

2.保存/反映

/etc/init.d/iptables save
/etc/init.d/iptables restart

3.確認

/sbin/iptables -L

以上

About yoshimasa

埼玉県さいたま市在住、2男3女のパパです。Linux系の技術情報を中心にまとめています。1978年2月生まれ。