CentOS作为企业环境中广泛应用的Linux发行版,一旦暴露在公共网络中,便会持续面临端口扫描、暴力破解以及漏洞利用等多种安全威胁。保护CentOS服务器免受网络攻击,绝非依靠单一的安全工具即可一劳永逸,而是需要从防火墙策略配置、远程登录安全加固、系统内核防护以及入侵检测等多个层面协同入手,构建起纵深防御体系。
一、使用firewalld构建网络层白名单防御
当下多数CentOS系统默认集成了firewalld动态防火墙管理工具。该工具的核心设计理念在于区域与服务的绑定,通过严格限制入站规则来大幅减少系统的攻击面。最基础且有效的防护策略是采用白名单模式,即仅放行业务真正需要使用的端口。例如,对于Web服务器,仅开放80和443端口;对于数据库服务,若无需公网直接访问,则彻底不开放相应端口。
这种白名单模式由守护进程统一管理,相较于直接编写底层的iptables规则,不易出现配置错误,且重启后规则不会丢失。但在操作过程中需格外谨慎,若误删SSH服务可能导致远程连接锁死。因此,在调整防火墙规则前,务必通过服务器控制台保留备用访问通道。
# 查看当前默认区域与已放行的服务列表 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
二、全面加固SSH远程登录入口
SSH服务是CentOS服务器最常被攻击者盯上的入口。攻击者常利用自动化脚本对默认的22端口进行密码暴力破解,一旦存在弱密码被猜中,攻击者即可直接获取系统最高权限。针对此类威胁,最有效的防护手段是彻底禁用密码认证,全面采用公钥登录机制。通过修改/etc/ssh/sshd_config配置文件,关闭密码认证并限定仅允许密钥登录,同时建议更改默认监听端口,以大幅降低被自动化扫描命中的概率。
在客户端生成密钥对后,需将公钥准确写入服务器的~/.ssh/authorized_keys文件中。此举使得暴力破解工具完全无从下手,因为服务端不再接受任何形式的密码校验。在此过程中,需特别注意私钥文件的权限必须设置为600,否则SSH服务会出于安全考虑拒绝使用该密钥。除密钥登录外,还可结合端口敲门技术进一步隐藏SSH端口,只有当客户端按特定顺序访问预设的关闭端口后,防火墙才会临时开放真实的SSH端口,这对阻断自动化扫描极为有效。
# 备份原配置文件以防误操作 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
三、启用SELinux强制访问控制与系统资源限制
SELinux是CentOS系统自带的安全子系统,提供强大的强制访问控制功能。即使某个服务进程不幸被攻破,SELinux也能严格限制其越权访问系统其他资源,从而将损害控制在最小范围内。然而,许多管理员为了省事或规避配置报错,常将其设为disabled状态,这反而极大地放大了系统的安全风险。
在实际运维中,SELinux策略有时确实会导致正常服务报错。面对此类情况,正确的做法是通过semanage与setsebool工具调整相应的布尔值或上下文标签。例如,当Web服务需要写入自定义目录时,应为其打上正确的httpd上下文标签,而非简单粗暴地禁用防护。此外,利用ulimit或systemd的ResourceControl功能限制特定服务的资源占用,也能有效缓解拒绝服务类攻击对系统整体稳定性的冲击。
# 查看当前SELinux的工作模式 getenforce # 临时设置为强制模式 setenforce 1 # 修改配置文件以确保重启后依然保持强制模式 sed -i 's/^SELINUX=.*/SELINUX=enforcing/' /etc/selinux/config
四、部署fail2ban实现自动化入侵阻断
fail2ban是一款通过监控日志文件来识别异常行为的安全工具。它能够检测出频繁失败的登录尝试或恶意请求,并调用防火墙规则动态封禁来源IP。作为对抗暴力破解型网络攻击的轻量级利器,fail2ban可实现零人工干预的自动化防护。
在部署fail2ban时,需为其创建本地配置文件以定义监控规则。需注意的是,不同版本的CentOS系统日志路径可能有所变化,且封禁时间设置过短容易被攻击者利用轮换IP绕过。因此,建议配合较长的封禁时间,并接入告警通知系统,以便及时掌握安全态势。它不仅适用于SSH服务,还可扩展用于保护Nginx、Postfix等多种网络服务。
# 安装epel源及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
五、建立持续的系统与软件更新机制
未及时修补的已知漏洞是网络攻击的主要载体。CentOS系统自带的yum包管理器可统一推送安全更新,用于关闭已知的远程执行缺陷。定期执行安全更新并检查系统中残留的旧版本软件包,是维持系统安全基线的必要操作。
对于无法立即重启以加载新内核的关键业务服务器,至少应优先更新openssl、glibc等底层基础库。同时,建议启用如yum-cron等自动安全更新工具,避免因人为疏忽导致安全补丁严重滞后。通过建立常态化的更新机制,能够有效收敛系统漏洞面。
# 仅安装与安全相关的更新补丁 yum update --security -y # 查看当前系统中可更新的软件列表 yum list updates # 清理不再需要的无用依赖包 yum autoremove -y
综合来看,保护CentOS服务器免受网络攻击并无一劳永逸的银弹。唯有将防火墙端口收敛、SSH密钥登录加固、SELinux强制访问控制、fail2ban自动封禁以及持续的软件更新机制组合落地,才能构建起兼顾业务可用性与系统安全性的纵深防御体系,确保服务器在复杂的网络环境中稳定运行。