ITPub博客

首页 > Linux操作系统 > Linux操作系统 > iptables

iptables

Linux操作系统 作者:studywell 时间:2015-11-03 16:06:32 0 删除 编辑

转自: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/ ,如需转载,请注明出处,否则将追究法律责任。

上一篇: linux系统ACL控制
请登录后发表评论 登录
全部评论

注册时间:2014-03-04

  • 博文量
    307
  • 访问量
    535421