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 包含 ifconfignetstat 等工具。

基本用法:

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

iproute2net-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 内核中的包过滤工具。

四表五链

img

iptables 是 Linux 系统中用于配置网络地址转换(NAT)、包过滤和包修改规则的工具。iptables 使用四个表和五个链来处理数据包。以下是对四个表和五个链的详细解释:

四个表(Tables)
  1. 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
  2. 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
  3. mangle 表

    • 用途:用于修改 IP 包头信息,如 TOS、TTL 等。
    • :包含 PREROUTING、OUTPUT、INPUT、FORWARD 和 POSTROUTING 链。
    • 示例规则
      # 修改流经本机的包的TTL值
      iptables -t mangle -A PREROUTING -i eth0 -j TTL --ttl-set 128
  4. raw 表

    • 用途:用于在连接跟踪(conntrack)机制之前对数据包进行处理。
    • :包含 PREROUTING 和 OUTPUT 链。
    • 示例规则
      # 标记流经本机的包,以不进行连接跟踪
      iptables -t raw -A PREROUTING -p tcp --dport 80 -j NOTRACK
五个链(Chains)
  1. INPUT 链

    • 用途:处理入站流量,即目标为本机的数据包。
    • 示例规则
      # 拒绝所有到达本机的入站流量
      iptables -A INPUT -j DROP
  2. FORWARD 链

    • 用途:处理转发流量,即通过本机路由的数据包。
    • 示例规则
      # 允许所有通过本机的转发流量
      iptables -A FORWARD -j ACCEPT
  3. OUTPUT 链

    • 用途:处理出站流量,即从本机发出的数据包。
    • 示例规则
      # 允许所有从本机发出的出站流量
      iptables -A OUTPUT -j ACCEPT
  4. PREROUTING 链

    • 用途:在路由决策之前处理入站流量,用于 nat 和 mangle 表。
    • 示例规则
      # 在路由之前修改入站包的目的IP地址
      iptables -t nat -A PREROUTING -p tcp --dport 8080 -j DNAT --to-destination 192.168.1.100:80
  5. 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 的表、链和规则的基本结构和语法。

一、基础结构

  1. 表(table)

    • 表是规则集的容器。每张表可以包含多个链。
  2. 链(chain)

    • 链是规则的有序列表。链可以是内置的(如 inputoutputforward)或用户定义的。
  3. 规则(rule)

    • 规则定义了特定条件下应执行的动作。

二、表、链和规则的语法

  1. 创建表

    nft add table <family> <table_name>
    • <family>: 地址族,常见的有 ip(IPv4)、ip6(IPv6)、inet(支持 IPv4 和 IPv6)、arp(ARP)、bridge(网桥)。
    • <table_name>: 表的名称。
  2. 删除表

    nft delete table <family> <table_name>
  3. 列出现有表

    nft list tables
  4. 创建链

    nft add chain <family> <table_name> <chain_name> { type <type> hook <hook> priority <priority>; }
    • <type>: 链的类型,可以是 filternat 等。
    • <hook>: 钩子点,可以是 inputoutputforwardpreroutingpostrouting 等。
    • <priority>: 优先级。

    例如:

    nft add chain ip mytable mychain { type filter hook input priority 0\; }
  5. 删除链

    nft delete chain <family> <table_name> <chain_name>
  6. 添加规则

    nft add rule <family> <table_name> <chain_name> <expression> <action>
    • <expression>: 匹配条件,例如 ip saddr 192.168.1.1
    • <action>: 动作,例如 acceptdroprejectlog 等。

    例如:

    nft add rule ip mytable mychain ip saddr 192.168.1.1 drop
  7. 删除规则
    可以通过规则句柄删除:

    nft delete rule <family> <table_name> <chain_name> handle <handle_number>

    首先列出链中的规则以找到句柄:

    nft list chain <family> <table_name> <chain_name>
  8. 列出规则

    nft list ruleset

三、示例

假设我们要创建一个简单的防火墙配置,允许入站 SSH 连接并拒绝所有其他入站流量。

  1. 创建表

    nft add table ip filter
  2. 创建链

    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\; }
  3. 添加规则

    nft add rule ip filter input ip protocol tcp tcp dport 22 accept
    nft add rule ip filter input drop
  4. 查看配置

    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&param2=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 的流量。