SSH安全加固核心是围绕“谁在访问、能做什么、留下什么痕迹”组织配置:禁用root直登(PermitRootLogin no)、关闭密码认证(PasswordAuthentication no)、限定用户/IP(AllowUsers)、空闲15分钟断连(ClientAliveInterval 300 + CountMax 3)、启用VERBOSE日志。

主文件配置是安全加固的底层抓手,不是堆砌参数,而是围绕“谁在访问、能做什么、留下什么痕迹”三个核心问题来组织。关键在于把分散的安全策略统一收口到可审计、可复现的配置文件中,避免临时修改、口头约定或脚本散落。
SSH主配置文件(/etc/ssh/sshd_config 或 drop-in 文件)
这是远程管理的第一道闸门,必须禁用高风险入口,强制使用可控方式登录:
-
禁止 root 直接登录:设置
PermitRootLogin no,所有提权操作需经普通用户 + sudo 审计路径 -
关闭密码认证:设为
PasswordAuthentication no,仅保留PubkeyAuthentication yes,密钥需由运维统一生成并分发 -
限制登录主体:用
AllowUsers明确指定用户名+来源IP,例如AllowUsers admin@192.168.10.0/24 ops@203.120.155.42 -
缩短空闲会话生命周期:
ClientAliveInterval 300与ClientAliveCountMax 3组合,确保闲置连接约15分钟自动断开 -
启用详细日志:
LogLevel VERBOSE,便于追溯登录来源、认证方式、失败尝试等关键行为
密码策略主控文件(/etc/security/pwquality.conf 和 /etc/login.defs)
这两份文件共同定义“什么样的密码才被系统接受”,是账号生命周期管理的起点:
-
/etc/security/pwquality.conf控制复杂度:
—minlen = 12(最低12位)
—minclass = 3(至少含大写、小写、数字、特殊字符中的三类)
—dcredit = -1、ucredit = -1、lcredit = -1、ocredit = -1(分别强制至少1个数字、大写、小写、特殊字符)
—maxrepeat = 3(禁止连续4个相同字符)
—usercheck = 1(拒绝包含用户名的密码) -
/etc/login.defs管理生命周期:
—PASS_MAX_DAYS 90(密码最长有效期90天)
—PASS_MIN_DAYS 7(两次修改间隔不少于7天)
—PASS_WARN_AGE 7(到期前7天开始提醒)
—UID_MIN 1000、GID_MIN 1000(避免普通用户与系统账号UID冲突)
防火墙主策略文件(firewalld 的 zone 配置或 nftables 规则集)
网络访问控制不能只靠“开几个端口”,而要按业务角色划分区域,实现最小化放行:
- 对公网暴露的服务(如Web):仅开放
80/tcp、443/tcp,禁用icmp响应,关闭ssh公网入口 - 对内网管理节点:在 trusted 或 internal zone 中,允许
22/tcp,但必须配合source address白名单,例如只允许可信运维网段(10.10.5.0/24) - 数据库服务:不直接暴露端口,改用
rich rule限制源IP+目标端口+协议,例如仅允许应用服务器IP访问3306/tcp - 所有规则启用
log标记,关键拒绝动作写入独立日志文件,供SIEM采集分析
SELinux 主策略与上下文配置(/etc/selinux/config 与 semanage 持久化设置)
SELinux 不是“打开就完事”,必须匹配实际业务路径和进程行为,否则会导致服务异常:
- 启动模式设为
enforcing,而非permissive或disabled;/etc/selinux/config中确认SELINUX=enforcing - 对自定义服务(如Nginx部署在非标准路径
/opt/webapp),用semanage fcontext添加持久化上下文:semanage fcontext -a -t httpd_sys_content_t "/opt/webapp(/.*)?"restorecon -Rv /opt/webapp - 若需放宽某项策略(如允许HTTPD连接网络),不用直接禁用SELinux,而是用布尔值控制:
setsebool -P httpd_can_network_connect 1 - 所有
semanage和setsebool操作需记录变更清单,纳入配置版本库统一管理

















