引言:网络是服务器的生命线

服务器通过网络与外部通信。正确的网络设置和防火墙配置是服务器运营和安全的核心。本篇涵盖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与远程服务器管理