您的位置:首页 > 运维架构 > Linux

linux iptables 防火墙

2015-11-23 20:13 549 查看
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:由本机产生,向外转发








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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  linux 防火墙 iptables