From 32c4a40ab46a42170153d1e7dfb8fc74e9acb0ee Mon Sep 17 00:00:00 2001 From: 7Wate Date: Tue, 4 Jul 2023 14:01:21 +0800 Subject: [PATCH] =?UTF-8?q?Linux=EF=BC=9A=E7=BD=91=E7=BB=9C=E9=85=8D?= =?UTF-8?q?=E7=BD=AE=E9=98=B2=E7=81=AB=E5=A2=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Linux/进阶/Linux 网络配置.md | 308 +++++++++++++++++- 1 file changed, 299 insertions(+), 9 deletions(-) diff --git a/wiki/operating-system/Linux/进阶/Linux 网络配置.md b/wiki/operating-system/Linux/进阶/Linux 网络配置.md index 77b9be1c..3462e69e 100644 --- a/wiki/operating-system/Linux/进阶/Linux 网络配置.md +++ b/wiki/operating-system/Linux/进阶/Linux 网络配置.md @@ -444,6 +444,305 @@ nmcli connection up nmcli connection up ens160 ``` +## 网络管理 + +### iptables + +iptables 是 Linux 系统中的一个命令行防火墙工具,它允许系统管理员配置内核防火墙(netfilter)规则。它主要用于数据包过滤、网络地址转换(NAT)和数据包改变,这是因为它在内核空间运行并能为内核提供强大的防火墙和网络处理功能。 + +iptables 由 Rusty Russell 在 1998 年创建,并最初作为 ipchains 的替代品发布。它是 netfilter 项目的一部分,该项目的目标是提供一套丰富且可靠的防火墙和路由工具。 + +在 iptables 的规则体系中,存在一个重要的概念叫做 "四表五链"。这些 "表" 和 "链" 提供了 iptables 进行包过滤和处理的基础架构。 + +**"四表" 是指 iptables 的四个预定义的表:filter、nat、mangle 和 raw。**每个表有特定的用途和与之关联的预定义链。 + +1. **filter 表:**这是 iptables 默认的表,用于过滤数据包。这个表关联的链有 INPUT、FORWARD 和 OUTPUT。 +2. **nat 表:**用于网络地址转换(NAT)。这个表关联的链有 PREROUTING、OUTPUT 和 POSTROUTING。 +3. **mangle 表:**用于特殊的包修改。这个表关联的链有 PREROUTING、INPUT、FORWARD、OUTPUT 和 POSTROUTING。 +4. **raw 表:**用于配置 exemptions from connection tracking。这个表关联的链有 PREROUTING 和 OUTPUT。 + +**"五链" 是指 iptables 的五个预定义的链:INPUT、OUTPUT、FORWARD、PREROUTING 和 POSTROUTING。** + +1. **INPUT 链:**处理进入本机的数据包。 +2. **OUTPUT 链:**处理本机产生的数据包。 +3. **FORWARD 链:**处理经过本机转发的数据包。 +4. **PREROUTING 链:**处理所有进入系统的数据包,包括将要转发的数据包,是在路由决定之前处理。 +5. **POSTROUTING 链:**处理所有离开系统的数据包,是在路由决定之后处理。 + +这些表和链提供了 iptables 的强大功能和灵活性,使得系统管理员可以定义精细的包过滤和处理规则,从而实现强大的网络防火墙和路由功能。 + +iptables 的主要应用场景常用包括: + +1. **网络防火墙:**iptables 可以定义包过滤规则,拦截或转发进入、离开或穿越防火墙的数据包。 +2. **网络地址转换(NAT):**iptables 支持源 NAT(SNAT)和目标 NAT(DNAT),使得源 IP 或目标 IP 地址可以被转换或隐藏,从而实现网络中的私有地址与公开地址之间的映射。 +3. **包改变和重定向:**iptables 可以修改数据包的 IP 头,例如更改源或目标 IP 地址,或重定向数据包到另一个端口或主机。 + +iptables 的发展方向主要集中在以下几个方面: + +1. **提高易用性和灵活性:**为了使其更加易于使用和配置,iptables 将继续改进其用户界面和规则配置。 +2. **提升性能:**随着网络带宽的提升,iptables 将需要提高其处理性能,以满足更大的网络流量。 +3. **增加新功能:**iptables 将继续添加新的包处理和防火墙功能,以满足日益增长的网络安全需求。 + +虽然 iptables 具有强大的功能,但也存在一些缺点。例如,iptables 的**配置较为复杂**,需要花费较多的时间学习和理解。此外,iptables 的**性能与网络流量和规则数量成正比**,大量的规则和网络流量可能会导致性能下降。然而,通过对其功能的深入理解和恰当的配置,管理员可以充分利用 iptables 来建立强大且灵活的网络防火墙。 + +随着时间的推移,**iptables 已经不再是 Linux 系统中唯一的防火墙解决方案**。在最近的 Linux 发行版中,nftables 开始替代 iptables 成为默认的防火墙工具。nftables 提供了与 iptables 类似的功能,但具有更优的性能和更简洁的语法。尽管如此,iptables 仍然广泛用于很多系统中,并且由于其强大和灵活的特性,仍然是许多系统管理员的首选工具。 + +#### 常用的命令 + +```shell +# 列出所有防火墙规则 +sudo iptables -L + +# 添加一条新的规则 +sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT + +# 删除一条规则 +sudo iptables -D INPUT 1 + +# 清空所有规则 +sudo iptables -F + +# 设置默认策略 +sudo iptables -P INPUT DROP + +# 创建新的链 +sudo iptables -N LOGGING + +# 删除一个空链 +sudo iptables -X LOGGING + +# 在链中插入一条规则 +sudo iptables -I INPUT 1 -p tcp --dport 22 -j ACCEPT + +# 替换链中的一条规则 +sudo iptables -R INPUT 1 -p tcp --dport 80 -j ACCEPT + +# 列出所有规则的详细信息 +sudo iptables -S + +# 列出规则,不解析服务名称 +sudo iptables -n -L + +# 保存 iptables 规则 +sudo iptables-save > /etc/iptables/rules.v4 + +# 恢复 iptables 规则 +sudo iptables-restore < /etc/iptables/rules.v4 +``` + +### nftables + +nftables 是一种 Linux 内核的包过滤框架,**它是 iptables,ip6tables,arptables,ebtables 等工具的替代品**,旨在提供单一、统一的解决方案,以简化包过滤和防火墙的配置。nftables 提供了一个新的、更高级的语法,用于更简洁、更直观地定义和管理规则。 + +nftables 于 2014 年作为 Linux 内核 3.13 的一部分首次发布。它由同样也是 iptables 创建者的 Netfilter 项目团队开发,主要目的是解决 iptables 在易用性和性能上的一些问题。新的框架是为了改善和扩展现有的过滤系统,提供更强大的网络数据包处理能力。 + +nftables 提供了一种新的、基于 Netlink 的接口,用于配置网络过滤规则。它还提供了一种新的语法,用于定义过滤规则。这种**语法更加简洁、直观,比 iptables 的语法更易于学习和使用。** + +与 iptables 相比,nftables 还有一些其他的优点。例如,它能**更高效地处理大量的规则,支持更多的数据类型和操作符,提供更强大的过滤和分类功能,支持动态更新规则,等等。** + +nftables 目前的发展方向主要集中在以下几个方面: + +1. **提升性能:**nftables 将继续优化其性能,以满足日益增长的网络过滤需求,并尽量减少性能开销。 +2. **增强易用性:**通过改进语法和工具,nftables 将进一步简化规则的配置和管理,使其更易于使用和理解。 +3. **扩展功能和支持:**nftables 将继续扩展其功能,支持更多的数据类型和操作符,增强过滤和分类功能,等等。 + +#### 特性 + +1. **更简洁、更直观的语法:**nftables 的语法比 iptables 的语法更简洁、更直观,更易于学习和使用。 +2. **更高的性能:**nftables 能更高效地处理大量的规则,对性能的影响较小。 +3. **更强大的功能:**nftables 支持更多的数据类型和操作符,提供更强大的过滤和分类功能,支持动态更新规则。 +4. **替代多种工具:**nftables 可以替代 iptables,ip6tables,arptables,ebtables 等工具,提供一个统一的解决方案。 +5. **使用新技术:**作为一种新的包过滤框架,nftables 使用了许多新的技术和接口,这可能需要一些学习和适应。 + +尽管 nftables 在许多方面都优于 iptables,但它也存在一些问题。例如,它的**语法和接口与 iptables 不兼容**,这可能导致一些旧的脚本和工具无法正常工作。此外,由于 nftables 是相对较新的技术,可能还存在一些 bug 或不稳定的问题。 + +总的来说,nftables 是一种强大而灵活的网络过滤框架,它提供了许多 iptables 所不具备的特性和优点。它的目标是简化网络过滤和防火墙的配置,提供更高的性能,支持更多的功能,使得网络管理员能够更有效地管理他们的网络。 + +#### 常用的命令 + +```shell +# 显示当前已定义的所有表 +nft list tables + +# 添加一个新表,表名为 "mytable",表类型为 "ip" +nft add table ip mytable + +# 列出在表 "mytable" 下的 "mychain" 中定义的所有链 +nft list chain ip mytable mychain + +# 在表 "mytable" 下添加一个新链 "mychain",并设置链的类型为 "filter",hook 为 "input",优先级为 0 +nft add chain ip mytable mychain { type filter hook input priority 0 \; } + +# 在 "mychain" 中添加一个新规则,如果源 IP 地址是 192.0.2.1,则丢弃该包 +nft add rule ip mytable mychain ip saddr 192.0.2.1 drop + +# 列出所有已定义的规则集 +nft list ruleset + +# 删除在 "mychain" 中的 handle 是 1 的规则 +nft delete rule ip mytable mychain handle 1 + +# 清空指定链 "mychain" 中的所有规则 +nft flush chain ip mytable mychain + +# 删除指定链 "mytable" 中的 "mychain" +nft delete chain ip mytable mychain + +# 删除指定表 "mytable" +nft delete table ip mytable + +``` + +### UFW + +UFW(Uncomplicated Firewall)是一种简洁的防火墙配置工具,专门为 Linux 设计。该工具的主要目标是简化 iptables 防火墙配置的复杂性,并提供一个用户友好的界面,以便于用户进行操作和管理。UFW 是由 Ubuntu 开发的,但它也能在其他的 Linux 发行版上使用。 + +UFW 的功能主要是通过控制网络流量来提供安全防护。用户可以设置防火墙规则,来允许或拒绝某个 IP 地址、端口或服务的入站或出站流量。同时,UFW 也支持 IPv6,这样可以满足现代网络环境的需求。 + +#### 特性 + +1. **用户友好**:UFW 提供了一个简单易用的命令行界面,使用户能够方便地创建和管理防火墙规则,无需深入理解复杂的 iptables 语法。 +2. **默认策略**:UFW 默认所有入站连接都被拒绝,所有出站连接都被允许。用户可以根据需要更改这些默认策略。 +3. **应用配置**:UFW 支持预配置应用规则。用户可以通过简单的命令,轻松添加或删除常见应用的防火墙规则。 +4. **日志**:UFW 支持日志记录功能,用户可以轻松追踪网络活动和可能的安全问题。 +5. **IPv6 支持**:UFW 完全支持 IPv6,确保在现代网络环境中提供全面的防火墙保护。 + +UFW 的未来发展主要聚焦于以下几个方面: + +1. **用户界面优化**:UFW 将持续优化其用户界面,使其更易于使用和理解。 +2. **功能扩展**:UFW 将继续扩展其功能,以满足不断增长的网络安全需求。 +3. **兼容性和稳定性**:UFW 将持续改善其在不同 Linux 发行版上的兼容性和稳定性。 + +总的来说,UFW 是一款高度用户友好、简单易用且功能强大的防火墙工具,适用于需要简化防火墙配置的 Linux 用户。 + +#### 常用命令 + +```shell +# 启用 UFW +sudo ufw enable + +# 禁用 UFW +sudo ufw disable + +# 显示 UFW 状态和规则 +sudo ufw status + +# 允许特定端口或服务的流量 +sudo ufw allow 22 + +# 拒绝特定端口或服务的流量 +sudo ufw deny 22 + +# 删除特定规则 +sudo ufw delete allow 22 + +# 设置默认的入站或出站策略 +sudo ufw default deny incoming + +# 显示预配置的应用规则 +sudo ufw app list + +# 显示特定应用的规则信息 +sudo ufw app info 'Apache' + +# 设置日志记录级别 +sudo ufw logging medium + +# 重新加载 UFW 规则,无需重启防火墙服务 +sudo ufw reload + +# 重置 UFW 配置为默认状态 +sudo ufw reset +``` + +### firewalld + +firewalld 是一个用于管理 Linux 发行版的防火墙的动态守护程序。主要用于IPv4、IPv6 防火墙规则以及以太网桥的管理,firewalld 基于 nftables 或 iptables 实现网络包过滤。 + +相较于传统的防火墙管理方式,firewalld 采用动态管理,能够让你在无需重启防火墙的情况下实时更新策略和规则。firewalld 提供了一种区分网络/防火墙区域并定义其行为的方法,这使你能够为信任的网络接口、设备和服务定义区域,实现更加灵活的防火墙管理。 + +#### 特性 + +- 对 IPv4 和 IPv6 防火墙规则的全面支持。 +- 对以太网桥防火墙规则的全面支持。 +- 通过引入服务和区域概念,使防火墙管理变得更加简单。 +- 支持动态修改防火墙规则,无需重启。 +- 提供 D-Bus 和 CLI 界面,方便进行操作。 +- 具备在容器环境下工作的能力。 + +#### 优点 + +1. 动态管理:你可以动态地更改设置,无需重启整个防火墙,这在需要临时或频繁更改规则时非常有用。 +2. 高度定制:你可以创建多个配置文件,并根据实际需要启用或禁用它们,满足各种复杂的应用场景。 +3. 强大的规则管理:firewalld 支持非常复杂的规则,例如可以基于源 IP 地址或目标 IP 地址,或者基于网络服务(如 HTTP 或 SSH)来设置防火墙规则。 + +#### 缺点 + +1. 学习曲线:由于 firewalld 的配置和管理方式与 iptables 和 nftables 有所不同,初次接触需要投入一定的时间来学习和熟悉。 +2. 大规模规则处理性能:虽然在大多数场景下,firewalld 的性能都足够好,但在处理大量的规则时,其性能可能稍逊于 nftables 或 iptables。 + +总的来说,firewalld 是一个强大且灵活的防火墙管理工具,适合于对防火墙规则有动态管理需求和复杂配置需求的场景。 + +#### 常用命令 + +```shell +# 启动 firewalld +systemctl start firewalld + +# 停止 firewalld +systemctl stop firewalld + +# 在启动时启用 firewalld +systemctl enable firewalld + +# 查看 firewalld 状态 +firewall-cmd --state + +# 列出所有默认防火墙规则 +firewall-cmd --list-all + +# 添加服务到防火墙 +firewall-cmd --permanent --add-service=http + +# 删除服务 +firewall-cmd --permanent --remove-service=http + +# 开放端口 +firewall-cmd --permanent --add-port=8080/tcp + +# 移除端口 +firewall-cmd --permanent --remove-port=8080/tcp + +# 重新载入防火墙规则 +firewall-cmd --reload +``` + +### iptables、nftables、UFW、firewalld 对比 + +在Linux环境下,`iptables`,`nftables`,`ufw`和`firewalld`都是常用的防火墙工具,每种工具都有其独特的优点和使用场景: + +| iptables | nftables | ufw | firewalld | | +| -------------- | ------------ | ------------ | ---------- | ----------------- | +| 发布日期 | 1998 | 2014 | 2008 | 2011 | +| 操作复杂度 | 高 | 中 | 低 | 中 | +| 基于 | netfilter | netfilter | iptables | iptables/nftables | +| 内建于内核 | 是 | 是 | 否 | 否 | +| GUI | 否 | 否 | 否 | 是 | +| 基于区域的过滤 | 否 | 否 | 否 | 是 | +| 直接规则 | 是 | 是 | 否 | 是 | +| 规则集合 | 否 | 是 | 否 | 是 | +| 协议 | IPv4/IPv6 | IPv4/IPv6 | IPv4/IPv6 | IPv4/IPv6 | +| 适用于 | 服务器、桌面 | 服务器、桌面 | 桌面、新手 | 服务器、桌面 | +| 跨平台 | 是 | 是 | 是 | 是 | +| 语法复杂度 | 高 | 低 | 低 | 中 | + +- `iptables`是最早的防火墙工具之一,尽管其语法复杂,但提供了极高的灵活性和全面的控制,适合需要精细控制防火墙规则的用户或者服务器环境。 +- `nftables`是`iptables`的现代化替代品,提供了更简洁的语法和规则集合功能,使得配置更为简单。它保持了`iptables`的灵活性,同时大大简化了防火墙的配置。 +- `ufw`(Uncomplicated Firewall)是一个对初学者友好的防火墙前端,主要用于简化`iptables`规则的管理。尽管它的功能没有其他工具丰富,但对于只需要基本防火墙功能的用户来说,`ufw`是一个不错的选择。 +- `firewalld`是一个强大的防火墙工具,它可以在不中断网络连接的情况下动态修改防火墙规则。此外,`firewalld`的基于区域的过滤,图形用户界面,以及规则集合等功能使得管理规则更加简便。 + +**总的来说,您应该根据您的特定需求和技能水平选择最适合的防火墙工具。**对于初学者和只需要基本防火墙功能的用户来说,`ufw`可能是最好的选择。对于需要进行精细控制和高级配置的用户,`iptables`和`nftables`可能更合适。如果您需要一种同时提供强大功能和易用性的防火墙工具,那么`firewalld`可能是最好的选择。 + ## 网络服务 ### Web服务 @@ -677,15 +976,6 @@ Linux系统提供了一系列工具来帮助用户进行网络故障排查与诊 - dig:功能强大的DNS查询工具,可以获取详细的DNS记录信息。 - whois:用于查询域名注册信息和IP地址分配信息。 -### 防火墙配置 - -防火墙是用于保护网络安全的关键组件。Linux系统提供了多种防火墙工具,包括iptables、ufw、firewalld和nftables。 - -- iptables:Linux系统上的经典防火墙工具,基于Netfilter框架提供灵活的数据包过滤和转发功能。 -- ufw (Uncomplicated Firewall):一个简化的防火墙配置工具,基于iptables实现,易于使用。 -- firewalld:一个动态防火墙管理工具,提供了实时配置和防火墙区域划分功能。 -- nftables:Linux内核中的新一代防火墙框架,提供了更高效的数据包处理和更灵活的规则语法。 - ### 安全隔离 安全隔离是网络安全的重要概念,可以防止潜在的网络攻击和数据泄露。主要实现技术包括VLAN、DMZ和容器网络隔离。