码迷,mamicode.com
首页 > 其他好文 > 详细

iptables的资料整理

时间:2015-04-27 15:27:16      阅读:175      评论:0      收藏:0      [点我收藏+]

标签:iptables

iptables命令可用于配置Linux的包过滤规则,常用于实现防火墙、NAT。通过以下两张图来便于我们理解iptables的原理。

常用选项:

-t<表>:指定要操纵的表;
-A:向规则链中添加条目;
-D:从规则链中删除条目;
-I:向规则链中插入条目;
-R:替换规则链中的条目;
-L:显示规则链中已有的条目;
-F:清楚规则链中已有的条目;
-Z:清空规则链中的数据包计算器和字节计数器;
-N:创建新的用户自定义规则链;
-P:定义规则链中的默认目标;
-h:显示帮助信息;
-p:指定要匹配的数据包协议类型;
-s:指定要匹配的数据包源ip地址;
-j<目标>:指定要跳转的目标;
-i<网络接口>:指定数据包进入本机的网络接口;
-o<网络接口>:指定数据包要离开本机所使用的网络接口。

 

技术分享

技术分享

filter 这个表主要用于过滤包的,是系统预设的表,内建三个链INPUT、OUTPUT以及FORWARD。INPUT作用于进入本机的包;OUTPUT作用于本机送出的包;FORWARD作用于那些跟本机无关的包。 

nat 主要用处是网络地址转换、端口映射,也有三个链。PREROUTING 链的作用是在包刚刚到达防火墙时改变它的目的地址,如果需要的话。OUTPUT链改变本地产生的包的目的地址。POSTROUTING链在包就要离开防火墙之前改变其源地址。 

mangle 主要用于修改数据包的TOS(Type Of Service,服务类型)、TTL(Time ToLive,生存周期)值以及为数据包设置Mark标记,以实现Qos (Quality of Service,服务质量)调整以及策略路由等应用,由于需要相应的路由设备支持,因此应用并不广泛。 五个链:PREROUTING、POSTROUTING、INPUT、OUTPUT、FORWARD

raw 对报文设置一个标志,决定数据包是否被状态跟踪机制处理 只有两个链:OUTPUT、PREROUTING

 

以下是在网上找到的资料,可以参考学习!

 ************************************************************************************************

3.2 命令概述 
操作命令(-A、-I、-D、-R、-P、-F) 
查看命令(-[vnx]L) 
3.2.1 -A 
-A <链名> 
APPEND,追加一条规则(放到最后) 

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

在 filter 表的 INPUT 链里追加一条规则(作为最后一条规则) 
匹配所有访问本机 IP 的数据包,匹配到的丢弃 
3.2.2 -I 
-I <链名> [规则号码] 
INSERT,插入一条规则 

例如: 
iptables -I INPUT -j DROP 
在 filter 表的 INPUT 链里插入一条规则(插入成第 1 条) 

iptables -I INPUT 3 -j DROP 
在 filter 表的 INPUT 链里插入一条规则(插入成第 3 条) 

注意: 1、-t filter 可不写,不写则自动默认是 filter 表 
2、-I 链名 [规则号码],如果不写规则号码,则默认是 1 
3、确保规则号码 ≤ (已有规则数 + 1),否则报错 
3.2.3 -D 
-D <链名> <规则号码 | 具体规则内容> 
DELETE,删除一条规则 

iptables -nvL --line-numbers 查看规则带有id号

 

iptables -D INPUT 3(按号码匹配) 
删除 filter 表 INPUT 链中的第三条规则(不管它的内容是什么) 

iptables -D INPUT -s 192.168.0.1 -j DROP(按内容匹配) 
删除 filter 表 INPUT 链中内容为“-s 192.168.0.1 -j DROP”的规则 
(不管其位置在哪里) 

注意: 
1、若规则列表中有多条相同的规则时,按内容匹配只删除序号最小的一条 
2、按号码匹配删除时,确保规则号码 ≤ 已有规则数,否则报错 
3、按内容匹配删除时,确保规则存在,否则报错 

3.2.3 -R 
-R <链名> <规则号码> <具体规则内容> 
REPLACE,替换一条规则 

例如: 
iptables -R INPUT 3 -j ACCEPT 
将原来编号为 3 的规则内容替换为“-j ACCEPT” 

注意: 
确保规则号码 ≤ 已有规则数,否则报错 

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

