我有一台 CentOS 6.4 机器,想更改默认 SSH 端口,并按照以下说明操作:
在进行这些更改(包括“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 的事实),应用,重新加载
完毕