关于防火墙firewall,从字面上理解,就是防止非法的数据包进入的一道墙,合法的数据从门里进来,不合法的数据被墙挡在外面。而到底哪些是合法哪些是不合法的数据呢,这个是由墙里面的设备或者人给的配置决定的。如果是人为设置的,配置得好,自然好,配置得不好,等于防火墙是个摆设。对于我们在进行学习时,当然防火墙可以关掉,如在linux下使用telnet部署web这篇文章中的做法,以便于我们的数据包可以自由出入。但互联网中到处存在着不良的数据,所以学会配置它还是有一定的好处的。
以linux下的防火墙iptables为例。
1.查看iptables配置
(1)按列表查看访问规则 iptables -L
(2)按INPUT,OUTPUT,FORWARD三个类查看访问规则 iptables -S
2.设置iptables的缺省规则
未设置其他的规则时的INPUT/OUTPUT/FORWARD数据包设置为ACCEPT是允许接收,设置为DROP是拒绝接收。
INPUT是从外头进入本机的数据包
OUTPUT是从本机出去的数据包
FORWARD是经过本机的数据包,用在路由器等中转设备上,对于终端设备,不常用。
iptables -P INPUT ACCEPT/DROP
iptables -P OUTPUT ACCEPT/DROP
iptables -P FORWARD ACCEPT/DROP
缺省规则是给予设置有很大的方便,比如说,你要设置只允许别人访问本机的http服务,那么可以设置INPUT和OUTPUT缺省为DROP,拒绝接收,设置一条从外部通过http访问的规则为ACCEPT即可。反过来,如果你要设置除了telnet服务,其他任何服务都允许访问,那么可以设置INPUT和OUTPUT缺省为ACCEPT,设置一条从外部通过telnet访问的规则为DROP即可。
3.添加iptables的规则
(1)添加INPUT链的规则,格式为
iptables -A INPUT -p tcp --dport 23 -j DROP
-A代表append添加规则,后面带INPUT代表这种数据包,-p代表使用的协议为tcp,--dport代表端口为23,-j代表使用DROP还是ACCEPT,DROP为拒绝
这句话的意思为拒绝tcp协议端口为23的数据包进入,而默认时telnet使用tcp23端口,所以此时其他机器telnet访问本机时被拒绝,这里例子里使用本机访问本机。
(2)添加OUTPUT链的规则,格式为
iptables -A OUTPUT -p tcp --dport 80 -j DROP
-A代表append添加规则,后面带OUTPUT代表这种数据包,-p代表使用的协议为tcp,--dport代表端口为80,-j代表使用DROP还是ACCEPT,DROP为拒绝
这句话的意思为拒绝tcp协议端口为80的数据包进入,而通常http使用的端口为80,所以此时本机访问http服务80时被拒绝。
(3)FORWARD和前两种方式一样,只不过是经过的数据包。
当然以上缺省规则为INPUT/OUTPUT/FORWARD为ACCEPT时。
(4)自定义链的规则
4.存储与恢复iptables的规则
因为上面设置规则后,重启则规则失效,所以要将其存储起来。使用命令 iptables-save >存储文件名
存入文件iptables .up.rules中了,当电脑重启时再使用命令iptables-restore <存储文件名
如果觉得麻烦当然也可以在配置文件中加入sudo gedit /etc/network/interfaces
5.清除iptables的规则
(1)清除预设表中的所有规则链的规则
iptables -F
运行此后,所有的规则链(包括自定义链和三种链)都被清空
(2)清除预设表filter中使用者自定链(即除了INPUT/OUTPUT/FORWARD链)中的规则
iptables -X
(3)清除单条规则和前面第三节的添加规则相同,这里把-A添加改为-D即可删除已经设置了的规则
iptables -D OUTPUT -p tcp --dport 80 -j DROP