标签: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
原文地址:http://9950284.blog.51cto.com/9940284/1639058