用Firewall builder生成iptables规则
我们在企业中使用linux做网关和服务器必定要用到iptables,iptables入门不怎么难,把iptables指南看一遍基本上就能处理一些简单的日常应用了,但iptables语法比较难记,一不小心就容易弄错,再如老夫这样的英盲,时常碰到个单词忘记怎么写了,所以老夫就想找个直观一点的配置工具,用IPCOP吧,防火墙配置界面是比较直观,但又限制了主机在其他方面的应用,后来又找了shorewall,shorewall实际就相当于把iptables封装了一下,使用一个相对较为简单的语法,但也并不轻松,有空琢磨shorewall的语法还不如用来更深入的理解iptables,还有个很好的工具webmin,webmin里面有iptables的配置模块,是个很不错的选择。
其实老夫比较喜欢ISA server的那种操作方式,只是点点鼠标就能完成各规则的设置,于是就找到了firewall builder,firewall builder是一个图形界面的防火墙配置工具,它可以用来方便的配置各种允许/拒绝规则而不用编辑复杂的配置文件。它支持拖拽操作,界面简单明了,所有的工作都可以轻松完成,O(∩_∩)O嘿嘿,这句话抄过来的,这样的工具我喜欢。喜欢归喜欢,linux毕竟不是windows,人家不需要图形界面的环境,所以老夫就在windows下来用firewall builder来生成规则脚本,然后传送到linux上去使用。
首先到firewall builder官网去下载firewall builder 3.05 for windows版本,按默认安装,启动firewall builder,然后点File-gt;New Object File来新建一个项目,命名为iptables.fwb。
下面开始设置防火墙基本参数,在Firewalls上点右键,选New Firewall新建一个防火墙对象
给这个防火墙对象命个名,选择防火墙软件和防火墙的操作系统环境,firewall builder不止能生成linux、ipcop、openwrt的iptables规则,还包括BSD下的ipf、ipfw、pf,cisco下的pix等的规则,所以这里的防火墙软件和系统环境千万别搞错了,下面一个选项是问是否使用预设的防火墙对象的模板,这里不勾吧,老夫试过使用内置的模板,但后来总是编译不过去,当然,我们可以新建一个项目,启用一下预设的模板,以方便我们了解firewall builder的用法。
下面这里给防火墙对象设置网络接口,有两种方式,一种是手动配置,一种是使用SNMP协议自动查找,这不是在防火墙上,所以这里选手动配置
下一步,我们先来看看防火墙机器的网络接口
再开始在firewall builder里添加网络接口
添加完网络接口,点Finish完成配置,完成防火墙对象的添加
下面再添加一个网络对象,也就是内部网络,在Objects里的Networks上点右键选New Network新建网络对象
给新加的网络对象命个名,填上ip地址和子网掩码,这里命名为LAN,因为针对所有内部的,所以这里ip地址设置为192.168.1.0/24这一网段,点Apply完成
现在防火墙对象和网络对象都已经设置完成,下面开始添加防火墙规则了
首先作为网关需要能让内部网络上网,也就是启用SNAT,左边选中NAT,在右边的空白处点右键选Insert rule插入一条规则
先看看规则表的表头,分别为原始源地址、原始目标地址、原始服务、转换后的源地址,转换后的目标地址和转换后的服务,后面的选项跟备注就先不去管它了,想想SNAT的作用,就是把内部的私有地址转换为外部的公有地址,这里就应该是把LAN网络的原始源地址转换为外部接口的地址,所以在左边点住网络对象“LAN”拖到Original Src中放开,然后把外部网络接口“EXT”拖到Translated Src里,拖的时候可以看到如果某个格子不允许放置这个对象的话,图标会显示不允许放入的状态。
这里就完成了NAT规则的添加,下面来编译一下规则,看看firewall builder会怎么生成一个可用的规则。
在Firewalls上点右键,选择Compile来编译规则,当然,也可以在菜单Rules中选择Compile来编译
这一步选择要编译的防火墙对象,我们只有一个防火墙对象,已经默认选中了,直接点Next下一步
开始编译,很快就编译完了,可以看到日志里显示了编译完成和规则脚本的保存位置
找到生成的规则脚本rc.firewall.local打开来看看,看到了吧,iptables –t –nat –A POSTROUTING –o eth0 –s 192.168.1.0/24 –j SNAT –to-source 192.168.0.3,当然,这里显示的是变量$IPTABLES,前面可以看到定义变量的语句IPTABLES=”iptables”
关掉回来继续添加规则,左边选择Policy,右边空白处点右键选Insert rule添加一条规则,这里添加一条规则阻止垃圾数据包,阻止从外部网络来的地址是内部地址和防火墙本身的所有数据包,这些包都是仿冒的垃圾数据。
把firewall对象和LAN对象拖入Source中,外部网络接口EXT拖入Interface中,Direction默认是双向,可以在上面点右键修改只进或出,Action默认是拒绝,也可以点右键选择Accept和Reject等
记录日志,可以在Options中点右键开启或关闭日志,这里开启日志,默认是勾选Stateless rule选项,这个选项老夫也没明白啥意思,试着添加了两条规则,一条选中stateless rule,一条不选,发现不选中stateless rule的规则多了一个状态匹配-m state –state NEW,看来选中就记录所有日志,如果不选中就只记录状态为NEW的连接的日志
当改变这里的相关选项后鼠标焦点移出Options这个格子时,会提示对象已经改变但修改还未保存,是否保存,当然选保存了
接下来添加第二条规则,在第一条规则前面的序号0上点右键,选择Add Rule Below,在后面追加一条规则,如果在当前规则前面插入一条规则就选Insert rule
这条规则添加允许回环,在Interface中拖入loopback对象,Action改为Accept即可
接下来添加允许内部访问本地防火墙,源为LAN,目标为firewall,方向为双向,操作为允许
再添加一条规则,允许内部访问外部网络,源为LAN,目标EXT,方向为双向,操作为允许,后来发现其实第四条规则已经包含了第三条,因为第四条是数据转发的,所以会自动添加一进一出一转发三条规则。
OK,编译规则,把生成的规则脚本通过winscp传到服务器上
添加可执行属性
运行脚本,可以看到脚本已经运行完成
运行iptables -L查看一下
把内部windows的网关指向192.168.1.2,ping一下看看
好了,这样就用firewall builder生成规则脚本完成了,当然,这里只是添加了非常简单的规则,而且还有一定的问题,也有很多其他的应用没提到,比如对象组和服务组、地址范围、时间匹配等,用过ISA server的人可能很容易就理解这些,这些可以在对象选择器那里选择standard可以看到,这里我们一直使用的是User对象。再比如DMZ、DNAT等等,自己新建一个项目,使用一个内置模板,看看人家专家是怎么设置的,弄明白这些规则,对iptables的了解又能上一个台阶了。
另外还有Limit匹配,在规则的Options选项里可以设置,但同时老夫也发现firewall builder也并不是包含了iptables所有的功能,比如mac匹配、recent匹配等等,只能靠自己手动添加了。