リモートからiptablesを設定するときに失敗して「あー繋がらなくなった」ってことにならないためのスクリプト
よくあるんですよね、リモートでちょっとiptablesのスクリプトをいじってみたら、
あら・・繋がらなくなったよ!現地に行くしかない
みたいなのが・・。
そんなことが無いようにiptables-applyというスクリプトがあるようなのですが、
これは、iptables-saveとiptables-restoreを使って、
ルール適用後にキー入力を待って、タイムアウトした場合は、
元の適用前のルールをrestoreしてくれるんです。
かなり便利なんですが、
iptables-restoreで読める形式でルールを書かないといけないのが難点で、
シェルスクリプトで書いたルールと比べると可読性がかなりよろしくない。
そこで、シェルスクリプトでかいたルールでも、同じようにキー入力を待って
からタイムアウトで元のルールをrestoreするスクリプトを書いてみました。
利用方法
使い方は、こいつ自身を直接実行するのではなく、
以下のような感じでルールスクリプトを書く形です。
$ cat filter_ruleset.sh #!/bin/bash # スクリプトを読み込む(先頭に「.」が必要な点に注意 . ./iptables-ruleupdater # 変数等をセット mynetwrok=10.10.10.0/24 myhost=10.10.10.12 #ルールを書く rule_set () { iptables -F iptables -t nat -F iptables -P INPUT ACCEPT iptables -P FORWARD DROP iptables -P OUTPUT ACCEPT # any -> ppp0:ssh accept iptables -A INPUT -i ppp0 -d $myhost -p tcp -m state --state NEW,ESTABLISHED,RELATED --dport 22 -j ACCEPT iptables -A OUTPUT -o ppp0 -s $myhost -p tcp --sport 22 -j ACCEPT # 以下略 iptables -A OUTPUT -j LOG } apply # ↑上記のルールを適用したりチェックしたり分岐処理するファンクション
実行方法
# ./filter_ruleset.sh * Usege: filter_ruleset.sh {check|try|status|start}
追記
id:bitwalkerの http://d.hatena.ne.jp/bitwalker/20090111/1244874627 に同じようなことを簡単なスクリプトで実現されているのを見つけました。(ただ、この方法だとオールクリア状態に戻ってしまうので、ちょこっと更新とかは厳しいかも)