关于linux:Linux-IPTables如何添加防火墙规则

50次阅读

共计 3588 个字符,预计需要花费 9 分钟才能阅读完成。

摘要: 本文介绍了如何应用“iptables -A”命令增加 iptables 防火墙规定。

本文分享自华为云社区《Linux IPTables:如何增加防火墙规定(应用容许 SSH 示例)》,作者:Tiamo_T。

本文介绍了如何应用“iptables -A”命令增加 iptables 防火墙规定。

“-A”用于追加。如果它让你更容易记住“-A”作为增加规定(而不是附加规定),那就没问题了。然而,请记住,“-A”在链的开端增加了规定。

同样,记住 -A 在开端增加规定十分重要。

通常,最初一条规定是抛弃所有数据包。如果您曾经有一个抛弃所有数据包的规定,并且如果您尝试在命令行中应用“-A”来创立新规定,您最终会在以后的“抛弃所有数据包”规定之后增加新规定,这将使您的新规定简直毫无用处。

一旦您把握了 iptables,并且当您在生产中实现它时,您应该应用 shell 脚本,您能够在其中应用 -A 命令增加所有规定。在那个 shell 脚本中,你的最初一行应该总是“抛弃所有数据包”规定。当您想要增加任何新规定时,请批改该 shell 脚本并将您的新规定增加到“抛弃所有数据包”规定之上。

句法:

iptables -A chain firewall-rule
• -A 链 – 指定应附加规定的链。例如,对传入数据包应用 INPUT 链,对传出数据包应用 OUTPUT。
• firewall-rule – 各种参数形成防火墙规定。

如果您不晓得链是什么意思,最好先浏览 iptables 基础知识。

防火墙规定参数

以下参数可用于所有类型的防火墙规定。

-p 用于协定

• 批示规定的协定。
• 可能的值为 tcp、udp、icmp
• 应用“all”容许所有协定。当您不指定 -p 时,默认状况下将应用“所有”协定。应用“all”并始终指定协定并不是一个好习惯。
• 应用名称(例如:tcp)或编号(例如:6 示意 tcp)作为协定。
• /etc/protocols 文件蕴含所有容许的协定名称和编号。
• 你也能够应用 –protocol

-s 是源

• 批示数据包的起源。
• 这能够是 IP 地址、网络地址或主机名
• 例如:-s 192.168.1.101 示意具体的 ip 地址
• 对于网络掩码,应用 /mask。例如:“-s 192.168.1.0/24”示意该网络的网络掩码为 255.255.255.0。这匹配 192.168.1.x 网络。
• 当您不指定起源时,它将匹配所有起源。
• 您还能够应用 –src 或 –source

-d 是目的地

• 批示数据包的目的地。
• 这与“-s”雷同(除了它代表指标主机、IP 地址或网络)
• 您还能够应用 –dst 或 –destination

-j 是指标

• j 代表“跳转到指标”
• 这指定了匹配此防火墙规定的数据包须要产生什么。
• 可能的值为 ACCEPT、DROP、QUEUE、RETURN
• 您还能够指定其余用户定义的链作为目标值。

-i 用于接口

• i 代表“输出接口”
• 您可能会疏忽这一点并假如“-i”用于接口。请留神 -i 和 -o 都用于接口。然而,-i 用于输出接口,-o 用于输入接口。
• 批示传入数据包通过 INPUT、FORWARD 和 PREROUTING 链进入的接口。
• 例如:-i eth0 示意此规定应思考通过接口 eth0 传入的数据包。
• 如果您不指定 -i 选项,则零碎上所有可用的接口都将被思考用于输出数据包。
• 您也能够应用 –in-interface

-o 用于输入接口

• o 代表“输入接口”
• 批示通过 INPUT、FORWARD 和 PREROUTING 链发送传出数据包的接口。
• 如果您不指定 -o 选项,则零碎上所有可用的接口都将被视为输入数据包。
• 你也能够应用 –out-interface

防火墙参数的附加选项

下面的一些防火墙参数顺次具备能够与它们一起传递的本人的选项。以下是一些最常见的选项。

要应用这些参数选项,您应该在防火墙规定中指定相应的参数。例如,要应用“–sport”选项,您应该在防火墙规定中指定“-p tcp”(或“-p udp”)参数。

留神: 所有这些选项后面都有两个破折号。例如,sport 后面有两个连字符。

–sport 用于源端口(用于 -p tcp 或 -p udp)

