目录
一.iptables概述
二.netfilter/iptables关系
三.四表五链
四.规则链之间的匹配顺序
五.规则链内的匹配顺序
六.iptables的安装
一.iptables概述
二.netfilter/iptables关系
三.四表五链
四表
raw表 | 确定是否对该数据包进行状态跟踪。包含两个规则链,OUTPUT、 PREROUTING |
mangle表 | 修改数据包内容,用来做流量整形的,给数据包设置标记。包含五个规则链,NPUT、 OUTPUT、FORWARD、 PREROUTING、 POSTROUTING |
nat表 | 负责网络地址转换,用来修改数据包中的源、目标IP地址或端口。包含三个规则链, OUTPUT、PREROUTING、 POSTROUTING |
ilter表 | 负责过滤数据包,确定是否放行该数据包(过滤)。包含三个规则链,INPUT、 FORWARD、OUTPUTf |
注意:在ptables 的四个规则表中,mangle 表和raw表的应用相对较少
五链
INPUT | 处理入站数据包,匹配目标IP为本机的数据包 |
OUTPUT | 处理出站数据包,–般不在此链.上做配置 |
FORWARD | 处理转发数据包,匹配流经本机的数据包 |
PREROUTING | 在进行路由选择前处理数据包,用来修改目的地址,用来做DNAT。相当于 把内网服务器的IP和端口映射到路由器的外网IP和端口上 |
POSTROUTING | 在进行路由选择后处理数据包,用来修改源地址,用来做SNAT。相当于内网通过路由器NAT转换功能实现内网主机通过一个公网IP地址上网 |
数据包到达防火墙时,规则表之间的优先顺序:
raw > mangle > nat > filter
表、链结构示意图:
四.规则链之间的匹配顺序
主机型防火墙
网络型防火墙:
五.规则链内的匹配顺序
• 自上向下按顺序匹配,找到就会停止
• 若在该链内匹配不到规则,则按该链的默认策略处理
匹配流程示意图:
六.iptables的安装
Centos 7默认使用firewalld防火墙,没有安装iptables,应先关闭firewalld防火墙,再安装iptables
iptables防火墙的配置方法
1 .使用iptables 命令行
2. 使用system-config-firewall
iptables 命令行配置方法
命令格式: iptables [-t 表名]管理选项 [链名] [匹配条件] [-j 控制类型]
注意事项:
常用的控制类型
常用的管理选项
添加新的规则
查看规则列表
设置默认策略
删除规则
清空规则
规则的匹配
1.通用匹配
可直接使用,不依赖于其他条件或扩展,包括网络协议、IP地址、网络接口等条件
2.隐含匹配
要求以特定的协议匹配作为前提,包括端口、TCP标记、ICMP类 型等条件
TCP标记匹配: - - tcp-flags TCP标记
iptables -I INPUT -i erns33 -p tcp --tcp-flags SYN, RST,ACK SYN -j ACCEPT
#丢弃SYN请求包,放行其他包
CMP类型匹配: – icmp-type ICMP类型 #可以是字符串、数字代码
3.显式匹配
要求以“-m扩展模块"的形式明确指出类型,包括多端口、MAC地址、IP范围、数据包状态等条件
多端口匹配: -m multiport --sport 源端口列表
-m multiport --dport 目的端口列表
iptables -A INPUT -p tcp -m multiport --dport 80,22,21,20,53 -j ACCEPT
iptables -A INPUT -p udp -m multiport --dport 53 -j ACCEPT
IP范围匹配: -m iprange --src-range IP范围
iptables -A FORWARD -p udp -m iprange --src-range 192.168.80.100-192.168.80.200 -j DROP
#禁止转发源地址位于192.168.80.100-192.168.80.200的udp数据包
MAC地址匹配: -m mac --mac-source MAC地址
iptables -A FORWARD -m mac --mac-source XX:XX:XX:XX:XX:XX -j DROP
#禁止来自某MAC地址的数据包通过本机转发
状态匹配: -m state --state连接状态
常见的连接状态:
NEW: 与任何连接无关的,还没开始连接
ESTABLISHED: 响应请求或者已建立连接的,连接态
RELATED: 与已有连接有相关性的( 如FTP主被动模式的数据连接),衍生态,一般与ESTABLISHED配合使用
INVALID: 不能被识别属于哪个连接或没有任何状态
iptables -A FORWARD -m state --state NEW -p tcp ! --syn -j DROP
#禁止转发与正常TCP 连接无关的非--syn请求数据包(如伪造的网络攻击数据包)
iptables -I INPUT -p tcp -m multiport --dport 80,22,21,20,53 -j ACCEPT
iptables -A INPUT -p udp -m multiport --dport 53 -j ACCEPT
iptables -A INPUT -p tcp -m state --state ESTABLISHED, RELATED -j ACCEPT
#对进来的包的状态进行检测。已经建立tcp连接的包以及该连接相关的包允许通过。
#比如我和你做生意,我们谈成了生意,到了支付的时候,就可以直接调用与这笔生意相关的支付功能
iptables -P INPUT DROP