摘要:本文介绍了如何使用“iptables-A”命令添加iptables防火墙规则。本文分享自华为云社区《Linux IPTables:如何添加防火墙规则(使用允许 SSH 示例)》,作者:Tiamo_T。本文介绍如何使用“iptables-A”命令添加iptables防火墙规则。“-A”用于追加。如果它能让您更容易记住“-A”作为添加规则(而不是追加规则),那很好。但是,请记住“-A”在链的末尾添加规则。此外,请务必记住在规则末尾添加-A。通常,最后一条规则是丢弃所有数据包。如果您已经有一个丢弃所有数据包的规则,并且如果您尝试在命令行上使用“-A”来创建一个新规则,您最终会在当前“丢弃所有数据包”规则之后添加新规则,这将让你的新规则几乎毫无用处。一旦您掌握了iptables,并且在生产中实施它时,您应该使用shell脚本,您可以在其中使用-A命令添加所有规则。在该shell脚本中,您的最后一行应该始终是“丢弃所有数据包”规则。当您想添加任何新规则时,修改shell脚本并将新规则添加到“丢弃所有数据包”规则之上。语法:iptables-Achainfirewall-rule?-Achain-指定规则应附加到的链。例如,对传入数据包使用INPUT链,对传出数据包使用OUTPUT链。?firewall-rule–各种参数构成防火墙规则。如果您不知道链是什么意思,最好先阅读iptables基础知识。防火墙规则参数以下参数可用于所有类型的防火墙规则。-pforprotocol?表示规则的协议。?可能的值是tcp、udp、icmp?使用“all”允许所有协议。当您不指定-p时,默认使用“all”协议。使用“全部”并始终指定协议不是一个好习惯。?使用名称(例如:tcp)或数字(例如:6表示tcp)作为协议。?/etc/protocols文件包含所有允许的协议名称和编号。?也可以使用--protocol-sis-source?表示数据包的来源。?这可以是IP地址、网络地址或主机名?示例:-s192.168.1.101表示特定的IP地址?对于网络掩码,请使用/mask。例如:“-s192.168.1.0/24”表示网络的网络掩码为255.255.255.0。这匹配192.168.1.x网络。?当您不指定来源时,它将匹配所有来源。?您也可以使用–src或–source-dis-destination?指示数据包的目的地。?这与“-s”相同(除了它代表目标主机、IP地址或网络)?您也可以使用--dst或--destination-j是目标?j代表“跳转到目标”?这指定规则的数据包需要发生什么。?可能的值为ACCEPT、DROP、QUEUE、RETURN?您还可以指定其他用户定义的链作为目标值。-i接口?i代表“输入接口”?你可以忽略它并假设“-i”是接口。请注意,-i和-o都用于接口。但是,-i用于输入接口,-o用于输出接口。?指示传入数据包通过INPUT、FORWARD和PREROUTING链进入的接口。?例如:-ieth0表示此规则应考虑通过接口eth0传入的数据包。?如果您不指定-i选项,则系统上所有可用的接口都被视为传入数据包。?您也可以使用–in-interface-o作为输出接口?o代表“输出接口”?指示通过INPUT、FORWARD和PREROUTING链发送传出数据包的接口。?如果您不指定-o选项,则系统上所有可用的接口都被视为传出数据包。?您还可以为--out-interface防火墙参数使用其他选项上面的一些防火墙参数依次有自己的选项,可以随它们一起传递。以下是一些最常见的选项。要使用这些参数选项,您应该在防火墙规则中指定相应的参数。例如,要使用“--sport”选项,您应该在防火墙规则中指定“-ptcp”(或“-pudp”)参数。注意:所有这些选项前面都有两个破折号。例如,sport前面有两个连字符。–sport用于源端口(对于-ptcp或-pudp)?默认情况下,所有源端口都匹配。?您可以指定端口号或名称。例如,要在防火墙规则中使用SSH端口,请使用“--sport22”或“--sportssh”。?/etc/services文件包含所有允许的端口名称和编号。?在规则中使用端口号比使用端口名更好(为了性能)。?要匹配端口范围,请使用冒号。例如,22:100匹配从22到100的端口号。?您也可以使用--source-port--dport作为目标端口(对于-ptcp或-pudp)?一切都与--sport相同,除了这是目的港。?您还可以使用–destination-port–tcp-flags作为TCP标志(对于-ptcp)?这可以包含多个以逗号分隔的值。?可能的值有:SYN、ACK、FIN、RST、URG、PSH。您也可以使用ALL或NONE–icmp-type作为ICMP类型(对于-picmp)?当您使用icmp协议“-picmp”时,您还可以使用“-icmp-type”参数指定ICMP类型。?例如:“-icmp-type0”代表“EchoReply”,“-icmp-type8”代表“Echo”。允许传入SSH连接的示例防火墙规则现在您了解了防火墙规则的各种参数(及其选项),让我们构建一个示例防火墙规则。在这个例子中,我们只允许传入的SSH连接到服务器。所有其他连接都将被阻止(包括ping)。警告:使用防火墙规则可能会使您的系统无法访问。如果您不知道自己在做什么,就有可能将自己(和其他人)锁在系统之外。因此,您的所有学习都只在一个没有人使用的测试系统上进行,如果您被锁定,您可以访问控制台以重新启动iptables。1.删除现有规则如果您已经有一些iptables规则,请在删除现有规则之前进行备份。删除所有现有规则并允许防火墙接受所有内容。使用我们之前讨论的iptablesflush来清理所有现有规则并从头开始。测试以确保您可以从外部通过ssh和ping此服务器。完成此示例后,您将只能通过SSH连接到此服务器。您将无法从外部ping该服务器。2.仅允许SSH仅允许传入的SSH连接到此服务器。你可以从任何地方ssh到这个服务器。iptables-AINPUT-ieth0-ptcp--dport22-jACCEPT上面的iptables命令有以下4个组成部分。?“-AINPUT”——这表明我们正在向INPUT链附加(或添加)新规则。因此,此规则适用于传入流量。?“-ieth0”——通过接口eth0传入的数据包将根据此规则进行检查。?“-ptcp–dport22”——该规则适用于TCP数据包。这有一个名为“-dport22”的tcp选项,它指示服务器上此规则的目标端口是22(即ssh)。?"-jACCEPT"-跳转到接受,它只接受数据包。简单来说,上述规则可以表示为:所有通过eth0进入ssh的数据包都将被接受。3.丢弃所有其他数据包一旦您指定了接受数据包的自定义规则,您还应该有一个默认规则来丢弃任何其他数据包。这应该是您在INPUT链中的最后一条规则。要丢弃所有传入数据包,请执行以下操作。iptables-AINPUT-jDROP4.查看SSH规则和测试要查看当前的iptables防火墙规则,使用“iptables-L”命令。#iptables-LChainINPUT(policyACCEPT)targetprotoptsourcedestinationACCEPTtcp--anywhereanywheretcpdpt:sshDROPall--anywhereanywhere从上面的输出可以看出,它依次有如下两条规则。?接受所有传入的ssh连接?丢弃所有其他数据包。不要从命令行添加防火墙规则,而是创建一个包含规则的shell脚本,如下所示。#viiptables.shiptables-AINPUT-ieth0-ptcp--dport22-jACCEPTiptables-AINPUT-jDROP#sh-xiptables.sh+iptables-AINPUT-ieth0-ptcp--dport22-jACCEPT+iptables-AINPUT-jDROP#iptables-LINPUTChainINPUT(policyACCEPT)targetprotoptsourcedestinationACCEPTtcp--anywhereanywheretcpdpt:sshDROPall--anywhereanywhere类似于iptablesappend/add命令,其他iptables可用的命令很少。点击关注,第一时间了解华为云的新鲜技术~
