如何在CentOS上配置iptables防火墙规则

2020年03月02日23:44:19

iptables允许配置Linux内核防火墙提供的表以及它存储的链和规则。当前用于iptables的内核模块仅适用于IPv4流量,为IPv6连接配置防火墙规则,而使用ip6tables,后者响应与iptables相同的命令结构。如果您使用的是CentOS 7,则应该考虑配置Firewalld防火墙,它结合了iptables和ip6tables的功能,尽管仍然可以使用相同的iptables。

配置iptables防火墙规则

配置iptables防火墙规则

列出当前iptables规则

在CentOS上,iptables通常带有一些预配置的规则,可使用以下命令检查当前的iptables规则。

[root@myvps ~]# iptables -L

这将打印出三个链的列表,inputforwardoutput,如下面的空规则表例子的输出。

Chain INPUT (policy ACCEPT)
target prot opt source destination
ACCEPT all -- anywhere anywhere state RELATED,ESTABLISHED
ACCEPT icmp -- anywhere anywhere
ACCEPT all -- anywhere anywhere
ACCEPT tcp -- anywhere anywhere state NEW tcp dpt:ssh
REJECT all -- anywhere anywhere reject-with icmp-host-prohibited

Chain FORWARD (policy ACCEPT)
target prot opt source destination
REJECT all -- anywhere anywhere reject-with icmp-host-prohibited

Chain OUTPUT (policy ACCEPT)
target prot opt source destination

链名称表示在每个列表规则里哪些流量被允许,INPUT为任何来你服务器的连接,OUTPUT是任何离开的流量,FORWARD是任何通过的流量。每个链都有其策略设置,该策略设置确定如果流量与任何特定规则都不匹配,则如何处理流量,默认情况下将其设置为accept

添加规则

防火墙通常可以通过以下两种方式之一进行配置:

  • 将默认规则设置为接受,然后使用特定规则阻止任何不需要的流量。
  • 使用规则定义允许的流量,阻止其他所有内容。

后者通常是推荐的方法,因为它允许抢先阻止流量,而不必被动地拒绝不应尝试访问你的服务器的连接。

要开始使用iptables,你应该首先添加所需服务允许的入站流量的规则。iptables可以跟踪连接状态,因此请使用以下命令允许已建立的连接继续。

[root@myvps ~]# iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT

你可以使用与前面相同的iptables -L检查是否已添加规则。

接下来,用下面语句允许到特定端口的流量启用SSH连接。

[root@myvps ~]# iptables -A INPUT -p tcp --dport ssh -j ACCEPT

命令中的ssh转换为端口号22,协议默认使用该端口号。相同的命令结构也可用于允许流量流向其他端口。要启用对HTTP Web服务器的访问,请使用以下命令。

[root@myvps ~]# iptables -A INPUT -p tcp --dport 80 -j ACCEPT

添加所需的所有允许规则后,​​把INPUT策略更改为DROP

[root@myvps ~]# iptables -P INPUT DROP

通过输入链名称并选择DROPACCEPT,也可以为其他链定义相同的策略规则。

保存和还原规则

现在,如果你要重新启动服务器,则所有这些iptables配置都将被擦除。为防止这种情况,要将规则保存到文件中。

[root@myvps ~]# iptables-save > /etc/sysconfig/iptables

你可以通过读取保存的文件来简单地还原保存的规则。

# 覆盖当前规则
[root@myvps ~]# iptables-restore < /etc/sysconfig/iptables
# 添加新规则,保持当前规则
[root@myvps ~]# iptables-restore -n < /etc/sysconfig/iptables

为了在重启时自动执行还原,CentOS提供了一个具有相同名称的系统服务iptables,需要启用它。

[root@myvps ~]# chkconfig iptables on

之后,你可以使用以下命令简单地保存当前规则。

[root@myvps ~]# service iptables save

这些只是你可以与iptables一起使用的一些简单命令,它具有更多功能。继续阅读以检查其他一些选项,这些选项可用于对iptable规则进行更高级的控制。

高级规则设置

按照基本的防火墙行为,将按照每个链上列出的顺序读取规则,这意味着你需要按照正确的顺序放置规则。附加新规则会将它们添加到列表的末尾。你可以使用下面命令将新规则添加到列表的特定位置。

[root@myvps ~]# iptables -I <index> -command

其中<index>是你希望插入规则的序号。要知道要输入哪个索引号,请使用以下命令。

[root@myvps ~]# iptables -L --line-numbers
Chain INPUT (policy DROP)
num target prot opt source destination
1 ACCEPT all -- anywhere anywhere ctstate RELATED,ESTABLISHED
2 ACCEPT tcp -- anywhere anywhere tcp dpt:ssh
3 ACCEPT tcp -- anywhere anywhere tcp dpt:http

每条规则行开头的数字表示链中的位置。要在特定的现有规则之上插入新规则,只需使用该现有规则的索引号即可。例如,要将新规则插入到链的顶部,请使用以下索引号为1的命令。

[root@myvps ~]# iptables -I INPUT 1 -p tcp --dport 80 -j ACCEPT

如果要从某个链中删除现有规则,请使用带有参数-Ddelete命令。选择删除规则的最简单方法是使用上述索引号。例如,要删除输入链上的第二条规则,请使用此命令。

[root@myvps ~]# iptables -D INPUT 2

也可以使用-F -parameter刷新特定链的所有规则,甚至刷新整个iptables 。如果你怀疑iptables干扰了你尝试的网络流量,或者只是希望从干净表中重新开始配置,这将很有用。在刷新表之前,请记住将规则保存到文件中。

# 清楚输入链
[root@myvps ~]# iptables -F INPUT
# 刷新整个iptables
[root@myvps ~]# iptables -F

刷新iptables后,你的服务器可能容易受到攻击。确保使用另一种方法保护系统,同时暂时禁用iptables。