Iptables工具的使用
—iptables指令参数
iptables命令在使用上有些复杂,但是如果一定规律发现还是没那么难懂的。
iptables指令可以划分为两个部分,一个是“iptables指令参数”,另一个是“规则语法”。这里先分析“iptables指令参数”。
(一)、iptables命令参数
对于上图进行解释:
iptables为iptsbles命令
-tTABLE为选择Netfilter内部命令结构默认为FilterTables。目前TABLE有四个选项filter、nat、mangle和raw四种。
Filter为netfilter内部最重要的机制,其任务为执行封包的过滤动作,也就是防火墙的功能。
Nat为NAT(NetworkAddress Translation)也是防火墙上衣个不可或缺的重要机制,其功能用通俗的方式来说,就是IP分享器,只不过其所能执行的功能比访问的IP分享器功能强大了许多。
Mangle我们可以借助mangle机制修改行经防火墙内的封包内容。
Raw负责加快封包穿越防火墙机制的速度,借此提高防火墙的性能。
Filter的操作方式:
-L列出Table内容
-F清除Table内容
-A加入新的规则
-P设定DefaultPilicy
-l插入新的规则
-R取代规则
-D删除规则
(二)、FilterTable的操作
举例1:[root@guo~]#iptables -t filter -L
将filterTables的所有内容列出来 。
[root@guo~]#iptables -t filter -L
ChainINPUT (policy ACCEPT) ------------ INPUTChain的所有内容。目前INPUTChain的DefaltChain状态为ACCEPT
target prot opt source destination
ACCEPT udp -- anywhere anywhere udp dpt:domain
ACCEPT tcp -- anywhere anywhere tcp dpt:domain
ACCEPT udp -- anywhere anywhere udp dpt:bootps
ChainFORWARD (policy ACCEPT) ----------- FORWARDChain的所有内容。目前FORWORDChain的DefaltChain状态为ACCEPT
target prot opt source destination ACCEPT all -- anywhere 192.168.122.0/24 stateRELATED,ESTABLISHED
ACCEPT all -- 192.168.122.0/24 anywhere
ACCEPT all -- anywhere anywhere REJECT all -- anywhere anywhere reject-withicmp-port-unreachable
REJECT all -- anywhere anywhere reject-withicmp-port-unreachable
REJECT all -- anywhere anywhere reject-withicmp-host-prohibited
ChainOUTPUT (policy ACCEPT) --------------- OUTPUT Chain的所有内容,此时为空,表示目前没有规则。目前OUTPUTChain 的DefaltChain状态为ACCEPT
target prot opt source destination
由上面可知:FilterTable包含三种Chain:INPUTChain、OUPUTChain、FORWORDChain。
举例2:[root@guo~]# iptables -t filter -L INPUT
把filterTable中的INPUTChain内容列出来
[root@guo~]# iptables -t filter -L INPUT
ChainINPUT (policy ACCEPT)
target prot opt source destination
ACCEPT udp -- anywhere anywhere udp dpt:domain
ACCEPT tcp -- anywhere anywhere tcp dpt:domain
ACCEPT udp -- anywhere anywhere udp dpt:bootps
ACCEPT tcp -- anywhere anywhere tcp dpt:bootps
举例
3
:
[root@guo~]# iptables -t filter -F
将filterTable中的所有内容清除
[root@guo~]# iptables -t filter -F
[root@guo~]# iptables -t filter -L
ChainINPUT (policy ACCEPT)
target prot opt source destination
ChainFORWARD (policy ACCEPT)
target prot opt source destination
ChainOUTPUT (policy ACCEPT)
target prot opt source destination
举例
4
:
[root@guo~]# iptables -t filter -A INPUT -p icmp -j ACCEPT
把规则加入到FilterTabie的INPUTChain中
解释:-AINOUT将规则将如到INOUTChain中
规则:-picmp -j ACCEPT为本次将如到INPUTChain的规则,匹配icmp协议
封包,-jACCEPT将符合条件的封包以特定的方式处理,这里为ACCEPT。
[root@guo~]# iptables -t filter -A INPUT -p icmp -j ACCEPT
[root@guo~]# iptables -t filter -L INPUT
ChainINPUT (policy ACCEPT)
target prot opt source destination
ACCEPT icmp -- anywhere anywhere
举例
5
:
[root@guo~]# iptables -t filter -P FORWARD DROP
-PFORWARD DROP:本次所要设定的FORWARDChain为Policy。
[root@guo~]# iptables -t filter -P FORWARD DROP
[root@guo~]# iptables -t filter -L FORWARD
ChainFORWARD (policy DROP) ------------此时FPRWARDChain的DefaultPolicy已经设置为DROP。注意iptables中的-F不会影响到DefaultPolicy的值,若要改
DefaultPolicy的状态,一定要是用-P的参数来设定。
target prot opt source destination
举例
6
:
[root@guo~]# iptables -tfilter -I INPUT 2 -p tcp -j ACCEPT
在INPUTChain内插入新规则INPUT2表示插在第二行
[root@guo~]# iptables -tfilter -I INPUT 2 -p tcp -j ACCEPT
[root@guo~]# iptables -tfilter -L
ChainINPUT (policy ACCEPT)
target prot opt source destination
ACCEPT icmp -- anywhere anywhere
ACCEPT tcp -- anywhere anywhere
ChainFORWARD (policy DROP)
target prot opt source destination
ChainOUTPUT (policy ACCEPT)
target prot opt source destination
[root@guo~]# iptables -t filter -L INPUT –line-number ---------在-L参数后方加–line-number的参数,这样会在规则的前方加上行号
ChainINPUT (policy ACCEPT)
num target prot opt source destination
1 ACCEPT udp -- anywhere anywhere udpdpt:domain
2 ACCEPT tcp -- anywhere anywhere tcpdpt:domain
3 ACCEPT udp -- anywhere anywhere udpdpt:bootps
4 ACCEPT tcp -- anywhere anywhere tcpdpt:bootps
5 ACCEPT all -- anywhere anywhere stateRELATED,ESTABLISHED
举例7
:
[root@guo~]# iptables -t filter -R INPUT 3 -p tcp -j ACCEPT
取代INPUTChain已经存在的规则,3表示取代第桑三条规则,-ptcp -j ACCEPT
以本规则取代原有的规则。
[root@guo~]# iptables -t filter -L INPUT
ChainINPUT (policy ACCEPT)
target prot opt source destination
ACCEPT icmp -- anywhere anywhere
ACCEPT udp -- anywhere anywhere udp dpt:domain
ACCEPT icmp -- anywhere anywhere
ACCEPT tcp -- anywhere anywhere tcp dpt:domain
[root@guo~]# iptables -t filter -R INPUT 3 -p tcp -j ACCEPT
[root@guo~]# iptables -t filter -L INPUT
ChainINPUT (policy ACCEPT)
target prot opt source destination
ACCEPT icmp -- anywhere anywhere
ACCEPT udp -- anywhere anywhere udp dpt:domain
ACCEPT tcp -- anywhere anywhere --------- 已被取代
ACCEPT tcp -- anywhere anywhere tcp dpt:domain
举例8
:
[root@guo~]# iptables -t filter -D INPUT 2
删除INPUTChain内已经存在的规则
-D INPUT删除INPUTChain已经存在的规则
2删除原有的第二条规则
[root@guo~]# iptables -t filter -L INPUT
ChainINPUT (policy ACCEPT)
target prot opt source destination
ACCEPT icmp -- anywhere anywhere
ACCEPT udp -- anywhere anywhere udp dpt:domain -----删除
ACCEPT tcp -- anywhere anywhere
ACCEPT tcp -- anywhere anywhere tcp dpt:domain
[root@guo~]# iptables -t filter -D INPUT 2 ---- 删除
[root@guo~]# iptables -t filter -L INPUT ----- 删除成功
ChainINPUT (policy ACCEPT)
target prot opt source destination
ACCEPT icmp -- anywhere anywhere
ACCEPT tcp -- anywhere anywhere
ACCEPT tcp -- anywhere anywhere tcp dpt:domain
(三)、
NATTable
的操作
举例1、[root@guo~]# iptables -t nat -L
查看NATTable的内容
[root@guo~]# iptables -t nat -L
ChainPREROUTING (policy ACCEPT)
target prot opt source destination
ChainPOSTROUTING (policy ACCEPT)
target prot opt source destination
MASQUERADE tcp -- 192.168.122.0/24 !192.168.122.0/24 masq ports:1024-65535
MASQUERADE udp -- 192.168.122.0/24 !192.168.122.0/24 masq ports:1024-65535
MASQUERADE all -- 192.168.122.0/24 !192.168.122.0/24
ChainOUTPUT (policy ACCEPT)
target prot opt source destination
由上面可知
NATTable
也有三个
Chain
,分别为
PREROUTINGChain
、
POSTROUTINGChain
和
OUTPUT
。
举例2:root@guo~]# iptables -t nat -A POSTROUTING -o eth0 -s 192.168.0.0/24 -jSNAT --to 222.24.21.168
将规则--oeth0 -s 192.168.0.0/24 -j SNAT --to 222.24.21.168加入到POSTROUTING Chain中。
[root@guo~]# iptables -t nat -A POSTROUTING -o eth0 -s 192.168.0.0/24 -j SNAT--to 222.24.21.168
[root@guo~]# iptables -t nat -L
ChainPREROUTING (policy ACCEPT)
target prot opt source destination
ChainPOSTROUTING (policy ACCEPT)
target prot opt source destination
SNAT all -- 192.168.0.0/24 anywhere to:222.24.21.168 --证明已经成功
ChainOUTPUT (policy ACCEPT)
target prot opt source destination
(四)、
MangleTable
的操作
[举例1、root@guo~]# iptables -t mangle -L
把MangleTable的内容列出
root@guo~]# iptables -t mangle -L
ChainPREROUTING (policy ACCEPT)
target prot opt source destination
ChainINPUT (policy ACCEPT)
target prot opt source destination
ChainFORWARD (policy ACCEPT)
target prot opt source destination
ChainOUTPUT (policy ACCEPT)
target prot opt source destination
ChainPOSTROUTING (policy ACCEPT)
target prot opt source destination
CHECKSUM udp -- anywhere anywhere udp dpt:bootpcCHECKSUM fill
有上面可以看出:
MangleTable
包含五种
Chain
:
PREROUTINGChain
、
INPUTChain
、
FORWARDChain
、
OUTPUTChain
和
POSTROUTINGChain
。
举例2:[root@guo~]# iptables -t mangle -A INPUT -p icmp -j ACCEPT
将规则-p icmp -j ACCEPT将如到INPUTChain中
[root@guo~]# iptables -t mangle -A INPUT -p icmp -j ACCEPT
[root@guo~]# iptables -t mangle -L INPUT
ChainINPUT (policy ACCEPT)
target prot opt source destination
ACCEPT icmp -- anywhere anywhere --- 查看已经添加成功
(五)、
RAWTable
的操作
举例1、[root@guo~]# iptables -t raw -L
列出RAWTables内容
[root@guo~]# iptables -t raw -L
ChainPREROUTING (policy ACCEPT)
target prot opt source destination
ChainOUTPUT (policy ACCEPT)
target prot opt source destination
由上面可以看出
RAWTables
包含两种
Chain
:
PREROUTINGChain
和
OUTPUTChain
。
举例2:[root@guo~]# iptables -t raw -A OUTPUT -p tcp -j ACCEPT
将规则-p tcp -jACCEPT加入到OUTPUTChain中去
[root@guo~]# iptables -t raw -A OUTPUT -p tcp -j ACCEPT
[root@guo~]# iptables -t raw -L OUTPUT
ChainOUTPUT (policy ACCEPT)
target prot opt source destination
ACCEPT tcp -- anywhere anywhere --查看已存在
(六)、由上面可以总结出
Netfilter
的结构图