Linux——SSH安全隧道:从基础配置到高级访问控制实战
1. SSH安全隧道基础配置
第一次接触SSH时,我被它的简洁和强大震撼到了。那是在2013年,我负责维护几台分布在不同数据中心的Linux服务器。当时团队还在用telnet,每次传输密码都像在裸奔。直到某天服务器被入侵,我们才痛下决心全面转向SSH。
1.1 修改默认SSH端口
修改默认的22端口是安全加固的第一步。上周我帮一个客户做渗透测试,用nmap扫描他们的服务器,发现仍然有30%的机器使用默认端口。这就像把家门钥匙挂在门把手上——太危险了。
具体操作很简单:
sudo vim /etc/ssh/sshd_config找到#Port 22这行,去掉注释并改成其他端口(比如23456)。注意要选5位数的端口,避开常见服务端口范围。
改完后需要重启服务:
sudo systemctl restart sshd但这里有个坑:如果服务器启用了SELinux,直接改端口会报错。需要先执行:
sudo semanage port -a -t ssh_port_t -p tcp 234561.2 密钥对认证配置
密码认证就像用纸糊的锁,暴力破解太容易。去年处理过一个案例,攻击者用字典攻击猜出了弱密码,导致数据库泄露。密钥对认证才是王道,我现在的所有服务器都禁用了密码登录。
生成密钥对(客户端操作):
ssh-keygen -t ed25519 -C "your_email@example.com"这里用ed25519算法比RSA更安全高效。生成后会在~/.ssh/下得到id_ed25519(私钥)和id_ed25519.pub(公钥)。
把公钥上传到服务器:
ssh-copy-id -i ~/.ssh/id_ed25519.pub user@server -p 23456最后在服务器端禁用密码登录:
sudo sed -i 's/#PasswordAuthentication yes/PasswordAuthentication no/' /etc/ssh/sshd_config sudo systemctl restart sshd2. 精细化访问控制实战
2.1 用户黑白名单管理
上个月有个客户遇到内部员工越权访问的问题。他们开发团队有人用个人账号登录生产环境,差点引发事故。用AllowUsers/DenyUsers可以完美解决这类问题。
编辑sshd_config:
sudo vim /etc/ssh/sshd_config添加如下配置(根据实际需求调整):
AllowUsers admin@192.168.1.* devuser@10.0.0.5 DenyUsers tempuser hacker这样只允许admin从192.168.1.0/24网段登录,devuser只能从10.0.0.5登录,完全禁止tempuser和hacker登录。
2.2 TCP Wrappers双重防护
有一次客户的SSH端口被全网扫描,虽然改了端口还是担心。我教他们用TCP Wrappers做了第二道防线,效果立竿见影。
先确认是否支持TCP Wrappers:
ldd $(which sshd) | grep libwrap然后配置/etc/hosts.allow和/etc/hosts.deny:
# /etc/hosts.allow sshd: 192.168.1.0/255.255.255.0, 10.0.0.5 # /etc/hosts.deny sshd: ALL这样只有指定IP段能访问SSH,其他全部拒绝。记得测试时保持现有连接,避免把自己锁在外面。
3. 高级安全策略
3.1 登录失败处理
去年遇到一个暴力破解案例,攻击者每秒尝试50次登录。现在我的标准配置里一定会加登录限制:
# /etc/ssh/sshd_config MaxAuthTries 3 LoginGraceTime 1m PermitRootLogin prohibit-password配合fail2ban更安全:
sudo apt install fail2ban sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local编辑jail.local的[sshd]部分:
[sshd] enabled = true port = 23456 filter = sshd logpath = /var/log/auth.log maxretry = 3 bantime = 1h3.2 会话超时设置
运维人员经常忘记退出会话,这很危险。我的配置方案:
# /etc/ssh/sshd_config ClientAliveInterval 300 ClientAliveCountMax 0 # /etc/profile export TMOUT=900这样会在15分钟无操作后自动断开连接。对于重要操作,建议用tmux或screen保持会话。
4. 审计与监控
4.1 详细日志记录
去年调查一起安全事件时,完善的日志帮了大忙。我的标准日志配置:
# /etc/ssh/sshd_config LogLevel VERBOSE SyslogFacility AUTHPRIV # /etc/rsyslog.d/ssh.conf authpriv.* /var/log/ssh.log然后用logrotate管理日志大小:
# /etc/logrotate.d/ssh /var/log/ssh.log { weekly missingok rotate 12 compress delaycompress notifempty }4.2 实时告警设置
通过swatch监控登录尝试:
sudo apt install swatch cat > ~/.swatchrc <<EOF watchfor /Failed password/ throttle 10:00 exec "echo SSH登录失败告警 | mail -s 'SSH告警' admin@example.com" EOF对于关键服务器,我还会配置Zabbix监控SSH登录情况,设置每分钟超过5次失败就触发告警。
记得定期检查/var/log/secure或/var/log/auth.log,分析异常登录模式。有次我发现凌晨3点的登录记录,最终抓到了一个内部人员的违规操作。