1.iptab防火墙
防火墙是一种重要的工具,可以配置来保护您的服务器和基础设施。在 Linux 生态系统中,iptables 是 一个广泛使用的防火墙工具,它与内核的 netfilter 数据包过滤框架配合工作。Iptables 是配置 Netfilter 过滤功能的用户空间工具。
1.四表五链
iptables是linux系统中强大的网络流量控制工具,它通过四种主要的表(raw、mangle、nat、filter)和五条链( INPUT、OUTPUT、FORWARD 、PREROUTING、POSTROUTING)来实现对数据包的过滤、修改和地址转换 。
1.五链
链(Chains)的本质是一个有序的 Rules 列表。在复杂的网络环境中,用户可以通过配置 Rules 在 Chain 中的顺序来灵活实现多种效果。,iptables 提供了 5 条内建的 Chains,和netfilter的5个HOOK点是一一对应的,用户也可以新建自 定义的 Chains。
-
INPUT(输入链):发往本机的数据包通过此链,并执行此链上关于 INPUT 的 Rules,例如: DDoS 攻击防御规则。
-
OUTPUT(输出链):从本机发出的数据包通过此链,并执行此链上关于 OUTPUT 的 Rules。
-
PORWARD(转发链):由本机转发的数据包通过此链,并执行此链上关于 PORWARD 的 Rules。 例如:作为 IP 路由器。
-
PREROUTING(路由前链):在处理 IP 路由规则前(Pre-Routing)通过此链,并执行此链上关于 Pre-Routing 的 Rules。例如:DNAT。
-
POSTOUTING(路由后链):在处理 IP 路由规则后(Post-Routing)通过此链,并执行此链上关 于 Post-Routing 的 Rules。例如:SNAT 。
2.四表
1.raw:用于决定数据包是否应被跟踪或被特定的连接跟踪模块处理。
2.mangle:用于修改数据包的标记或元数据 。
3.nat:主要用于源地址转换(SNAT),目标地址转换(DNAT)。
4.filter :主要用于数据包的的过滤,决定是否接受这个数据包的关键。
2.iptables命令
1.iptables 的命令格式
格式: iptables COMMEND Chain Parameter Target
2.iptables常用COMMEND指令
#iptables常用命令:
iptables -A 将一个规则添加到链末尾
iptables -D 将指定的链中删除规则
iptables -F 将指定的链中删除所有规则
iptables -I 后面接数字,将在指定链的指定编号位置插入一个规则,默认插在首列
iptables -L 列出指定链中所有规则
iptables -t nat -L 列出所有NAT链中所有规则
iptables -N 建立用户定义链
iptables -X 删除用户定义链
iptables -P 修改链的默认设置,如将iptables -P INPUT DROP (将INPUT链设置为DROP)
3.常用规则匹配器(parameter)
匹配条件包括: 五元组(源IP,源端口,目的ip,目的端口,传输协议)和网卡接口(interface)。
#常见设置匹配规则介绍:
--dport 指定目标TCP/IP端口 如 -–dport 80
--sport 指定源TCP/IP端口 如 -–sport 80
-p tcp 指定协议为tcp
-p icmp 指定协议为ICMP
-p udp 指定协议为UDP
-m mac –mac 绑定MAC地址
-m limit –limit 1/s 1/m 设置时间策列
-s 192.168.1.153或192.168.1.0/24 指定源地址或地址段
-d 192.168.1.153或192.168.1.0/24 指定目标地址或地址段
-s ! 192.168.1.0 指定源地址以外的Ip
4.常用执行动作
ACCEPT: 白名单,允许通过。
REJECT: 黑名单,拒绝数据通过。
DROP : 丢弃数据,不响应。
5.使用实例
在指定表的指定链的尾部添加一条规则,-A 选项表示在对应链的末尾添加规则,省略 -t 选项时,表示默 认操作 filter 表中的规则
要注意一个重要的点,就是iptables防火墙的规则匹配,是按照上 边规则列表自上而下依次匹配。
1.查看规则
iptables -nL # 查看所有表所有链的规则
iptables -t nat -nL # 查看所有链上指定nat的规则
iptables -t nat -nL --line-number # 查看并显示行号
2.删除规则
iptables -F #
iptables -D 表名 行号 # 删除指定表的指定行数据
3.添加规则
示例1:禁止所有来自于192.168.88.12的所有请求
iptables -t filter -A INPUT -s 192.168.88.12 -j REJECT
示例2:允许88.12访问TCP的22端口 (前提本机要有22端口)
iptables -t filter -A INPUT -s 192.168.88.12 -p tcp --dport 22 -j ACCEPT
示例3:在规则列表开头插入以上规则
iptables -t filter -I INPUT -s 192.168.88.12 -j REJECT
iptables -t filter -A INPUT -s 192.168.88.12 -p tcp --dport 22 -j ACCEPT
示例5:多个IP使用逗号分割
iptables -t filter -I INPUT -s 192.168.88.12,192.168.88.30 -p tcp --dport 22 -j ACCEPT
示例6:禁止除192.168.88.30以外的网段访问
iptables -t filter -I INPUT ! -s 192.168.88.30 -j REJECT
2.Netfilter框架
Netfilter 是 Linux 内核中的一个强大的网络子系统,它提供了一套完整的网络数据包过滤框架。Netfilter 框架支持数据包的过滤、网络地址转换(NAT)、包内容修改等功能,并且提供了钩子(hook)机制,允许在数据包处理的不同阶段执行自定义的函数。
3.firewalld
1.firewalld区域
firewall不在采用iptables的链式规则,将一系列规则的集合组成区域。一套特定的规则成为一个域.
常用的域
public: 默认规则
trusted: 允许,相当于白名单
drop: 拒绝,相当于黑名单
2.firewall命令
1.放通ip:
firewall-cmd --add-source=ip 放通ip
firewall-cmd --remove-source=ip 移除ip
eg: firewall-cmd --add-source=192.168.88.12
2.放通服务:
firewall-cmd --add-service=服务名
firewall-cmd --remove-service 移除服务
eg:
firewall-cmd --add-service=httpd
3.放通端口
firewall-cmd --add-port=端口号/tcp | udp| icmp
firewall-cmd --remove-port=端口号/tcp | udp| icmp
eg:
firewall-cmd --add-port=8080/tcp
4.拒绝ip所有
firewall-cmd --add-source=ip --zone=drop
5.放通ip所有
firewall-cmd --add-source=ip --zone=trusted
命令行添加都是临时添加,重启或者reload就会丢失
加上 -- permanent 可以永久添加
3.firewalld富规则
firewall-cmd --add-rich-rule='rule family=ipv4 source address=ip port port= protocol=tcp/udp accept/drop/reject……'
#允许192.168.10.11主机能够访问9000端口
firewall-cmd --add-rich-rule='rule family=ipv4 source address=192.168.10.11/32
port port=9000 protocol=tcp accept' --permanent
firewall-cmd --reload
#允许192.168.10.0/24能访问http服务
firewall-cmd --add-rich-rule='rule family=ipv4 source address=192.168.10.0/24
service name=http accept' --permanent
firewall-cmd --reload
问题:
1.netfilter和iptables 的关系?
-
netfilter 是 Linux 内核中的一个强大的网络子系统,它提供了网络数据包过滤、网络地址转换(NAT)、包内容修改等功能。netfilter 工作在内核态,负责处理经过网络栈的数据包。
-
iptables 是用户空间的一个工具,它允许用户配置 netfilter 的规则。iptables 工作在用户态,通过 iptables 命令设置的规则会被传递给内核的 netfilter 模块,由 netfilter 执行这些规则来控制数据包的行为。
2.DROP 和 REJECT 都不会被通过,它们的区别是什么?
-
-
DROP 是 iptables 的一个目标,表示丢弃数据包,并且不向发送方发送任何响应。这通常用于阻止恶意的流量,因为攻击者不会知道数据包被丢弃。
-
REJECT 是另一种目标,它同样会阻止数据包通过,但与 DROP 不同的是,REJECT 会向发送方发送一个错误响应,例如 ICMP 不可达消息。这可以提供更多的信息,但也可能给攻击者提供反馈。
-
3.IPTABLES 的 -I 和 -A 的区别:
-
-I(--insert)选项用于在指定的链中的指定位置插入一条规则。如果提供了规则编号,那么这条规则将被插入到该位置;如果没有提供编号,规则将被插入到链的开头。
-
-A(--append)选项用于在指定链的末尾添加一条规则。无论何时使用 -A,规则都会被添加到链的最后。