学习目标
- 理解本节涉及的核心主题:Linux 网络管理、网络流量监控、
iftop- 实时监控网络流量、nload- 查看网络流量统计。 - 掌握重点命令或工具:
iftop、nload、iptables、firewalld、ufw。 - 能够结合示例完成常见操作,并理解关键参数、使用场景与结果差异。
- 能够识别本节相关的常见风险、易错点或排查思路。
学习重点
- 主题范围:Linux 网络管理、网络流量监控、
iftop- 实时监控网络流量、nload- 查看网络流量统计、网络服务与防火墙、配置iptables和firewalld - 重点命令:
iftop、nload、iptables、firewalld、ufw - 学习重点:命令用途、关键参数、典型场景、与相近命令的区别
- 复习方式:先理解场景,再动手练习,最后对照结果检查
Linux 网络管理
网络流量监控
网络流量监控有助于了解系统的网络使用情况,识别异常流量,优化网络性能。以下介绍两种常用的网络流量监控工具:iftop 和 nload。
iftop - 实时监控网络流量
iftop 是一个实时网络流量监控工具,类似于 top,用于显示网络接口上的实时数据传输情况。
安装与基本用法
安装 iftop
- Debian/Ubuntu
sudo apt-get install iftop - CentOS/RHEL
sudo yum install epel-release sudo yum install iftop - Arch Linux
sudo pacman -S iftop
基本用法:
sudo iftop
说明:
- 需要超级用户权限以访问网络接口信息。
- 默认监控第一个网络接口(如
eth0)。可使用-i选项指定其他接口。
示例:监控 eth0 接口
sudo iftop -i eth0
界面与功能
iftop 提供了一个直观的界面,显示实时的网络流量信息,包括:
- 发送流量:当前发送的数据流量。
- 接收流量:当前接收的数据流量。
- 累计流量:一段时间内累计的数据流量。
- 连接列表:显示与系统通信的各个对端主机及其流量。
界面示例:
10.0.0.1:54321 93.184.216.34:80
TX: 10.0 KB/s RX: 5.0 KB/s Total: 15.0 KB/s
┌─────────────────────────────────────────────────────────┐
│ │
│ 10.0 KB/s → 5.0 KB/s │
│ 10.0 KB/s ← 5.0 KB/s │
└─────────────────────────────────────────────────────────┘
常用快捷键与选项
h:显示帮助菜单。q:退出iftop。t:切换显示模式(按总流量、发送流量或接收流量排序)。S:排序为发送流量。R:排序为接收流量。T:排序为总流量。f:过滤流量,显示特定主机或端口的流量。
实例与应用场景
实例 1:实时监控 eth0 接口的网络流量
sudo iftop -i eth0
应用场景:
- 流量分析:了解当前网络流量的来源和去向,识别高流量连接。
- 异常检测:发现异常流量模式,如 DDoS 攻击或数据泄露。
- 性能优化:优化网络资源分配,提升系统性能。
实例 2:过滤显示特定主机的流量
sudo iftop -i eth0 -f "host 192.168.1.100"
说明:
-f "host 192.168.1.100":仅显示与192.168.1.100主机的流量。
应用场景:
- 监控关键主机:集中监控关键服务器或服务的网络流量。
- 故障排除:跟踪特定主机的网络活动,诊断连接问题。
nload - 查看网络流量统计
nload 是一个简单的命令行工具,用于实时显示网络接口的流量统计,包括发送和接收的数据速率。
安装与基本用法
安装 nload
- Debian/Ubuntu
sudo apt-get install nload - CentOS/RHEL
sudo yum install epel-release sudo yum install nload - Arch Linux
sudo pacman -S nload
基本用法:
nload
说明:
- 默认监控所有网络接口。
- 可以使用
-i和-o选项分别指定输入和输出接口。
示例:监控 eth0 接口的发送和接收流量
nload -i eth0 -o eth0
界面与功能
nload 提供了一个简洁的界面,显示每个网络接口的实时数据传输速率,包括:
- 发送速率(TX):当前发送的数据速率。
- 接收速率(RX):当前接收的数据速率。
- 总传输量:累计发送和接收的数据量。
- 图形显示:通过图形表示数据流量变化。
界面示例:
Interface: eth0
TX: 500 KB/s [████████████████████████████████████████████████████]
RX: 300 KB/s [████████████████████████████████████████████████]
Total TX: 5.0 GB
Total RX: 3.0 GB
实例与应用场景
实例 1:实时监控所有网络接口的流量
nload
说明:
- 显示所有接口的发送和接收流量速率。
- 适用于快速查看系统整体的网络流量状况。
实例 2:监控特定接口的流量
nload -i eth0 -o eth0
说明:
-i eth0:指定输入接口为eth0。-o eth0:指定输出接口为eth0。
应用场景:
- 流量统计:定期查看网络接口的流量统计,评估网络使用情况。
- 资源监控:监控服务器的网络资源,确保流量在可控范围内。
- 故障排除:识别网络瓶颈或异常流量,进行针对性诊断。
网络服务与防火墙
网络服务与防火墙管理是确保系统安全和提供必要网络功能的关键环节。通过配置防火墙规则和管理网络服务,可以有效地控制系统的网络访问,防止未经授权的访问和潜在的网络攻击。
配置 iptables 和 firewalld
iptables 和 firewalld 是 Linux 系统中常用的防火墙配置工具,用于管理网络流量的过滤和转发规则。
iptables - 防火墙配置工具
iptables 是 Linux 内核的一个用户空间工具,用于设置、维护和检查 IP 数据包过滤规则。它通过定义不同的规则链(如 INPUT、OUTPUT、FORWARD)来控制数据包的流动。
基本概念与作用
- 表(Table):
iptables使用不同的表来处理不同类型的规则,如filter(默认)、nat、mangle。 - 链(Chain)
:每个表包含多个链,链是规则的有序列表,按顺序检查数据包。- INPUT:处理进入系统的数据包。
- OUTPUT:处理从系统发送出去的数据包。
- FORWARD:处理通过系统转发的数据包。
- 规则(Rule):每个规则定义了匹配条件和相应的动作(如 ACCEPT、DROP、REJECT)。
常用链与规则
- INPUT 链:用于控制进入系统的流量。
示例:允许来自本地回环接口的所有流量sudo iptables -A INPUT -i lo -j ACCEPT - OUTPUT 链:用于控制从系统发送出去的流量。
示例:允许所有系统发送出去的流量sudo iptables -A OUTPUT -j ACCEPT - FORWARD 链:用于控制经过系统的流量。
示例:默认拒绝所有转发的流量sudo iptables -P FORWARD DROP
常用命令与示例
1. 查看当前防火墙规则
sudo iptables -L -v
输出示例:
Chain INPUT (policy DROP 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
0 0 ACCEPT all lo * 0.0.0.0/0 0.0.0.0/0
10 600 ACCEPT tcp eth0 * 192.168.1.0/24 0.0.0.0/0 tcp dpt:22
5 300 DROP all * * 203.0.113.0/24 0.0.0.0/0
2. 允许特定端口的流量
示例:允许 TCP 端口 80(HTTP)和 443(HTTPS)的流量
sudo iptables -A INPUT -p tcp --dport 80 -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 443 -j ACCEPT
3. 拒绝特定端口的流量
示例:拒绝 TCP 端口 23(Telnet)的流量
sudo iptables -A INPUT -p tcp --dport 23 -j DROP
4. 允许已建立和相关的连接
示例:允许已建立和相关的连接通过
sudo iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
5. 拒绝所有其他流量
示例:设置默认策略为 DROP
sudo iptables -P INPUT DROP
sudo iptables -P FORWARD DROP
sudo iptables -P OUTPUT ACCEPT
保存与恢复规则
防火墙规则在系统重启后不会自动保留,需要手动保存和恢复。
Debian/Ubuntu 使用 iptables-persistent
- 安装
iptables-persistentsudo apt-get install iptables-persistent - 保存当前规则
sudo netfilter-persistent save - 恢复规则
sudo netfilter-persistent reload
CentOS/RHEL 使用 service iptables save
- 保存当前规则
sudo service iptables save - 启用
iptables服务sudo systemctl enable iptables
注意事项:
- 谨慎操作:错误的防火墙规则可能导致无法访问系统,建议在本地终端或有物理访问权限的情况下操作。
- 备份规则:在修改防火墙规则前,备份当前规则以便恢复。
firewalld - 动态防火墙管理
firewalld 是一个动态的防火墙管理工具,提供更高级和灵活的防火墙配置方式,支持区域和服务的概念,简化了复杂防火墙规则的管理。
基本概念与作用
- 区域(Zone):定义不同的信任级别,适用于不同的网络环境(如家庭网络、公共网络)。
- 服务(Service):预定义的一组防火墙规则,简化常见服务(如 HTTP、SSH)的配置。
- 持久性:防火墙规则可以在运行时动态调整,而无需重启服务。
区域与服务的配置
查看当前区域
sudo firewall-cmd --get-active-zones
示例输出:
public
interfaces: eth0
查看区域中的服务
sudo firewall-cmd --zone=public --list-services
示例输出:
ssh dhcpv6-client
添加服务到区域
示例:允许 HTTP 和 HTTPS 服务
sudo firewall-cmd --zone=public --add-service=http --permanent
sudo firewall-cmd --zone=public --add-service=https --permanent
sudo firewall-cmd --reload
说明:
--add-service=http:添加 HTTP 服务规则。--permanent:永久保存规则。--reload:应用永久规则。
移除服务从区域
示例:移除 SSH 服务
sudo firewall-cmd --zone=public --remove-service=ssh --permanent
sudo firewall-cmd --reload
常用命令与示例
1. 启动和停止 firewalld 服务
sudo systemctl start firewalld
sudo systemctl enable firewalld
sudo systemctl stop firewalld
sudo systemctl disable firewalld
2. 查看所有可用区域
sudo firewall-cmd --get-zones
3. 查看所有可用服务
sudo firewall-cmd --get-services
4. 允许特定端口的流量
示例:允许 TCP 端口 22(SSH)
sudo firewall-cmd --zone=public --add-port=22/tcp --permanent
sudo firewall-cmd --reload
5. 拒绝特定端口的流量
示例:拒绝 TCP 端口 23(Telnet)
sudo firewall-cmd --zone=public --remove-port=23/tcp --permanent
sudo firewall-cmd --reload
6. 查看当前防火墙规则
sudo firewall-cmd --list-all
输出示例:
public (active)
target: default
icmp-block-inversion: no
interfaces: eth0
sources:
services: ssh dhcpv6-client http https
ports:
protocols:
masquerade: no
forward-ports:
source-ports:
icmp-blocks:
rich rules:
应用场景:
- 动态调整防火墙规则:根据网络环境的变化,动态添加或移除服务和端口。
- 简化防火墙管理:使用预定义的服务和区域,快速配置防火墙规则。
- 增强安全性:通过合理配置防火墙规则,限制未授权的网络访问。
兼容性与优势
- 兼容性:与传统的
iptables规则兼容,可以通过firewalld管理现有的iptables规则。 - 优势
:- 动态管理:无需重启防火墙服务即可添加或移除规则。
- 区域与服务:通过定义区域和服务,简化防火墙规则的管理。
- 集成工具:与 GUI 工具(如 Firewall Configuration)集成,提供图形化的防火墙管理界面。
使用 ufw 管理防火墙
ufw(Uncomplicated Firewall)是 Ubuntu 等基于 Debian 的系统中常用的防火墙管理工具,旨在简化 iptables 的配置和管理。
安装与启用 ufw
安装 ufw
在 Ubuntu 等系统中,ufw 通常预安装。如果未安装,可以通过以下命令安装:
sudo apt-get install ufw
启用 ufw
sudo ufw enable
检查 ufw 状态
sudo ufw status verbose
输出示例:
Status: active
Logging: on (low)
Default: deny (incoming), allow (outgoing), deny (routed)
常用命令与规则管理
ufw 提供了简单的命令来管理防火墙规则,支持允许或拒绝特定的端口和服务。
1. 允许端口
示例:允许 SSH(端口 22)
sudo ufw allow ssh
或指定端口和协议
sudo ufw allow 22/tcp
2. 拒绝端口
示例:拒绝 Telnet(端口 23)
sudo ufw deny telnet
或指定端口和协议
sudo ufw deny 23/tcp
3. 允许特定 IP 地址访问端口
示例:仅允许 192.168.1.100 通过 SSH 连接
sudo ufw allow from 192.168.1.100 to any port 22
4. 移除规则
示例:移除允许 SSH 的规则
sudo ufw delete allow ssh
5. 允许/拒绝整个服务
示例:允许 HTTP 和 HTTPS 服务
sudo ufw allow http
sudo ufw allow https
6. 查看当前防火墙规则
sudo ufw status numbered
输出示例:
Status: active
To Action From
-- ------ ----
[1] 22/tcp ALLOW IN Anywhere
[2] 80/tcp ALLOW IN Anywhere
[3] 443/tcp ALLOW IN Anywhere
配置示例与应用场景
实例 1:设置基本防火墙规则
- 允许 SSH、HTTP 和 HTTPS
sudo ufw allow ssh sudo ufw allow http sudo ufw allow https - 拒绝所有其他入站流量
默认策略通常是拒绝入站流量,但可以显式设置:sudo ufw default deny incoming sudo ufw default allow outgoing - 启用防火墙
sudo ufw enable
说明:
- 允许 SSH:确保可以通过 SSH 远程管理系统。
- 允许 HTTP 和 HTTPS:支持 Web 服务的正常运行。
- 拒绝其他入站流量:增强系统安全性,防止未授权访问。
应用场景:
- 服务器部署:在部署 Web 服务器时,配置必要的防火墙规则,确保服务正常运行且系统安全。
- 远程访问控制:通过
ufw配置,限制远程访问的来源和权限,提升系统安全性。 - 网络安全审计:定期检查和更新防火墙规则,确保系统免受潜在的网络攻击。
配置 SSH 与远程访问
SSH(Secure Shell)是 Linux 系统中常用的远程访问协议,提供安全的远程登录和命令执行功能。配置 SSH 和相关防火墙规则是确保系统远程管理安全的关键步骤。
编辑 SSH 配置文件 /etc/ssh/sshd_config
sshd_config 文件用于配置 SSH 服务器的各种参数,确保远程访问的安全性和灵活性。
步骤:
-
打开配置文件
sudo nano /etc/ssh/sshd_config -
配置密钥认证
启用公钥认证PubkeyAuthentication yes禁用密码认证
PasswordAuthentication no禁用 Root 用户登录
PermitRootLogin no -
保存并关闭文件
-
重启 SSH 服务应用更改
sudo systemctl restart sshd
配置防火墙规则允许 SSH 连接
确保防火墙允许 SSH 端口(默认端口 22)的流量,以便远程访问。
使用 ufw 配置
sudo ufw allow ssh
使用 firewalld 配置
sudo firewall-cmd --permanent --add-service=ssh
sudo firewall-cmd --reload
使用 iptables 配置
sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT
实例与应用场景
实例 1:配置 SSH 以仅使用密钥认证
-
生成 SSH 密钥对(本地主机)
ssh-keygen -t rsa -b 4096 -C "alice@example.com"说明:
-t rsa:指定 RSA 算法。-b 4096:生成 4096 位密钥。-C:添加注释(通常为电子邮件)。
-
将公钥复制到远程主机
ssh-copy-id bob@remotehost说明:
bob@remotehost:远程主机上的用户和主机名或 IP 地址。
-
验证无密码 SSH 登录
ssh bob@remotehost说明:
- 应该无需输入密码即可登录,基于密钥认证。
应用场景:
- 提高远程访问安全性:通过禁用密码认证,防止暴力破解攻击,确保只有拥有私钥的用户可以访问。
- 自动化脚本:使用 SSH 密钥认证,实现无需密码的远程命令执行和文件传输,适用于自动化任务。
实例 2:禁用 Root 用户通过 SSH 登录
- 编辑 SSH 配置文件
sudo nano /etc/ssh/sshd_config - 设置
PermitRootLogin noPermitRootLogin no - 保存并重启 SSH 服务
sudo systemctl restart sshd
说明:
- 禁止 Root 远程登录:增强系统安全性,防止攻击者直接尝试以 Root 身份登录。
应用场景:
- 增强安全性:防止 Root 用户凭证泄露导致系统被完全控制。
- 促进使用普通用户管理系统:通过 sudo 提升权限,遵循最小权限原则,降低风险。
本节总结
- 本节主要围绕 Linux 网络管理、网络流量监控、
iftop- 实时监控网络流量、nload- 查看网络流量统计、网络服务与防火墙 展开。 - 需要重点掌握的命令或工具包括:
iftop、nload、iptables、firewalld、ufw。 - 学习时应优先抓住「命令解决什么问题、在什么场景下使用、执行后会产生什么结果」。
- 对涉及权限、覆盖、网络、系统服务、删除或安全配置的操作,建议先在测试环境练习。
复习建议
- 先用自己的话复述本节每个主题或命令的作用,避免只记参数不懂用途。
- 按原文示例至少手敲一遍典型命令,并观察输出变化。
- 对高风险操作先确认路径、权限和目标对象,再执行实际命令。
- 可优先复习这些高频命令:
iftop、nload、iptables、firewalld、ufw。