1 缘起
最近ssh登录的时候,主机提示距离上次登录之间遇到过n次失败登陆,于是运行指令查看log文件:1
cat /var/log/secure|grep "Failed"
结果刷刷刷下来几百上千条记录,真的是字面意义的暴力破解,什么用户名和端口都给试了一遍,下面是随机截取的五次失败记录:
1 | Jan 1 11:11:03 VM_0_2_centos sshd[16734]: Failed password for invalid user admin from 159.89.13.0 port 41382 ssh2 |
获取其中的ip地址和数量:1
grep -o '[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}' /var/log/secure | sort | uniq -c
结果列表之长惊了我一身冷汗,几个页面都没显示完全。IP开头从23到223应有尽有,每个IP都有几十次尝试,不知道是哪位黑客手头这么多肉鸡,下面是冰山一角:1
2
3
4
5
640 54.36.151.64
40 54.36.189.143
22 54.36.189.240
21 54.36.95.101
15 54.37.149.175
35 54.37.154.254
2 CentOS 7修改SSH端口并配置iptables防火墙
2.1 修改ssh端口
1 | #1.修改 sshd_config 端口 |
2.2 安装semanage工具
SELinux 全称 Security Enhanced Linux (安全强化 Linux),是 MAC (Mandatory Access Control,强制访问控制系统)的一个实现,目的在于明确的指明某个进程可以访问哪些资源(文件、网络端口等)。对于 ssh,SELinux 默认只允许 22 端口,我们可以用 SELinux 管理配置工具 semanage,来修改 ssh 可访问的端口。
1 | #1. 安装 semanage 工具 |
注:semange 不能禁用 ssh 的 22 端口:1
2semanage port -d -t ssh_port_t -p tcp 22
ValueError: 在策略中定义了端口 tcp/22,无法删除。
2.3 使用firewall-cmd禁用22端口连接ssh
1 | #1. 配置防火墙 firewalld启用防火墙 && 查看防火墙状态 |
退出 ssh 后,尝试连接新端口:ssh -p 2048 root@example.com
成功登录的话,就可以做收尾工作了。
3 参考
CentOS 7修改SSH端口并配置iptables防火墙
修改ssh端口及iptables设置 (注:这篇参考文章内容较旧,仅作参考)