解析Linux网络
1. tcpdump
tcpdump 是一个网络抓包工具,可以捕获并分析网络流量。
基本用法:
tcpdump -i eth0 |
捕获接口 eth0 上的所有数据包。
高级用法:
tcpdump -i eth0 host 192.168.1.1 |
捕获与特定主机 192.168.1.1 相关的数据包。
tcpdump -i eth0 port 80 |
捕获接口 eth0 上所有通过端口 80 的数据包。
tcpdump -i eth0 -w capture.pcap |
将捕获的数据包保存到文件 capture.pcap。
tcpdump -r capture.pcap |
读取并分析 capture.pcap 文件中的数据包。
tcpdump -i eth0 'tcp[tcpflags] & (tcp-syn|tcp-ack) != 0' |
捕获所有带有 SYN 或 ACK 标志的 TCP 包。
2. lsof
lsof 显示系统中打开的文件,常用于查看打开的网络连接。
基本用法:
lsof -i |
显示所有打开的网络连接。
高级用法:
lsof -i :80 |
显示所有使用端口 80 的网络连接。
lsof -p <PID> |
显示特定进程 <PID> 打开的文件。
lsof -u <username> |
显示特定用户打开的文件。
lsof /path/to/file |
显示哪个进程打开了指定文件。
3. net-tools
net-tools 包含 ifconfig、netstat 等工具。
基本用法:
ifconfig eth0 |
显示接口 eth0 的配置信息。
netstat -an |
显示所有活动的网络连接及其状态。
高级用法:
ifconfig eth0 192.168.1.100 netmask 255.255.255.0 |
配置接口 eth0 的 IP 地址和子网掩码。
netstat -r |
显示路由表信息。
netstat -i |
显示网络接口统计信息。
netstat -plnt |
显示所有监听的 TCP 端口及其关联的进程。
4. iproute2
iproute2 是 net-tools 的替代品,提供 ip 命令。
基本用法:
ip link show |
显示所有网络接口。
ip addr show |
显示所有接口的 IP 地址信息。
高级用法:
ip addr add 192.168.1.100/24 dev eth0 |
为接口 eth0 添加 IP 地址。
ip link set eth0 up |
启用接口 eth0。
ip route add default via 192.168.1.1 |
设置默认网关。
ip link set eth0 down |
禁用接口 eth0。
ip rule add from 192.168.1.0/24 table 1 |
添加路由规则,使来自 192.168.1.0/24 的流量使用路由表 1。
5. NetworkManager
NetworkManager 是管理网络配置的工具。
基本用法:
nmtui |
交互命令窗口
nmcli device status |
查看当前设备的连接状态。
nmcli con show |
列出所有已保存的网络连接。
高级用法:
nmcli device wifi list |
列出可用的 Wi-Fi 网络。
nmcli device wifi connect SSID password PASSWORD |
连接到指定的 Wi-Fi 网络。
nmcli con add type ethernet ifname eth0 con-name my-eth0 |
添加一个名为 my-eth0 的以太网连接。
nmcli con modify my-eth0 ipv4.addresses 192.168.1.100/24 ipv4.gateway 192.168.1.1 |
修改连接 my-eth0 的 IP 地址和网关。
nmcli con up my-eth0 |
启用连接 my-eth0。
6. firewalld
firewalld 提供动态的防火墙管理工具。
基本用法:
systemctl start firewalld |
启动 firewalld 服务。
firewall-cmd --get-active-zones |
查看当前活动的区域。
firewall-cmd --list-all |
列出当前区域的所有规则。
高级用法:
firewall-cmd --add-port=80/tcp --permanent |
永久打开端口 80。
firewall-cmd --reload |
重新加载防火墙配置。
firewall-cmd --zone=public --add-service=http --permanent |
将 http 服务添加到 public 区域。
firewall-cmd --remove-port=80/tcp --permanent |
永久关闭端口 80。
7. iptables
iptables 是 Linux 内核中的包过滤工具。
四表五链

