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
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 socket 初步
- linux lsof详解
- linux 文件权限
- Linux 执行数学运算
- 10 篇对初学者和专家都有用的 Linux 命令教程
- Linux 与 Windows 对UNICODE 的处理方式
- Ubuntu12.04下QQ完美走起啊!走起啊!有木有啊!
- 解決Linux下Android开发真机调试设备不被识别问题
- 运维入门
- 运维提升
- Linux 自检和 SystemTap
- Ubuntu Linux使用体验
- c语言实现hashmap(转载)
- Linux 信号signal处理机制
- linux下mysql添加用户
- Scientific Linux 5.5 图形安装教程
- 基于 Linux 集群环境上 GPFS 的问题诊断
- 谁是桌面王者?Win PK Linux三大镇山之宝
- vivi下重新调整分区