例如: 
iptables -P INPUT DROP 
设置 filter 表 INPUT 链的默认规则是 DROP 

注意: 
当数据包没有被规则列表里的任何规则匹配到时,按此默认规则处理 

3.2.5 -F 
-F [链名] 
FLUSH,清空规则 

例如: 
iptables -F INPUT 
清空 filter 表 INPUT 链中的所有规则 

iptables -t nat -F PREROUTING 
清空 nat 表 PREROUTING 链中的所有规则 

注意: 
1、-F 仅仅是清空链中规则,并不影响 -P 设置的默认规则 
2、-P 设置了 DROP 后,使用 -F 一定要小心!!! 
3、如果不写链名,默认清空某表里所有链里的所有规则 
3.2.6 -[vxn]L 
-L [链名] 
LIST,列出规则 

v:显示详细信息,包括每条规则的匹配包数量和匹配字节数 
x:在 v 的基础上,禁止自动单位换算(K、M) 
n:只显示 IP 地址和端口号码,不显示域名和服务名称 

例如: 
iptables -L 
粗略列出 filter 表所有链及所有规则 

iptables -t nat -vnL 
用详细方式列出 nat 表所有链的所有规则,只显示 IP 地址和端口号 

iptables -t nat -vxnL PREROUTING 
用详细方式列出 nat 表 PREROUTING 链的所有规则以及详细数字,不反解 
3.3 匹配条件 
流入、流出接口(-i、-o) 
来源、目的地址(-s、-d) 
协议类型 (-p) 
来源、目的端口(--sport、--dport) 
3.3.1 按网络接口匹配 
-i <匹配数据进入的网络接口> 
例如: 
-i eth0 
匹配是否从网络接口 eth0 进来 

-i ppp0 
匹配是否从网络接口 ppp0 进来 

-o 匹配数据流出的网络接口 
例如: 
-o eth0 
-o ppp0 

3.3.2 按来源目的地址匹配 
-s <匹配来源地址> 
可以是 IP、NET、DOMAIN,也可空(任何地址) 
例如: 
-s 192.168.0.1 匹配来自 192.168.0.1 的数据包 
-s 192.168.1.0/24 匹配来自 192.168.1.0/24 网络的数据包 
-s 192.168.0.0/16 匹配来自 192.168.0.0/16 网络的数据包 

-d <匹配目的地址> 
可以是 IP、NET、DOMAIN,也可以空 
例如: 
-d 202.106.0.20 匹配去往 202.106.0.20 的数据包 
-d 202.106.0.0/16 匹配去往 202.106.0.0/16 网络的数据包 
-d www.abc.com 匹配去往域名 www.abc.com 的数据包 

按协议类型匹配

-p <匹配协议类型> 
可以是 TCP、UDP、ICMP 等,也可为空 
例如: 
-p tcp 
-p udp 
-p icmp --icmp-type 类型 
ping: type 8 pong: type 0 
3.3.4 按来源目的端口匹配 
--sport <匹配源端口> 
可以是个别端口,可以是端口范围 
例如: 
--sport 1000 匹配源端口是 1000 的数据包 
--sport 1000:3000 匹配源端口是 1000-3000 的数据包(含1000、3000) 
--sport :3000 匹配源端口是 3000 以下的数据包(含 3000) 
--sport 1000: 匹配源端口是 1000 以上的数据包(含 1000) 

--dport <匹配目的端口> 
可以是个别端口,可以是端口范围 
例如: 
--dport 80 匹配源端口是 80 的数据包 
--dport 6000:8000 匹配源端口是 6000-8000 的数据包(含6000、8000) 
--dport :3000 匹配源端口是 3000 以下的数据包(含 3000) 
--dport 1000: 匹配源端口是 1000 以上的数据包(含 1000) 
注意:--sport 和 --dport 必须配合 -p 参数使用 

 3.3.5 匹配应用举例 
1、端口匹配 
-p udp --dport 53 
匹配网络中目的地址是 53 的 UDP 协议数据包 

2、地址匹配 
-s 10.1.0.0/24 -d 172.17.0.0/16 
匹配来自 10.1.0.0/24 去往 172.17.0.0/16 的所有数据包 

3、端口和地址联合匹配 
-s 192.168.0.1 -d www.abc.com -p tcp --dport 80 
匹配来自 192.168.0.1,去往 www.abc.com 的 80 端口的 TCP 协议数据包 

 

