如何保护CentOS服务器免受网络攻击

来源:站长论坛作者:勇士头衔:草根站长
导读:本期聚焦于小伙伴创作的《如何保护CentOS服务器免受网络攻击》,敬请观看详情。一台直接暴露公网的CentOS主机,往往在启机后几分钟内就会收到批量端口扫描与SSH暴破尝试。要从网络层削减这类风险,第一步应是收敛暴露面:用firewalld限制仅开放业务必需端口,并默认拒绝其余入站流量。SSH作为最高频攻击入口,需禁用密码登录、改用密钥认证,同时将默认22端口变更或借助端口敲门隐藏。系统层面应开启SELinux强制模式,限制进程越权;用fail2ban自动封禁反复试探的IP。定期更新内核与软件包,修复已知漏洞,也能显著降低被勒索或植入挖矿木马的概率。

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策略有时会导致正常服务报错,此时应通过semanagesetsebool调整布尔值,而非直接关闭。例如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自动封禁与持续更新组合落地,才能构建起兼顾可用性与安全性的防御体系。

CentOS防火墙配置入侵防护修改时间:2026-08-04 01:39:39

免责声明:​ 已尽一切努力确保本网站所含信息的准确性。网站内容多为原创整理与精心编撰,观点力求客观中立。本站旨在免费分享,内容仅供个人学习、研究或参考使用。若引用了第三方作品,版权归原作者所有。如内容涉及您的权益,请联系我们处理。
内容垂直聚焦
专注技术核心技术栏目,确保每篇文章深度聚焦于实用技能。从代码技巧到架构设计,为用户提供无干扰的纯技术知识沉淀,精准满足专业提升需求。
知识结构清晰
覆盖从开发到部署的全链路。AI、前端、编程、数据库、服务器、建站、系统层层递进,构建清晰学习路径,帮助用户系统化掌握开发与运维所需的核心技术。
深度技术解析
拒绝泛泛而谈,深入技术细节与实践难点。无论是数据库优化还是服务器配置,均结合真实场景与代码示例进行剖析,致力于提供可直接应用于工作的解决方案。
专业领域覆盖
精准对应开发生命周期。从前端界面到后端编程,从数据库操作到服务器运维,形成完整闭环,一站式满足全栈工程师和运维人员的技术需求。
即学即用高效
内容强调实操性,步骤清晰、代码完整。用户可根据教程直接复现和应用于自身项目,显著缩短从学习到实践的距离,快速解决开发中的具体问题。
持续更新保障
专注既定技术方向进行长期、稳定的内容输出。确保各栏目技术文章持续更新迭代,紧跟主流技术发展趋势,为用户提供经久不衰的学习价值。