如何在 Debian 上配置 iptables

2022年 11月 8日 77.6k 0

用户空间应用程序 iptables 允许配置 Linux 内核防火墙提供的表,以及它存储的链和规则。当前用于 iptables 的内核模块仅适用于 IPv4 流量,为 IPv6 连接配置防火墙规则而不是使用 ip6tables,它响应与 iptables 相同的命令结构。

列出当前规则

Debian 服务器默认不实施任何限制,但为了将来参考,检查当前的 iptable 规则,使用以下命令。

sudo iptables -L

这将打印出三个链的列表,输入、转发和输出,如下面的空规则表示例输出。

Chain INPUT (policy ACCEPT) 
target prot opt source destination 
Chain FORWARD (policy ACCEPT) 
target prot opt source destination 
Chain OUTPUT (policy ACCEPT) 
target prot opt source destination

链名表示每个列表中的规则将应用于哪些流量,输入用于连接到您的云服务器的任何连接,输出是任何离开的流量,转发用于任何通过。每个链也有其策略设置,如果流量不匹配任何特定规则,则确定如何处理流量,默认情况下它设置为accept。

添加规则

防火墙通常可以通过以下两种方式之一进行配置,或者将默认规则设置为接受,然后使用特定规则阻止任何不需要的流量,或者使用规则定义允许的流量并阻止其他所有流量。后者通常是推荐的方法,因为它允许先发制人地阻止流量,而不必被动地拒绝不应尝试访问您的云服务器的连接。

要开始使用 iptables,您应该首先为您需要的服务添加允许入站流量的规则。iptables 可以跟踪连接的状态,使用下面的命令来允许建立的连接。

sudo iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT

您可以检查是否使用与以前相同的sudo iptables -L添加了规则。

接下来,允许流量到特定端口以启用 SSH 连接,如下所示。

sudo iptables -A INPUT -p tcp --dport ssh -j ACCEPT

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

sudo iptables -A INPUT -p tcp --dport 80 -j ACCEPT

添加所需的所有允许规则后,​​将输入策略更改为删除。

警告:将默认规则更改为 drop 将只允许特别接受的连接。在更改默认规则之前,请确保您至少启用了如上所示的 SSH。

sudo iptables -P INPUT DROP

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

保存和恢复规则

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

sudo iptables-save > /etc/iptables/rules.v4

然后,您可以通过读取您保存的文件来简单地恢复保存的规则。

# 覆盖当前规则
sudo iptables-restore < /etc/iptables/rules.v4 
# 添加新规则保持当前规则
sudo iptables-restore -n < /etc/iptables/rules.v4

您可以通过为 iptables 安装一个额外的包来在重新启动时自动执行恢复过程,该包会接管已保存规则的加载。为此,请使用以下命令。

sudo aptitude install iptables-persistent

安装后,初始设置将要求保存 IPv4 和 IPv6 的当前规则,只需选择Yes并按 Enter 即可。

如果您对 iptables 规则进行进一步更改,请记住使用与上述相同的命令再次保存它们。iptables-persistent 在/etc/iptables下查找文件rules.v4和rules.v6。

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

高级规则设置

根据基本的防火墙行为,规则是按照它们在每个链上列出的顺序读取的,这意味着您需要以正确的顺序放置规则。添加新规则会将它们添加到列表的末尾。您可以使用iptables -I -command将新规则添加到列表的特定位置,其中是您希望插入规则的订单号。要知道要输入哪个索引号,请使用以下命令。

sudo iptables -L --line-numbers
Chain INPUT (policy DROP) 
 num target prot opt source destination 
 1 ACCEPT all -- 任何地方 ctstate RELATED,ESTABLISHED 
 2 ACCEPT tcp -- 任何地方 , dpt:ssh 
 3 ACCEPT tcp -- 任何地方 tcp dpt:http

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

sudo iptables -I INPUT 1 -p tcp --dport 80 -j ACCEPT

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

sudo iptables -D INPUT 2

也可以使用-F参数刷新特定链的所有规则甚至整个 iptables 。如果您怀疑 iptables 正在干扰您尝试的网络流量,或者您只是希望从干净的表重新开始配置,这将非常有用。

警告:确保在刷新任何链之前将默认规则设置为 ACCEPT。

sudo iptables -P INPUT ACCEPT

之后,您可以继续清除其他规则。请记住在刷新表之前将规则保存到文件中,以防您以后想恢复配置。

# 清除输入链
sudo iptables -F INPUT 
# 刷新整个 iptables 
sudo iptables -F

刷新iptable后,您的服务器可能容易受到攻击。确保使用替代方法保护您的系统,同时禁用 iptables,即使是暂时的。

相关文章

Mallox勒索软件新Linux变种现世
伪装成破解程序和商业工具的新型恶意软件正在传播
Orcinius后门新样本分析
Poseidon窃取程序通过Google广告感染Mac用户
大选开始之际,欧盟各政党遭受 DDoS 攻击
微软2024

发布评论