介绍
Iptables是一个防火墙,在大多数Linux系统的网络安全中起着至关重要的作用。 虽然许多iptables的教程将教你如何创建防火墙规则来保护您的服务器 ,这其中将重点放在防火墙管理的不同方面:上市和删除规则。
在本教程中,我们将介绍如何执行以下iptables任务:
- 列出规则
- 清除分组和字节计数器
- 删除规则
- 刷新链(删除链中的所有规则)
- 刷新所有链和表,删除所有链,并接受所有流量
注意:当使用防火墙时,注意不要通过阻断交通SSH(端口22,默认情况下)把自己锁了自己的服务器。 如果你输了,由于你的防火墙设置访问权限,您可能需要通过控制台连接到它解决您的访问。 通过控制台连接后,您可以更改防火墙规则以允许SSH访问(或允许所有流量)。 如果您保存的防火墙规则允许SSH访问,另一种方法是重新启动服务器。
先决条件
在开始使用本教程之前,您应该在服务器上设置一个单独的非root超级用户帐户 - 具有sudo权限的用户。 如果您需要设置,请按照相应的指南:
让我们先看看如何列出规则。 有两种不同的方法来查看活动的iptables规则:在表中或作为规则规范列表。 这两种方法以不同的格式提供大致相同的信息。
按规范列出规则
要列出所有通过规范有效的iptables规则,运行iptables
用命令-S
选项:
sudo iptables -S
Example: Rule Specification Listing-P INPUT DROP
-P FORWARD DROP
-P OUTPUT ACCEPT
-N ICMP
-N TCP
-N UDP
-A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -m conntrack --ctstate INVALID -j DROP
-A INPUT -p udp -m conntrack --ctstate NEW -j UDP
-A INPUT -p tcp -m tcp --tcp-flags FIN,SYN,RST,ACK SYN -m conntrack --ctstate NEW -j TCP
-A INPUT -p icmp -m conntrack --ctstate NEW -j ICMP
-A INPUT -p udp -j REJECT --reject-with icmp-port-unreachable
-A INPUT -p tcp -j REJECT --reject-with tcp-reset
-A INPUT -j REJECT --reject-with icmp-proto-unreachable
-A TCP -p tcp -m tcp --dport 22 -j ACCEPT
正如你所看到的,输出,看起来就像是被用来创建它们的命令,不包括前面iptables
命令。 这也将类似于iptables规则的配置文件,如果你曾经使用iptables-persistent
或iptables save
。
列出特定链
如果要限制输出到一个特定的链( INPUT
, OUTPUT
, TCP
等),可以在以后直接指定链名-S
选项。 例如,要显示所有的规则规范的TCP
链,你会运行此命令:
sudo iptables -S TCP
Example: TCP Chain Rule Specification Listing-N TCP
-A TCP -p tcp -m tcp --dport 22 -j ACCEPT
让我们来看看另一种方式来查看活动iptables规则,作为一个规则表。
将规则列为表
在表视图中列出iptables规则可以用于将不同规则彼此比较,
输出所有的主动iptables规则在一个表中,运行iptables
用命令-L
选项:
sudo iptables -L
这将输出按链排序的所有当前规则。
如果要限制输出到一个特定的链( INPUT
, OUTPUT
, TCP
等),可以在以后直接指定链名-L
选项。
让我们来看看一个INPUT链的例子:
sudo iptables -L INPUT
Example: Input Chain Rule Table ListingChain INPUT (policy DROP)
target prot opt source destination
ACCEPT all -- anywhere anywhere ctstate RELATED,ESTABLISHED
ACCEPT all -- anywhere anywhere
DROP all -- anywhere anywhere ctstate INVALID
UDP udp -- anywhere anywhere ctstate NEW
TCP tcp -- anywhere anywhere tcp flags:FIN,SYN,RST,ACK/SYN ctstate NEW
ICMP icmp -- anywhere anywhere ctstate NEW
REJECT udp -- anywhere anywhere reject-with icmp-port-unreachable
REJECT tcp -- anywhere anywhere reject-with tcp-reset
REJECT all -- anywhere anywhere reject-with icmp-proto-unreachable
输出的第一行指示链名称(在本例中为INPUT),后面是其默认策略(DROP)。 下一行由表中每个列的标题组成,后面是链的规则。 让我们来看看每个标题指示:
- 目标 :如果数据包与规则相匹配,目标指定了应该用它来完成。 例如,分组可以被接受,丢弃,记录或发送到另一链,以与更多规则进行比较
- PROT:协议,如
tcp
,udp
,icmp
,或all
- 选择 :很少使用,这列表示IP选项
- 来源 :通信的源IP地址或子网,或
anywhere
- 目的地 :交通的目的IP地址或子网,或
anywhere
最后一栏,这是不标记,表示规则的选项 。 也就是说,规则的任何部分不是由前面的列指示的。 这可以是从源和目的地端口到分组的连接状态的任何东西。
显示数据包计数和聚合大小
列出iptables规则时,还可以显示与每个特定规则匹配的数据包数量和数据包的总大小(以字节为单位)。 当尝试大致了解哪些规则与数据包匹配时,这通常很有用。 要做到这一点,只需使用-L
和-v
选项在一起。
例如,让我们来看看INPUT链再次,与-v
选项:
sudo iptables -L INPUT -v
Example: Verbose ListingChain INPUT (policy DROP 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
284K 42M ACCEPT all -- any any anywhere anywhere ctstate RELATED,ESTABLISHED
0 0 ACCEPT all -- lo any anywhere anywhere
0 0 DROP all -- any any anywhere anywhere ctstate INVALID
396 63275 UDP udp -- any any anywhere anywhere ctstate NEW
17067 1005K TCP tcp -- any any anywhere anywhere tcp flags:FIN,SYN,RST,ACK/SYN ctstate NEW
2410 154K ICMP icmp -- any any anywhere anywhere ctstate NEW
396 63275 REJECT udp -- any any anywhere anywhere reject-with icmp-port-unreachable
2916 179K REJECT all -- any any anywhere anywhere reject-with icmp-proto-unreachable
0 0 ACCEPT tcp -- any any anywhere anywhere tcp dpt:ssh ctstate NEW,ESTABLISHED
需要注意的是上市现在有两个附加列, pkts
和bytes
。
现在你知道如何以各种方式列出活动防火墙规则,让我们看看如何重置包和字节计数器。
重置包计数和聚合大小
如果你想清楚了,或零,则数据包和字节计数器的规则,使用-Z
选项。 如果重新启动,它们也会重置。 如果您想要查看您的服务器是否正在接收符合您现有规则的新流量,这一点很有用。
要清除所有连锁和规章的柜台,使用-Z
本身的选项:
sudo iptables -Z
要清除所有规则的计数器,在一条链,使用-Z
选项,并指定链。 例如,要清除INPUT链计数器,请运行以下命令:
sudo iptables -Z INPUT
如果要清除特定规则的计数器,请指定链名称和规则编号。 例如,要清零INPUT链中第一个规则的计数器,请运行以下命令:
sudo iptables -Z INPUT 1
现在你知道如何重置iptables数据包和字节计数器,让我们看看可以用来删除它们的两个方法。
按规范删除规则
删除iptables规则的一种方法是通过规则规范。 要做到这一点,您可以运行iptables
使用命令-D
选项,后跟规则规范。 如果你想用这种方法来删除规则,可以使用规则列表的输出, iptables -S
,一些帮助。
例如,如果你想删除无效丢弃传入的数据包(规则-A INPUT -m conntrack --ctstate INVALID -j DROP
),你可以运行这个命令:
sudo iptables -D INPUT -m conntrack --ctstate INVALID -j DROP
注意, -A
选项,它被用来指示在创建时规则位置,这里应排除在外。
按链和数删除规则
另一种方法来删除iptables规则是由它的链条和行号 。 以确定规则的行号,列出的规则的表的格式,并添加--line-numbers
的选项:
sudo iptables -L --line-numbers
[secondary_output Example Output: Rules with Line Numbers]
Chain INPUT (policy DROP)
num target prot opt source destination
1 ACCEPT all -- anywhere anywhere ctstate RELATED,ESTABLISHED
2 ACCEPT all -- anywhere anywhere
3 DROP all -- anywhere anywhere ctstate INVALID
4 UDP udp -- anywhere anywhere ctstate NEW
5 TCP tcp -- anywhere anywhere tcp flags:FIN,SYN,RST,ACK/SYN ctstate NEW
6 ICMP icmp -- anywhere anywhere ctstate NEW
7 REJECT udp -- anywhere anywhere reject-with icmp-port-unreachable
8 REJECT tcp -- anywhere anywhere reject-with tcp-reset
9 REJECT all -- anywhere anywhere reject-with icmp-proto-unreachable
10 ACCEPT tcp -- anywhere anywhere tcp dpt:ssh ctstate NEW,ESTABLISHED
...
这增加了行号以每个规则的行,由NUM头指示。
一旦知道要删除哪个规则,请注意规则的链和行号。 然后运行iptables -D
命令,随后通过链和规则编号。
例如,如果我们想删除丢弃非法报文输入规则,我们可以看到,它的规则3
中的INPUT
链。 所以我们应该运行这个命令:
sudo iptables -D INPUT 3
现在你知道如何删除个人防火墙规则,让我们对你如何刷新规则链。
冲洗链
iptables的提供了一种方法来删除链中的所有规则,或刷新链。 本节将介绍各种方法来做到这一点。
注意:要小心,不要将自己锁定你的服务器,通过SSH,通过冲洗链下降或否认的默认策略。 如果你这样做,你可能需要通过控制台连接到它来修复你的访问。
冲洗单个链条
要刷新特定链,这将删除链中的所有规则,您可以使用-F
,或等值--flush
,选项和链刷新的名称。
例如,要删除所有的规则INPUT
链,运行以下命令:
sudo iptables -F INPUT
冲洗所有链
要清除所有连锁,这将删除所有的防火墙规则,您可以使用-F
,或等值--flush
本身的选项:
sudo iptables -F
刷新所有规则,删除所有链,并接受全部
本节将介绍如何刷新所有防火墙规则,表和链,并允许所有网络流量。
注意:这将有效地禁用防火墙。 如果要重新开始防火墙的配置,则应该只按照此部分。
首先,为每个内置链的默认政策,以ACCEPT
。 这样做的主要原因是确保您不会被通过SSH从您的服务器锁定:
sudo iptables -P INPUT ACCEPT
sudo iptables -P FORWARD ACCEPT
sudo iptables -P OUTPUT ACCEPT
然后刷新nat
和mangle
表,冲洗所有连锁( -F
),并删除所有非默认链( -X
):
sudo iptables -t nat -F
sudo iptables -t mangle -F
sudo iptables -F
sudo iptables -X
您的防火墙现在将允许所有网络流量。 如果现在列出规则,您将看到没有,只有三个默认链(INPUT,FORWARD和OUTPUT)保留。
结论
在学习本教程之后,您应该熟悉如何列出和删除iptables防火墙规则。
请记住,通过任何iptables的变化iptables
命令是短暂的,并需要通过保存服务器重新启动持续。 这是包括在保存规则部分通用防火墙规则和命令教程。