在CentOS环境下,SSH网关跳板机是访问内部网络的关键枢纽,但默认配置往往存在严重安全隐患。直接暴露的SSH服务可能被暴力破解、中间人攻击或未授权访问利用,导致整个内网沦陷。我们必须立即行动,通过禁用密码登录、限制访问源IP、启用密钥认证、配置防火墙规则和审计日志这五个核心步骤,将跳板机打造成铜墙铁壁。
一、彻底禁用密码认证,强制使用SSH密钥对
密码登录是SSH最脆弱的环节,无数服务器因弱密码或暴力破解失守。在CentOS 7/8系统中,打开SSH主配置文件:
vi /etc/ssh/sshd_config
找到并修改以下关键参数:
PasswordAuthentication no PubkeyAuthentication yes ChallengeResponseAuthentication no UsePAM no
这意味着所有用户都必须使用RSA或Ed25519密钥对登录。生成密钥对时务必使用至少4096位长度:
ssh-keygen -t rsa -b 4096 -C "跳板机专用密钥"
将公钥写入~/.ssh/authorized_keys文件后,必须设置严格的权限:
chmod 700 ~/.ssh chmod 600 ~/.ssh/authorized_keys
密钥认证不仅更安全,还能实现自动化运维的无缝对接。记得为每个管理员分配独立密钥,避免密钥泄露时无法追溯。
二、精细化访问控制:IP白名单与用户限制
即使有了密钥认证,跳板机也不应该对全网开放。在sshd_config中添加:
AllowUsers admin@192.168.1.0/24 ops@10.0.0.100 DenyUsers root testuser AllowGroups ssh-users
这实现了三层防护:只允许特定用户从指定IP段登录,明确拒绝高危账户,且仅限特定用户组成员访问。配合TCP Wrappers双重保险,在/etc/hosts.allow中添加:
sshd: 192.168.1., 10.0.0.
更彻底的方案是用防火墙构建动态白名单。CentOS 7+的firewalld规则示例:
firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="192.168.1.0/24" port protocol="tcp" port="22" accept' firewall-cmd --reload
对于云环境,应结合安全组限制,只允许运维终端IP访问22端口。切记定期审查访问日志,剔除不再需要的IP地址。
三、SSH协议深度加固:加密算法与连接参数优化
默认SSH配置可能支持弱加密算法,给中间人攻击可乘之机。在sshd_config末尾添加:
# 禁用不安全的加密算法 Ciphers chacha20-poly1305@openssh.com,aes256-gcm@openssh.com,aes128-gcm@openssh.com MACs hmac-sha2-512-etm@openssh.com,hmac-sha2-256-etm@openssh.com KexAlgorithms curve25519-sha256@libssh.org # 连接参数强化 LoginGraceTime 30 MaxAuthTries 2 ClientAliveInterval 300 ClientAliveCountMax 2
这些配置实现了:仅允许现代加密算法、30秒登录超时、最多2次认证尝试、5分钟无操作自动断开。特别要注意禁用SSH v1协议:
Protocol 2
对于高安全环境,可以修改默认端口并配合端口敲门(Port Knocking)技术:
# 修改SSH端口 Port 2222 # 使用knockd实现端口敲门 yum install knockd systemctl enable knockd
这样攻击者扫描22端口一无所获,只有按特定顺序"敲门"才会临时开放访问。
四、全方位监控审计:从登录尝试到命令记录
跳板机的所有操作都必须可追溯。首先启用详细日志记录:
# 在sshd_config中设置 LogLevel VERBOSE SyslogFacility AUTHPRIV
使用auditd记录所有SSH相关事件:
# 监控sshd进程 auditctl -w /usr/sbin/sshd -p x -k sshd_access # 监控配置文件变化 auditctl -w /etc/ssh/sshd_config -p wa -k sshd_config
更重要的是记录用户执行的每一条命令。通过修改bash配置文件实现:
# 在/etc/bashrc末尾添加 export PROMPT_COMMAND='RETRN_VAL=$?;logger -p local6.debug "$(whoami) [$$]: $(history 1 | sed "s/^[ ]*[0-9]\+[ ]*//" ) [$RETRN_VAL]"'
所有命令将记录到/var/log/messages。对于生产环境,建议实时同步审计日志到独立的SIEM系统,并设置异常登录告警,如非工作时间登录、频繁失败尝试等。
五、网络层隔离与故障转移架构
跳板机自身需要多层网络防护。建议部署双网卡架构:eth0对外提供SSH服务,eth1连接内网,并严格限制转发权限:
# 在sshd_config中控制端口转发 AllowTcpForwarding no X11Forwarding no GatewayPorts no
使用iptables限制出站连接,只允许跳板机访问必要的内网服务端口。建立高可用架构时,通过Keepalived实现VIP故障转移:
# Keepalived配置示例
vrrp_instance VI_1 {
state MASTER
interface eth0
virtual_router_id 51
priority 100
virtual_ipaddress {
192.168.1.100/24
}
}定期安全扫描不可或缺:每月使用OpenVAS或Nessus进行漏洞扫描,每周检查系统更新,及时安装SSH相关安全补丁。备份策略必须包含sshd_config、防火墙规则和授权密钥文件。
六、应急响应与持续维护策略
加固后必须建立完整的应急流程。当发现异常登录时,立即执行:
# 查看实时登录 who /var/log/wtmp # 检查最近登录记录 last -f /var/log/btmp # 立即封锁可疑IP firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="攻击IP" drop'
维护方面,每季度轮换一次SSH主机密钥,每年更新用户密钥。使用自动化工具如Ansible批量管理跳板机配置:
- name: 加固SSH配置
lineinfile:
path: /etc/ssh/sshd_config
regexp: "{{ item.regexp }}"
line: "{{ item.line }}"
with_items:
- { regexp: '^PasswordAuthentication', line: 'PasswordAuthentication no' }
- { regexp: '^PermitRootLogin', line: 'PermitRootLogin no' }最后记住,技术加固只是基础,必须配合管理制度:严格审批密钥分发、定期进行渗透测试、建立操作审计流程。只有技术和管理的双重加固,才能让SSH跳板机真正成为可信的安全通道。
