一、发现问题
事情起因:
同事反馈ESXI中的A虚拟机(Centos)无法ssh远程了(远程端口在虚拟机创建时就被修改为了10022),但前段时间都还可以正常登录。
初步排查:
A虚拟机可以被ping通,但是telnet 10022端口显示超时。
因此初步判断是防火墙拦截问题。
二、排查经过和解决办法
1、查看虚拟机内防火墙,发现是关闭状态。
尝试重启没用,看报错也无法看出什么,如下图
因此journalctl -xe进一步查看报错,如下图
这里显示我们报错的原因跟selinux目前策略有关,根据过完经历,大概明白是因为SELinux做安全加固是,使用了targeted策略导致。
2、查看selinux发现是正常运行,targeted策略不允许未经授权的程序访问网络端口,除非这些端口已经被明确地添加到 SELinux 的策略中。
解决办法(有2种,但本篇文章只写了最简单的一种):
将10022添加到策略中:
相关命令及解释如下图
上图命令可以查看SELinux在targeted策略下,允许的协议类型及对应的端口号;
semanage port -a -t http_port_t -p tcp8080-a 表示添加。 -t 后面跟的是类型(在这个例子中是 http_port_t,这是专门为 HTTP 服务预留的类型)。 -p 指定协议(在这个例子中是 tcp)。8080是你要开放的端口号。再次重启ssh,就可以正常启动成功了,如下图
3、再次用其他主机尝试telnet A主机的10022端口,发现还是超时。反思后想起来,Centos的防火墙,除了firewall还有iptables,如下图
将1002端口在iptables中配置为允许,如下图
添加成功后查看iptables全部策略,可以看到添加成功
4、问题解决。
三、总结
在重要机关单位和大型企业中,安全加固是必不可少了,因此将selinux设置为target策略、将许多重要服务的默认端口修改(比如ssh端口修改为10022)、将防火墙打开都是必须的。
但相应带来的问题就是,许多重要服务的默认端口被修改后,运维人员必须要注意修改相应的selinux策略和防火墙规则。
本篇文章最初的起因就是,不熟悉运维流程的虚拟机使用者在进行相应的安全加固操作后,并未做完整的加固流程。
教训:
修改默认端口、修改selinux策略、封禁和开放重要端口往往都是配套的。