找回密码
立即注册
搜索
热搜: Java Python Linux Go
发回帖 发新帖

2238

积分

0

好友

291

主题
发表于 13 小时前 | 查看: 2| 回复: 0

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

Rocky Linux 8 root用户目录列表

一、内核参数加固

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命令使用

只允许rootwheel组的用户使用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. 限制计划任务

限制atcron计划任务的使用权限,仅允许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的实践细节或与其他同行交流,欢迎访问云栈社区的技术论坛进行深入探讨。




上一篇:Zephyr嵌入式开发:CBOR、JSON与Nanopb序列化工具对比与配置指南
下一篇:pthread读写锁解析:C语言Linux多线程同步与高并发读实战
您需要登录后才可以回帖 登录 | 立即注册

手机版|小黑屋|网站地图|云栈社区 ( 苏ICP备2022046150号-2 )

GMT+8, 2026-2-7 20:45 , Processed in 0.431282 second(s), 38 queries , Gzip On.

Powered by Discuz! X3.5

© 2025-2026 云栈社区.

快速回复 返回顶部 返回列表