CentOS 6.4 和备用 SSH 端口不起作用

CentOS 6.4 和备用 SSH 端口不起作用

我有一台 CentOS 6.4 机器,想更改默认 SSH 端口,并按照以下说明操作:

CentOS 维基

在进行这些更改(包括“semanage port -a -t ssh_port_t -p tcp 2345”)并重新启动 SSHD 后,我仍然无法通过新的备用端口进行连接。

我看到主机正在监听新端口:

# netstat -antp | grep 2345 | grep LISTEN
tcp        0      0 0.0.0.0:2345                0.0.0.0:*                   LISTEN      6998/sshd           
tcp        0      0 :::2345                     :::*                        LISTEN      6998/sshd 

我发现 SELINUX 策略似乎是正确的:

# /usr/sbin/semanage port -l | grep ssh
ssh_port_t                     tcp      2345, 22

我发现 IPTABLES 似乎也是正确的:

# iptables -L -v
Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination         
    0     0 ACCEPT     udp  --  virbr0 any     anywhere             anywhere            udp dpt:domain 
    0     0 ACCEPT     tcp  --  virbr0 any     anywhere             anywhere            tcp dpt:domain 
    0     0 ACCEPT     udp  --  virbr0 any     anywhere             anywhere            udp dpt:bootps 
    0     0 ACCEPT     tcp  --  virbr0 any     anywhere             anywhere            tcp dpt:bootps 
 179K  145M ACCEPT     all  --  any    any     anywhere             anywhere            state RELATED,ESTABLISHED 
  185  7200 ACCEPT     icmp --  any    any     anywhere             anywhere            
    2    99 ACCEPT     all  --  lo     any     anywhere             anywhere            
   39  2028 ACCEPT     tcp  --  any    any     anywhere             anywhere            state NEW tcp dpt:ssh 
29763   11M REJECT     all  --  any    any     anywhere             anywhere            reject-with icmp-host-prohibited 

Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination         
    0     0 ACCEPT     all  --  any    virbr0  anywhere             192.168.122.0/24    state RELATED,ESTABLISHED 
    0     0 ACCEPT     all  --  virbr0 any     192.168.122.0/24     anywhere            
    0     0 ACCEPT     all  --  virbr0 virbr0  anywhere             anywhere            
    0     0 REJECT     all  --  any    virbr0  anywhere             anywhere            reject-with icmp-port-unreachable 
    0     0 REJECT     all  --  virbr0 any     anywhere             anywhere            reject-with icmp-port-unreachable 
    0     0 REJECT     all  --  any    any     anywhere             anywhere            reject-with icmp-host-prohibited 

Chain OUTPUT (policy ACCEPT 118K packets, 24M bytes)
 pkts bytes target     prot opt in     out     source               destination         

最后,我可以通过本地 telnet 连接到该端口:

# telnet localhost 2345
Trying ::1...
Connected to localhost.
Escape character is '^]'.
SSH-2.0-OpenSSH_5.3

但是无法从外部通过 telnet 或 SSH 连接到新的备用端口。

我没有受到任何防火墙的保护。

有什么想法或建议吗?我困惑了。

答案1

看起来你的 iptables 没有配置为允许端口 2345,只允许 22,该端口通过规则传递

tcp  --  any    any     anywhere             anywhere            state NEW tcp dpt:ssh

您需要一条针对端口 2345 执行相同操作的规则,您可以使用以下命令获取该规则

iptables -A INPUT -p tcp --dport 2345 -m conntrack --ctstate NEW -j ACCEPT

并且您希望该规则位于旧 SSH 规则所在的位置。这一切都假设您使用普通的 iptables 来配置防火墙,而不是使用某些包装器。如果是后一种情况,您可能希望使用包装器程序将端口从 22 更改为 2345。

供将来参考,如果您可以通过 localhost 正常连接到服务,但无法从外部连接,则问题出在您的网络(例如防火墙)上。Localhost 的行为会有所不同,因为流量将通过环回设备,而您的系统上将其设置为接受所有流量。

答案2

我最后所做的是使用 GUI 防火墙打开端口 2345、保存并重新加载防火墙,现在我就可以开始了。

我确实看到这对 /etc/sysconfig/iptables 文件进行了更改,但由于某种原因,我的命令行尝试没有起作用。

简而言之,需要做的事情如下:

1)将备用端口添加到 /etc/ssh/sshd_config:

Port 2345 # the additional SSH port
Port 22 # just in case

2)安装“semanage”来更改SELinux:

# yum -y install policycoreutils-python

3)将新端口添加到SELinux策略:

# semanage port -a -t ssh_port_t -p tcp 2345

4)重新启动SSHD:

# service sshd restart

5)在 CentOS 防火墙 GUI 中的“其他端口”中添加 2345 作为 TCP(忽略它认为服务是 DBM 的事实),应用,重新加载

完毕

相关内容