iptables是Linux防火墙系统的重要组成部分。iptables的主要功能是实现对网络数据包进出设备和转发的控制。iptables可用于控制数据包何时需要进入、流出或由设备转发和路由。下面,小编将从几个方面来详细介绍Linuxiptables命令,希望对大家有所帮助。iptables简介iptables是集成在Linux内核中的包过滤防火墙系统。使用iptables添加和删除特定的过滤规则。iptables默认维护着4张表和5条链,所有的防火墙策略规则都分别写入这些表和链中。“四张表”指的是iptables的功能。默认的iptables规则表包括filtertable(过滤规则表)、nattable(地址转换规则表)、mangle(修改数据标记位规则表)、raw(跟踪数据表ruleTable):filtertable:控制数据包是否通过允许进入、退出和前进。可以控制的链接有INPUT、FORWARD和OUTPUT。nat表:控制数据包中的地址转换,可以控制的链接有PREROUTING、INPUT、OUTPUT和POSTROUTING。mangle:修改数据包中的原始数据,可以控制的链接有PREROUTING、INPUT、OUTPUT、FORWARD和POSTROUTING。raw:控制nat表中连接跟踪机制的启用状态。可以控制的链路是PREROUTING和OUTPUT。“五链”是指内核中控制网络的NetFilter定义的5条规则链。每个规则表包含多个数据链路:INPUT(入站数据过滤)、OUTPUT(出站数据过滤)、FORWARD(转发数据过滤)、PREROUTING(路由前过滤)和POSTROUTING(路由后过滤),防火墙规则需要被写入这些特定的数据链接。Linux防火墙的过滤框架如图1所示。可以看出,如果外部主机向防火墙自身发送数据包,数据会经过PREROUTING链和INPUT链;如果防火墙本身向外部主机发送数据包,数据会经过OUTPUT链和POSTROUTING链;由于路由器负责转发数据,因此数据会经过PREROUTING链、FORWARD链和POSTROUTING链。iptables语法格式iptables命令的基本语法格式如下:[root@liangxu~]#iptables[-ttable]COMMAND[chain]CRETIRIA-jACTION各参数含义为:-t:指定防火墙规则表filter、nat、mangle或raw。不使用-t时,默认使用过滤表。COMMAND:子命令,定义管理规则。chain:表示链表。CRETIRIA:匹配参数。ACTION:触发一个动作。iptables命令常用选项及其各自的作用如表2所示。选项功能-A添加防火墙规则-D删除防火墙规则-I插入防火墙规则-F清除防火墙规则-L列出添加防火墙规则-R替换防火墙规则-Z清除防火墙数据表的统计信息-P设置链的默认规则iptables命令常用匹配参数及其各自的作用如表3所示。参数作用[!]-p匹配协议,!表示反转[!]-s匹配源地址[!]-d匹配目的地址[!]-i匹配入网卡接口[!]-o匹配出网卡接口[!]--sport匹配源端口[!]--dport匹配目的端口[!]--src-range匹配源地址范围[!]--dst-range匹配目的地址范围[!]--limitfour匹配数据表速率[!]--mac-source匹配源MAC地址[!]--sports匹配源端口[!]--dports匹配目标端口[!]--stste匹配状态(INVALID、ESTABLISHED、NEW、RELATED)[!]--string匹配应用层字符串。表4显示了iptables命令触发的操作及其各自的功能。触发动作函数ACCEPT允许数据包通过DROP丢弃数据包REJECT拒绝数据包并通过LOG记录数据包信息到syslog。如果找到匹配的规则目录,则立即执行相关动作,并停止查找规则目录;如果所有防火墙规则都匹配不成功,则使用默认策略。使用-A选项添加防火墙规则会将规则附加到整个链的末尾,而使用-I选项添加的防火墙规则将默认作为链中的第一条规则插入。注意,在LinuxCentOS系统中,iptables是默认安装的。如果系统中没有iptables工具,可以先安装。查看和清除规则使用iptables命令查看、添加、修改和删除具体规则1)查看规则查看规则需要使用如下命令:[root@liangxu~]#iptables-nvL各参数含义为:-L表示查看当前表的所有规则,默认查看filter表,如果想查看nat表,可以加上-tnat参数。-n表示不查回IP地址,加这个参数会加快显示速度。-v表示输出详细信息,包括通过规则的包数,总字节数,对应的网络接口。[示例1]检查规则。首先,需要使用su命令将当前用户切换为root用户。然后在终端页面输入命令如下:[root@liangxu~]#iptables-LChainINPUT(policyACCEPT)targetprotoptsourcedestinationACCEPTall--anywhereanywherestateRELATED,ESTABLISHEDACCEPTicmp--anywhereanywhereACCEPTall--anywhereanywhereACCEPTtcp--anywhereanywherestateNEWtcpdpt:sshREJECTall--anywhereanywherereject-withicmp-host-prohibited2)添加规则添加带有两个参数-A和-I的规则。其中,-A被添加到规则的末尾;-I可以插入到指定位置,如果没有指定位置,默认插入到规则头部。【示例2】查看当前规则。首先需要使用su命令将当前用户切换为root用户,然后在终端页面输入如下命令:[root@liangxu~]#iptables-nL--line-numberChainINPUT(policyACCEPT)numtargetprotoptsourcedestination1ACCEPTall--0.0.0.0/00.0.0.0/0stateRELATED,ESTABLISHED2ACCEPTicmp--0.0.0.0/00.0.0.0/03ACCEPTall--0.0.0.0/00.0.0.0/04ACCEPTtcp--0.0.0.0/00.0.0.0/0stateNEWtcpdpt:225REJECTall--0.0.0.0/00.0.0.0/0reject-withicmp-host-prohibited。..【例3】在最后添加一行Rules。首先需要使用su命令将当前用户切换为root用户,然后在终端页面输入如下命令:[root@liangxu~]#iptables-AINPUT-s192.168.1.5-jDROP[root@liangxu~]#iptables-nL--line-numberChainINPUT(policyACCEPT)numtargetprotoptsourcedestination1ACCEPTall--0.0.0.0/00.0.0.0/0stateRELATED,ESTABLISHED2ACCEPTicmp--0.0.0.0/00.0.0.0/03接受所有--0.0.0.0/00.0.0.0/04接受tcp--0.0.0.0/00.0.0.0/0状态新tcpdpt:225拒绝所有--0.0.0.0/00.0.0.0/0reject-withicmp-host-prohibited6DROPall--192.168.1.50.0.0.0/03)修改规则修改规则时需要使用-R参数。【例4】将第6行规则中添加的DROP改为ACCEPT。首先需要使用su命令将当前用户切换为root用户,然后在终端页面输入如下命令:[root@liangxu~]#iptables-RINPUT6-s194.168.1.5-jACCEPT[root@liangxu~]#iptables-nL--line-numberChainINPUT(policyACCEPT)numtargetprotoptsourcedestination1ACCEPTall--0.0.0.0/00.0.0.0/0stateRELATED,ESTABLISHED2ACCEPTicmp--0.0.0.0/00.0.0.0/03接受所有--0.0.0.0/00.0.0.0/04接受tcp--0.0.0.0/00.0.0.0/0状态新tcpdpt:225拒绝所有--0.0.0.0/00.0.0.0/0reject-withicmp-host-prohibited6ACCEPTall--194.168.1.50.0.0.0/0对比可知第6行规则的目标已经改为ACCEPT。4)删除规则删除规则有两种方式,但都必须使用-D参数。【例5】删除第6行添加的规则。首先需要使用su命令将当前用户切换为root用户,然后在终端页面输入如下命令:[root@liangxu~]#iptables-DINPUT6-s194.168.1.5-jACCEPT或者[root@liangxu~]#iptables-DINPUT6注意有时候需要删除的规则比较长,删除的时候需要写大量的代码,比较容易写错。这时候可以先用-line-number找到规则的行号,然后通过行号删除规则。防火墙备份与恢复默认的iptables防火墙规则会立即生效,但如果不保存,电脑重启后所有规则都会丢失,所以及时保存防火墙规则是非常有必要的。iptables包提供了两个非常有用的工具,我们可以使用它们来处理大量的防火墙规则。这两个工具是iptables-save和iptables-restore,可以保存和恢复防火墙规则。这两个工具最大的优点是在处理庞大的规则集时速度非常快。CentOS7系统中的防火墙规则默认保存在/etc/sysconfig/iptables文件中。使用iptables-save将规则保存到这个文件可以保存防火墙规则。电脑重启后,会自动加载这个文件中的规则。如果使用iptables-save将规则保存到其他位置,可以达到备份防火墙规则的作用。当需要恢复防火墙规则时,可以使用iptables-restore直接将备份的文件导入到当前的防火墙规则中。1.iptables-save命令iptables-save命令用于批量导出Linux防火墙规则。语法如下:保存在默认文件夹(保存防火墙规则):[root@liangxu~]#iptables-save>/etc/sysconfig/iptables保存在其他位置(备份防火墙规则):[root@liangxu~]#iptables-save>文件名1)直接执行iptables-save命令:显示所有当前启用的规则,按照raw,mangle,nat,filtertable的顺序列出如下:[root@liangxu~]#iptables-save#由iptables-savev1.4.7在ThuAug2707:06:362020*filter:INPUTACCEPT[0:0]:FORWARDACCEPT[0:0]:OUTPUTACCEPT[602:39026]生成......COMMIT#CompletedonThuAug2707:06:362020其中:“#”表示注释;"*filter"表示所在的表;“:chainnamedefaultpolicy”表示对应的链和默认策略,具体规则部分省略命令名“iptables”;最后的“COMMIT”表示提交之前的规则设置。2)备份到其他文件。例如文件:text,如下:[root@liangxu~]#iptables-save>test[root@liangxu~]#lstest[root@bogon~]#cattest#由iptables-savev1.4.7on生成ThuAug2707:09:472020*filter……3)列出nat表的规则内容,命令如下:[root@liangxu~]#iptables-save-tnat"-t表名”:表示列出一个表。2、iptables-restore命令iptables-restore命令可以批量导入Linux防火墙规则,也需要结合重定向输入指定备份文件的位置。命令如下:[root@liangxu~]#iptables-restore<文件名注意导入的文件必须使用iptables-save工具导出。先使用iptables-restore命令恢复文本文件,然后使用iptables-tnat-nvL命令查看清除的规则是否已经恢复,如下图:[root@liangxu~]#iptables-restore
