![正确的 CentOS 7 SSH 配置](https://linux22.com/image/666677/%E6%AD%A3%E7%A1%AE%E7%9A%84%20CentOS%207%20SSH%20%E9%85%8D%E7%BD%AE.png)
我在更改新的 CentOS 7(最小)机器(IP 11.22.33.44)上的端口时遇到了一些问题。为了登录新机器,我使用代理 VPS(假设 IP 88.99.100.101)。
我编辑了该/etc/sysconfig/selinux
文件以禁用 SElinux 并重新启动。
[root@host ~]# getenforce
Disabled
禁用 selinux 并重新启动机器后,我编辑/etc/ssh/sshd_config
并将条目从 22 更改Port
为 7890(仅作为示例)+ systemctl restart sshd。
然后我将firewalld 的默认 ssh xml 配置文件从 /usr/lib/firewalld/services/ssh.xml
复制到 ,/etc/firewalld/services/ssh.xml
并将端口从 22 更改为 7890 + firewall-cmd reload
。
我还在firewalld中使更改永久生效:
firewall-cmd --zone=public --add-port=7890/tcp --permanent
当我尝试从不同的 VPS 通过 SSH 登录到新的 CentOS 7 机器时,问题就出现了。在更改端口号后,从初始 VPS 登录仍然有效,但没有新机器可以连接到 CentOS 7 机器。
我收到的错误是:
ssh: connect to host 11.22.33.44 port 7890: Connection timed out
这是我的输出ss -ntulp
:
tcp LISTEN 0 128 *:7890 *:* users:(("sshd",5566,3))
问题是,如果我将 SSH 端口改回默认的 22 值,那么每台机器都可以毫无问题地连接到它(在我编辑两个文件ssh.xml
并sshd_config
改为默认的 22 端口之后)。
我肯定遗漏了什么或做错了什么。有人能给我指出正确的方向吗?
谢谢。
答案1
听起来,虽然您说您已禁用 SELinux,但实际上可能并没有。仅靠编辑/etc/sysconfig/selinux
不足以禁用它,您需要重新启动才能使其生效(或发出setenforce 0
)。
无论如何,如果这是真的,那么 SELinux 就会阻止非标准 SSH 端口 (7890) 接受连接。要启用它,您必须重新标记端口,如下所示:
semanage port -a -t ssh_port_t -p tcp 7890
此后,您的 SSH 连接可能会按预期工作。
想想有些人问“你为什么要这样做?”他们说的是——使用非标准 SSH 端口充其量只能通过隐蔽性来保证安全。确保在服务正常运行后进一步强化服务。
答案2
似乎我在 CSF + LFD 中发现了一些东西,因为我们所有无法连接的机器都在使用它们。正如 @BaZZiliO 在评论中所建议的那样,在 SSH 客户端的允许规则中添加额外的 IP 和端口不会有帮助(已经尝试过了 - 仍然无法连接)。重新启动 lfd + csf 让我可以立即连接:
service lfd restart
csf -r
我之所以没有想到禁用或重新启动 SSH 客户端上的防火墙,是因为它最初运行正常,所以我认为这是一个配置问题。
至于问题中写的CentOS 7配置,它们是正确的并且功能正常,因此它们适合于配置测试目的(不建议在没有进一步安全配置的生产环境中使用)。
谢谢大家的帮助,我希望有人能从这次讨论中受益。
问候。