ずいぶんと昔の話になるけれど、サーバー運用を始めた頃は
参考サイト
さくらインターネット創業日記
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も入っているので、動的な管理もしているよ。
いろいろ組み合わせて自分の好みの仕様にしよう。