前言
长城宽带难道连ssh都有限制?之前一直好好的,今天起床后CRT就不能连服务器了,我以为我服务器挂了,但是邮件短信微信都没收到告警呀,结果网站能打开,我还以为CRT出问题了,马上用另一台电脑一试,还是无法连接,最后我用手机热点试了一下能连接上,好吧,长宽你可真牛,单单ssh端口通信出故障。。。
由于我服务器用的密钥管理,觉得相对比较安全,就没在第一时间修改ssh默认端口,那就趁此机会修改吧(毕竟总不能一直用手机热点连接服务器呀)
正文
修改 sshd_config 端口
1 |
vim /etc/ssh/sshd_config |
取消 #Port 22 的注释,在下一行添加需要修改的新端口 Port 2222。(这里先不删除22端口是为了防止修改后新端口无法访问,造成无法用ssh连接服务器。)
1 2 |
Port 22 Port 2222 |
修改保存sshd_config文件后重启sshd服务:
1 |
systemctl restart sshd |
退出 ssh 会话后,再用新的端口连接:
好吧,想多了。。。对于CentOS7这一套修改端口的方法已经不能生效了。
打开SELinux端口
SELinux全称Security Enhanced Linux(安全强化Linux),是MAC(Mandatory Access Control,强制访问控制系统)的一个实现,目的在于明确的指明某个进程可以访问哪些资源(文件、网络端口等)。
对于 ssh,SELinux 默认只允许 22 端口,我们可以用SELinux管理配置工具semanage,来修改ssh可访问的端口。
如果没有安装semanage工具就先安装
1 |
yum -y install provides semanage policycoreutils-python |
为ssh添加新的允许端口
1 |
semanage port -a -t ssh_port_t -p tcp 2222 |
结果报错如下
1 |
SELinux: Could not downgrade policy file /etc/selinux/targeted/policy/policy.30, searching for an older version. SELinux: Could not open policy file <= /etc/selinux/targeted/policy/policy.30: No such file or directory /sbin/load_policy: Can't load policy: No such file or directory libsemanage.semanage_reload_policy: load_policy returned error code 2. (No such file or directory). SELinux: Could not downgrade policy file /etc/selinux/targeted/policy/policy.30, searching for an older version. SELinux: Could not open policy file <= /etc/selinux/targeted/policy/policy.30: No such file or directory /sbin/load_policy: Can't load policy: No such file or directory libsemanage.semanage_reload_policy: load_policy returned error code 2. (No such file or directory). OSError: No such file or directory |
原来是当SELINUX配置为禁用状态时,使用semanage会报错提示无法读取policy文件
修改/etc/selinux/config配置,启用SELinux:
1 2 |
vim /etc/selinux/config SELINUX=enforcing |
注意:这里直接setenforce 0不能生效,必须要重启服务器
重启后查看SELinux状态
1 2 3 4 5 6 7 8 9 10 |
sestatus SELinux status: enabled SELinuxfs mount: /sys/fs/selinux SELinux root directory: /etc/selinux Loaded policy name: targeted Current mode: enforcing Mode from config file: disabled Policy MLS status: enabled Policy deny_unknown status: allowed Max kernel policy version: 28 |
添加端口2222:
1 |
semanage port -a -t ssh_port_t -p tcp 2222 |
查看当前SELinux允许的端口
1 2 |
semanage port -l | grep ssh ssh_port_t tcp 2222, 22 |
重启ssh服务
1 |
systemctl restart sshd |
注意:semange不能禁用ssh的22端口:
1 |
semanage port -d -t ssh_port_t -p tcp 22 |
ValueError: 在策略中定义了端口 tcp/22,无法删除。
在防火墙里开启2222端口或者关闭防火墙,再在云服务器安全组里开启TCP2222端口
退出ssh后,切换到坑爹的长宽,尝试连接新端口,终于成功登录了,现在可以做收尾工作了。
禁用22端口
删除ssh允许端口
1 2 3 4 |
vim /etc/ssh/sshd_config #Port 22 Port 2222 systemctl restart sshd |
用ss命令检查ssh监听的端口,没有22证明修改成功
1 2 |
ss -tnlp | grep ssh LISTEN 0 128 :::2222 :::* users:(("sshd",886,4)) LISTEN 0 128 *:2222 *:* users:(("sshd",886,3)) |
防火墙移除22端口,安全组里删除22端口
其实ssh取消监听22端口,就已经配置好了,防火墙只不过是在ssh外多一层访问限制。如果要做的更好还可以将22端口的访问流量转向访问者本地。