防火墙主要工作在网络层。
Linux 系统的软件防火墙有iptables 、firewalld 、ufw。
iptables防火墙由netfilter 和 iptables组成。主要功能是过滤发送和接收的数据包,处理数据包的IP地址、端口、协议等信息。
netfilter:属于“内核态”(Kernel Space,又称为内核空间)的防火墙功能体系。它属于linux内核的一部分,由一些数据包过滤表组成,这些表内包含内核用来控制数据包过滤处理的规则集。
iptables:属于“用户态”(User Space,又称为用户空间)的防火墙管理体系。它是用户用来管理Linux防火墙的命令程序,可以用来插入、修改和删除表中的规则,通常位于/sbin/iptables文件下。
iptables是基于内核的防火墙,其中内置了四个数据包过滤表,表中所有规则配置后,立即生效,不需要重启服务。
iptables防火墙的架构
iptables防火墙由四表五链构成。
四表
raw:数据包状态跟踪
mangle:修改数据包内容,设置标记
nat:数据包地址转换
filter:过滤数据包
五链
INPUT:处理入站数据
OUTPUT:处理出站数据
FORWARD:处理转发数据
PREROUTING:路由处理前,修改目的地址(接收数据包)
POSTROUTING:路由处理后,修改源地址(发送数据包)
四表五链的关系
raw 表包含 OUTPUT、PREROUTING
mangle 表包含 INPUT、 OUTPUT、FORWARD、PREROUTING 、POSTROUTING
nat 表包含 OUTPUT、PREROUTING、POSTROUTING
filter 表包含 INPUT、OUTPUT、FORWARD
数据包的匹配顺序
四表的匹配顺序
raw -> mangle -> nat -> filter
较常用的是filter和nat
数据的匹配顺序
入站数据:PREROUTING(nat) -> INPUT(filter)-> 本机的应用程序
出站数据:本机的应用程序 -> OUTPUT(filter) -> POSTROUTING(nat)
转发数据:PREROUTING(nat) -> FORWARD(filter) -> POSTROUTING(nat)
表内规则的匹配顺序
从上往下依次匹配链中的规则,匹配到即停止;若没有匹配的规则,则按照链的默认规则处理
iptables操作管理
命令格式: iptables -t 表名(默认为filter) 操作选项 链名 匹配条件选项 -j 控制类型
常用操作选项:
-F:清空链中所有规则。
-I:插入规则到链的指定位置(默认为第一条)。
-A:添加规则到链的末尾。
-R:替换链中的规则。(--line-number显示规则的编号。)
-D:删除指定规则(可以通过规则编号或内容指定)。
-P:设置链的默认策略。(一般不修改默认策略)
-L:列出所有规则。
-n:以数字格式显示地址和端口。
-v:详细信息。
--line-number:显示规则的编号。
[root@sunny1 ~]# iptables -nvL --line-number
Chain INPUT (policy ACCEPT 179 packets, 18657 bytes)
num pkts bytes target prot opt in out source destination
1 0 0 ACCEPT udp -- virbr0 * 0.0.0.0/0 0.0.0.0/0 udp dpt:53
2 0 0 ACCEPT tcp -- virbr0 * 0.0.0.0/0 0.0.0.0/0 tcp dpt:53
3 0 0 ACCEPT udp -- virbr0 * 0.0.0.0/0 0.0.0.0/0 udp dpt:67
4 0 0 ACCEPT tcp -- virbr0 * 0.0.0.0/0 0.0.0.0/0 tcp dpt:67
Chain FORWARD (policy ACCEPT 32 packets, 2432 bytes)
num pkts bytes target prot opt in out source destination
1 0 0 ACCEPT all -- * virbr0 0.0.0.0/0 192.168.122.0/24 ctstate RELATED,ESTABLISHED
2 0 0 ACCEPT all -- virbr0 * 192.168.122.0/24 0.0.0.0/0
3 0 0 ACCEPT all -- virbr0 virbr0 0.0.0.0/0 0.0.0.0/0
4 0 0 REJECT all -- * virbr0 0.0.0.0/0 0.0.0.0/0 reject-with icmp-port-unreachable
5 0 0 REJECT all -- virbr0 * 0.0.0.0/0 0.0.0.0/0 reject-with icmp-port-unreachable
Chain OUTPUT (policy ACCEPT 188 packets, 24309 bytes)
num pkts bytes target prot opt in out source destination
1 0 0 ACCEPT udp -- * virbr0 0.0.0.0/0 0.0.0.0/0 udp dpt:68
匹配条件选项:
-i:指定入站网卡。
-o:指定出站网卡。
-s:指定源地址。
-d:指定目标地址。
-p:指定协议(如tcp、udp、icmp)。
--sport:指定源端口。
--dport:指定目标端口。
控制类型:
ACCEPT:允许数据包通过。
DROP:直接丢弃数据包,不给出任何回应。
REJECT:拒绝数据包通过,并返回错误信息。
SNAT:源地址转换,修改数据包的源地址。
DNAT:目标地址转换,修改数据包的目标地址。
LOG:记录数据包信息到日志,然后传给下一条规则继续匹配。
MASQUERADE:地址伪装,将数据包的源地址修改为本机的动态公网IP。
REDIRECT:将数据包重定向到本机的指定端口。
隐含匹配:需要使用 -p 指定协议作为前提
-p tcp/udp --dport 目的端口/端口范围
-p tcp/udp --sport 源端口/端口范围
-p tcp --tcp-flags SYN,ACK,FIN,RST,PSH,URG SYN -j REJECT :表示会拒绝除了 SYN=1 以外的TCP报文
-p icmp --icmp-type 8(请求)/0(回显)/3(目标不可达)
显式匹配:需要使用 -m 指定模块
-m multiport --sport/--dport 端口列表
-m iprange --src-range/--dst-range IP范围
-m mac --mac-source 源MAC地址
-m state --state RELATED,ESTABLISHED[,NEW,INVALID] (RELATED,ESTABLISHED 用于放行返回的应答包进站)
通过命令设置的规则为临时规则,系统重启或者服务重载,这些规则就会失效。
保存规则 iptables-save > 文件路径
还原规则 iptables-restore < 文件路径
保存为默认规则 iptables-save > /etc/sysconfig/iptables