• 默认状况下,所有源端口都匹配。
• 您能够指定端口号或名称。例如,要在防火墙规定中应用 SSH 端口,请应用“–sport 22”或“–sport ssh”。
• /etc/services 文件蕴含所有容许的端口名称和编号。
• 在规定中应用端口号比应用端口名更好(为了性能)。
• 要匹配端口范畴,请应用冒号。例如,22:100 匹配从 22 到 100 的端口号。
• 您也能够应用 –source-port

–dport 用于指标端口(用于 -p tcp 或 -p udp)

• 所有都与 –sport 雷同,除了这是针对指标端口。
• 您也能够应用 –destination-port

–tcp-flags 用于 TCP 标记(用于 -p tcp)

• 这能够蕴含以逗号分隔的多个值。
• 可能的值有:SYN、ACK、FIN、RST、URG、PSH。您也能够应用 ALL 或 NONE

–icmp-type 用于 ICMP 类型(用于 -p icmp)

• 当您应用 icmp 协定“-p icmp”时,您还能够应用“-icmp-type”参数指定 ICMP 类型。
• 例如:“-icmp-type 0”用于“Echo Reply”,“-icmp-type 8”用于“Echo”。

容许传入 SSH 连贯的示例防火墙规定

当初您理解了防火墙规定的各种参数(及其选项),让咱们构建一个示例防火墙规定。

在这个例子中,让咱们只容许传入的 SSH 连贯到服务器。所有其余连贯都将被阻止(包含 ping)。

正告:应用防火墙规定可能会导致您的零碎无法访问。如果您不晓得本人在做什么,您可能会将本人(和其余所有人)锁定在零碎之外。因而,仅在没有人应用的测试零碎上进行所有学习,并且如果您被锁定,您能够拜访控制台以重新启动 iptables。

1. 删除现有规定

如果您曾经有一些 iptables 规定,请在删除现有规定之前进行备份。

删除所有现有规定并容许防火墙承受所有内容。应用咱们之前探讨过的 iptables flush 清理所有现有规定并从头开始。

测试以确保您可能从内部 ssh 和 ping 此服务器。

实现此示例后,您将只能通过 SSH 连贯到此服务器。您将无奈从内部 ping 此服务器。

2. 只容许 SSH

仅容许与此服务器的传入 SSH 连贯。您能够从任何中央通过 ssh 连贯到此服务器。

iptables -A INPUT -i eth0 -p tcp --dport 22 -j ACCEPT

下面的 iptables 命令有以下 4 个组件。

•“-A INPUT”——这表明咱们正在向 INPUT 链追加(或增加)一条新规定。因而,此规定实用于传入流量。
•“-i eth0”– 将依据此规定查看通过接口 eth0 的传入数据包。
•“-p tcp –dport 22”– 此规定实用于 TCP 数据包。这有一个名为“-dport 22”的 tcp 选项,它示意服务器上此规定的指标端口是 22(即 ssh)。
•“-j ACCEPT”——跳转到承受,它只是承受数据包。

简略来说,上述规定能够表述为:所有通过 eth0 for ssh 传入的数据包都将被承受。

3. 抛弃所有其余数据包

一旦您指定了承受数据包的自定义规定,您还应该有一个默认规定来抛弃任何其余数据包。

这应该是您在 INPUT 链中的最初一条规定。

要抛弃所有传入的数据包,请执行以下操作。

iptables -A INPUT -j DROP

4. 查看 SSH 规定和测试

要查看以后的 iptables 防火墙规定,请应用“iptables -L”命令。

# iptables -L
Chain INPUT (policy ACCEPT)
target     prot opt source               destination
ACCEPT     tcp  --  anywhere             anywhere            tcp dpt:ssh
DROP       all  --  anywhere             anywhere

从下面的输入中能够看出,它顺次具备以下两条规定。

• 承受所有传入的 ssh 连贯
• 抛弃所有其余数据包。

与其从命令行增加防火墙规定,不如创立一个蕴含规定的 shell 脚本,如下所示。

# vi iptables.sh
iptables -A INPUT -i eth0 -p tcp --dport 22 -j ACCEPT
iptables -A INPUT -j DROP

# sh -x iptables.sh
+ iptables -A INPUT -i eth0 -p tcp --dport 22 -j ACCEPT
+ iptables -A INPUT -j DROP

# iptables -L INPUT
Chain INPUT (policy ACCEPT)
target     prot opt source               destination
ACCEPT     tcp  --  anywhere             anywhere            tcp dpt:ssh
DROP       all  --  anywhere             anywhere

与 iptables append/add 命令相似,iptables 可用的其余命令很少。

点击关注,第一工夫理解华为云陈腐技术~

正文完
 0