CentOS服务器上线后,网络安全配置和路由策略往往是最容易被拖延的一环。很多运维习惯等业务跑稳了再回头加固,但公网环境下的扫描和爆破通常在服务器启动后几分钟内就会开始。真正有效的做法是在系统初始化阶段就完成基础网络加固和路由规则定义,而不是事后补救。

先关闭不需要的系统端口和多余服务

CentOS默认安装会启用一些实际用不到的服务,比如avahi-daemon、postfix、chronyd在部分场景下也可以关闭。执行ss -tulnp查看当前监听的TCP和UDP端口,凡是业务不需要的端口一律通过服务停止和开机禁用处理。对于使用firewalld的CentOS 7/8系统,不要只依赖firewall-cmd添加放行规则,更稳妥的方式是先定义默认拒绝策略,再按需开放。

systemctl stop avahi-daemon.service
systemctl disable avahi-daemon.service
systemctl stop postfix.service
systemctl disable postfix.service

firewall-cmd --set-default-zone=drop
firewall-cmd --permanent --add-port=22/tcp
firewall-cmd --permanent --add-port=443/tcp
firewall-cmd --reload

默认区域设置为drop后,所有未被明确允许的入站连接都会被丢弃。这里有一个容易忽略的点:firewalld的drop区域会直接丢弃数据包,而不是回复拒绝信息,这能在一定程度上减少扫描器对端口的探测效率。SSH端口如果修改过,务必在添加规则前确认新端口,否则可能直接锁死远程连接。

SSH访问控制是公网服务器的第一道防线

22端口是绝大多数暴力破解的目标。除了修改默认端口,更关键的是限制来源IP和禁用密码登录。修改/etc/ssh/sshd_config中的关键参数:

Port 22022
PermitRootLogin no
PasswordAuthentication no
PubkeyAuthentication yes
AllowUsers jumpuser
MaxAuthTries 3
LoginGraceTime 30
ClientAliveInterval 300
ClientAliveCountMax 2

修改后执行systemctl restart sshd使配置生效。如果必须保留密码登录作为备用,至少配合fail2ban使用。fail2ban通过监控/var/log/secure中的失败登录记录,对来源IP进行临时封禁。安装后创建本地配置/etc/fail2ban/jail.local,设置bantime为3600秒,findtime为600秒,maxretry为3次。这样连续失败3次的IP会被防火墙拦截一小时,能有效压制自动化爆破工具。

内核参数调优增强网络层抗攻击能力

CentOS默认的内核网络参数偏保守,直接暴露公网时建议调整/etc/sysctl.conf中的相关选项。syncookies机制可以防止SYN Flood耗尽半连接队列,rp_filter反向路径过滤能丢弃源地址伪造的数据包,禁用ICMP重定向则避免路由表被恶意篡改。

net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_max_syn_backlog = 8192
net.ipv4.tcp_synack_retries = 2
net.ipv4.conf.all.rp_filter = 1
net.ipv4.conf.default.rp_filter = 1
net.ipv4.conf.all.accept_redirects = 0
net.ipv4.conf.default.accept_redirects = 0
net.ipv4.conf.all.secure_redirects = 0
net.ipv4.conf.default.secure_redirects = 0
net.ipv4.icmp_echo_ignore_broadcasts = 1
net.ipv4.icmp_ignore_bogus_error_responses = 1
net.ipv4.tcp_timestamps = 0

执行sysctl -p立即应用。tcp_timestamps设置为0会降低TCP时间戳信息泄露的风险,虽然对性能有轻微影响,但在安全要求较高的场景下值得启用。如果服务器需要处理大量并发连接,tcp_max_syn_backlog可以根据内存情况适当增大。

利用iptables构建细粒度访问控制

firewalld底层仍然是iptables规则,但在复杂场景下直接使用iptables管理更直观。CentOS 7/8中需要先停止firewalld并安装iptables-services。一个典型的入站规则链如下:

iptables -F
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT ACCEPT

iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -i lo -j ACCEPT
iptables -A INPUT -p tcp --dport 22022 -s 203.0.113.0/24 -j ACCEPT
iptables -A INPUT -p tcp --dport 443 -j ACCEPT
iptables -A INPUT -p icmp --icmp-type echo-request -m limit --limit 1/s -j ACCEPT
iptables -A INPUT -j LOG --log-prefix "IPTABLES-DROP: "
iptables -A INPUT -j DROP

这里将SSH访问限制在特定来源网段,443端口对所有来源开放,ICMP请求限速每秒1个,所有被丢弃的包写入系统日志方便审计。保存规则使用service iptables save,CentOS 8及以上使用iptables-save > /etc/sysconfig/iptables。注意OUTPUT链默认允许,如果服务器需要严格限制出站流量,可以改为默认拒绝并按需放行DNS、NTP和业务相关出站连接。

路由策略决定流量的走向和隔离边界

多网卡服务器经常面临默认路由冲突和流量走向混乱的问题。CentOS中通过ip route和ip rule可以定义策略路由。假设服务器有两块网卡,eth0连接公网,eth1连接内部管理网络,默认情况下所有流量都走eth0的默认网关,但管理流量需要从eth1出去。这时需要添加策略路由规则:

ip route add 10.10.0.0/16 dev eth1 src 10.10.1.10 table mgmt
ip route add default via 10.10.1.1 dev eth1 table mgmt
ip rule add from 10.10.1.10 table mgmt priority 100
ip rule add to 10.10.0.0/16 table mgmt priority 100

这样来自10.10.1.10的流量和发往10.10.0.0/16的流量都会查mgmt路由表,从eth1正确转发。持久化配置需要写入/etc/sysconfig/network-scripts/route-eth1和rule-eth1文件,否则重启后策略丢失。对于需要负载均衡或主备切换的场景,可以结合ip route的metric参数调整路由优先级,配合keepalived实现高可用。

NAT与端口转发在路由策略中的实际应用

CentOS服务器经常充当内部网络的网关或跳板机。使用iptables的nat表可以实现源地址转换和目的地址转换。内网服务器通过CentOS网关访问公网时:

iptables -t nat -A POSTROUTING -s 10.10.0.0/16 -o eth0 -j MASQUERADE

如果需要将公网IP的某个端口映射到内网服务器,使用DNAT规则:

iptables -t nat -A PREROUTING -d 203.0.113.10 -p tcp --dport 8080 -j DNAT --to-destination 10.10.1.20:80
iptables -A FORWARD -p tcp -d 10.10.1.20 --dport 80 -j ACCEPT

同时必须开启IP转发,在/etc/sysctl.conf中设置net.ipv4.ip_forward = 1。DNAT规则配合FORWARD链的精确控制,可以构建安全的端口映射体系,避免直接暴露内网主机。需要注意的是,MASQUERADE适用于动态公网IP,如果公网IP固定,使用SNAT指定源地址性能更好。

日志审计与异常流量监控

安全配置完成后,持续的监控才能发现潜在问题。CentOS自带的rsyslog可以集中收集iptables丢弃日志、SSH登录日志和系统认证日志。在/etc/rsyslog.conf中确保kern.warning级别以上的日志被记录,并定期分析/var/log/messages中的IPTABLES-DROP条目。对于流量异常,使用iftop或nload实时观察网卡流量,配合sar -n DEV 1 10查看网络设备统计信息。如果发现某个源IP持续发送大量请求,可以在iptables中直接封禁:

iptables -I INPUT -s 198.51.100.45 -j DROP

长期来看,建议部署一套轻量级的日志分析脚本,定期统计失败登录IP、端口扫描来源和异常流量峰值,形成可追溯的安全记录。CentOS 8及以上版本还可以利用nftables替代iptables,语法更简洁,规则管理更高效,但核心思路相同:默认拒绝、最小权限、持续监控。

网络安全配置和路由策略不是一次性的工作。业务变更、系统升级、新服务上线都可能引入新的暴露面。每次变更后重新审查监听端口、防火墙规则和路由表,保持配置与实际需求一致,才是CentOS服务器长期稳定运行的基础。