一:何为iptables
iptables 准确来说应该叫做网络防火墙规则生成器,工作在网络层,真正的网络防火墙是有iptables和netfilter组成,netfilter工做在内核当中。
二:iptables的表与链
1. Filter表---------- 过滤作用
Filter表示iptables的默认表,因此如果你没有自定义表,那么就默认使用filter表,它具有以下三种内建链: INPUT链 – 处理来自外部的数据。匹配目的ip是本机的数据包 OUTPUT链 – 处理向外发送的数据。匹配从本机出去的数据包 FORWARD链 – 将数据转发到本机的其他网卡设备上。匹配通过本机的数据包,从外部来,通过本机,又转发到外部
2. NAT表------------ 做网络地址转换的(network address translator)
NAT表有三种内建链: PREROUTING链 – 处理刚到达本机并在路由转发前的数据包。它会转换数据包中的目标IP地址(destination ip address),通常用于DNAT(destination NAT)。用于修改目的地址 destination nat POSTROUTING链 – 处理即将离开本机的数据包。它会转换数据包中的源IP地址(source ip address),通常用于SNAT(source NAT)。用于修改源地址 source nat OUTPUT链 – 处理本机产生的数据包。
3. Mangle表--------Mangle表用于指定如何处理数据包。
它能改变TCP头中的QoS位。Mangle表具有5个内建链: PREROUTING OUTPUT FORWARD INPUT POSTROUTING
它具有两个内建链 preroutting output
iptables做路由转发功能时要打开
iptables [-t 表名] 管理选项 [链名] [条件匹配] [-j 目标动作或跳转]
管理选项
-A或—append <链名> 在规则列表的最后增加1条规则 -I或--insert <链名> 在指定的位置插入1条规则,根据给出的规则序号向所选链中插入规则。如果序号为1,规则会被 插入链的头部,默认序号就是1。 -D或--delete <链名> 从规则列表中删除1条规则 -R或--replace <链名> 替换规则列表中的某条规则 -P或--policy <链名> 定义默认策略 -F或--flush <链名> 删除表中所有规则,如果没有指定链,则清空指定表中的所有链。如果什么都没有指定,就清空 默认表所有的链。 -Z或--zero <链名> 将表中数据包计数器和流量计数器归零 -L或--list <链名> 查看iptables规则列表,显示所选链的所有规则。如果没有指定链,则显示指定表中的所有链。如 果什么都没有指定,就显示默认表所有的链。 例:iptables -I FORWARD -s 192.168.1.0/24 -p tcp --dport 21 -j DROP在表filter的FORWARD链序号为1的位置插 入一条拒绝来源IP地址为192.168.1.0网段通过tcp协议访问的目标端口为21的数据包。
条件匹配
1)通用匹配规则
-s 源地址(source) 指定数据包的源地址 参数可以使IP地址、网络地址、主机名 例如:-s 192.168.1.101指定IP地址 例如:-s 192.168.1.10/24指定网络地址 如果不指定-s参数,就代表所有地址 还可以使用–src或者–source -d 目的地址(destination) 指定目的地址 参数和-s相同 还可以使用–dst或者–destination 如:... -d 192.168.1.101 -o 输出(out interface) -o代表”output interface” -o指定了数据包由哪个接口输出 这些数据包即将进入FORWARD, OUTPUT, POSTROUTING链 如果不指定-o选项,那么系统上的所有接口都可以作为输出接口 如果出现! -o eth0,那么将从eth0以外的接口输出 如果出现-i eth+,那么将仅从eth开头的接口输出 还可以使用–out-interface参数 -i 输入接口(input interface) -i代表输入接口(input interface) -i指定了要处理来自哪个接口的数据包 这些数据包即将进入INPUT, FORWARD, PREROUTE链 例如:-i eth0指定了要处理经由eth0进入的数据包 如果不指定-i参数,那么将处理进入所有接口的数据包 如果出现! -i eth0,那么将处理所有经由eth0以外的接口进入的数据包 如果出现-i eth+,那么将处理所有经由eth开头的接口进入的数据包 还可以使用–in-interface参数 -p 协议(protocol) 指定规则的协议,如tcp, udp, icmp等,可以使用all来指定所有协议。 如果不指定-p参数,则默认是all值。这并不明智,请总是明确指定协议名称。 可以使用协议名(如tcp),或者是协议值(比如6代表tcp)来指定协议。映射关系请查看/etc/protocols 还可以使用–protocol参数代替-p参数 如:... -p tcp ; -p udp
2)扩展匹配
隐式扩展
-–sport 源端口(source port)针对 -p tcp 或者 -p udp 缺省情况下,将匹配所有端口 可以指定端口号或者端口名称,例如”-–sport 22″与”-–sport ssh”。 /etc/services文件描述了上述映射关系。 从性能上讲,使用端口号更好 使用冒号可以匹配端口范围,如”–sport 22:100″ 还可以使用”–source-port”如:... -p tcp --sport 22 –-dport 目的端口(destination port)针对-p tcp 或者 -p udp 参数和–sport类似 还可以使用”–destination-port”如:... -p udp --dport 53 -–tcp-flags TCP标志 针对-p tcp 可以指定由逗号分隔的多个参数 有效值可以是:SYN, ACK, FIN, RST, URG, PSH 可以使用ALL或者NONE -–icmp-type ICMP类型 针对-p icmp –icmp-type 0 表示Echo Reply –icmp-type 8 表示Echo
显示扩展
四:清空查看iptables
清空iptables
在配置iptables之前,你通常需要用iptables --list命令或者iptables-save命令查看有无现存规则,因为有时需要删 除现有的iptables规则: iptables --flush 或者 iptables -F 这两条命令是等效的。但是并非执行后就万事大吉了。你仍然需要检查规则是不是真的清空了,因为有的linux发行版 上这个命令不会清除NAT表中的规则,此时只能手动清除 iptables -F INPUT #清空filter表INPUT链中的所有规则 iptables -t nat -F PREROUTING iptables -t nat vxnL PREROUTING --# v: 显示详细信息 --# x: 在v的基础上,禁止自动单位换算 --# n: 只显示IP地址和端口号码,不显示域名和服务名称 iptables -L 查看规则
保存iptables
iptables-save > /etc/iptables.rules
本文出自 “slayer” 博客,请务必保留此出处http://slayer.blog.51cto.com/4845839/1542805
原文:http://slayer.blog.51cto.com/4845839/1542805