Linux服务器管理完全攻略 第4篇:网络设置与防火墙
Linux Server Administration Complete Guide Part 4
Linux服务器管理完全攻略系列
第3篇:软件包与服务 | 第4篇:网络与防火墙(当前)| 第5篇:SSH与远程管理
引言:网络是服务器的生命线
服务器通过网络与外部通信。正确的网络设置和防火墙配置是服务器运营和安全的核心。本篇涵盖IP设置、DNS、路由以及各种防火墙工具。
1. 网络基础检查
1.1 检查网络接口
# IP地址和接口信息
ip addr
ip a
# 仅特定接口
ip addr show eth0
# 旧命令(已弃用)
ifconfig
1.2 网络连接状态
# 路由表
ip route
ip r
# 检查默认网关
ip route | grep default
# 检查DNS服务器
cat /etc/resolv.conf
# 连接测试
ping -c 4 8.8.8.8
ping -c 4 google.com
1.3 检查端口和连接
# 检查开放端口
ss -tuln
# 检查特定端口
ss -tuln | grep :80
# 包含连接状态
ss -tuna
# 带进程信息
sudo ss -tulnp
# netstat(旧)
sudo netstat -tulnp
2. IP地址配置
2.1 临时IP设置
# 添加IP地址
sudo ip addr add 192.168.1.100/24 dev eth0
# 删除IP地址
sudo ip addr del 192.168.1.100/24 dev eth0
# 启用/禁用接口
sudo ip link set eth0 up
sudo ip link set eth0 down
2.2 永久IP设置(Ubuntu/Debian - Netplan)
# /etc/netplan/01-netcfg.yaml
network:
version: 2
renderer: networkd
ethernets:
eth0:
addresses:
- 192.168.1.100/24
gateway4: 192.168.1.1
nameservers:
addresses:
- 8.8.8.8
- 8.8.4.4
# 应用
sudo netplan apply
# 测试(失败时自动回滚)
sudo netplan try
2.3 永久IP设置(RHEL/CentOS - nmcli)
# 查看连接列表
nmcli connection show
# 设置静态IP
sudo nmcli connection modify eth0 ipv4.addresses 192.168.1.100/24
sudo nmcli connection modify eth0 ipv4.gateway 192.168.1.1
sudo nmcli connection modify eth0 ipv4.dns "8.8.8.8 8.8.4.4"
sudo nmcli connection modify eth0 ipv4.method manual
# 应用
sudo nmcli connection up eth0
3. DNS配置
3.1 DNS服务器设置
# /etc/resolv.conf(临时,重启可能重置)
nameserver 8.8.8.8
nameserver 8.8.4.4
# 使用systemd-resolved时
sudo systemctl status systemd-resolved
resolvectl status
3.2 hosts文件
# /etc/hosts - 本地DNS
127.0.0.1 localhost
192.168.1.10 webserver.local webserver
192.168.1.20 dbserver.local dbserver
3.3 DNS查询测试
# nslookup
nslookup google.com
nslookup google.com 8.8.8.8
# dig(详细信息)
dig google.com
dig @8.8.8.8 google.com
# host
host google.com
4. 防火墙概述
4.1 Linux防火墙体系
- netfilter:内核级数据包过滤
- iptables:netfilter的传统前端
- nftables:iptables的继任者(现代发行版)
- firewalld:RHEL/CentOS的动态防火墙管理器
- UFW:Ubuntu的简单防火墙(iptables前端)
5. iptables
5.1 基本结构
# 表 → 链 → 规则
# 主要表:filter、nat、mangle
# filter链:INPUT、OUTPUT、FORWARD
# 查看当前规则
sudo iptables -L -n -v
sudo iptables -L -n --line-numbers
5.2 基本规则设置
# 设置默认策略
sudo iptables -P INPUT DROP # 默认拒绝
sudo iptables -P FORWARD DROP
sudo iptables -P OUTPUT ACCEPT
# 允许本地回环
sudo iptables -A INPUT -i lo -j ACCEPT
# 允许已建立的连接
sudo iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
# 允许SSH(端口22)
sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT
# 允许HTTP/HTTPS
sudo iptables -A INPUT -p tcp --dport 80 -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 443 -j ACCEPT
# 仅允许特定IP
sudo iptables -A INPUT -s 192.168.1.0/24 -p tcp --dport 3306 -j ACCEPT
5.3 删除和保存规则
# 按编号删除规则
sudo iptables -D INPUT 3
# 清空所有规则
sudo iptables -F
# 保存规则
sudo iptables-save > /etc/iptables.rules
# 恢复规则
sudo iptables-restore < /etc/iptables.rules
# Ubuntu/Debian持久化
sudo apt install iptables-persistent
sudo netfilter-persistent save
6. firewalld(RHEL/CentOS)
6.1 基本命令
# 检查状态
sudo firewall-cmd --state
sudo systemctl status firewalld
# 启动/启用
sudo systemctl start firewalld
sudo systemctl enable firewalld
6.2 基于区域的管理
# 列出可用区域
sudo firewall-cmd --get-zones
# 检查默认区域
sudo firewall-cmd --get-default-zone
# 检查活动区域
sudo firewall-cmd --get-active-zones
# 列出特定区域规则
sudo firewall-cmd --zone=public --list-all
6.3 允许服务和端口
# 允许服务(临时)
sudo firewall-cmd --zone=public --add-service=http
# 允许服务(永久)
sudo firewall-cmd --zone=public --add-service=http --permanent
sudo firewall-cmd --zone=public --add-service=https --permanent
# 允许端口
sudo firewall-cmd --zone=public --add-port=8080/tcp --permanent
# 应用更改
sudo firewall-cmd --reload
# 删除服务/端口
sudo firewall-cmd --zone=public --remove-service=http --permanent
6.4 富规则
# 允许特定IP
sudo firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="192.168.1.0/24" port protocol="tcp" port="3306" accept'
# 阻止特定IP
sudo firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="10.0.0.5" reject'
# 日志记录
sudo firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="192.168.1.100" service name="ssh" log prefix="SSH Access: " level="info" accept'
7. UFW(Ubuntu)
7.1 基本命令
# 检查状态
sudo ufw status
sudo ufw status verbose
# 启用/禁用
sudo ufw enable
sudo ufw disable
# 设置默认策略
sudo ufw default deny incoming
sudo ufw default allow outgoing
7.2 添加规则
# 允许服务
sudo ufw allow ssh
sudo ufw allow http
sudo ufw allow https
# 允许端口
sudo ufw allow 8080
sudo ufw allow 8080/tcp
sudo ufw allow 8080:8090/tcp
# 允许特定IP
sudo ufw allow from 192.168.1.0/24
sudo ufw allow from 192.168.1.100 to any port 22
# 特定接口
sudo ufw allow in on eth0 to any port 80
7.3 删除规则
# 按编号删除
sudo ufw status numbered
sudo ufw delete 3
# 直接删除规则
sudo ufw delete allow 8080
# 重置所有规则
sudo ufw reset
8. 实战场景
8.1 Web服务器防火墙(UFW)
# 默认策略
sudo ufw default deny incoming
sudo ufw default allow outgoing
# 允许SSH(管理用)
sudo ufw allow ssh
# 允许Web服务
sudo ufw allow http
sudo ufw allow https
# 仅允许特定IP管理
sudo ufw allow from 192.168.1.0/24 to any port 22
# 启用
sudo ufw enable
8.2 数据库服务器(firewalld)
# 仅允许内部网络访问MySQL端口
sudo firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="10.0.0.0/8" port protocol="tcp" port="3306" accept'
# SSH仅允许管理服务器
sudo firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="10.0.0.5" service name="ssh" accept'
# 默认拒绝
sudo firewall-cmd --set-default-zone=drop
sudo firewall-cmd --reload
8.3 NAT/端口转发(iptables)
# 启用IP转发
echo 1 > /proc/sys/net/ipv4/ip_forward
# 永久设置(/etc/sysctl.conf)
net.ipv4.ip_forward = 1
# 端口转发:外部8080 → 内部服务器80
sudo iptables -t nat -A PREROUTING -p tcp --dport 8080 -j DNAT --to-destination 192.168.1.100:80
sudo iptables -t nat -A POSTROUTING -j MASQUERADE
9. 网络故障排除
9.1 诊断连接问题
# 分步诊断
# 1. 检查接口
ip addr
# 2. 检查网关连接
ping -c 4 192.168.1.1
# 3. 外部IP连接
ping -c 4 8.8.8.8
# 4. DNS检查
ping -c 4 google.com
# 5. 路由追踪
traceroute google.com
mtr google.com
9.2 端口连接测试
# 测试端口连接
nc -zv 192.168.1.100 22
telnet 192.168.1.100 80
# 端口扫描(仅限自己的服务器)
nmap -p 1-1000 localhost
9.3 数据包捕获
# tcpdump基础
sudo tcpdump -i eth0
# 仅特定端口
sudo tcpdump -i eth0 port 80
# 特定主机
sudo tcpdump -i eth0 host 192.168.1.100
# 保存到文件
sudo tcpdump -i eth0 -w capture.pcap
总结
网络设置和防火墙配置决定了服务器的连接性和安全性。基本原则是只允许必要的内容,其余全部阻止。
下一篇第5篇将介绍SSH与远程服务器管理。
系列文章
← 第3篇:软件包与服务 | 第4篇(当前)| 第5篇:SSH与远程管理 →