在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跳板机真正成为可信的安全通道。