iptables总结.docx
- 文档编号:17714238
- 上传时间:2023-08-03
- 格式:DOCX
- 页数:24
- 大小:79.71KB
iptables总结.docx
《iptables总结.docx》由会员分享,可在线阅读,更多相关《iptables总结.docx(24页珍藏版)》请在冰点文库上搜索。
iptables总结
在最近的工作中,要做链接数管理,使用的iptables-netfilter来实现的,在实现的这个功能的过程中,查找了iptables相关的信息,对其有了一定的了解,下面对iptables进行一个小结:
一.iptables简介
1.1iptables的基本概念
在使用iptables之前我们先要理解规则、链、表这3个概念以及iptables传输数据包的过程。
Ø规则
规则(rules)就是网络管理员预先定义的条件,每条规则的定义方式一般是“如果封包符合这样的条件就这样处理该数包”。
Ø链
链(chains)是数据包传输的路径,每一条链中可以有一条或数条规则。
Ø表
iptables内置了filter表、nat表和mangle表用于实现包过滤、网络地址转换和包重构的功能。
(1)filter表
filter表是iptables默认的表,如果没有指定使用哪个表,iptables默认使用filter表来执行所有的命令。
filter表根据系统管理员预定义的一组规则过滤符合条件的数据包。
在filter表中只允许对数据包进行接收、丢弃的操作,而无法对数据包进行更改。
(2)nat表
nat表主要是用于网络地址转换NAT,该表可以实现一对一、一对多、多对多等NAT工作。
NAT表包含了PREROUTING链、OUTPUT链和POSTROUTING链。
其中PREROUTING链用于处理刚刚进入网络层未进行路由判断的数据包,OUTPUT链用于处理在路由之前本地生成的数据包,POSTROUTING链处理在路由判断之后即将通过网卡发送出去的数据包。
(3)mangle表
某些特殊应用可能需要改写数据包的一些传输特性,例如更改数据包的TTL和TOS等,mangle表主要用于对指定包的传输特性进行修改。
1.2iptables数据包的传输过程
数据包通过iptables的具体流程如图2-1所示。
图1-1 iptables数据包传输的过程
由图可知,当一个数据包进入计算机的网络接口时,数据首先进入POSTROUTING链,然后内核根据路由表决定数据包的目标。
若数据包的目的地址是本机,则将数据包送往INPUT链进行规则检查,当数据包进入INPUT链后,系统的任何进程都会收到它,本机上运行的程序可以发送该数据包,这些数据包会经过OUTPUT链,再POSTROUTING链发出;若数据包的目的地址不是本机,则检查内核是否允许转发,若允许,则将数据包送FORWARD链进行规则检查,若不允许,则丢弃该数据包。
若是防火墙主机本地进程产生并准备发出的包,则数据包被送往OUTPUT链进行规则检查。
1.3激活IP包转发功能
如果要把Linux配置成网关防火墙,内核必须打开IP包转发功能(即路由功能),这样一个数据包才能被送到FORWARD链进行规则检查,否则与防火墙相连的两边的网络是完全隔离的。
打开Linux内核包转发功能,可使用以下命令来实现
[root@local~]#echo“1”>/proc/sys/net/ipv4/ip_forward
上述命令只是一次性有效,为了让主机每次开机后都自动激活IP数据包转发功能,可以采用编辑配置文件/etc/sysctl.conf的方法,将其中的语句:
net.ipv4.ip_forward=0更改为net.ipv4.ip_forward=1
执行如下命令:
[root@local~]#sysctl-p
即可让系统启动后自动打开内核的包转发功能。
上述操作也可以通过执行下列命令来实现相应功能:
[root@local~]#sysctl-wnet.ipv4.ip_forward=”1”
[root@local~]#sysctl-p
还可以/etc/sysconfig/network配置文件中,通过以下配置项来开启内核的包转发功能:
FORWARD_IPV4=true
二.iptable的基本语法
2.1iptables的命令格式
iptables用于创建、维护和检查Linux内核的IP包过滤规则,利用该命令可创建、删除或更名链,在链中创建或删除规则,设置链的策略等,功能很强大,用法也比较多,其命令基本格式为:
iptables[-t表名]命令选项[链][匹配选项][操作选项]
1.表名选项
“-t 表名”用来选择要操作的表,表名可以是filter,nat,mangle三者之一,如该参数缺省则默认为filter表。
2.命令选项
命令选项用来指定对链或规则的操作,包括插入、删除、添加规
则等。
iptables的主要命令选项如表2-1所示。
表2-1iptables的主要命令选项
3.链名选项
“链”指定要操作的链名,除使用系统定义的链名外,用户也
可自定义链名。
4.匹配选项
匹配选项指定数据包与规则匹配所应具有的特征,包括源地址、目的地址、传输协议和端口号等。
主要的匹配选项如表2-2所示。
2-2iptables的主要匹配项
5.操作选项
操作选项用于指定对匹配过滤规则的数据包所进行的处理。
其形式为“-jtarget/jump”,其中“target”是对包的处理动作,“jump”代表一个用户自定义的链名,用于跳转到该链进行规则检查。
对数据常用的处理动作如表2-3所示。
表2-3iptables的主要目标动作选项
2.2iptables命令的使用
1.对链的操作
(1)查看链
命令用法:
iptables-L[链]
命令功能:
列出指定表的全部链及其规则
例:
列出filter表的全部规则链。
[root@local~]#iptables-L
若要列出nat表的全部规则链,则操作命令为:
[root@local~]#iptables-tnat-L
(2)创建新链
命令用法:
iptables-N链名
命令功能:
以指定的名称创建一个新链
例:
创建一个名为mychain的新链。
[root@local~]#iptables-N mychain
(3)删除链
命令用法:
iptables-X链名
命令功能:
删除指定的用户自定义链
例:
删除新建的mychain链。
[root@local~]#iptables-X mychain
2.对规则的操作
(1)添加规则
命令用法:
iptables [-t表名]-A链名 匹配选项 -j 动作
命令功能:
向指定链的添加一条规则,该规则将会增加到规则列表的最后一行。
例:
向filter表的INPUT链添加一条规则,将来自IP地址为192.168.1.1这台主机的数据包都丢弃。
[root@local~]#iptables-tfilter-AINPUT-s192.168.1.1-jDROP
[root@local~]#iptables-tfilter-LINPUT
(2)插入规则
命令用法:
iptables [-t表名]-I链名 规则号 匹配选项 -j 动作
命令功能:
在指定的规则号的前面插入一条规则,原规则将自动后移。
若未指定规则号,则默认为1,即插入在所有规则的前面。
例:
在第3条规则前插入一条规则,其内容是禁止192.168.2.0子网段的所有用户访问本机TCP协议的80端口。
[root@local~]#iptables-IINPUT3-s192.168.2.0/24-ptcp--dport80–jDROP
[root@local~]#iptables-LINPUT
例:
在第4条规则前插入一条规则,拒绝所有主机PING本机。
[root@local~]#iptables–IINPUT4–s0/0 -picmp--icmp-typeecho-request–jDROP
[root@local~]#iptables-LINPUT
ChainINPUT(policyACCEPT)
targetprotoptsourcedestination
RH-Firewall-1-INPUTall--anywhereanywhere
DROPall--192.168.1.1anywhere
DROPtcp--192.168.2.0/24anywheretcpdpt:
http
DROPicmp--anywhereanywhereicmpecho-request
ACCEPTall--192.168.1.1anywhere
在该命令中,“-s0/0”用于指定源地址为所有主机,“--icmp-type”用于指定icmp包的类型,“echo-request”代表ping包。
(3)替换规则
命令用法:
iptables [-t表名]-R链名 规则号 匹配选项 -j 动作
命令功能:
将指定编号的规则替换为新的规则。
例:
将上例中的第3条规则替换为允许192.168.2.0子网段的所有用户访问本机TCP协议的80端口。
[root@local~]#iptables-IINPUT3-s192.168.2.0/24-ptcp--dport80–jACCEPT
[root@local~]#iptables-LINPUT
(4)删除规则
命令用法:
iptables [-t表名]-D链名 匹配选项 -j 动作
或:
iptables [-t表名]-D链名 规则号
命令功能:
删除指定的规则或指定编号的规则
例:
删除上例中被替换的第3条规则。
[root@local~]#iptables-DINPUT-s192.168.2.0/24-ptcp--dport80-j ACCEPT
或:
[root@local~]#iptables-DINPUT3
(5)设置链的默认策略
命令用法:
iptables[-t表名]-P链名目标动作
命令功能:
定义指定链的默认策略,即设置所有过滤规则都不满足的数据包的默认处理方式。
例:
将INPUT、FORWARD和OUTPUT链的默认策略设置为ACCEPT。
[root@local~]#iptables-PINPUTACCEPT
[root@local~]#iptables-PFORWARDACCEPT
[root@local~]#iptables-POUTPUTACCEPT
(6)清除规则链中的所有规则
在新建规则时往往需要清除原有的规则,以免它们影响新设定的规则。
如果规则比较多,一条条删除就会十分麻烦这时可以使用iptables提供的清除规则选项达到快速删除所有规则的目的。
命令用法:
iptables[-t表名]-F链名
命令功能:
删除指定链中的全部规则,若未指定链,则删除表中所有链中的规则。
例:
清除filter表中INPUT链中的全部规则。
[root@local~]#iptables-FINPUT
(7)归零包计数器
命令用法:
iptables[-t表名]-Z
命令功能:
将指定表中的包计数器和流量计数器清零,如不指定表,则默认为filter表。
例:
将filter表中的所有包计数器清零。
[root@local~]#iptables-Z
若要将nat表中的所有包计数器清零,则实现命令为:
[root@local~]#iptables-tnat-Z
3.iptable–h分析
iptablesv1.4.1.1
Usage:
iptables-[AD]chainrule-specification[options]
iptables-[RI]chainrulenumrule-specification[options]//用iptables-RI通过规则的顺序指定
iptables-Dchainrulenum[options] //删除指定规则
iptables-[LS][chain[rulenum]][options] //用iptables-LFZ链名[选项]
iptables-[FZ][chain][options]
iptables-[NX]chain //用-NX指定链
iptables-Eold-chain-namenew-chain-name //-E用新的链名取代旧的链名
iptables-Pchaintarget[options] //指定链的默认目标
iptables-h(printthishelpinformation) //帮助
//这些选项指定执行明确的动作:
若指令行下没有其他规定,该行只能指定一个选项.对于长格式的命令和选项名,所用字母长度只要保证iptables能从其他选项中区分出该指令就行了
Commands:
Eitherlongorshortoptionsareallowed.
--append-Achain Appendtochain//在所选择的链末添加一条或更多规则
--delete-Dchain Deletematchingrulefromchain//从所选链中删除一条或更多规则
--delete-Dchainrulenum //从所选链中删除一条或更多规则。
这条命令可以有两种方法:
可以把被删除规则指定为链中的序号(第一条序号为1),或者指定为要匹配的规则
Deleterulerulenum(1=first)fromchain
--insert-Ichain[rulenum] //根据给出的规则序号向所选链中插入一条或更多规则。
所以,如果规则序号为1,规则会被插入链的头部。
这也是不指定规则序号时的默认方式。
Insertinchainasrulenum(default1=first)
--replace-Rchainrulenum //从选中的链中取代一条规则,如果源(地址)或者/与目的(地址)被转换为多地址,该命令会失败。
规则序号从1开始
Replacerulerulenum(1=first)inchain
--list-L[chain[rulenum]] //显示所选链的所有规则。
如果没有选择链,所有链将被显示。
也可以和z选项一起使用,这时链会被自动列出和归零。
精确输出受其它所给参数影响
Listtherulesinachainorallchains
--list-rules-S[chain[rulenum]]
Printtherulesinachainorallchains
--flush-F[chain] Deleteallrulesinchainorallchains//清空所选链。
这等于把所有规则一个个的删除
--zero-Z[chain] Zerocountersinchainorallchains//把所有链的包及字节的计数器清空。
它可以和-L配合使用,在清空前察看计数器,请参见前文。
--new-Nchain Createanewuser-definedchain//根据给出的名称建立一个新的用户定义链。
这必须保证没有同名的链存在
--delete-chain //删除指定的用户自定义链。
这个链必须没有被引用,如果被引用,在删除之前你必须删除或者替换与之有关的规则。
如果没有给出参数,这条命令将试着删除每个非内建的链。
-X[chain] Deleteauser-defined chain //清除mangle表中,所有规则链中的规则
--policy-Pchaintarget //设置链的目标规则
Changepolicyonchaintotarget
--rename-chain
-Eold-chainnew-chain //根据用户给出的名字对指定链进行重命名,这仅仅是修饰,对整个表的结构没有影响。
TARGETS参数给出一个合法的目标。
只有非用户自定义链可以使用规则,而且内建链和用户自定义链都不能是规则的目标
Changechainname,(movinganyreferences)
//这些可被iptables识别的选项可以区分不同的种
Options:
--proto -p[!
]proto protocol:
bynumberorname,eg.'tcp'//规则或者包检查(待检查包)的协议。
指定协议可以是tcp、udp、icmp中的一个或者全部,也可以是数值,代表这些协议中的某一个。
当然也可以使用在/etc/protocols中定义的协议名。
在协议名前加上"!
"表示相反的规则。
数字0相当于所有all。
Protocolall会匹配所有协议,而且这是缺省时的选项。
在和check命令结合时,all可以不被使用。
--source -s[!
]address[/mask] //指定源地址,可以是主机名、网络名和清楚的IP地址。
mask说明可以是网络掩码或清楚的数字,在网络掩码的左边指定网络掩码左边"1"的个数,因此,mask值为24等于255.255.255.0。
在指定地址前加上"!
"说明指定了相反的地址段。
标志--src是这个选项的简写。
sourcespecification
--destination-d[!
]address[/mask] //指定目标地址,要获取详细说明请参见-s标志的说明
destinationspecification
--in-interface-i[!
]inputname[+]
networkinterfacename([+]forwildcard)
--jump -jtarget //目标跳转,指定规则的目标;也就是说,如果包匹配应当做什么。
目标可以是用户自定义链(不是这条规则所在的),某个会立即决定包的命运的专用内建目标,或者一个扩展(参见下面的EXTENSIONS)。
如果规则的这个选项被忽略,那么匹配的过程不会对包产生影响,不过规则的计数器会增加。
targetforrule(mayloadtargetextension)
--goto-gchain
jumptochainwithnoreturn
--match -mmatch
extendedmatch(mayloadextension)
--numeric -n numericoutputofaddressesandports
--out-interface-o[!
]outputname[+] //输出接口[名称],这是包经由该接口送出的可选的出口名称,包通过该口输出(在链FORWARD、OUTPUT和POSTROUTING中送出的包)。
当在接口名前使用"!
"说明后,指的是相反的名称。
如果接口名后面加上"+",则所有以此接口名开头的接口都会被匹配。
如果这个选项被忽略,会假设为"+",那么将匹配所有任意接口。
networkinterfacename([+]forwildcard)
--table -ttable tabletomanipulate(default:
'filter') //指定表名
--verbose -v verbosemode
--line-numbers printlinenumberswhenlisting
--exact -x expandnumbers(displayexactvalues)
[!
]--fragment -f matchsecondorfurtherfragmentsonly//这意味着在分片的包中,规则只询问第二及以后的片。
自那以后由于无法判断这种把包的源端口或目标端口(或者是ICMP类型的),这类包将不能匹配任何指定对他们进行匹配的规则。
如果"!
"说明用在了"-f"标志之前,表示相反的意思。
--modprobe=
--set-countersPKTSBYTES setthecounterduringinsert/append
[!
]--version -V printpackageversion.
4.保存与恢复过滤规则
用上述方法所建立的规则会被保存到内核中,在重启系统时,会丢失这些规则。
所以如果用户将没有错误且有效的规则集添加到数据包过滤表,则时希望在重启系统之后再次使用这些规则,必须将该规则集保存在文件中。
其命令为:
[root@local~]#iptables-save>/etc/sysconfig/iptables
将数据包过滤表中的所有规则保存到/etc/sysconfig/iptables脚本文件中以后,无论何时重启系统,都可以使用iptables-restore命令将规则集从该脚本文件恢复到数据包过滤表。
其命令为:
[root@lal~]#iptables-restore
如果用户希望在每次启动系统时自动恢复该规则集,可以将上面指定的这条命令放到任何一个初始化shell脚本中,或如下的命令来保存规则:
[root@local~]#serviceiptablessave
三.iptables的具体应用
1.linux之具体应用
#ICMP相关应用
使自己不能ping通127.0.
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- iptables 总结