Skip to content

Linux 网络与防火墙

在 Linux 系统中,网络管理涉及网络配置、状态监控、故障排查等多个方面

常用命令

shell
ifconfig      # 查看 ip 地址信息
cat /etc/redhat-release  # 查看 Linux 系统版本

测试网络连接 ping

shell
# 基础语法
ping [选项] 目标主机 

# 选项
-c 次数 # 指定发包次数,默认一直发送(需按 Ctrl+C 终止)
-i 间隔秒数 # 指定发送每个包的时间间隔(默认 1 秒)
-s 数据包大小 # 发送 指定 字节的包
-t TTL # 设置 IP 数据包的 TTL(Time To Live,生存时间),用于测试网络跳数(每经过一个路由器 TTL 减 1,直到为 0 则丢弃包)
-W 超时秒数 # 设置超时时间,默认 2 秒
-q 只显示最终统计结果 # 安静模式,只显示最终统计结果,不显示每个包的详情。

# 目标主机
IP 地址 192.168.1.1、域名 www.baidu.com

# 结果指标
packet loss # 丢包率(0% 表示网络通畅)。
rtt # 往返时间(round-trip time)
time # 建立连接时间

## 示例
ping -c 4 www.baidu.com  # 向 www.baidu.com 发送 4 个包

netstat 查看网络状态

shell
# 作用
用于查看网络连接、路由表、接口统计等网络相关信息
比如:可查看本机开启的端口、哪些客户端在连接

# 基础语法
netstat [选项]

# 选项
-n                   列出所有网络状态,包括socket程序
-c                 默认每秒刷新一次连接信息(类似 top 实时监控)
-n                   不解析主机名、端口名(直接显示 IP 和端口号,速度更快)
-p                   显示pid和程序名
-t                   列出所有 TCP 连接
-u                   显示UDP协议连接状态
-l                   显示监听的状态连接
-r                   显示路由表
-a                   显示所有监听和非监听状态的连接
-i                   显示所有网络接口的收发数据包统计

# 示例:
netstat -ta # 显示所有 TCP 连接(包括监听状态)
netstat -ua # 显示所有 UDP 连接(包括监听状态)
netstat -rn # 以数字形式显示路由表
netstat -ie # 更详细的接口信息(类似 ifconfig)
netstat -tl # 显示监听状态的 TCP 端口
netstat -ul # 显示监听状态的 UDP 端口
netstat -tlp # 查看所有 TCP 监听端口及对应进程
netstat -tn # 以数字形式显示所有 TCP 连接
netstat -tln  # 仅显示监听的 TCP 端口状态连接
netstat -tlnp  # 查看所有正在监听的 TCP 端口及对应进程
netstat -rn  # 查看网关,最后一条是网关

# 最常用
netstat -tlnp # 查看所有正在监听的 TCP 端口及对应进程
netstat -tlnp | grep 80 # 查看 80 端口的占用情况

# netstat -tlnp 结果解析:
Proto           Recv-Q        Send-Q    localAddress         ForeignAddress                 State                    PID/Program name
网络连接协议      接收的数据    发生的数据    本机ip地址和端口       远程主机ip地址和端口(谁连接了你)    状态(是否监听)     进程 ID(kiss 进程) / 进程名称(哪个服务)

网络配置(永久 CentOS)

  1. 修改 eth0 接口配置
shell
# 执行
vi /etc/sysconfig/network-scripts/ifcfg-eth0

# 我们期望的状态是
网络: vmnet8
子网 ip: 192.168.147.0
子网掩码: 255.255.255.0
网关 ip: 192.168.147.2
那么,下方配置的 ip 范围是
192.168.147.3 ~ 192.168.147.254

# 输入 i 开始修改配置
# 配置结果如下:
ONBOOT=yes
BOOTPROTO=static
IPADDR=192.168.147.180
NETWASK=255.255.255.0
GATEWAY=192.168.147.2
DNS1=8.8.8.8
DNS2=144.144.144.144
# 保存并退出::wq
  1. 重启服务
shell
# CentOS 6 及更早
service network restart

# CentOS 7/8
systemctl restart NetworkManager
  1. 查看配置结果
shell
# 输入 ifconfig
出现 ech0 配置,代表配置成功

在 Linux 系统中,防火墙管理工具主要有 firewalld(主流,动态防火墙)和 iptables(传统,静态防火墙)

防火墙:查看、开启、关闭、重启

shell
systemctl status firewalld         # 查看防火墙状态
systemctl start firewalld          # 开启防火墙
systemctl restart firewalld        # 重启防火墙
systemctl stop firewalld           # 临时关闭防火墙,重启服务器后开启
systemctl disable firewalld        # 永久关闭防火墙
systemctl enable firewalld         # 防火墙开机自启

防火墙端口:查看、开启、关闭

shell
firewall-cmd --list-all                                             # 查看所有开放的端口/服务(默认 zone 为 public)
firewall-cmd --list-all-zones                                       # 查看所有 zone 的规则
firewall-cmd --list-ports                                           # 查看防火墙所有开放端口
firewall-cmd --zone=public --query-port=3306/tcp                    # 查看防火墙 3306 端口是否开启

firewall-cmd --add-port=3306/tcp                                    # 临时开启防火墙 3306 端口,重启恢复
firewall-cmd --zone=public --add-port=3306/tcp --permanent          # 永久开启防火墙 3306 端口

firewall-cmd --remove-port=3306/tcp                                 # 临时关闭防火墙 3306 端口,重启恢复
firewall-cmd --zone=public --remove-port=3306/tcp --permanent       # 永久关闭防火墙 3306 端口

# 允许指定 IP 访问(如允许 192.168.1.100 访问 80 端口)
sudo firewall-cmd --add-rich-rule='rule family="ipv4" source address="192.168.1.100" port protocol="tcp" port="80" accept' --permanent

# 注意:以上的永久操作必须执行此命令,更新防火墙规则后才生效
firewall-cmd --reload                                               # 更新防火墙规则

防火墙服务: 查看、开启、关闭

shell
firewall-cmd --list-services                                        # 查看防火墙所有已开放的服务
firewall-cmd --query-service ftp                                    # 查看 ftp 服务防火墙是否开启

firewall-cmd --add-service=ftp                                      # 临时开启 ftp 服务
firewall-cmd --zone=public --add-service=ftp --permanent            # 永久开启 ftp 服务

firewall-cmd --remove-service=ftp                                   # 临时关闭 ftp 服务
firewall-cmd --zone=public --remove-service=ftp --permanent         # 永久关闭 ftp 服务

# 注意:以上的永久操作必须执行此命令,更新防火墙规则后才生效
firewall-cmd --reload                                               # 更新防火墙规则