在遠端登入時如果不小心把防火牆搞爛了,可是非常麻煩的事,因為你很有可能無法再次遠端登入來修復防火牆;所以前幾天用python寫了個程式,在伺服器完全斷線時可以先讓防火牆恢復正常。
#! /usr/bin/env python # -*- encoding: utf-8 -*- import os, time, sys def connect_test( *sites ): for site in sites : if os.system( "wget --tries=2 --timeout=120 -O - %s >/dev/null 2>&1" % site ) == 0 : return True return False flog = open( '/var/log/firewall_fix.log', 'a' ) timestamp = time.strftime( '%Y/%m/%d %H:%M' ) if connect_test( 'http://www.google.com/' ): print >> flog, "%s\tSuccess and do nothing.\n" % timestamp else: try: if os.system( 'iptables-restore <%s >/dev/null 2>&1' % sys.args[1] ) != 0 : raise OSError else: print >> flog, "%s\tFirewall fixed. ( Use `%s'. )\n" % ( timestamp, sys.args[1] ) except ( IndexError, OSError ): os.system( 'iptables -F' ) for chain in [ 'INPUT', 'OUTPUT', 'FORWARD' ] : os.system( "iptables -P %s ACCEPT" % chain ) print >> flog, "%s\tFirewall fixed. ( Flush all. )\n" % timestamp flog.close()
中間的連線測試其實滿dirty的[?],不過目前想不到其他更好的辦法。
噢,對了,Linux only。
噢,對了,Linux only。
2008/2/08 edited. Few code changed.