关于防火墙firewall,从字面上理解,就是防止非法的数据包进入的一道墙,合法的数据从门里进来,不合法的数据被墙挡在外面。而到底哪些是合法哪些是不合法的数据呢,这个是由墙里面的设备或者人给的配置决定的。如果是人为设置的,配置得好,自然好,配置得不好,等于防火墙是个摆设。对于我们在进行学习时,当然防火墙可以关掉,如在linux下使用telnet部署web这篇文章中的做法,以便于我们的数据包可以自由出入。但互联网中到处存在着不良的数据,所以学会配置它还是有一定的好处的。

以linux下的防火墙iptables为例。

1.查看iptables配置

(1)按列表查看访问规则 iptables -L

乌班图docker启动命令 乌班图iptables_数据

(2)按INPUT,OUTPUT,FORWARD三个类查看访问规则 iptables -S

乌班图docker启动命令 乌班图iptables_数据_02

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即可。




乌班图docker启动命令 乌班图iptables_重启_03




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访问本机时被拒绝,这里例子里使用本机访问本机。



乌班图docker启动命令 乌班图iptables_重启_04



(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时被拒绝。



乌班图docker启动命令 乌班图iptables_linux_05



(3)FORWARD和前两种方式一样,只不过是经过的数据包。


当然以上缺省规则为INPUT/OUTPUT/FORWARD为ACCEPT时。


(4)自定义链的规则


4.存储与恢复iptables的规则

因为上面设置规则后,重启则规则失效,所以要将其存储起来。使用命令 iptables-save >存储文件名

乌班图docker启动命令 乌班图iptables_数据_06

 

存入文件iptables .up.rules中了,当电脑重启时再使用命令iptables-restore <存储文件名

乌班图docker启动命令 乌班图iptables_linux_07

如果觉得麻烦当然也可以在配置文件中加入sudo gedit  /etc/network/interfaces

乌班图docker启动命令 乌班图iptables_数据_08

5.清除iptables的规则

(1)清除预设表中的所有规则链的规则

iptables -F

运行此后,所有的规则链(包括自定义链和三种链)都被清空

(2)清除预设表filter中使用者自定链(即除了INPUT/OUTPUT/FORWARD链)中的规则

iptables -X

(3)清除单条规则和前面第三节的添加规则相同,这里把-A添加改为-D即可删除已经设置了的规则

iptables -D OUTPUT -p tcp --dport 80 -j DROP

乌班图docker启动命令 乌班图iptables_数据_09