保障Linux服务器的安全是一项基础而重要的工作。对于系统管理员或安全工程师而言,从内核参数、授权认证到网络防火墙和SELinux,进行一系列加固配置是提升系统防御能力的关键。本文将以 CentOS/Rocky Linux 8 为例,详细梳理一份从内到外的系统加固实战指南。

一、内核参数加固
Linux内核参数是控制网络协议栈和系统行为的重要开关,通过调整/etc/sysctl.conf文件可以有效防御多种网络攻击。
vim /etc/sysctl.conf
在文件中添加或修改以下参数:
net.ipv4.ip_forward=1 //路由转发功能
net.ipv4.conf.all.log_martians=1 //启用日志记录导演的IP地址数据包
net.ipv4.conf.all.send.redirects=0 //禁用所有接口发icmp重定向
net.ipv4.conf.all.accept_source_route=0 //禁用源路由数据包
net.ipv4.conf.all.accept_redirects=0 //禁用接受icmp重定向
net.ipv4.conf.all.echo.ignore_broadcasts=1 //禁用对ping广播响应
net.ipv4.conf.all.rp_filter=1 //从同一个接口响应查询,而不是另一个接口,防IP欺骗
net.ipv4.tcp_syncookies=1 //防syn的dos攻击
编辑完成后,执行以下命令使配置立即生效:
sysctl -p /etc/sysctl.conf //立即生效
二、授权与认证加固
用户认证是系统安全的第一道防线,严格的认证策略能有效阻止未授权访问。
1. 登录提醒
编辑/etc/issue.net文件,设置登录前的警告信息,对潜在攻击者起到威慑作用。
vim /etc/issue.net
# 内容例如:所有认证登陆已全程记录,不要做环事
2. 防止误触Ctrl+Alt+Del重启
禁用组合键重启功能,避免生产环境下的误操作。
rm -f /etc/systemd/system/ctrl-alt-del.trage
rm -rf /usr/lib/systemd/system/ctrl-alt-del.target
vim /etc/systemd/system.conf
# 添加或修改:CtrlAltDelBurstAction=none
systemctl daemon-reexec
3. 设置终端超时退出
自动断开空闲会话,减少未授权访问的风险。
vim /etc/profile
# 添加:export TMOUT=300
4. 禁止交互式启动
确保系统启动过程完全自动化,避免需要人工干预。
vim /etc/sysconfig/init
# 修改:PRMOMPT=no
5. 单用户模式要求密码
为单用户恢复模式增加密码验证,防止物理接触攻击。
vim /etc/sysconfig/init
# 增加一行:SINGLE=/sbin/sulogin //
6. 设置GRUB2引导密码
保护系统引导过程,防止他人通过引导参数绕过认证。
grub2-mkpasswd-pbkdf2
# 生成密码哈希
vim /etc/grub2.cfg //追加如下,最后一行是上面命令生成的密码哈希,直接复制过来
set superusers='root' //超级管理员用户
password_pbkdf2 root grub.pbkdf2.sha512.XXXXXXXXXX
7. 限制用户登录
禁止特定用户登录系统,例如用于运行服务的账户。
usermod -L -s /sbin/nologin admin
8. 限制su命令使用
只允许root和wheel组的用户使用su命令切换到root。
vim /etc/pam.d/su //只允许root和wheel群组账户使用su命令
# 添加:auth required pam_wheel.so user_uid
9. 防止su切换带入环境变量
确保切换用户时使用安全的默认环境变量。
vim /etc/login.defs
# 修改:ALWAYS_SET_PATH=yes
10. 设置口令策略
在/etc/login.defs中定义全局密码策略。
PASS_MAX_DAYS 90
PASS_MIN_DAYS 0
PASS_MIN_LEN 5
PASS_WARN_AGE 7
11. 设置密码复杂度
通过PAM模块强制密码满足复杂度要求。
vim /etc/pam.d/password-auth
vim /etc/pam.d/system-auth
在两个文件的对应位置添加:
password requisite pam_pwquality.so minlen=8 minclass=3 enforce_for_root try_first_pass local_users_only retry=3 dcredit=0 ucredit=0 lcredit=0 ocredit=0
password requisite pam_pwhistory.so use_authtok remember=5 enforce_for_root
12. 账户锁定策略
连续密码错误3次后,锁定账户300秒。
vim /etc/pam.d/password-auth
vim /etc/pam.d/system-auth
在两个文件中均加入:
auth required pam_faillock.so preauth audit deny=3 even_deny_root unlock_time=300
auth [default=die] pam_faillock.so authfail audit deny=3 even_deny_root unlock_time=300
auth sufficient pam_faillock.so authsucc audit deny=3 even_deny_root unlock_time=300
13. & 14. 清理无属主文件
清理系统内不属于任何有效用户或组的文件,这些文件可能是后门或残留。
find / -nouser
rm -f filename //删除查到的文件
find / -nogroup
rm -r filename
15. & 16. 限制计划任务
限制at和cron计划任务的使用权限,仅允许root用户。
# 限制at命令
rm -f /etc/at.deny
touch /etc/at.allow
chown root:root /etc/at.allow
chmod og-rwx /etc/at.allow
# 限制cron命令
rm -f /etc/cron.deny
touch /etc/cron.allow
chown root:root /etc/cron.allow
chmod og-rwx /etc/cron.allow
17. 限制sudo提权
严格控制sudo权限,默认情况下禁用wheel组的sudo权限。
vim /etc/sudoers
# %wheel ALL=(ALL) ALL //注释掉
18. SSH服务加固
对远程管理入口SSH进行深度加固是网络/系统安全的核心。
vim /etc/ssh/sshd_config
MaxAuthTries 3 //错三次锁60秒
PermitEmptyPasswords no //禁止使用空密码连接
lgnoreRhosts yes //禁止rhosts信任主机无密码登录
PrintLastLog yes //开户登陆提示上一次的最后登陆时间
ClientAliveInterval 900
ClientAliveCountMax 0 //900秒无操作自动断
ListenAddress 192168.1.10 //指定本机哪个IP监听
DenyUsers $admin //禁止admin用ssh连接
PermitRootLogin no //禁止root远程登陆,也不能普通用户切root
三、防火墙配置安全
防火墙是隔离内外网的屏障,合理的规则配置能极大缩小攻击面。
1. 使用iptables配置主机防火墙
安装与启动
dnf install iptables policycoreutils
service iptables start
systemctl enable --now iptables
iptables -F //清规则
配置规则链(默认策略为DROP)
这是一个严格的主机防火墙策略示例,遵循最小权限原则。
# 允许所有人访问本机SSH(22端口)
iptables -A INPUT -p tcp --dport 22 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -p tcp --sport 22 -m conntrack --ctstate ESTABLISHED -j ACCEPT
# 允许本机访问内网(192.168.0.0/24)的SSH
iptables -A OUTPUT -p tcp -s 192.168.0.0/24 --dport 22 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
iptables -A INPUT -p tcp --sport 22 -m conntrack --ctstate ESTABLISHED -j ACCEPT
# 设置默认策略为DROP (需在所有具体规则之后设置)
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT DROP
# 允许本机ping其他主机 (出站请求,入站回应)
iptables -A OUTPUT -p icmp --icmp-type echo-request -j ACCEPT
iptables -A INPUT -p icmp --icmp-type echo-reply -j ACCEPT
# 允许本机进行DNS查询 (访问外部UDP 53端口)
iptables -A INPUT -p udp -m udp --sport 53 -j ACCEPT
iptables -A OUTPUT -p udp -m udp --dport 53 -j ACCEPT
# 允许环回(lo)接口通信
iptables -A INPUT -i lo -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT
# 允许已建立和相关连接进入 (确保响应包能回来)
iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
# 允许已建立的连接发出
iptables -A OUTPUT -m conntrack --ctstate ESTABLISHED -j ACCEPT
# 保存配置
service iptables save
2. iptables用作路由器/NAT网关
启用IP转发,并配置SNAT和DNAT规则。
# 开启路由转发
sysctl -w net.ipv4.ip_forward=1
# 配置SNAT (内网机器通过本机上网)
iptables -t filter -A FORWARD -j ACCEPT
iptables -t nat -A POSTROUTING -o ens3 -s 192.168.0.0/24 -j SNAT --to 192.168.0.48
iptables -t nat -nvL --line-numbers
# 配置DNAT (将本机80端口流量映射到内网192.168.0.49)
iptables -t nat -A PREROUTING -d 192.168.0.48 -p tcp -m tcp --dport 80 -j DNAT --to-destination 192.168.0.49:80
iptables -t nat -nvL --line-numbers //查看目的nat
service iptables save
# 注意:内网机器需将网关指向此服务器
3. 使用firewalld动态防火墙
firewalld是RHEL/CentOS 8的默认防火墙管理工具,更易于管理服务与端口。
# 安装与启动
dnf -y install firewalld firewall-config
systemctl unmask --now firewalld.service
systemctl enable --now firewalld.service
# 开启NAT地址伪装 (相当于SNAT)
firewall-cmd --add-masquerade --permanent
# 配置端口转发 (DNAT)
firewall-cmd --zone=public --add-forward-port=port=80:proto=tcp:toport=80:toaddr=192.168.0.86 --permanent
# 查看所有配置
firewall-cmd --list-all
4. firewalld高级规则示例
# 添加HTTP服务到防火墙
firewall-cmd --add-service=http --permanent
firewall-cmd --list-services
# 禁止ping本机
firewall-cmd --add-rich-rule='rule family=ipv4 protocol value=icmp reject' --permanent
# 端口转发:当192.168.0.209访问本机5555端口时,转到本机22端口
firewall-cmd --add-rich-rule='rule family=ipv4 source address=192.168.0.209 forward-port port=5555 protocol=tcp to-port=22' --permanent
# 注意:此规则也需要masquerade支持
firewall-cmd --add-masquerade --permanent
# 使配置永久生效并重载
firewall-cmd --runtime-to-permanent
firewall-cmd --reload
四、SELinux安全增强
SELinux提供了超越传统用户-组-权限的强制访问控制(MAC)模型,是安全/渗透/逆向领域中纵深防御的重要一环。
SELinux有三种工作模式:
- 强制模式(Enforcing):严格执行安全策略,违规操作将被阻止并记录日志。生产环境推荐。
- 宽容模式(Permissive):允许所有操作,但会记录策略违规行为。用于调试和策略开发。
- 禁用模式(Disabled):完全关闭SELinux。不推荐长期使用,重启后生效。
常用命令与管理
# 查看当前SELinux状态
getenforce
# 安装必要工具
dnf install selinux-policy-targeted policycoreutils-python-utils
# 查看进程的安全上下文
ps -eZ | grep httpd
# 查看http服务允许监听的端口
semanage port -l | grep http
# 查询SELinux拒绝日志 (需安装setroubleshoot)
ausearch -m avc -c httpd
# 为http服务添加允许监听的端口(例如82)
semanage port -a -t http_port_t -p tcp 82
总结
以上从内核、认证、网络、强制访问控制四个层面,构建了一个立体的Linux服务器安全加固方案。每一条配置都有其明确的安全目的,例如防欺骗、防爆破、最小权限、深度防御等。在实际生产环境中,需要根据业务需求仔细调整,并在实施前做好测试和备份。
安全是一个持续的过程,配置加固只是起点。定期审计、更新补丁、监控日志同样不可或缺。如果你想了解更多关于系统运维/DevOps/SRE的实践细节或与其他同行交流,欢迎访问云栈社区的技术论坛进行深入探讨。