iptables简介
netfilter/iptables(简称为iptables)组成Linux平台下的包过滤防火墙。
iptables是Linux防火墙的管理工具,位于/sbin/iptables。
真正实现防火墙功能的是netfilter,它是Linux内核中实现包过滤的内部结构。
iptables的规则表和链:
表就是规则:当数据包与规则匹配时,iptables就根据规则所定义的方法来处理这些数据包,如放行(ACCEPT)、拒绝(REJECT)和丢弃(DROP)等。配置防火墙的主要工作就是添加、修改和删除这些规则。
链:是数据包传播的路径,每一条链其实就是众多规则中的一个检查清单,每一条链中可以有数条规则。当一个数据包到达一个链时,iptables就会从链中第一条规则开始检查,看该数据包是否满足规则所定义的条件。如果满足,系统就会根据该条规则所定义的方法处理该数据包;否则iptables将继续检查下一条规则,如果该数据包不符合链中任一条规则,iptables就会根据该链预先定义的默认策略来处理数据包。
四表五链
四表: 一个表实现一种功能
raw 数据追踪 ----------------- 基本不使用
mangle 数据包标记 MARK
nat 网络地址转换 SNAT DNAT
filter 数据包过滤 (默认)
五链:
PREROUTING 路由前(目标)
INPUT 进来的流量---起点不是本机,终点是本机
FORWARD 穿越的流量---起点、终点均不是本机
OUTPUT 出去的流量--起点是本机,终点不是本机
POSTROUTING 路由后(源)
PREROUTING--->INPUT 进来的
OUTPUT--->POSTROUTING 出去的
PREROUTING--->FORWARD--->POSTROUTING 穿越的
防火墙(iptables+netfilter)
四表五链
四表: 一个表实现一种功能
raw 数据追踪 ----------------- 基本不使用
mangle 数据包标记 MARK
nat 网络地址转换 SNAT DNAT
filter 数据包过滤 (默认)
五链:
PREROUTING 路由前(目标)
INPUT 进来的流量---起点不是本机,终点是本机
FORWARD 穿越的流量---起点、终点均不是本机
OUTPUT 出去的流量--起点是本机,终点不是本机
POSTROUTING 路由后(源)
PREROUTING--->INPUT 进来的
OUTPUT--->POSTROUTING 出去的
PREROUTING--->FORWARD--->POSTROUTING 穿越的
iptables配置防火墙
iptables -t 表名 -nL|-S|-F [链名] # 列出/清空规则
iptables -t 表名 -D 链名 [数字|具体的规则] # 删除规则
iptables -t 表名 -P 动作 # 设置默认策略
iptables -t 表名名 匹 -A 链配条件 -j 动作 # 追加规则
iptables -t 表名 -I|-R 链名 [数字] 匹配条件 -j 动作 # 插入/替换规则
选项:
-L 显示所指定链所有规则,如果没有指定链,所有链将被显示, 前面-n表示以数字的形式显示,不解析
-F 清空所指定链所有规则,如果没有指定链,所有链将被清空
-S 详细打印出指定表中所有的规则
-D 删除链中某条规则,可以接序号,也可以接具体的规则动作
-P 设置指定链的默认策略
-A 向指定链中追加一条规则
-I 向指定链中插入一条规则,默认插入到第一条, 链名后接序号表示插入到第几条
-R 替换所指定链中的一条规则,链名后接序号
*注意: 所有链名必须大写,所有动作必须大写
匹配条件:
[!] -p 协议 tcp udp icmp
[!] -s 源ip地址
-d 目标ip地址
-i 网卡名称 #从哪个网卡进来的
-o 网卡名称 #从哪个网卡出去的
-m 扩展匹配
tcp
--sport 源端口 #可以使用80:90表示匹配一段范围内所有的端口
--dport 目标端口 #可以使用80:90表示匹配一段范围内所有的端口
--tcp-flags mark标记
udp
--sport 源端口
--dport 目标端口
icmp
--icmp-type #指定匹配ICMP类型
mac
--mac-source #匹配源MAC地址
multiport
--sports #匹配多个源端口
--dports #匹配多个目标端口 22,69,123,80:90
--ports # 匹配多个端口
state
--state #INVALID ESTABLISHED NEW RELATED
mark
--mark # 匹配防火墙标记
动作(filter):
REJECT 拒绝
ACCEPT 允许
DROP 丢弃
filter: 过滤
filter表中有INPUT,OUTPUT,FORWARD三条链,针对不同的流量在相应的链上设置策略
所有最终目标为本机的流量: INPUT
所有起始源为本机的流量: OUTPUT
所有穿越本机的流量: FORWARD
练习:
将防火墙的filter表中的INPUT, OUTPUT, FORWARD链默认策略设置为DROP,只允许自己访问本机。
iptables -t filter -A INPUT -s 192.168.100.1 -j ACCEPT
iptables -t filter -A OUTPUT -d 192.168.100.1 -j ACCEPT
iptables -t filter -A INPUT -j DROP
iptables -t filter -A OUTPUT -j DROP
iptables -t filter -A FORWARD -j DROP
允许所有机器访问本机HTTP服务
iptables -t filter -I INPUT -p tcp --dport 80 -j ACCEPT
iptables -t filter -I OUTPUT -p tcp --sport 80 -j ACCEPT
配置192.168.10.22访问本机ssh服务
iptables -t filter -I OUTPUT -p tcp -m state --state ESTABLISHED -j ACCEPT(配置基于状态的响应)
iptables -t fiter -I INPUT -s 192.168.10.22 -p tcp --dport 22 -j ACCEPT
如果希望开机启动,安装iptables-services
保存iptables策略: iptables-save > /etc/sysconfig/iptables
恢复iptables策略: iptables-restore /etc/sysconfig/iptables1. 注意策略顺序, 防火墙的匹配是从上到下,匹配到即执行相应的动作
2. 设置默认禁止策略先设置好放行管理机策略,再把默认策略放在最后一条,不建议用-P设置默认禁止
3. 同一条策略里不同类型的多个条件之间是与的关系,同一个条件的多个参数之间是或的关系
4. 将匹配较多的策略放在上面,以避免额外的系统开销