Linux防火墙
约 1913 字大约 6 分钟
2024-11-16
- a无状态防火墙 第一个 Linux 防火墙是数据包过滤防火墙,即无状态防火墙。无状态防火墙可以检查 IP 和 TCP/UDP 标头中的某些字段以决定数据包,但不维护有关正在进行的 TCP 连接的信息。因此,数据包可以操纵一些 TCP 标志,使其看起来好像是正在进行的连接的一部分,并规避某些限制。
- 有状态防火墙 当前的 Linux 防火墙是有状态防火墙;它们跟踪正在进行的连接,并根据 IP 和 TCP/UDP 标头中的特定字段以及数据包是否是正在进行的连接的一部分来限制数据包。
Linux防火墙过滤字段
- 进入防火墙规则的 IP 标头字段包括:
- 源 IP 地址
- 目标 IP 地址
- 防火墙规则主要关注的 TCP/UDP 标头字段包括: 3. 源 TCP/UDP 端口 4. 目标 TCP/UDP 端口
注
值得注意的是,Linux防火墙不可能根据进程来允许和拒绝数据包,而是根据端口号来允许和拒绝数据包。如果您希望 Web 浏览器访问 Web,则必须允许相应的端口,例如端口 80 和 443。此限制与 MS Windows 的内置防火墙不同,后者可以限制和允许每个应用程序的流量。
在 Linux 系统上,可以使用 SELinux 或 AppArmor 等解决方案对进程及其网络访问进行更精细的控制。例如,我们可以只允许 /usr/bin/apache2 二进制文件使用端口 80 和 443,同时阻止任何其他二进制文件在底层系统上这样做。这两种工具都根据特定进程或二进制文件实施访问控制策略,从而提供了一种更全面的方法来保护 Linux 系统。
网络过滤器
netfilter 是linux防火墙的核心,其为LInux 内核 2.4.x 及更高版本提供数据包过滤。netfilter 需要与前端程序进行配合,比如iptables或nftables 来管理网络。
在下面示例中,我们使用不同的前端对netfileter进行交互,以允许网络中的任何ssh_Clent 都可以连接到ssh_Server. 
iptables
在开始前,我们要记住以下几个链:
- Input (输入):此链使用于传入防火墙的数据包
- Output(输出):此链适应于从防火墙传出的数据包
- Forward(向前):此链适用于通过系统路由的数据包
假设我们希望能够远程访问系统上的SSH服务器。为何让SSH服务器能够与外部网络通信,我们要做两件事:
- 接受传入到TCP端口22的数据包。
- 接受来自TCP端口22的传出数据包。
让我们将上述两个需求转换为iptables命令:
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
iptables -A OUTPUT -p tcp --sport 22 -j ACCEPT-A INPUT附加到 INPUT 链,即发往系统的数据包。-p tcp --dport 22适用于目标端口 22 的 TCP 协议。-A OUTPUT附加到 OUTPUT 链,即离开系统的数据包。-p tcp --sport 22适用于源端口 22 的 TCP 协议。-j ACCEPT指定目标规则 ACCEPT(允许通过)。 假设您只想允许流量流向本地 SSH 服务器并阻止其他所有内容。在这种情况下,您需要再添加两个规则来设置防火墙的默认行为:iptables -A INPUT -j DROP来阻止之前规则中不允许的所有传入流量。iptables -A OUTPUT -j DROP来阻止之前规则中不允许的所有传出流量。 简而言之,需要按以下顺序应用以下规则:
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
iptables -A OUTPUT -p tcp --sport 22 -j ACCEPT
iptables -A INPUT -j DROP
iptables -A OUTPUT -j DROP提示
