iptables是在Linux 环境下一款优秀的软件防火墙,通过配置iptables的数据流向过滤规则,可以有效的关闭、限制服务器上的各端口数据的发送和接收,提高系统的安全性。iptables有三个内置的数据流链(chains),分别是流入链(INPUT)、流出链(OUTPUT)和转发链(FORWORD),我们就是通过对这三个数据流链增加各种规则来限制数据流动。本文主要介绍INPUT和OUTPUT。

iptables是在Linux 环境下一款优秀的软件防火墙,通过配置iptables的数据流向过滤规则,可以有效的关闭、限制服务器上的各端口数据的发送和接收,提高系统的安全性。iptables有三个内置的数据流链(chains),分别是流入链(INPUT)、流出链(OUTPUT)和转发链(FORWORD),我们就是通过对这三个数据流链增加各种规则来限制数据流动。本文主要介绍INPUT和OUTPUT。

大多数Linux系统默认都会安装iptables。如果你的系统里面还没有安装它,可以使用yum命令来安装它。

1 yum install iptables

 

在介绍如何配置iptables之前,先简单介绍一下iptables的命令,后面将会用到它们。

01 iptables -A chain # 添加规则到一个链
02 iptables -D chain # 删除链中的对应规则
03 iptables -D chain rulenum # 删除指定的行的规则,1是第一行,依次类推
04 iptables -I chain [rulenum] # 向指定行插入规则,默认为第一行
05 iptables -R chain rulenum # 替换指定行号的规则,1是第一行
06 iptables -L [chain] # 显示某个链中的规则,不指定链则显示所有链中的规则
07 iptables -F [chain] # 清空/删除链中的规则,不指定链则删除所有链中的规则
08 iptables -Z [chain] # 重设链、所有链的流量计数器的数值
09 iptables -N chain # 创建一个用户自定义的链
10 iptables -X [chain] # 删除一个用户自定义的链
11 iptables -P chain target # 更改某个链的目标
12 iptables -E old-chain new-chain # 修改一个链的名称

 

在配置之前先查看一下系统中是不是已经有配置过的规则,如果你的机器没有配置过,显示和下面的类似。

1 iptables -L

如果已经有了规则,但是你确定需要重新指定可以使用下面的命令清除已有规则。

 

 
1 iptables -F

 

接下来按照从严的原则来配置,目的就是为了提高系统的安全性。需要阻止一切不需要的数据流动。

在阻止一切流入包之前,先要允许SSH包流入,不然会把自己挡在防火墙的外面,无法连接服务器。

 

1 iptables -A INPUT -p tcp --dport 22 -j ACCEPT; #添加规则,允许TCP协议的22端口(SSH)进入

 

注意这里如果你修改过SSH的默认端口,那么应该使用修改过之后的端口号,如果你不是使用SSH登录的而是使用Telnet登录,应该用telnet的端口(默认23)。

确认你上面的操作正确,不会把自己挡在防火墙外后,接下来禁止其他端口的流入包

1 iptables -A INPUT -j DROP # 禁止所有流入包

 

让我们抓Google的主页试试看,你的服务器停留在了解析google.com的ip地址上,因为机器已经收不到域名服务器发送过来的解析结果了。52 iptables-wget-google.png

然后你可以删除上面的规则

1 iptables -D INPUT 2 # 删除第二条INPUT规则,或者 
2 iptables -D INPUT -j DROP # 直接将 -A 改成 -D,删除该条规则

 

删除之后,你就可以顺利抓取Google的主页了。

当然我们为了系统的安全我们是需要这条规则的,不过不能把它放在前面,我们需要把它放到其他规则的后面,接下来先添加其他软件需要开放的端口。

01 iptables -A INPUT -p tcp --dport 22 -j ACCEPT; #添加规则,允许TCP协议的22端口(SSH)进入
02 iptables -A INPUT -p tcp --dport 53 -j ACCEPT  #  DNS服务
03 iptables -A INPUT -p udp --dport 53 -j ACCEPT
04 iptables -A OUTPUT -p tcp --sport 53 -j ACCEPT
05 iptables -A OUTPUT -p udp --sport 53 -j ACCEPT
06 iptables -A INPUT -p tcp --dport 80 -j ACCEPT  #  Http服务
07 iptables -A OUTPUT -p tcp --sport 80 -j ACCEPT
08 iptables -A INPUT -p tcp --dport 443 -j ACCEPT  #  Https服务
09 iptables -A OUTPUT -p tcp --sport 443 -j ACCEPT
10 iptables -A INPUT -p tcp -m multiport --destination-port 20,21 -j ACCEPT  # 开放FTP服务
11 iptables -A OUTPUT -p tcp -m multiport --source-port 20,21 -j ACCEPT
12 iptables -A INPUT -p tcp -m multiport --destination-port 47,1723 -j ACCEPT  # 开放vpn服务
13 iptables -A INPUT -p gre -j ACCEPT
14 iptables -A OUTPUT -p tcp -m multiport --source-port 47,1723 -j ACCEPT
15 iptables -A OUTPUT -p gre -j ACCEPT
16 iptables -A INPUT -p tcp -m multiport --destination-port 25,110,143 -j ACCEPT  #开放mail服务
17 iptables -A OUTPUT -p tcp -m multiport --source-port 25,110,143 -j ACCEPT
18 iptables -A INPUT -j DROP # 最后禁止所有其他不需要的流入包

 

把修改过的规则保存起来,重启iptables。

1 service iptables save #保存规则
2 service iptables restart #重启

 

Last modification:July 14, 2020
如果觉得我的文章对你有用,请随意赞赏