iptables 是 Linux 系统中用于配置网络地址转换(NAT)、包过滤和包修改规则的工具。iptables 使用四个表和五个链来处理数据包。以下是对四个表和五个链的详细解释:
四个表(Tables)
filter 表:
- 用途:这是默认的表,用于网络包过滤。
- 链:包含 INPUT、FORWARD 和 OUTPUT 链。
- 示例规则:
# 允许所有进入本地网络接口的流量
iptables -A INPUT -i lo -j ACCEPT
# 允许所有从本地网络接口发出的流量
iptables -A OUTPUT -o lo -j ACCEPT
# 拒绝所有从外部到达本机的流量
iptables -A INPUT -i eth0 -j DROP
nat 表:
- 用途:用于网络地址转换(NAT),比如源 NAT(SNAT)和目标 NAT(DNAT)。
- 链:包含 PREROUTING、OUTPUT 和 POSTROUTING 链。
- 示例规则:
# 将外部访问的80端口重定向到内部服务器的8080端口
iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-port 8080
# 将发往外部的流量的源IP地址更改为指定的IP地址
iptables -t nat -A POSTROUTING -o eth0 -j SNAT --to-source 1.2.3.4
mangle 表:
- 用途:用于修改 IP 包头信息,如 TOS、TTL 等。
- 链:包含 PREROUTING、OUTPUT、INPUT、FORWARD 和 POSTROUTING 链。
- 示例规则:
# 修改流经本机的包的TTL值
iptables -t mangle -A PREROUTING -i eth0 -j TTL --ttl-set 128
raw 表:
- 用途:用于在连接跟踪(conntrack)机制之前对数据包进行处理。
- 链:包含 PREROUTING 和 OUTPUT 链。
- 示例规则:
# 标记流经本机的包,以不进行连接跟踪
iptables -t raw -A PREROUTING -p tcp --dport 80 -j NOTRACK
五个链(Chains)
INPUT 链:
- 用途:处理入站流量,即目标为本机的数据包。
- 示例规则:
# 拒绝所有到达本机的入站流量
iptables -A INPUT -j DROP
FORWARD 链:
- 用途:处理转发流量,即通过本机路由的数据包。
- 示例规则:
# 允许所有通过本机的转发流量
iptables -A FORWARD -j ACCEPT
OUTPUT 链:
- 用途:处理出站流量,即从本机发出的数据包。
- 示例规则:
# 允许所有从本机发出的出站流量
iptables -A OUTPUT -j ACCEPT
PREROUTING 链:
- 用途:在路由决策之前处理入站流量,用于 nat 和 mangle 表。
- 示例规则:
# 在路由之前修改入站包的目的IP地址
iptables -t nat -A PREROUTING -p tcp --dport 8080 -j DNAT --to-destination 192.168.1.100:80
POSTROUTING 链:
- 用途:在路由决策之后处理出站流量,用于 nat 和 mangle 表。
- 示例规则:
# 在路由之后修改出站包的源IP地址
iptables -t nat -A POSTROUTING -o eth0 -j SNAT --to-source 1.2.3.4
基本用法:
iptables -L |
列出所有当前规则。
iptables -A INPUT -p tcp --dport 80 -j ACCEPT |
允许所有进入的 TCP 连接通过端口 80。
高级用法:
iptables -D INPUT -p tcp --dport 80 -j ACCEPT |
删除规则,阻止端口 80 的连接。
iptables -A INPUT -s 192.168.1.1 -j DROP |
丢弃来自 192.168.1.1 的所有连接。
iptables -A OUTPUT -p icmp -j ACCEPT |
允许所有 ICMP 出站流量。
iptables-save > /etc/iptables/rules.v4 |
保存当前规则到文件。
iptables-restore < /etc/iptables/rules.v4 |
从文件恢复规则。
8. nftables
NFTables 是一个用于包过滤、网络地址转换 (NAT) 和流量控制的框架。它替代了 iptables、ip6tables、arptables 和 ebtables。NFTables 的配置文件通常使用简单的脚本语言来定义规则。以下是 NFTables 的表、链和规则的基本结构和语法。
一、基础结构
表(table)
- 表是规则集的容器。每张表可以包含多个链。
链(chain)
- 链是规则的有序列表。链可以是内置的(如
input、output、forward)或用户定义的。
- 链是规则的有序列表。链可以是内置的(如
规则(rule)
- 规则定义了特定条件下应执行的动作。
二、表、链和规则的语法
创建表
nft add table <family> <table_name>
<family>: 地址族,常见的有ip(IPv4)、ip6(IPv6)、inet(支持 IPv4 和 IPv6)、arp(ARP)、bridge(网桥)。<table_name>: 表的名称。
删除表
nft delete table <family> <table_name>
列出现有表
nft list tables
创建链
nft add chain <family> <table_name> <chain_name> { type <type> hook <hook> priority <priority>; }
<type>: 链的类型,可以是filter、nat等。<hook>: 钩子点,可以是input、output、forward、prerouting、postrouting等。<priority>: 优先级。
例如:
nft add chain ip mytable mychain { type filter hook input priority 0\; }
删除链
nft delete chain <family> <table_name> <chain_name>
添加规则
nft add rule <family> <table_name> <chain_name> <expression> <action>
<expression>: 匹配条件,例如ip saddr 192.168.1.1。<action>: 动作,例如accept、drop、reject、log等。
例如:
nft add rule ip mytable mychain ip saddr 192.168.1.1 drop
删除规则
可以通过规则句柄删除:nft delete rule <family> <table_name> <chain_name> handle <handle_number>
首先列出链中的规则以找到句柄:
nft list chain <family> <table_name> <chain_name>
列出规则
nft list ruleset
三、示例
假设我们要创建一个简单的防火墙配置,允许入站 SSH 连接并拒绝所有其他入站流量。
创建表
nft add table ip filter
创建链
nft add chain ip filter input { type filter hook input priority 0\; }
nft add chain ip filter forward { type filter hook forward priority 0\; }
nft add chain ip filter output { type filter hook output priority 0\; }添加规则
nft add rule ip filter input ip protocol tcp tcp dport 22 accept
nft add rule ip filter input drop查看配置
nft list ruleset
这样,我们就配置了一个简单的防火墙,允许入站 SSH 连接并拒绝所有其他入站流量。
基本用法:
nft list ruleset |
列出当前规则集。
nft add rule ip filter input tcp dport 80 accept |
添加规则,允许通过端口 80 的 TCP 连接。
高级用法:
nft delete rule ip filter input tcp dport 80 accept |
删除规则,阻止端口 80 的连接。
nft add rule ip filter input ip saddr 192.168.1.1 drop |
丢弃来自 192.168.1.1 的所有连接。
nft add table ip mytable |
添加一个名为 mytable 的表。
nft add chain ip mytable mychain { type filter hook input priority 0 \; } |
在 mytable 表中添加一个名为 mychain 的链。
nft add rule ip mytable mychain counter |
在 mychain 链中添加一个计数规则。
9. curl
curl 是用于传输数据的命令行工具。
基本用法:
curl -O http://example.com/file |
下载文件 file。
curl -I http://example.com |
获取 HTTP 响应头信息。
高级用法:
curl -X POST -d "param1=value1¶m2=value2" http://example.com/api |
发送 POST 请求。
curl -u username:password http://example.com |
使用基本身份验证下载文件。
curl -k https://example.com |
忽略 SSL 证书错误。
curl -L http://example.com |
跟随重定向。
curl -C - -O http://example.com/file |
断点续传下载文件。
10. wget
wget 是另一个下载文件的命令行工具。
基本用法:
wget http://example.com/file |
下载文件 file。
wget -q http://example.com/file |
静默模式下载文件,不输出任何信息。
高级用法:
wget --mirror -p --convert-links -P ./local http://example.com |
递归下载整个网站,并将文件保存到 ./local 目录中
wget -c http://example.com/file |
断点续传下载文件。
wget --limit-rate=100k http://example.com/file |
限制下载速度为 100kB/s。
wget --user=username --password=password http://example.com/file |
使用基本身份验证下载文件。
11. iptop
iptop 是一个实时显示网络流量的工具。
基本用法:
iptop |
启动 iptop,显示实时网络流量。
高级用法:
iptop -i eth0 |
显示特定接口 eth0 的网络流量。
iptop -f src net 192.168.1.0/24 |
显示来自特定子网 192.168.1.0/24 的流量。
iptop -f dst port 80 |
显示发送到端口 80 的流量。

.jpg)
.jpg)
.jpg)
.jpg)
.jpg)