注意: 
1、--sport、--dport 必须联合 -p 使用,必须指明协议类型是什么 
2、条件写的越多,匹配越细致,匹配范围越小 
3.1动作(处理方式) 
ACCEPT 
DROP 
SNAT 
DNAT 
MASQUERADE 
3.2 -j ACCEPT 
-j ACCEPT 
通过,允许数据包通过本链而不拦截它 
类似 Cisco 中 ACL 里面的 permit 

例如: 
iptables -A INPUT -j ACCEPT 
允许所有访问本机 IP 的数据包通过 

3.4.2 -j DROP 
-j DROP 
丢弃,阻止数据包通过本链而丢弃它 
类似 Cisco 中 ACL 里的 deny 

例如: 
iptables -A FORWARD -s 192.168.80.39 -j DROP 
阻止来源地址为 192.168.80.39 的数据包通过本机 

**************************************************************************************************

以下为iptables的常用命令:

 

iptables -nvL 查看规则(默认的为查看filter表的规则-n为数字显示输出的ip地址和端口 -v 为可视化显示 -L为列出所有的规则)

 

iptables -nvL -t nat 查看nat表的规则,不加表名查看的是filter表。

 

iptables -F 清除规则,清除只是临时的,重启系统或者重启iptables服务后还会加载已经保存的规则。清除之后要保存规则。

 

service iptables save 保存规则 保存的规则文件为:/etc/sysconfig/iptables 

iptables-save > myipt.rule 可以把防火墙规则保存到指定文件中
iptables-restore < myipt.rule 这样可以恢复指定的规则

 

service iptables stop 可以暂停防火墙,但是重启后它会读取/etc/sysconfig/iptables 从而启动防火墙,另外即使我们停止防火墙,但一旦我们添加任何一条规则,它也会开启。

 

iptables -Z 计数器清零。

 

iptables的应用举例:

增加/删除规则 iptables -A/-D INPUT -s 10.72.11.12 -p tcp --sport 1234 -d 10.72.137.159 --dport 80 -j DROP 

 

插入规则 iptables -I INPUT -s 1.1.1.1 -j DROP/ACCEPT/REJECT 

 

iptables -P INPUT DROP 用来设定默认规则,基本规则是:先拒绝所有的服务,然后根据需要再添加新的规则。
默认是ACCEPT ,一旦设定为DROP后,只能使用 iptables -P ACCEPT 才能恢复成原始状态,而不能使用-F参数。

 

iptables -A INPUT -p tcp --dport 80 -j ACCEPT 
#打开WEB服务端口的tcp协议
iptables -A INPUT -p tcp --dport 110 -j ACCEPT 
#打开POP3服务端口的tcp协议
iptables -A INPUT -p tcp --dport 25 -j ACCEPT 
#打开SMTP服务端口的tcp协议
iptables -A INPUT -p tcp --dport 21 -j ACCEPT
#打开FTP服务端口的tcp协议
iptables -A INPUT -p tcp -s 202.106.12.130 --dport 22 -j ACCEPT
#允许IP地址为202.106.12.130这台主机连接本地的SSH服务端口
iptables -A INPUT -p tcp --dport 53 -j ACCEPT
#允许DNS服务端口的tcp数据包流入
iptables -A INPUT -p udp --dport 53 -j ACCEPT
#允许DNS服务端口的udp数据包流入
iptables -A INPUT -p icmp -icmp-type echo-request -i eth1 -j DROP
#防止死亡之ping,从接口eth1进入的icmp协议的请求全部丢弃。
iptables -A FORWARD -p tcp --syn -m limit --limit 1/s -j ACCEPT
#防止SYN Flood (拒绝服务攻击)

 

 iptables与selinux的区别:

iptables用于设置防火墙(firewall), 即管理内外通信。

iptables 能做到“控制内部机器上网与不上网,访问哪些网站的控制”
但日志只能记录关于访问ip数据的相关信息

SELinux主要用于对文件(file), 文件夹 (directory), 过程(process)的限制。

 

 

扩展学习:

http://notfatboy.iteye.com/blog/1124690

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

 http://www.cnblogs.com/JemBai/archive/2009/03/19/1416364.html

http://www.cnblogs.com/bangerlee/archive/2013/02/27/2935422.html

 

 

iptables的资料整理

标签:iptables

原文地址:http://9950284.blog.51cto.com/9940284/1639058

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!