转自:http://www.51ou.com/browse/redhat/34596.html
比较好的资料:
http://blog.chinaunix.net/uid-26495963-id-3279216.html
http://www.linuxso.com/linuxpeixun/10332.html
iptables结构:
Rules(规则)-> Chains(链) -> Tables ->iptables
iptables由Tables(表)组成,Tables(表)由Chains(链)组成,Chains(链)由Rules(规则)组成。iptables表从上到下匹配,头一个规则如果匹配了,下一个相关规则无效, 表和链中的规则是从上到下都顺序来匹配的,前面的优先于后面的。Rules(规则)包括一个条件和一个目标(target),如果满足条件,就执行目标(target)中的规则或者特定值,如果不满足条件,就判断下一条Rules。
iptables相关文件路径:
启动脚本:/etc/rc.d/init.d/iptables ;
规则文件:/etc/sysconfig/iptables ;
配置文件:/etc/sysconfig/iptables-config
iptables命令书写原则:
链名 必须 大写
表名 必须 小写
动作 必须 大写
匹配 必须 小写
iptables命令格式:
iptables [-t 表名] 管理选项 [链名] [条件匹配] [-j 目标动作或跳转]
表选项用于指定命令应用于哪个iptables内置表,iptables内置包括filter表、nat表、mangle表和Raw表。
iptables的表与链:
1. 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表------指定如何处理数据包,它能改变TCP头中的QoS位。
Mangle表具有5个内建链:PREROUTING、OUTPUT、FORWARD、INPUT、POSTROUTING
4. Raw表------用于处理异常
Raw具有2个内建链:PREROUTING chain、OUTPUT chain
目标参数-j:
-j指定了当与规则(Rule)匹配时如何处理数据包,可能的值是ACCEPT, DROP, QUEUE, RETURN,还可以指定其他链(Chain)作为目标
ACCEPT – 允许防火墙接收数据包
DROP – 防火墙丢弃包
QUEUE – 防火墙将数据包移交到用户空间
RETURN – 防火墙停止执行当前链中的后续Rules,并返回到调用链(the calling chain)中。
REDIRECT -将数据包重新转向到本机或另一台主机的某个端口,通常用功能实现透明代理或对外开放内网某些服务
SNAT -源地址转换,即改变数据包的源地址
DNAT -目标地址转换,即改变数据包的目的地址
条件规则参数:
-A或—append <链名> 在规则列表的最后增加1条规则
-I或--insert <链名> 在指定的位置插入1条规则,根据给出的规则序号向所选链中插入规则。如果序号为1,规则会被插入链的头部,默认序号就是1。
-D或--delete <链名> 从规则列表中删除1条规则
-R或--replace <链名> 替换规则列表中的某条规则
-P或--policy <链名> 定义默认策略
-F或--flush <链名> 删除表中所有规则,如果没有指定链,则清空指定表中的所有链。如果什么都没有指定,就清空默认表所有的链。
-Z或--zero <链名> 将表中数据包计数器和流量计数器归零
-L或--list <链名> 查看iptables规则列表,显示所选链的所有规则。如果没有指定链,则显示指定表中的所有链。如果什么都没有指定,就显示默认表所有的链。
描述规则参数:
-p 协议(protocol)
指定规则的协议,如tcp, udp, icmp等,可以使用all来指定所有协议。如果不指定-p参数,则默认是all值。可以使用协议名(如tcp),或者是协议值(比如6代表tcp)来指定协议。映射关系请查看/etc/protocols还可以使用–protocol参数代替-p参数,如-p tcp
-s 源地址(source)
指定数据包的源地址,参数可以使IP地址、网络地址、主机名,例如:-s 192.168.1.101指定IP地址,-s 192.168.1.10/24指定网络地址,如果不指定-s参数,就代表所有地址,还可以使用–src或者–source
[root@51ou.com ~]# iptables -A INPUT -s 127.0.0.1 -d 127.0.0.1 -j ACCEPT
-d 目的地址(destination)
指定目的地址,参数和-s相同,还可以使用–dst或者–destination如:... -d 192.168.1.101
-i 输入接口(input interface)
-i代表输入接口(input interface),-i指定了要处理来自哪个接口的数据包,这些数据包即将进入INPUT, FORWARD, PREROUTE链
例如:-i eth0指定了要处理经由eth0进入的数据包,如果不指定-i参数,那么将处理进入所有接口的数据包,如果出现! -i eth0,那么将处理所有经由eth0以外的接口进入的数据包,如果出现-i eth+,那么将处理所有经由eth开头的接口进入的数据包,还可以使用–in-interface参数
-o 输出(out interface)
-o代表”output interface”,-o指定了数据包由哪个接口输出,这些数据包即将进入FORWARD, OUTPUT, POSTROUTING链,如果不指定-o选项,那么系统上的所有接口都可以作为输出接口,如果出现! -o eth0,那么将从eth0以外的接口输出,如果出现-i eth+,那么将仅从eth开头的接口输出,还可以使用–out-interface参数
-m(multiport):
表示启用多端口扩展,之后我们就可以启用比如 --dports21,23,80。可以使用扩展模块来进行数据包的匹配,语法为 -m module_name, 如:-m tcp 的意思是使用 tcp 扩展模块的功能 (tcp扩展模块提供了 --dport, --tcp-flags, --sync等功能)
--state :
指定要匹配数据包的状态,有4种状态:INVALID、ESTABLISHED、NEW和RELATED。这个匹配操作必须由-mstate明确指定才能使用
[root@51ou.com ~]# iptables -A INPUT -m state
--state ESTABLISHED,RELATED -j ACCEPT
-–sport 源端口(source port)------针对 -p tcp 或者 -p udp
缺省情况下,将匹配所有端口,可以指定端口号或者端口名称,例如”–sport 22″与”–sport ssh”。/etc/services文件描述了上述映射关系。从性能上讲,使用端口号更好,使用冒号可以匹配端口范围,如”–sport 22:100″
–-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规则:
[root@51ou.com ~]# iptables --list ;默认filter表
[root@51ou.com ~]# iptables -L FORWARD ;查看filter表FORWARD链规则
[root@51ou.com ~]# iptables -L -n //只显示IP地址和端口号,不将ip解析为域名
v:显示详细信息,包括每条规则的匹配包数量和匹配字节数
x:在 v 的基础上,禁止自动单位换算(K、M)
n:只显示IP地址和端口号,不将ip解析为域名
清除现有iptables规则:
[root@51ou.com ~]# iptables -F
[root@51ou.com ~]# iptables -L ;查看现有iptables规则
[root@51ou.com ~]# iptables -t nat -F PREROUTING //清除nat表PREROUTING链中规则
-F 清除所有规则链的规则
-X 清除自定链中的规则
添加iptables规则:
[root@51ou.com ~]# iptables -I INPUT -p tcp --dport 5901 -j ACCEPT
[root@51ou.com ~]# iptables -I INPUT -p tcp --dport 5801 -j ACCEPT
保存iptables规则:
[root@51ou.com ~]# /etc/rc.d/init.d/iptables save
或者
[root@51ou.com ~]# service iptables save
iptables实例:
1、禁止访问某网站
添加iptables规则禁止用户访问IP地址为10.15.72.74的网站,然后查看filter表的FORWARD链规则列表。
[root@51ou.com ~]# iptables -t filter -I FORWARD -d 10.15.72.74 -j DROP
[root@51ou.com ~]# iptables -L FORWARD
Chain FORWARD (policy ACCEPT)
target prot opt source destination
DROP all -- anywhere 10.15.72.74
[root@51ou.com ~]#
2、禁止某主机上网
添加iptables规则禁止192.168.2.0子网里所有的客户机上网,然后查看filter表的FORWARD链规则列表。
[root@51ou.com ~]# iptables -I FORWARD -s 192.168.2.0/24 -j DROP
[root@51ou.com ~]# iptables -L FORWARD
Chain FORWARD (policy ACCEPT)
target prot opt source destination
DROP all -- 192.168.2.0/24 anywhere
DROP all -- anywhere 10.15.72.74
3、禁止主机访问某些服务
禁止192.168.1.0子网里所有的客户机使用FTP协议下载(即封闭TCP协议的21端口),然后查看filter表的FORWARD链规则列表。
[root@51ou.com ~]# iptables -I FORWARD -s
192.168.1.0/24 -p tcp --dport 21 -j DROP
[root@51ou.com ~]# iptables -L FORWARD
Chain FORWARD (policy ACCEPT)
target prot opt source destination
DROP tcp -- 192.168.1.0/24 anywhere tcp dpt:ftp
DROP all -- 192.168.2.0/24 anywhere
DROP all -- anywhere 10.15.72.74
[root@51ou.com ~]#
4、强制访问指定的站点
强制所有的客户机访问10.15.72.75这台Web服务器,然后查看nat表的PREROUTING链规则列表。
[root@51ou.com ~]# iptables -t nat -I PREROUTING -i
eth0 -p tcp --dport 80 -j DNAT --to 10.15.72.75:80
[root@51ou.com ~]# iptables -L FORWARD
发布内网192.168.16.200主机的Web服务,Internet用户通过访问ppp0的IP地址即可访问该主机的Web服务
[root@51ou.com ~]# iptables -t nat -I PREROUTING -i
ppp0 -p tcp --dport 80 -j DNAT --to-destination 192.168.16.200:80
[root@51ou.com ~]# iptables -t nat -L PREROUTING
Chain PREROUTING (policy ACCEPT)
target prot opt source destination
DNAT tcp -- anywhere anywhere tcp dpt:http to:192.168.16.200:80
DNAT tcp -- anywhere anywhere tcp dpt:http to:10.15.72.75:80
TIPS:
DNAT------destination network address translation,即目标网络地址转换
实例说明:有个web服务器放在内网配置内网ip,前端有个防火墙配置公网ip,互联网上的访问者使用公网ip来访问这个网站,当访问的时候,客户端发出一个数据包,这个数据包的报头里边,目标地址写的是防火墙的公网ip,防火墙会把这个数据包的报头改写一次,将目标地址改写成web服务器的内网ip,然后再把这个数据包发送到内网的web服务器上,这样,数据包就穿透了防火墙,并从公网ip变成了一个对内网地址的访问了,即DNAT,基于目标的网络地址转换
SNAT------source network address translation,即源地址目标转换
实例说明:多个PC机使用ADSL路由器共享上网,每个PC机都配置了内网IP,PC机访问外部网络的时候,路由器将数据包的报头中的源地址替换成路由器的ip,当外部网络的服务器比如网站web服务器接到访问请求的时候他的日志记录下来的是路由器的ip地址,而不是pc机的内网ip,这是因为,这个服务器收到的数据包的报头里边的“源地址”,已经被替换了,即SNAT,基于源地址的地址转换
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/29519108/viewspace-1821668/
,如需转载,请注明出处,否则将追究法律责任。