1
0
wiki/Tech/operating-system/Linux/进阶/Linux 网络配置.md
2023-11-09 17:30:33 +08:00

1072 lines
59 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

---
title: Linux 网络配置
description: Linux 网络配置管理
keywords:
- Linux 网络
- 配置
- 管理
tags:
- Linux/进阶
sidebar_position: 2
author: 7Wate
date: 2023-04-10
---
## 网络概述
互联网是一个由全球各种计算机网络相互连接而成的大型网络,可以让人们在任何时间、任何地点连接并交换信息。它是人类历史上最重要的信息革命之一,对人们的生活、工作和学习都产生了深远的影响。
互联网的发展历史可以追溯到 20 世纪 60 年代初,当时美国国防部研究项目 ARPA高级研究计划署为了解决军用计算机之间的信息共享问题开发了一种名为 ARPANET 的计算机网络。在此基础上,随着互联网技术的不断发展,越来越多的计算机网络加入了互联网,并形成了现在的全球互联网。
- 20 世纪 60 年代美国国防部高级研究计划局ARPA开展研究设计出了一种分组交换网络的方案称为 ARPANET。
- 20 世纪 70 年代ARPANET 逐渐扩展到美国各地的大学和研究机构,并且开始出现了电子邮件和文件传输等应用。
- 20 世纪 80 年代TCP/IP 协议成为互联网的标准协议,互联网的规模进一步扩大,并且开始商业化运营。
- 20 世纪 90 年代Web 浏览器的出现,使得互联网的应用变得更加易用和普及,互联网的用户数量开始飞速增长。
- 21 世纪以后:互联网的规模继续扩大,出现了移动互联网、云计算、大数据等新技术,互联网的应用也从简单的信息传递演变成了涵盖生活、工作、学习等方方面面的综合性平台。
互联网实现的关键在于互联网协议族Internet Protocol Suite通常称为 TCP/IP 协议。TCP/IP 协议提供了一种标准化的方法来在不同的计算机之间进行通信。它由两个协议组成:
- 传输控制协议TCP负责将数据包分解成若干个小数据包并在接收端重新组装。
- 互联网协议IP负责将数据包从一个网络传输到另一个网络。
在互联网中,每个设备都被分配了一个唯一的 IP 地址,用于标识该设备在网络中的位置。当设备发送数据包时,它会将数据包传送到本地网络上的路由器,然后路由器会根据 IP 地址将数据包传送到目标设备所在的网络上的路由器,直到数据包到达目标设备。
## 网络基础
### 网络协议
| OSI 模型层级 | 功能 | 协议/设备 |
| :---------------------- | ---------------------------------------------- | --------------------- |
| 应用层Application | 提供高级服务,例如文件传输、电子邮件和虚拟终端 | HTTP、SMTP、FTP、SSH |
| 表示层Presentation | 将数据转换为网络标准格式 | SSL/TLS、JPEG、ASCII |
| 会话层Session | 管理连接、交换数据 | NetBIOS、RPC、SSH |
| 传输层Transport | 提供端到端的可靠数据传输 | TCP、UDP |
| 网络层Network | 处理分组在网络中的传输与路由 | IP、ICMP、OSPF、BGP |
| 数据链路层Data Link | 处理帧在网络中的传输和检错 | Ethernet、Wi-Fi、HDLC |
| 物理层Physical | 处理比特流在物理媒介中的传输 | RJ45、Fiber、802.11 |
#### 应用层协议
##### SSH
SSH (Secure Shell) 是一种加密的网络协议,用于在不安全的网络上安全地运行命令行 shell。SSH 通常用于远程登录到远程计算机或服务器,并提供文件传输和加密会话功能。
##### FTP
FTP (File Transfer Protocol) 是一种标准的文件传输协议用于在网络上传输文件。FTP 在 TCP/IP 协议中的传输层上运行,支持两种工作模式:主动模式和被动模式。
##### SMTP
SMTP (Simple Mail Transfer Protocol) 是一种在计算机网络上发送和接收电子邮件的协议。SMTP 定义了电子邮件如何通过网络传输的标准。SMTP 服务器负责接收和发送邮件。
##### HTTP
HTTP (Hypertext Transfer Protocol) 是一种用于在计算机网络上传输超文本文档的协议。HTTP 是万维网的基础协议,支持 Web 浏览器和 Web 服务器之间的通信。
##### DNS
DNS (Domain Name System) 是一种将域名映射到 IP 地址的分布式命名系统。DNS 是在互联网上执行名称解析的基本协议,使用户可以使用易于记忆的域名来访问网络资源。
#### 传输层协议
##### TCP
TCP (Transmission Control Protocol) 是一种面向连接的协议用于在网络上可靠地传输数据。TCP 保证传输的数据的可靠性,使用三次握手来建立连接,四次握手来终止连接。
##### UDP
UDP (User Datagram Protocol) 是一种面向无连接的协议用于在网络上传输数据包。UDP 不保证数据的可靠性,因此常用于传输实时数据,如音频和视频。
#### 网络层协议
##### IPv4
IPv4 (Internet Protocol version 4) 是一种网络层协议用于在网络上传输数据。IPv4 定义了 IP 地址的格式和分配方式,并为互联网上的每个设备分配唯一的 IP 地址。
##### IPv6
IPv6 (Internet Protocol version 6) 是 IPv4 的下一代协议用于在网络上传输数据。IPv6 地址长度更长,提供更多的地址空间,并支持更多的协议选项,使网络更加灵活和可扩展。
##### ICMP
ICMP (Internet Control Message Protocol) 是一种在网络上传输控制消息的协议。ICMP 用于发送诊断信息,如 ping 和 traceroute 命令所使用的信息。
#### 数据链路层与物理层协议
##### Ethernet
Ethernet 是一种常用的局域网技术,其物理层使用双绞线或光纤传输数据,数据链路层采用 CSMA/CD 技术实现多个设备共享网络资源。Ethernet 还定义了 MAC 地址格式、帧格式等标准,是 TCP/IP 协议族的重要组成部分。
##### Wi-Fi
Wi-Fi 是一种基于无线电波的局域网技术采用无线信号传输数据常用于家庭和公共场所的无线网络。Wi-Fi 还定义了各种标准,如 802.11b、802.11g、802.11n 等,以支持不同的无线传输速率和距离要求。
##### Bluetooth
Bluetooth 是一种短距离无线通信技术通常用于连接手机、平板电脑、耳机、键盘等设备。Bluetooth 定义了自己的物理层和数据链路层协议,使用频段为 2.4GHz。
#### 路由协议
##### RIP
RIPRouting Information Protocol是一种基于距离向量的内部网关协议IGP用于在小型网络中选择最佳路由。RIP 协议采用 Hop Count 作为路径计算标准,当路由表中某个目的地址的距离超过 15 个跳时,该地址将被认为是不可达的。
##### OSPF
OSPFOpen Shortest Path First是一种基于链路状态的内部网关协议IGP用于在大型网络中选择最佳路由。OSPF 协议将网络划分为多个区域每个区域拥有自己的链路状态数据库LSDB可以实现快速收敛和路由分级。
##### BGP
BGPBorder Gateway Protocol是一种外部网关协议EGP用于在不同自治系统之间交换路由信息。BGP 协议可以实现路由的动态学习和选择支持多路径和路由策略等功能。BGP 是互联网核心路由器之间的主要协议。
##### IS-IS
IS-ISIntermediate System to Intermediate System是一种基于链路状态的内部网关协议IGP用于在大型网络中选择最佳路由。IS-IS 协议类似于 OSPF 协议但使用的是双向链路可以提供更高效的路由选择。IS-IS 协议常用于 ISP 内部网络和数据中心网络。
#### 图例
![TCP&IP协议图](https://static.7wate.com/img/2023/04/24/052661ab55b28.png)
```mermaid
graph TD;
subgraph 数据传输路径
A2(主机A应用层) -- HTTP请求 --> A3(主机A传输层);
A3 -- TCP连接 --> A4(主机A网络层);
A4 -- IP数据报 --> A5(主机A数据链路层);
A5 -- 以太网帧 --> R1(路由器A数据链路层);
R3(路由器A应用层) -- HTTP请求 --> R4(路由器A传输层);
R4 -- TCP连接 --> R5(路由器A网络层);
R5 -- IP数据报 --> R6(路由器A数据链路层);
R6 -- 以太网帧 --> R1;
R7((路由器 A)) --- R3;
R7 -- 路由 --> R12((路由器 B));
R8(路由器B应用层) -- HTTP响应 --> R9(路由器B传输层);
R9 -- TCP连接 --> R10(路由器B网络层);
R10 -- IP数据报 --> R11(路由器B数据链路层);
R11 -- 以太网帧 --> R2(路由器B数据链路层);
R12 --- R8;
B2(主机B应用层) -- HTTP响应 --> B3(主机B传输层);
B3 -- TCP连接 --> B4(主机B网络层);
B4 -- IP数据报 --> B5(主机B数据链路层);
B5 -- 以太网帧 --> R2;
end
```
### 网络设备
![中小企业网络拓扑图](https://static.7wate.com/img/2023/04/26/741ef8a1e1e4d.png)
![多公司网络拓扑图](https://static.7wate.com/img/2023/04/26/1dad384aded69.png)
网络设备是用于组建计算机网络的硬件。它们用于确保数据在网络中的正确传输,并在不同设备之间建立连接。以下是一些常见的网络设备及其功能:
#### 路由器Router
路由器是用于在网络中转发数据包的设备它根据数据包的目的地和网络的拓扑结构来决定数据包应当沿哪条路径传输。路由器连接多个网络并在这些网络之间传输数据从而实现网络互联。此外路由器还可以执行网络地址转换NAT以及其他网络层功能以确保数据包的安全传输。
#### 交换机Switch
交换机用于连接网络中的设备,并在它们之间传输数据。交换机通过存储和转发机制,将数据包发送到目标设备。与集线器相比,交换机具有更高的效率,因为它只将数据包发送到目标设备,而不是广播到所有连接的设备。
#### 无线接入点Wireless Access PointWAP
无线接入点是用于将有线网络扩展到无线网络的设备。WAP 在有线网络与无线网络设备之间建立一个桥接,允许无线设备通过无线信号与有线网络通信。它们通常用于扩展网络覆盖范围,提高无线设备的连接性能。
#### 网络集线器Hub
网络集线器是一种基本的网络设备,用于连接多台计算机或其他网络设备。集线器接收来自一个设备的数据包,然后将其广播到所有连接的设备。然而,由于这种广播方式,网络集线器在大型网络中效率较低,容易导致网络拥堵。
#### 网络防火墙Firewall
网络防火墙是一种用于保护网络安全的设备,它可以阻止未经授权的访问和数据包的传输。防火墙可以在硬件和软件层面实现,通过检查传入和传出的数据包,确定它们是否符合特定的安全规则。防火墙有助于保护网络中的设备免受恶意软件和攻击的侵害。
#### VPN 网关VPN Gateway
VPN 网关是一种用于实现虚拟专用网络VPN的设备。它允许远程用户通过加密的通道访问内部网络资源从而提高数据安全性。VPN 网关可以实现企业内部资源的安全共享,以及保护远程办公用户的数据安全。
### 网络拓扑
![六种常见的网络拓扑结构](https://static.7wate.com/img/2023/04/26/53b9d9c6d177b.png)
- 总线拓扑:所有设备都连接到一条公共总线上,每个设备可以发送和接收数据包,总线会将数据包广播给所有设备。
- 星型拓扑:所有设备都连接到一个集线器或交换机,中心设备负责转发和分配数据包。
- 环型拓扑:所有设备连接成一个环形链路,数据包沿着环形链路进行传输,每个设备负责将数据包从一个端口传递到另一个端口。
- 树型拓扑:将多个星型拓扑连接起来,形成一个树状结构,中心节点可以是一个路由器或交换机,每个子节点连接到中心节点。
- 网状拓扑:所有设备之间都可以直接相互连接,没有中心节点,数据包可以通过多条路径进行传输,具有高度的冗余和可靠性。
- 混合拓扑:不同拓扑结构的组合,如星型 - 总线拓扑、星型 - 环型拓扑等。
## 网络配置
| 发行版 | 网络配置文件路径 | 常用网络管理工具 |
| ----------- | -------------------------------------- | ------------------------------------------ |
| Ubuntu | /etc/netplan/ | NetworkManager, systemd-networkd |
| Debian | /etc/network/interfaces | NetworkManager, systemd-networkd, ifupdown |
| CentOS/RHEL | /etc/sysconfig/network-scripts/ifcfg-* | NetworkManager, systemd-networkd, ifcfg |
| Fedora | /etc/sysconfig/network-scripts/ifcfg-* | NetworkManager, systemd-networkd, ifcfg |
| Arch Linux | /etc/netctl/ | netctl |
| openSUSE | /etc/sysconfig/network/ifcfg-* | NetworkManager, ifup |
- 动态主机配置协议DHCPDHCP 用于自动分配 IP 地址、子网掩码、默认网关等网络参数。
- 静态地址Static IP静态 IP 是预先分配给设备的固定 IP 地址。
- 地址IP网络设备的唯一标识符。
- 子网掩码NetMask用于划分 IP 地址的网络和主机部分。
- 网关GetWay连接不同网络的设备通常是路由器。
- 域名系统DNS ):将域名解析为 IP 地址的服务。
### Ip
ip 命令是 Linux 系统中用于管理网络设备、地址、路由等网络设置的一个强大工具。它是 iproute2 软件包的一部分,由 Alexey N. Kuznetsov 开发,首次发布于 1999 年。ip 命令的设计目的是替代原有的 ifconfig、route 等传统网络配置工具,提供更灵活、功能强大的解决方案。
ip 命令通过 Netlink 套接字与 Linux 内核通信实现对网络设备、地址、路由等资源的管理。Netlink 是一种用于在内核和用户空间之间传递信息的通信机制。通过 Netlinkip 命令能够执行各种复杂的网络配置任务。
#### 命令
| 命令 | 说明 |
| ------------- | ---------------------- |
| ip addr show | 显示网络接口的地址信息 |
| ip addr add | 为网络接口添加 IP 地址 |
| ip addr del | 删除网络接口的 IP 地址 |
| ip link show | 显示网络接口状态 |
| ip link set | 修改网络接口属性 |
| ip route show | 显示路由表 |
| ip route add | 添加路由 |
| ip route del | 删除路由 |
| ip neigh show | 显示邻居表ARP 缓存) |
| ip neigh add | 添加邻居条目 |
| ip neigh del | 删除邻居条目 |
#### 选项
| 选项 | 说明 |
| ---------- | ---------------------------------------------- |
| show | 显示指定类型的网络对象(如地址、链接、路由等) |
| add | 添加指定类型的网络对象 |
| del | 删除指定类型的网络对象 |
| set | 修改指定类型的网络对象的属性 |
| list | 列出指定类型的网络对象 |
| flush | 清除指定类型的网络对象 |
| monitor | 监控网络事件 |
| -4 | 仅处理 IPv4 地址和路由 |
| -6 | 仅处理 IPv6 地址和路由 |
| -s | 输出简化版信息 |
| -brief | 以简洁的格式输出信息 |
| -json | 以 JSON 格式输出信息 |
| -details | 输出详细信息 |
| -family | 指定地址族(如 inet、inet6、link 等) |
| -dynamic | 设置动态属性(如动态路由等) |
| -permanent | 设置永久属性(如永久地址等) |
#### 实例
##### 1. 查看当前网络接口信息
```shell
debian@debian:~$ ip route show
192.168.101.0/24 dev ens32 proto kernel scope link src 192.168.101.177
debian@debian:~$ ip link show
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
2: ens32: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP mode DEFAULT group default qlen 1000
link/ether 00:0c:29:99:2f:75 brd ff:ff:ff:ff:ff:ff
altname enp2s0
debian@debian:~$ ip addr show
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: ens32: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 00:0c:29:99:2f:75 brd ff:ff:ff:ff:ff:ff
altname enp2s0
inet 192.168.101.177/24 scope global ens32
valid_lft forever preferred_lft forever
```
##### 2. 关闭指定网络接口
```shell
root@debian:~$ ip link set dev ens32 down
```
*如果使用 ssh 注意会断开链接。*
##### 3. 配置静态 IP 地址
```shell
root@debian:~$ ip addr add 192.168.101.222/24 dev ens32
root@debian:~$ ip addr show
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: ens32: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 00:0c:29:99:2f:75 brd ff:ff:ff:ff:ff:ff
altname enp2s0
inet 192.168.101.177/24 scope global ens32
valid_lft forever preferred_lft forever
inet 192.168.101.222/24 scope global secondary ens32
valid_lft forever preferred_lft forever
```
##### 4. 配置网关地址
```shell
root@debian:~$ ip route add default via 192.168.101.1
```
##### 5. 配置 DNS 服务器地址
```shell
root@debian:~$ echo "nameserver 114.114.114.114" > /etc/resolv.conf
```
##### 6. 启用网络接口
```shell
root@debian:~$ ip link set dev ens32 up
```
### NetworkManager
NetworkManager 是一款在 Linux 操作系统上用于管理网络连接的软件,最初由 Red Hat 公司开发。NetworkManager 的首个版本发布于 2004 年,之后迅速成为了 Linux 操作系统中最流行的网络管理工具之一。在 NetworkManager 诞生之前Linux 中的网络管理需要手动配置网络文件,使得网络配置繁琐、困难且容易出错。随着 NetworkManager 的发展和普及,用户可以更加方便地配置和管理网络,从而提高了 Linux 操作系统的易用性。
NetworkManager 的工作原理是通过插件和 D-Bus 通信机制实现。插件用于处理特定类型的网络连接,例如 Wi-Fi、以太网、PPP 等等。当用户启动 NetworkManager 后它会扫描系统中可用的网络连接并调用相应的插件进行配置。在用户连接到一个新的网络时NetworkManager 会自动识别网络类型,并根据相应的插件进行设置。
NetworkManager 的核心功能是管理网络连接和网络接口。它提供了许多命令行工具和 GUI 工具使得用户可以轻松地添加、修改、启用和禁用网络连接。当用户添加或修改一个网络连接时NetworkManager 会自动更新相关的配置文件,从而保证网络设置的一致性和正确性。
#### 命令
| 命令 | 说明 |
| ------------------------- | ------------------------------- |
| nmcli dev show | 显示所有网络设备的信息 |
| nmcli conn show | 显示所有网络连接的信息 |
| nmcli conn up | 启用指定的网络连接 |
| nmcli conn down | 禁用指定的网络连接 |
| nmcli conn add | 添加一个新的网络连接 |
| nmcli conn modify | 修改一个已有的网络连接 |
| nmcli conn delete | 删除一个已有的网络连接 |
| nmcli connection edit | 编辑一个已有的网络连接 |
| nmcli device wifi | 显示所有 Wi-Fi 网络及其相关信息 |
| nmcli device wifi rescan | 重新扫描 Wi-Fi 网络列表 |
| nmcli device wifi connect | 连接指定的 Wi-Fi 网络 |
#### 选项
| 选项 | 说明 |
| ------------------ | ------------------------------------------ |
| -f--format | 指定输出格式(例如 csv、json、tabular 等) |
| -t--terse | 指定分隔符 |
| -m--mode | 指定最大输出宽度(用于长文本的换行) |
| -p--set-property | 指定要修改的属性 |
| -a--add | 添加新的属性 |
| -r--remove | 删除一个属性 |
| -e--enable | 激活一个属性 |
| -d--disable | 禁用一个属性 |
| -v--verbose | 输出详细信息 |
| -i--ignore-case | 忽略大小写 |
#### 实例
##### 1. 查看当前网络接口信息
```shell
[root@rhel ~]# nmcli device show
GENERAL.DEVICE: ens160
GENERAL.TYPE: ethernet
GENERAL.HWADDR: 00:0C:29:14:E9:70
GENERAL.MTU: 1500
GENERAL.STATE: 100已连接
GENERAL.CONNECTION: ens160
GENERAL.CON-PATH: /org/freedesktop/NetworkManager/ActiveConnection/1
WIRED-PROPERTIES.CARRIER: 开
IP4.ADDRESS[1]: 192.168.101.109/24
IP4.GATEWAY: 192.168.101.2
IP4.ROUTE[1]: dst = 0.0.0.0/0, nh = 192.168.101.2, mt = 100
IP4.ROUTE[2]: dst = 192.168.101.0/24, nh = 0.0.0.0, mt = 100
IP4.DNS[1]: 192.168.101.2
IP4.DOMAIN[1]: localdomain
IP6.ADDRESS[1]: fe80::20c:29ff:fe14:e970/64
IP6.GATEWAY: --
IP6.ROUTE[1]: dst = fe80::/64, nh = ::, mt = 1024
GENERAL.DEVICE: lo
GENERAL.TYPE: loopback
GENERAL.HWADDR: 00:00:00:00:00:00
GENERAL.MTU: 65536
GENERAL.STATE: 10未托管
GENERAL.CONNECTION: --
GENERAL.CON-PATH: --
IP4.ADDRESS[1]: 127.0.0.1/8
IP4.GATEWAY: --
IP6.ADDRESS[1]: ::1/128
IP6.GATEWAY: --
IP6.ROUTE[1]: dst = ::1/128, nh = ::, mt = 256
```
##### 2. 配置静态 IP 地址
注意,如果当前已经有一个 DHCP 分配的 IP 地址,则需要首先释放该地址。可以使用以下命令释放 DHCP 分配的 IP 地址:
```shell
nmcli connection modify <connection-name> ipv4.method auto
```
```shell
[root@rhel ~]# nmcli connection modify ens160 ipv4.method auto
```
使用以下命令为指定网络接口配置静态 IP 地址:
```shell
nmcli connection modify <connection-name> ipv4.addresses <ip-address>/<subnet-mask> ipv4.gateway <gateway-address> ipv4.dns <dns-address> ipv4.method manual
```
```shell
nmcli connection modify ens160 ipv4.addresses 192.168.101.123/24 ipv4.gateway 192.168.101.1 ipv4.dns 114.114.114.114 ipv4.method manual
```
- `<connection-name>` 是要配置的网络连接的名称;
- `<ip-address>` 是要设置的 IP 地址;
- `<subnet-mask>` 是子网掩码;
- `<gateway-address>` 是网关地址;
- `<dns-address>` 是 DNS 服务器地址。
##### 3. 激活新的网络配置
```shell
nmcli connection up <connection-name>
```
```shell
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 支持源 NATSNAT和目标 NATDNAT使得源 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 内核的包过滤框架,**它是 iptablesip6tablesarptablesebtables 等工具的替代品**旨在提供单一、统一的解决方案以简化包过滤和防火墙的配置。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 可以替代 iptablesip6tablesarptablesebtables 等工具,提供一个统一的解决方案。
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
UFWUncomplicated 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 服务
#### Apache
[Apache](https://httpd.apache.org/)Apache HTTP Server是一个开源的 Web 服务器软件。它由 [Apache 软件基金会](https://www.apache.org/) 维护,起源于 1995 年。Apache 支持多种操作系统,如 Linux、Unix、Windows 等。Apache 使用模块化的架构,可以通过安装和配置不同的模块来扩展其功能。
Apache 适用于各种规模的网站和应用;未来方向将继续优化性能,提高安全性,支持新的 Web 技术和标准。
#### Nginx
[Nginx](https://nginx.org/) 是一个轻量级的 Web 服务器、反向代理服务器和电子邮件代理服务器。起源于 2002 年其设计目标是提供高性能、高并发和低内存占用。Nginx 在处理静态资源、负载均衡和反向代理等方面表现出色。
Nginx 适用于高并发、高流量的网站和应用,以及作为反向代理和负载均衡器。
#### IIS
[IIS](https://www.iis.net/)Internet Information Services是微软推出的 Web 服务器软件,起源于 1995 年。IIS 只支持 Windows 操作系统。IIS 支持 ASP.NET、PHP 等多种语言,并且可以通过模块扩展其功能。
IIS 适用于依赖于 Windows 平台和 Microsoft 技术的网站和应用。
### DHCP 服务
#### ISC DHCP
[ISC DHCP](https://www.isc.org/dhcp/)Internet Systems Consortium Dynamic Host Configuration Protocol是一款开源的、广泛使用的 DHCP 服务器软件,起源于 1999 年。它支持 IPv4 和 IPv6 地址分配,适用于各种规模的网络环境。
ISC DHCP 适用于需要稳定可靠的 DHCP 服务的企业和数据中心。未来将继续优化性能,提高稳定性和安全性,增加新功能。
#### Dnsmasq
dnsmasq 是一个轻量级的 DHCP 和 DNS 服务软件,起源于 2000 年。它的设计目标是为小型网络提供简单易用的服务。dnsmasq 支持 IPv4 和 IPv6 地址分配,以及 DNS 缓存功能。
dnsmasq 适用于家庭、小型企业和实验室等小型网络环境。未来将继续保持轻量级特点,优化性能,增加新功能。
### DNS 服务
#### BIND
[BIND](https://www.isc.org/bind/)Berkeley Internet Name Domain是一款开源的 DNS 服务器软件,起源于 1980 年代。它是目前最广泛使用的 DNS 服务器软件,支持各种操作系统,如 Linux、Unix、Windows 等。
BIND 适用于需要完整功能的 DNS 服务的企业和数据中心。
#### Unbound
[Unbound](https://nlnetlabs.nl/) 是一个开源的、专注于安全和高性能的 DNS 服务器软件,起源于 2004 年。它采用了模块化的设计,支持 DNSSEC 和其他安全相关功能。
Unbound 适用于需要高性能和安全的 DNS 服务的企业和数据中心。
#### PowerDNS
[PowerDNS](https://www.powerdns.com/) 是一个开源的、功能强大的 DNS 服务器软件,起源于 2000 年。它支持多种后端数据库,如 MySQL、PostgreSQL、SQLite 等。PowerDNS 提供了灵活的 API方便进行二次开发和集成。
PowerDNS 适用于需要与数据库集成、自定义开发和高度可配置的 DNS 服务的企业和数据中心。
### NTP 服务
#### Chrony
[Chrony](https://chrony.tuxfamily.org/) 是一个开源的 NTPNetwork Time Protocol服务器和客户端软件起源于 1997 年。它具有高度可配置的特点,可以在各种网络环境中提供精确的时间同步服务。
Chrony 适用于需要精确时间同步服务的企业、数据中心和科研机构。
#### NTPd
NTPdNetwork Time Protocol daemon是一款开源的 NTP 服务器和客户端软件,起源于 1985 年。它广泛应用于各种规模的网络环境,支持各种操作系统。
NTPd 适用于各种规模的网络环境,需要可靠的时间同步服务。
### VPN 服务
#### OpenVPN
[OpenVPN](https://openvpn.net/) 是一个开源的 VPNVirtual Private Network软件起源于 2001 年。它基于 SSL/TLS 协议,提供安全稳定的远程访问和站点间连接功能。
OpenVPN 适用于需要安全远程访问和站点间连接的企业和个人用户。
#### IPSec
IPSecInternet Protocol Security是一组用于保护 IP 数据包的协议,起源于 1990 年代。IPSec 提供了认证、完整性和加密功能,广泛应用于 VPN 场景。
IPSec 适用于需要安全通信和网络互联的企业和数据中心。
#### WireGuard
[WireGuard](https://www.wireguard.com/) 是一个简单、高性能的 VPN 软件,起源于 2016 年。它使用现代加密技术,具有易于配置和部署的特点。
WireGuard 适用于需要简单易用、高性能 VPN 的企业和个人用户。
### 负载均衡
#### HAProxy
[HAProxy](https://www.haproxy.org/)High Availability Proxy是一个开源的、高性能的负载均衡软件起源于 2000 年。它可以用于分发 TCP 和 HTTP 流量,广泛应用于大型网站和云计算环境。
HAProxy 适用于需要高性能、高可用性负载均衡服务的大型网站和云计算环境。
#### LVS
LVSLinux Virtual Server是一个开源的、基于 Linux 内核的负载均衡软件,起源于 1998 年。它支持 TCP 和 UDP 协议,可以用于分发各种网络服务。
LVS 适用于需要高性能、高可用性负载均衡服务的大型网站和数据中心。
### 文件共享服务
#### Samba
[Samba](https://www.samba.org/) 是一个开源的文件共享服务软件,起源于 1992 年。它允许在不同操作系统(如 Linux、Windows 和 macOS之间共享文件和打印机。
Samba 适用于需要在不同操作系统之间共享文件和打印机的企业和家庭网络环境。
#### NFS
NFSNetwork File System是一种分布式文件系统协议起源于 1984 年。它允许在 UNIX/Linux 系统之间共享文件。
NFS 适用于需要在 UNIX/Linux 系统之间共享文件的企业和数据中心。
#### SFTP
SFTPSSH File Transfer Protocol是一种基于 SSH 协议的文件传输协议,起源于 1990 年代。它提供安全的、加密的文件传输服务。
SFTP 适用于需要安全传输文件的企业和个人用户。
### 邮件服务
#### Postfix
[Postfix](https://www.postfix.org/) 是一个开源的邮件传输代理MTA起源于 1997 年。它用于接收、路由和发送电子邮件。
Postfix 适用于需要高性能、可靠的邮件传输服务的企业和数据中心。
#### Sendmail
Sendmail 是一个经典的邮件传输代理MTA起源于 1981 年。它用于接收、路由和发送电子邮件。
Sendmail 适用于需要灵活、可定制的邮件传输服务的企业和数据中心。
#### Dovecot
[Dovecot](https://www.dovecot.org/) 是一个开源的邮件传输代理MTA起源于 2002 年。它主要用于提供邮件接收和存储服务。
Dovecot 适用于需要高性能、可靠的邮件接收和存储服务的企业和数据中心。
#### Exim
[Exim](https://www.exim.org/) 是一个开源的邮件传输代理MTA起源于 1995 年。它用于接收、路由和发送电子邮件。
Exim 适用于需要灵活、可定制的邮件传输服务的企业和数据中心。
## 网络优化
### 网络带宽管理
网络带宽管理是一种在 Linux 系统上优化网络性能和响应时间的方法。它允许管理员控制和分配网络带宽,从而为不同的应用程序和服务提供最佳性能。
常用工具:
- tc (Traffic Control)Linux 内核的一部分,用于实现复杂的带宽管理和流量控制策略。
- HTB (Hierarchical Token Bucket):一个基于 tc 的流量整形工具,允许管理员创建多层次的带宽限制和优先级分配策略。
### 网络质量管理QoS
网络质量管理Quality of ServiceQoS是一种用于分配网络带宽的技术确保网络资源的公平使用和最佳利用。通过 QoS管理员可以根据应用程序的需求和优先级分配网络带宽从而优化网络性能。
常用工具:
- tc (Traffic Control):用于实现复杂的 QoS 策略和流量控制。
- Wondershaper一个基于 tc 的简单 QoS 工具,允许管理员轻松设置带宽限制和优先级策略。
### 负载均衡
负载均衡是在多个服务器之间分配负载的技术,以提高应用程序的性能和可靠性。在 Linux 系统上,可以使用软件负载均衡器和硬件负载均衡器来实现负载均衡。
常用工具:
- HAProxy一个高性能、高可用性的软件负载均衡器支持 TCP 和 HTTP 协议。
- Nginx一个功能强大的 Web 服务器,也可以作为负载均衡器和反向代理服务器。
- LVS (Linux Virtual Server):一个基于 Linux 内核的负载均衡解决方案,支持多种负载均衡算法。
### 数据压缩
数据压缩技术可以减少网络传输的数据量从而提高网络带宽利用率和传输效率。Linux 系统提供了多种压缩工具和库,支持不同的压缩算法。
常用工具:
- gzip一种广泛使用的文件压缩工具基于 DEFLATE 压缩算法。
- bzip2一个基于 Burrows-Wheeler 算法的文件压缩工具,提供较高的压缩率。
- lz4一种快速的无损压缩算法适用于实时场景和大数据处理。
### 缓存服务
缓存服务用于在网络上存储和提供数据以提高访问速度和响应时间。Linux 系统上有多种缓存服务可用,包括 Web 缓存、DNS 缓存和内容分发网络CDN
常用工具:
- Squid一个成熟的 Web 缓存代理服务器,可以用来缓存网站内容和优化网络访问速度。
- Unbound一个轻量级的 DNS 缓存服务器,用于加速 DNS 解析请求和提高域名解析性能。
- Varnish一个高性能的 HTTP 加速器和缓存服务器,广泛用于 Web 应用程序的性能优化。
### TCP/IP 优化
TCP/IP 优化包括调整 TCP 拥塞控制算法、修改最大传输单元MTU、调整 Nagle 算法等以提高网络性能和传输速度。Linux 系统提供了多种工具和设置来优化 TCP/IP 性能。
常用方法:
- 修改内核参数:通过调整/proc/sys/net/ipv4/目录下的内核参数,如 tcp_wmem、tcp_rmem 和 tcp_congestion_control以优化 TCP 性能。
- 调整 MTU修改网卡的 MTU 设置,以适应网络环境和提高传输效率。
- 禁用 Nagle 算法:通过设置 TCP_NODELAY 选项,关闭 Nagle 算法以减小传输延迟。
### CDN内容分发网络
内容分发网络CDN是一种用于分发静态内容的技术通过在全球范围内部署多个数据中心将内容缓存到离用户最近的节点从而提高访问速度和减轻源服务器负担。CDN 广泛应用于 Web 应用程序和大型网站,以提供优质的用户体验。
常用 CDN 服务商:
- Akamai全球最大的 CDN 服务商,提供广泛的网络加速和安全解决方案。
- Cloudflare一家提供 CDN 和网络安全服务的公司,帮助网站加速和保护其内容。
- Amazon CloudFront亚马逊提供的全球内容分发服务与其他 AWS 服务紧密集成。
## 网络安全
### 网络故障排查与诊断
Linux 系统提供了一系列工具来帮助用户进行网络故障排查与诊断,包括 ping、traceroute、mtr、nslookup、dig 和 whois 等。
- ping用于检测网络连接和延迟通过发送 ICMP 数据包来检测目标主机是否可达。
- traceroute用于显示数据包从源主机到目标主机经过的路由路径。
- mtr结合了 ping 和 traceroute 功能的网络诊断工具,提供实时路由分析。
- nslookup用于查询 DNS 服务器以获取域名解析信息。
- dig功能强大的 DNS 查询工具,可以获取详细的 DNS 记录信息。
- whois用于查询域名注册信息和 IP 地址分配信息。
### 安全隔离
安全隔离是网络安全的重要概念,可以防止潜在的网络攻击和数据泄露。主要实现技术包括 VLAN、DMZ 和容器网络隔离。
- VLAN (Virtual Local Area Network):通过在网络交换机上配置 VLAN可以将物理网络划分为多个逻辑子网实现网络资源的安全隔离。
- DMZ (Demilitarized Zone):一种网络安全策略,通过在内部网络和外部网络之间建立一个隔离区域,保护内部网络资源免受外部攻击。
- 容器网络隔离:通过使用容器技术(如 Docker、Kubernetes和虚拟网络如 Calico、Flannel来实现应用程序的安全隔离。
### SSH 安全配置
SSH 是远程登录和管理 Linux 系统的常用协议。正确配置 SSH 可以提高系统的安全性。
- 密钥认证:使用公钥/私钥对进行身份验证,替代密码认证,提高安全性。
- 端口改变:将 SSH 服务端口从默认的 22 更改为其他端口,降低被扫描和攻击的风险。
- 禁止 root 登录:禁止直接通过 SSH 以 root 身份登录,减少被攻击者利用的可能性。
- 防止暴力破解:通过限制登录尝试次数、使用防火墙规则或安装防暴力破解软件(如 Fail2Ban来防止暴力破解攻击。
和攻击的风险。
- 禁止 root 登录:禁止直接通过 SSH 以 root 身份登录,减少被攻击者利用的可能性。
- 防止暴力破解:通过限制登录尝试次数、使用防火墙规则或安装防暴力破解软件(如 Fail2Ban来防止暴力破解攻击。
### 虚拟化网络
虚拟化网络是在物理网络基础上创建虚拟网络资源的技术,包括虚拟网卡、虚拟交换机、网桥和 SDN软件定义网络等。
- 虚拟网卡:在虚拟机和容器中模拟的网络接口,与物理网卡类似,可用于建立虚拟网络连接。
- 虚拟交换机:在虚拟环境中实现网络连接和数据包转发的虚拟设备。
- 网桥:用于连接虚拟网络和物理网络,实现虚拟机与外部网络通信。
- SDN一种将网络控制平面与数据平面分离的技术允许通过软件实现网络资源的动态配置和管理。
### 网络监测和分析
网络监测和分析工具可以帮助管理员实时监控网络状况、发现异常行为和安全威胁。常用工具包括 tcpdump、wireshark、netstat、nmap、sniffing、IDS 和 NMS 等。
- tcpdump用于捕获和分析网络数据包的命令行工具。
- wireshark一个图形界面的网络协议分析器。
- netstat用于显示网络连接状态和监听端口的命令行工具。
- nmap一款强大的网络扫描和安全审计工具。
### 网络入侵检测系统IDS
网络入侵检测系统Intrusion Detection SystemIDS可以检测网络中的恶意行为和攻击活动。常见的 IDS 工具包括 Snort、Suricata、OSSEC 和 Bro/Zeek。
- Snort一款开源的网络入侵检测和防御系统基于规则匹配和异常检测来识别恶意流量。
- Suricata一个高性能的开源 IDS/IPS/NSM网络安全监控引擎支持实时流量分析和威胁防御。
- OSSEC一个开源的主机入侵检测系统用于监控文件系统、日志文件和网络活动。
- Bro/Zeek一款强大的网络安全监控平台支持实时流量分析、协议解析和异常检测。
### 网络安全监控系统NMS
网络安全监控系统Network Monitoring SystemNMS用于实时监控网络设备和服务的运行状况发现性能问题和安全威胁。常见的 NMS 工具包括 Nagios、Zabbix、Cacti、Prometheus 和 Grafana。
- Nagios一款功能强大的开源网络监控系统支持多种插件和扩展用于监控网络设备、服务和应用程序。
- Zabbix一种企业级的开源监控解决方案提供分布式监控、报警和报表功能。
- Cacti一个基于 RRDtool 的网络图形监控工具,用于绘制网络设备性能图表。
- Prometheus一个开源的监控和告警系统广泛用于监控微服务和容器化应用程序。
- Grafana一个流行的开源监控数据可视化工具支持多种数据源如 Prometheus、InfluxDB 和 Elasticsearch 等。
### 网络安全审计系统
网络安全审计系统用于评估网络设备和应用程序的安全性,发现潜在的漏洞和配置问题。常见的安全审计工具包括 OSSEC、Tripwire、AIDE、OpenSCAP 和 Lynis。
- OSSEC一个开源的主机入侵检测系统也可以用于安全审计和配置检查。
- Tripwire一款用于文件完整性检查和安全审计的工具可以检测文件的变更和潜在的安全问题。
- AIDE (Advanced Intrusion Detection Environment):一个用于文件完整性检查和入侵检测的开源工具。
- OpenSCAP (Open Security Content Automation Protocol):一个开源的安全配置和漏洞管理框架,基于 SCAP 标准实现。
- Lynis一个开源的安全审计和硬化工具用于检查 Linux 系统的配置和安全性。
### 网络加密技术
网络加密技术用于保护数据在传输过程中的隐私和完整性。主要的网络加密技术包括 SSL/TLS、IPSec、SSH 等。
- SSL/TLS安全套接层Secure Sockets LayerSSL和传输层安全Transport Layer SecurityTLS是应用于网络传输层的加密技术用于保护 Web 浏览、电子邮件和其他应用程序的数据安全。
- IPSecInternet 协议安全IP SecurityIPSec是一个用于保护 IP 数据包传输安全的协议套件提供加密、认证和完整性保护功能。IPSec 广泛应用于 VPN 技术中。
- SSH安全外壳Secure ShellSSH是一种加密网络协议用于在不安全的网络环境中实现安全的远程登录、文件传输和其他网络服务。
### 安全认证和授权
安全认证和授权技术用于验证用户身份和控制用户访问权限。主要技术包括 RADIUS、TACACS+、LDAP、Kerberos 等。
- RADIUS远程认证拨号用户服务Remote Authentication Dial-In User ServiceRADIUS是一个用于 AAA认证、授权和计费的网络协议广泛应用于网络接入和 VPN 服务中。
- TACACS+:终端访问控制器访问控制系统 +Terminal Access Controller Access-Control System+TACACS+)是一种用于网络设备管理的 AAA 协议,主要应用于路由器、交换机等网络设备的远程管理。
- LDAP轻型目录访问协议Lightweight Directory Access ProtocolLDAP是一种用于访问和维护分布式目录信息服务的协议常用于企业网络的用户认证和组织结构管理。
- Kerberos一种基于票据的网络认证协议用于实现单点登录Single Sign-OnSSO和安全的跨域认证。
### 网络安全策略和最佳实践
为了提高网络安全,企业和组织需要制定和实施合适的网络安全策略,并遵循最佳实践。
- 制定并执行网络安全政策:明确网络资源的访问控制、数据保护和应急响应等方面的要求。
- 定期进行安全审计和漏洞扫描:检查网络设备和应用程序的安全配置,发现并修复潜在的安全漏洞。
- 提高员工安全意识:通过培训和教育,提高员工对网络安全的认识,防止误操作和内部威胁。