我正在为我的团队configuration一个复杂的防火墙。 我们正在查看六个不同types的安全区域和stream量的接口。
我有一个很好的logging,干净的防火墙configuration脚本,但如果我运行iptables保存,结果当然没有评论。 结果也将与我们logging的政策不同步。
有没有一个很好的,干净的方式,我可以在Redhat上使用我自己的configuration文件,而不需要取消Redhat的Rube Goldberg脚本? 同时,我想确保那些相同的脚本不会跺脚我的configuration,或者,例如,当有人执行ifdown / ifup时,将防火墙彻底打开。
我会build议写一个脚本,例如:
#!/bin/bash ## Firewall flushing etc for t in raw nat mangle filter; do iptables -t $t -F iptables -t $t -X done ## Default policies while read table chain policy; do [[ -z $table ]] && continue ## Skip empty lines iptables -t $table -P $chain $policy done <<< " raw PREROUTING DROP filter FORWARD DROP filter INPUT DROP filter OUTPUT ACCEPT " ## These rules perform foo iptables ... iptables ... ## These rules perform bar iptables ... iptables ... ... and so on ... ## Save them iptables-save > /etc/firewall-rules.conf exit 0
然后,编辑rc.local并添加:
/sbin/iptables-restore < /etc/firewall-rules.conf
在exit 0行之前。
现在,如果您需要修改防火墙,只需编辑并执行第一个脚本。
在RHEL上pipe理你的iptablesconfiguration最简单的方法就是完全忽略系统提供的configuration脚本。 我用puppetpipe理所有的RHEL系统,并根据Module Iptables模式使用基于片段的方法。
如果你不是一个傀儡店,这可能对你不起作用,但是在这个基础上,所有这些都是直接构build文件/etc/sysconfig/iptables 。 这种方法很可能对你有用。 通过这种方式,您仍然可以保留您的意见,然后按照您的意愿订购规则。
正如我已经说过,恕我直言,编写SHELL脚本configurationiptables是一个愚蠢的做法。
iptables自己的设施允许实施99.99%的策略,而不需要引入一些额外的东西,如SHELL脚本,例如
如果你需要在你的iptablesconfiguration文件中保存注释,你可以使用-m comment --comment ""
您可以创build自己的启动脚本,并使用chkconfig将其添加到现有服务中。
这是我经常使用的一个模板。
它刷新所有规则,并用一个允许ssh,http和https的自定义设置replace它们。
#!/bin/bash # # firewall firewall script # description: a firewall script # chkconfig: 2345 91 09 # IPTABLES=/sbin/iptables start() { ret=0 # input chain $IPTABLES -A INPUT -m state --state INVALID -j DROP || ret=1 $IPTABLES -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT || ret=1 $IPTABLES -A INPUT -i lo -j ACCEPT || ret=1 $IPTABLES -A INPUT -p tcp --dport 22 --syn -m state --state NEW -j ACCEPT || ret=1 $IPTABLES -A INPUT -p tcp --dport 80 --syn -m state --state NEW -j ACCEPT || ret=1 $IPTABLES -A INPUT -p tcp --dport 443 --syn -m state --state NEW -j ACCEPT || ret=1 # output chain $IPTABLES -A OUTPUT -m state --state INVALID -j DROP || ret=1 $IPTABLES -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT || ret=1 $IPTABLES -A OUTPUT -o lo -j ACCEPT || ret=1 return $ret } stop() { ret=0 $IPTABLES -F || ret=1 $IPTABLES -F -t nat || ret=1 $IPTABLES -X || ret=1 $IPTABLES -P INPUT ACCEPT || ret=1 $IPTABLES -P OUTPUT ACCEPT || ret=1 $IPTABLES -P FORWARD ACCEPT || ret=1 return $ret } panic() { ret=0 $IPTABLES -F || ret=1 $IPTABLES -F -t nat || ret=1 $IPTABLES -X || ret=1 $IPTABLES -P INPUT DROP || ret=1 $IPTABLES -P OUTPUT DROP || ret=1 $IPTABLES -P FORWARD DROP || ret=1 $IPTABLES -Z || ret=1 $IPTABLES -t nat -Z || ret=1 return $ret } status() { $IPTABLES -t filter -L -v --line-numbers $IPTABLES -t nat -L -v --line-numbers return 0 } restart() { stop start } case "$1" in start) stop start RETVAL=$? ;; stop) stop RETVAL=$? ;; restart) restart RETVAL=$? ;; status) status RETVAL=$? ;; panic) panic RETVAL=$? ;; *) echo $"Usage: $0 {start|stop|restart|status|panic}" exit 1 ;; esac exit $RETVAL
你可以简单地把这个脚本放在/etc/init.d/里面,使它可执行,然后运行chkconfig firewall --add && chkconfig firewall on 。
您现在可以启用service firewall start , service firewall panic停止所有networking通信和service firewall stop禁用防火墙。
我想你应该已经明白了。
这个系统的主要优点是你有一个脚本,你可以高度自定义和写评论,而不必触摸OS的任何现有的iptables设置。