Linux 安全加固:在 CentOS 上修改 SSH Server 的默认监听端口 (Linux Security Reinforcement: Modify the Default Listening Port for SSH Server on CentOS)

操作说明

22 号端口是 SSH Server 的默认监听端口,当有人对我们位于公网上的服务器进行端口扫描的时候,极有可能发现这个端口并尝试恶意登陆我们服务器上的 SSH Server, 因此修改这个默认监听端口就很有必要。

操作环境

本文中我的操作是在一台远程 VPS 上进行的(我无法连接该 VPS 的本地 Shell, 因此,在接下来的操作中我始终要确保能够远程登陆这台 VPS.), 其操作系统版本信息如下:

[root@GreedyIronclad-VM ~]# cat /etc/issue
CentOS release 6.3 (Final)
Kernel \r on an \m

操作步骤

打开 SSH Server 的配置文件:

vim /etc/ssh/sshd_config

可以找到如下内容:

#Port 22
#AddressFamily any
#ListenAddress 0.0.0.0
#ListenAddress ::

去掉 “Port 22”[1] 前面的注释并在其下添加 “Port XXX”[2], 例如:

Port 22
Port XXX
#AddressFamily any
#ListenAddress 0.0.0.0
#ListenAddress ::

Restart SSH Server:

[root@GreedyIronclad-VM ~]# service sshd restart
Stopping sshd:                                             [  OK  ]
Starting sshd:                                             [  OK  ]

之后我们还需要对防火墙做一些设置,这样才能确保新增的监听端口 XXX[2] 不被防火墙阻断。
在这里,有些文章可能建议大家直接关闭防火墙,我建议大家千万不要这么做。直接关闭防火墙确实可以省下很多麻烦,但是我们修改 SSH Server 的默认端口的目的就是为了增强服务器的安全性,如果为此而关闭了防火墙那岂不是得不偿失。

具体操作如下:

编辑防火墙配置文件:

vim /etc/sysconfig/iptables

将用于 SSH Server 的 “XXX”[2] 端口加入允许规则:

-A INPUT -m state --state NEW -m tcp -p tcp --dport XXX -j ACCEPT

命令参数注释:

-A: 附加该规则到已有规则的末尾;
INPUT: 入站规则;
-m: 显示扩展;
-m state: 使用 state 扩展模块。当连接与跟踪结合使用时,state 模块允许访问数据包的连接跟踪状态;
-m state –state NEW: 连接中的第一个数据包;
-m tcp: 使用 TCP 扩展模块;
-p tcp: 指定待检查包的协议为 TCP 协议;
–dport XXX: 指定目的端口为 XXX;
-j ACCEPT: 如果数据包和该规则匹配则接受该数据包。

重启防火墙以使配置生效:

service iptables restart

之后,使用新增的非默认端口尝试连接远程服务器,如果可以连接成功(正常情况下,此时使用 22 号端口以及新增的非默认端口都可以连接远程服务器),则接下来我们就把原来的 22 端口禁用掉。

在 SSH Server 的配置文件中注释掉对 22 号端口的监听,编辑配置文件:

vim /etc/ssh/sshd_config

修改后如下:

#Port 22
Port XXX
#AddressFamily any
#ListenAddress 0.0.0.0
#ListenAddress ::

Restart SSH Server:

service sshd restart

此时,再次尝试连接 SSH Server 的 22 号端口应该就已经会被拒绝连接。但是为了更加安全,我们还需要在防火墙上拒绝入站请求 22 端口的连接。

在防火墙上禁止来自 22 端口的连接请求,编辑防火墙配置文件:

vim /etc/sysconfig/iptables

修改示例如下:

#-A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j DROP

Restart Iptables:

service iptables restart

注释

[1] 这一步不能去掉对原来的 22 号端口的监听,因为我们在修改配置文件时使用的还是 22 端口,一旦 22 端口失效而新增的监听端口没能正常工作,那么我们就失去了和远程服务器的连接。
[2] “XXX” 为你想要设置的 SSH Server 监听的端口号,建议应大于 10000, 因为如果攻击者从小到大依次扫描各个端口号,那么大于 10000 的端口被扫描到的可能性将大大降低。