linux iptables 防火墙

iptables包含有4个表,5个链,链在表中。

4个表:filter,nat,mangle,raw。

默认表是filter(在没有指定表的清空),表的优先级:raw

>mangle>nat>filter.

filter:一般的过滤功能。

nat:用于nat功能(端口映射,地址映射,)

mangle:对特定数据包的修改

raw:有限级最高,设置raw时一般是为了不再让iptables做数据包的链接跟踪处理,提高性能


5个链:PREROUTING,INPUT,FORWARD,OUTPUT,POSTROUTING。

     INPUT:     位于 filter 表,匹配目的 IP 是本机的数据包 
     FORWARD:   位于 filter 表,匹配穿过本机的数据包, 
     PREROUTING: 位于 nat 表,用于修改目的地址(DNAT) 
     POSTROUTING:位于 nat 表,用于修改源地址 (SNAT)


PREROUTING:数据包进入路由表之前

INPUT:通过路由表后目的地为本机

FORWARDING:通过路由表后,目的地不为本机

OUTPUT:由本机产生,向外转发



120807094039061.gif

120807094039062.gif


iptables语法使用:

iptables [-t 表名     <操作命令>   [要操作的链]  [规则号码]      [匹配条件]    [-j 匹配到以后的动作] 

  操作命令:(-A -I -D -R -P -F)

  -A <链名>:增加一条规则(在所有规则的后面)

    例如:iptables -t filter -A INPUT -j DORP  

     #在filter表INPUT链中增加一条规则,匹配所有访问本机ip的数据包,匹配到了就丢弃。

  -I <链名> [规则号码]:插入一条规则

    例如:iptables -I INPUT 3 -j DORP

在filter表INPUT链插入一条规则,插入为第3条,前面必须要有2条规则.如果没有规则号码,默认为1,

 -D <链名> [规则号码|链的内容]:删除一条规则

    例如:iptables -D INPUT 2 

    #删除filter表INPUT链的第2条规则

     iptables -D INPUT -s 192.168.0.1 -j DROP

      删除filter表INPUT链内容为 -s 192.168.0.1 -j DROP 的规则

      若规则列表中有多条相同的规则时,按内容匹配只删除序号最小的一条 

  -R <链名><规则号码><内容>:替换一条规则

    例如:iptables -R INPUT 3 -j ACCEPT

     将规则号3的内容替换为‘-j ACCEPT’

  -P <链名> <动作> :设置某个链的默认规则

   例如:iptables -P INPUT DORP

      设置 INPUT表的默认规则为DROP.如果数据包没有匹配大规则里的任何规则,就匹配默认规则

 -F <链名>:情况规则

  例如:iptables -F INPUT 

     清空INPUT链的所有规则,-F仅是清空链中规则,-P设置的默认规则不被清空。


查看命令 [-(vnx)L]

  -L<链名>:列出规则(一般用iptables -nvL)

   v:显示详细信息

   x:在v的基础上,禁止自动单位换算(K,M)

   n:只显示ip地址和端口,不显示域名和服务

  例如:iptables -nvL   #详细列出filter表所有链的规则

      iptables -t nat -nvL OUTPUT #列出nat表OUTPUT链的规则


匹配条件

-i:流入    -o:流出

-s:来源地址    -d:目的地址

-sport:来源端口 -dport:目的端口

-p:协议类型  


-i和-o(匹配数据从网口的进和出)

-i eth0 #匹配从eth0网口进来的数据包

-o eth1 #匹配从eth1网口出去的数据包


-s(匹配来源地址)可以是ip,网段,域名也可以为空(所有地址)

 -s 192.168.10.130   #匹配来自192.168.10.130的数据包

 -s 192.168.10.130/24 #匹配来自192.168.10.130/24网段的数据包


-d(匹配目的地址)可以是ip,网段,域名也可以为空(所有地址)

 -d www.cong.com 匹配去往域名www.cong.com的数据包


-p(匹配协议类型)可以为tcp udp icmp等,也可为空

 -p tcp

 -p udp


--sport(匹配来源端口)可以是个别端口,也可以是端口范围

 --sport 80 匹配源端口是80的数据包

 --sport 80-8080 匹配源端口80-8080的数据包(含80,8080)

 --sport :80 匹配源端口是80以下的数据包(含80)

 --sport 80: 匹配源端口是80以上的数据包(含80)


--dport(匹配目的端口)可以是个别端口,可以是端口范围

 --dport 80 匹配目的端口是80的数据包

 --dport 80-8080 匹配目的端口80-8080的数据包(含80,8080)

 --dport :80 匹配目的端口是80以下的数据包(含80)

 --dport 80: 匹配目的端口是80以上的数据包(含80)

--sport 和--dport必须配合-p参数使用,必须指明协议类型


匹配举例

iptables -A INPUT -p tcp --dport 80 -j ACCEPT

在INPUT增加一条规则匹配 协议类型为tcp 目的端口为80的规则操作为放行通过

iptables -I OUTPUT -s 192.168.10.12 -d 192.168.10.131 -j ACCEPT

在OUTPUT插入一条 匹配源地址192.168.10.12目的地址192.168.10.131的规则,放行通过 

-s 192.168.10.12 -d www.cong.com -p tcp --dport 80

匹配来自192.168.10.12到www.cong.com 的80端口,tcp协议的数据包


动作/处理方式

 ACCEPT:通过,允许数据包通过,不拦截

 DROP:丢弃,阻止数据包通过本链而丢弃它

 SNAT:源地址转换 可以是单个ip也可以是ip地址池

 DNAT:目的地址转换 可以是单个ip也可以是ip地址池

 MASQUERADE:动态源地址转换

 REDIRECT:用于把数据包转发到另一个端口

 REJECT:和DROP一样,但是DROP不返回信息,REJECT可以返回指定错误信息


-j ACCEPT

  匹配到的数据包允许通过

-j DROP

  匹配到的数据包不允许通过,丢弃

-j SNAT --to ip[-ip:端口-端口](在nat表的POSTROUTING链)

 例:iptables -t nat -A POSTROUTING -s 192.168.10.0/24 -j SNAT --to 1.1.1.1

    iptables -t nat -A POSTROUTING -s 192.168.10.12 -j SNAT --to 1.1.1.1-1.1.1.10


-j DNAT --to ip[-ip:端口-端口](在nat表的PREROUTING链)

iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j DNAT --to 192.168.10.12:80

iptables -t nat -A PREROUTING -d 192.168.10.12 -j DNAT --to 127.0.0.1


-j MASQUERDE

  iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -j MASQUERADE 
 将源地址是 192.168.0.0/24 的数据包进行地址伪装

-j REDIRECT

  iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-port 8080

 访问数据包访问的80端口转换为8080端口

-j REJECT

iptables -A FORWARD -p TCP --dport 22 -j REJECT --reject-with icmp-net-unreachable



附加模块

按包状态匹配(state)

按来源MAC匹配(mac)

按包速率匹配(limit)

多端口匹配(multiport)


state -m state --state状态

状态:

NEW:建立新的连接

RELATED:相关的 

ESTABLISHED:已建立连接

INVALID:无效的


iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT


mac  -m mac --mac-source MAC

     iptables -A FORWARD -m --mac-source xx:xx:xx:xx:xx:xx  -j DROP

  mac地址不能通过路由,所以不要去匹配路由后面的MAC地址


limit  -m limit --limit 速率

  iptables -A FORWARD -d 192.168.10.130 -m limit --limit 50/s -j ACCEPT


multiport (--sports|--dports|--ports)

 iptables -A INPUT -p tcp -m multiports --ports 22,25,80 -j ACCEPT

必须与-p参数一起使用


参考:http://www.jb51.net/os/RedHat/1335.html

    http://www.linuxidc.com/Linux/2012-08/67505.htm

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章