CentOS作为企业环境中常见的Linux发行版,一旦接入公网便会持续面临端口扫描、暴力破解与漏洞利用等威胁。保护CentOS服务器免受网络攻击,需要从防火墙策略、远程登录安全、系统加固与入侵检测等多个层面协同入手,而不是依赖单一手段。
一、使用firewalld收敛网络暴露面
很多CentOS系统默认安装了firewalld动态防火墙管理工具。它的核心思路是“区域(zone)”与“服务(service)”绑定,通过限制入站规则来减少攻击面。最基础的做法是只放行业务真正需要的端口,例如Web服务开放80与443,数据库若不需公网访问则彻底不开放。
下面这段命令展示了如何查看当前活跃区域,并仅允许SSH与HTTP服务,同时拒绝其他所有入站连接:
# 查看当前默认区域与已放行服务 firewall-cmd --get-default-zone firewall-cmd --list-all # 先移除默认放行的其他服务,仅保留必要项 firewall-cmd --permanent --remove-service=dhcpv6-client firewall-cmd --permanent --add-service=ssh firewall-cmd --permanent --add-service=http firewall-cmd --permanent --add-service=https # 设置默认区域为public并拒绝未明确允许的流量 firewall-cmd --set-default-zone=public firewall-cmd --reload
这种白名单模式比直接写iptables规则更不易出错。它的优点是由守护进程统一管理,重启后规则不丢失;缺点是若误删SSH服务可能导致锁死远程连接,因此操作前务必通过控制台保留备用通道。
二、加固SSH远程登录安全
SSH是CentOS服务器最常被攻击的入口。攻击者利用自动化脚本对22端口进行密码暴破,一旦弱密码被猜中即可获得系统权限。最有效的防护是禁用密码认证,全面采用公钥登录。
修改/etc/ssh/sshd_config配置文件,将密码认证关闭并限定密钥登录。同时建议更改默认端口,降低被扫描命中率:
# 备份原配置 cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak # 使用sed修改关键参数 sed -i 's/^#Port 22/Port 5022/' /etc/ssh/sshd_config sed -i 's/^#PasswordAuthentication yes/PasswordAuthentication no/' /etc/ssh/sshd_config sed -i 's/^#PubkeyAuthentication yes/PubkeyAuthentication yes/' /etc/ssh/sshd_config # 重启sshd使配置生效 systemctl restart sshd
在客户端生成密钥对后,将公钥写入服务器的~/.ssh/authorized_keys文件。此举让暴破工具无从下手,因为服务端不再接受密码校验。应注意私钥文件权限需设为600,否则SSH会拒绝使用该密钥。
除了密钥登录,还可结合“端口敲门(port knocking)”进一步隐藏SSH端口。只有按特定顺序访问预设的关闭端口后,防火墙才临时开放真实SSH端口,这对阻断自动化扫描非常有效。
三、开启SELinux与系统层限制
SELinux是CentOS自带的安全子系统,提供强制访问控制(MAC)。即使某个服务被攻破,SELinux也能限制其越权访问系统其他资源。许多管理员为省事将其设为disabled,这反而放大了风险。
通过以下命令确认并强制开启SELinux:
# 查看当前模式 getenforce # 修改为强制模式(需重启或临时设置) setenforce 1 sed -i 's/^SELINUX=.*/SELINUX=enforcing/' /etc/selinux/config
SELinux策略有时会导致正常服务报错,此时应通过semanage与setsebool调整布尔值,而非直接关闭。例如Web服务需要写入自定义目录时,应打上正确的httpd上下文标签,而不是禁用防护。
此外,用ulimit或systemd的ResourceControl限制服务资源占用,也能缓解拒绝服务类攻击对系统稳定性的冲击。
四、部署fail2ban实现自动封禁
fail2ban通过监控日志文件,识别频繁失败的登录或异常请求,并调用防火墙动态封禁来源IP。它是对抗暴破型网络攻击的轻量级利器。
安装与基础配置示例如下:
# 安装fail2ban yum install epel-release -y yum install fail2ban -y # 创建本地配置 cat > /etc/fail2ban/jail.local <<'EOF' [sshd] enabled = true port = 5022 filter = sshd logpath = /var/log/secure maxretry = 3 bantime = 3600 EOF # 启动并设置开机自启 systemctl enable fail2ban systemctl start fail2ban
上述配置表示:若某IP在/var/log/secure中针对5022端口的SSH登录连续失败3次,将被封禁1小时。fail2ban支持多种过滤器,也可用于保护Nginx、Postfix等服务。
它的优势在于零人工干预,但需注意日志路径随CentOS版本可能变化,且bantime过短易被轮换IP绕过,建议配合较长封禁时间与告警通知。
五、保持系统与软件更新
未修补的漏洞是网络攻击的主要载体。CentOS的yum包管理器可统一推送安全更新,关闭已知远程执行缺陷。
定期执行更新并检查残留旧包:
# 仅安装安全更新 yum update --security -y # 查看可更新列表 yum list updates # 清理无用依赖 yum autoremove -y对于无法立即重启加载新内核的关键业务,至少应优先更新openssl、glibc等基础库。同时可启用自动安全更新工具,如
yum-cron,避免人为疏忽导致补丁滞后。综合来看,保护CentOS服务器免受网络攻击并无银弹。将防火墙收敛、SSH加固、SELinux强制模式、fail2ban自动封禁与持续更新组合落地,才能构建起兼顾可用性与安全性的防御体系。