iptables教程
iptables 是一个命令行防火墙,可以根据定义的规则过滤数据包。使用 Iptables,用户可以接受、拒绝或转发连接;尽管已被 nftables 取代,但它的用途非常广泛且用途广泛。
阅读本教程后,您将了解 Iptables 策略并定义 Iptables 规则来保护您的家庭网络。
注意:为需要复制粘贴本 iptables 教程中提到的规则的读者添加了 sudo 命令。
iptables 术语表:
目标:使用 iptables 时,目标是您希望 Iptables 在数据包与规则匹配时应用的操作。
CHAIN:链是规则列表;可用的内置链有:INPUT、OUTPUT、FORWARD、PREROUTING 和 POSTROUTING。
表:表是针对各种用途的 iptables 功能。例如,有一个表用于路由任务,另一个表用于过滤任务;每个表都包含规则链。
可用的表有filter、nat、raw、security 和mangle。每个表都包含内置(规则)链。以下列表显示了每个表包含哪些链:
| FILTER | INPUT | OUTPUT | FORWARD | ||
|---|---|---|---|---|---|
| NAT | PREROUTING | POSTROUTING | OUTPUT | ||
| RAW | PREROUTING | OUTPUT | |||
| MANGLE | PREROUTING | POSTROUTING | OUTPUT | INPUT | FORWARD |
| SECURITY | INPUT | OUTPUT | FORWARD |
根据您希望 iptables 执行的操作,您需要使用选项 -t 后跟表名称来指定表。在本教程中,未使用选项 -t。本教程重点介绍在未传递选项 -t 时使用默认应用的过滤表进行过滤的目的。在阅读本教程时,您将了解上面提到的一些概念。
如何安装:
要在 Debian 及其基于 Linux 的发行版上安装 Iptables,请运行:
在基于 RedHat 的 Linux 发行版上安装 Iptables 之前,您需要通过运行以下命令禁用 Firewalld:
sudo systemctl disable firewalld
sudo systemctl mask --now firewalld
然后通过执行以下命令安装 Iptables:
sudo systemctl start iptables
sudo systemctl start ip6tables
sudo systemctl enable iptables
sudo systemctl enable ip6tables
sudo systemctl start ip6tables
Iptables 入门:
在开始之前,请通过使用 -L (–list) 参数指示 iptables 列出现有策略和规则来检查以前的规则。
上面的输出显示 3 行:Chain INPUT、Chain FORWARD 和 Chain OUTPUT。其中,INPUT 指的是有关传入流量的策略,OUTPUT 指的是应用于传出流量的策略,FORWARD 指的是路由策略。
输出还显示没有定义的规则,并且所有定义的策略都被接受。
有 3 种类型的策略:接受、拒绝和丢弃。
策略ACCEPT允许连接;策略REJECT拒绝返回错误的连接;策略DROP拒绝连接而不产生错误。使用DROP时,UDP数据包将被丢弃,行为与连接到端口无服务。 TCP 数据包将返回 ACK/RST,这与没有服务的开放端口的响应相同。当使用REJECT时,ICMP数据包会向源主机返回目的地不可达。
当你处理Iptables时,你首先需要为每个链定义三个策略;之后,您可以添加例外和规范。添加策略如下所示:
sudo iptables -P OUTPUT <ACCEPT/DROP/REJECT>
sudo iptables -P FORWARD <ACCEPT/DROP/REJECT>
Iptables 宽松和限制政策:
您可以通过接受所有传入连接(您明确丢弃或拒绝的连接除外)来应用具有宽松策略的 Iptables。在这种情况下,除非您定义明确拒绝的规则,否则每个连接都是允许的。
相反,限制性策略拒绝除您明确接受的连接之外的所有连接。在这种情况下,除非您定义接受连接的规则,否则每个连接都会被拒绝。
对 Iptables 应用限制性策略:
以下示例演示如何通过丢弃除允许的流量之外的所有传入流量来应用 Iptables 限制性策略。
阻止传入流量。
重要:应用以下 3 条规则可能会让您无法连接互联网。使用“Iptables 附加规则和 Iptables 状态”中提到的规则,您可以添加必要的例外以恢复对互联网的访问。您可以一致执行 sudo iptables -F 来刷新规则。
您可以阻止所有传入流量,只允许传出流量浏览网页和您需要的应用程序。
sudo iptables -P OUTPUT ACCEPT
sudo iptables -P FORWARD DROP
在哪里 :
-P=政策
sudo iptables -P INPUT DROP:指示 iptables 拒绝所有传入流量而不回复源。
sudo iptables -P OUTPUT ACCEPT:定义传出流量的 ACCEPT 策略。
sudo iptables -P FORWARD DROP:指示 iptables 不要执行路由任务,丢弃所有发往不同主机(试图通过防火墙设备)的数据包,而无需回复。
上面的示例允许浏览网页和由本地设备启动的连接 (-P OUTPUT ACCEPT),但会阻止由其他主机启动的连接 (-P INPUT DROP),例如 ssh尝试访问您的设备不会返回错误消息。
当您使用限制性策略(如上例所示)启用 Iptables 时,您需要附加规则来调整您的配置。例如,如果保留上述配置而不为环回 (lo) 接口添加合理的例外,则某些应用程序可能无法正常工作。您还需要允许属于或与您的设备启动的连接相关的传入流量。
Iptables 附加规则和 Iptables 状态
必须了解 Iptables 按顺序应用规则。当您在前一个规则之后定义规则时,如果数据包与同一规则匹配,第二个规则将重写最后一个规则。
我喜欢前面的例子;您阻止了所有传入流量,您需要为环回接口添加例外;这可以通过添加 -A(Append)参数来实现。
sudo iptables -A OUTPUT -m conntrack --ctstate ESTABLISHED -j ACCEPT
(-m) conntrack –ctstate ESTABLISHED,RELATED 指示 Iptables 在应用定义的规则策略之前确认现有连接的连接状态是ESTABLISHED 还是 RELATED。
Iptables 可以检查 4 种可能的状态:
Iptables 状态新:您允许或阻止的数据包或流量尝试启动新连接。
Iptables 状态已建立:您允许或阻止的数据包或流量是已建立连接的一部分。
Iptables 状态“相关”:数据包或流量启动新连接,但与现有连接相关。
Iptables 状态无效:数据包或流量在没有状态的情况下未知。
上面示例的第一行指示 Iptables 接受来自设备启动的连接或与设备启动的连接相关的流量的传入数据包。第二行指示 Iptables 仅接受来自已建立连接的传出流量。
Iptables 附加接受环回流量并定义接口:
环回接口由需要与本地主机交互的程序使用。如果您不允许环回流量,某些应用程序可能无法运行。
以下命令允许环回连接:
sudo iptables -A OUTPUT -o lo -j ACCEPT
其中 -i 和 -o 用于指定传入流量 (-i) 和传出流量 (-o) 的网络设备。
对 Iptables 应用宽松策略:
您还可以定义宽松策略,允许除指定的丢弃或拒绝之外的所有流量。您可以启用除特定 IP 或 IP 范围之外的所有内容,也可以根据数据包的标头拒绝数据包,等等。
以下示例显示如何应用宽松策略,允许除 ssh 服务阻止的 IP 范围之外的所有流量。
sudo iptables -P OUTPUT ACCEPT
sudo iptables -P FORWARD DROP
sudo iptables -A INPUT -p tcp --dport 22 -m iprange --src-range 192.168.1.100-192.168.1.110 -j REJECT
上面的示例应用了宽松策略,但阻止 ssh 访问属于 192.168.1.100 和 192.168.1.110 范围内的所有 IP。
其中 -p 指定协议,–dport(或 –destination-port)目标端口(22,ssh),带有参数 –src-range(源范围)的模块 iprange 允许定义 IP 范围。选项 -j (–jump) 指示 iptables 如何处理数据包;在这种情况下,我们代表 REJECT。
使用 Iptables 阻止端口
以下示例显示如何阻止所有连接的特定端口(ssh 端口)。
保存 Iptables 更改
iptables 规则不是持久的;重启后规则不会恢复。要使规则持久化,请运行以下命令,其中第一行将规则保存在文件 /etc/iptables.up.rules 中,第二行用于创建 iptables 在重新启动后启动的文件。
nano /etc/network/if-pre-up.d/iptables
将以下内容添加到文件并关闭保存更改 (CTRL+X)。
/sbin/iptables-restore < /etc/iptables.up.rules
最后,通过运行以下命令授予文件执行权限:
刷新或删除 Iptables 规则:
您可以通过运行以下命令删除所有 Iptables 规则:
要删除特定的链(例如 INPUT),您可以运行:
结论:
iptables 是市场上最先进、最灵活的防火墙之一。尽管被取代,它仍然是最流行的防御和路由软件之一。
具有 TCP/IP 基础知识的 Linux 新用户可以快速学会其实现。一旦用户理解了语法,定义规则就变得很容易。
本介绍性教程未涵盖更多其他模块和选项。您可以在初学者的 Iptables 中查看更多 iptables 示例。
我希望这个 Iptables 教程对您有所帮助。继续关注 Linux Hint 以获取更多 Linux 技巧和教程。
