iptablesのスクリプトを修正したよ

ずいぶんと昔の話になるけれど、サーバー運用を始めた頃は

参考サイト
さくらインターネット創業日記
CentOSをサーバーとして活用するための基本的な設定

こちらを参考にさせて頂いて、いろいろ監視やら何やらを追加していくたびに、iptablesのファイルを直接編集してをルールを追加していく方法をとっていた。
インストール後のスクリプトのiptablesの設定も

# IPTABLESの設定
echo *filter > /etc/sysconfig/iptables
echo :INPUT ACCEPT [0:0] >> /etc/sysconfig/iptables
echo :FORWARD ACCEPT [0:0] >> /etc/sysconfig/iptables

こんな感じで最初は上書きで2行目から追記するという方法でやっていたんだけど、当時はiptablesのコマンドを使うよりも定義ファイルを直接編集するほうがいいって思ってたんだな。
今と当時でどれほど違うのか分からないけど、とりあえず今の設定と同じになるようにコマンドからルールを作るスクリプトを作ってみたら同じようにはできたので、どっちが便利か知るためにも今回はコマンドからルールを作る方法を試そうと思う。

ルール設定スクリプト

#!/bin/zsh
iptables -F
iptables -P INPUT DROP
iptables -P OUTPUT ACCEPT
iptables -P FORWARD DROP

#BroadCast Guard
iptables -A INPUT -d 255.255.255.255 -j DROP
iptables -A INPUT -d 224.0.0.1 -j DROP
iptables -A INPUT -d 192.168.0.255 -j DROP

iptables -N RH-Firewall-1-INPUT
iptables -A INPUT -j RH-Firewall-1-INPUT
iptables -A FORWARD -j RH-Firewall-1-INPUT
iptables -A RH-Firewall-1-INPUT -i lo -j ACCEPT
iptables -A RH-Firewall-1-INPUT -p icmp --icmp-type any -j ACCEPT
iptables -A RH-Firewall-1-INPUT -p 50 -j ACCEPT
iptables -A RH-Firewall-1-INPUT -p 51 -j ACCEPT
iptables -A RH-Firewall-1-INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

#SMTP HTTP SNMP POP SSH Guard
iptables -A RH-Firewall-1-INPUT -p tcp -m tcp --dport 25 --tcp-flags FIN,SYN,RST,ACK SYN -m state --state NEW -m limit --limit 5/second --limit-burst 5 -j ACCEPT
iptables -A RH-Firewall-1-INPUT -p tcp -m tcp --dport 25 --tcp-flags FIN,SYN,RST,ACK SYN -m state --state NEW -j LOG --log-prefix "[FW SMTPATTACK] : "
iptables -A RH-Firewall-1-INPUT -p tcp -m tcp --dport 25 --tcp-flags FIN,SYN,RST,ACK SYN -m state --state NEW -j DROP
iptables -A RH-Firewall-1-INPUT -p tcp -m state --state NEW --dport 80 -j ACCEPT
iptables -A RH-Firewall-1-INPUT -p tcp -m state --state NEW --dport 162 -j ACCEPT
iptables -A RH-Firewall-1-INPUT -p tcp -m state --state NEW --dport 465 -j ACCEPT
iptables -A RH-Firewall-1-INPUT -p tcp -m state --state NEW --dport 993 -j ACCEPT
iptables -A RH-Firewall-1-INPUT -p tcp -m state --state NEW --dport 995 -j ACCEPT
iptables -A RH-Firewall-1-INPUT -p tcp -m state --state NEW --dport 10022 -j ACCEPT
iptables -A RH-Firewall-1-INPUT -m limit --limit 1/s -j LOG --log-prefix "[FW DROP] : "
iptables -A RH-Firewall-1-INPUT -j REJECT --reject-with icmp-host-prohibited
/etc/rc.d/init.d/iptables save
/etc/rc.d/init.d/iptables start

#Static BlockList
if [ -s /root/fw_list ]; then
  for ip in `cat /root/fw_list`; do
    iptables -A INPUT -s $ip -j DROP
  done
fi

echo settings complete



んで/root/fw_listに拒否したいipアドレスを以下の感じで範囲指定もできるので、ガバっといれるもよし。

# cat /root/fw_list                                                                                                                                                [/root]
117.24.0.0/13
59.56.0.0/13
27.153.128.0/17
218.6.0.0/17
216.155.151.202
67.227.166.238

海外のサイトも参考にすることもあるので、逆もしかり、一応調べてからブロックリストに入れたいので、セミオートマ状態なのです。

今回、少なからず何回か設定見直しでリブートもしたのだけど、Zabbixの監視をそのままにしていたので、アラートメールが溜まってしまった(笑)
ちょっとメンテするくらいだと、メンテナンスモードの設定するのもめんどくさい(めんどくさいというか忘れてる)からいつもそのままやってしまうんだよね。
っていうかこのサーバーでメンテモードにしてからメンテしたことないかも・・・。

趣味だから問題ないけど、仕事だったら監視を止めようね。なんてな。

スクリプト内では静的なリストを使ってるけど、サーバーにはfail2banもDosDetectorも入っているので、動的な管理もしているよ。

いろいろ組み合わせて自分の好みの仕様にしよう。

 

 

 

Related Posts


投稿者: Takeken

インターネット利用者のITリテラシーを向上したいという設定の2次元キャラです。 サーバー弄りからプログラミングまで手を付けた自称エッセイストなたけけんの物語。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です