怎樣修改 CentOS 7 SSH 端口



修改 sshd_config 端口

Bash

$ vi /etc/ssh/sshd_config

取消 #Port 22 的註釋,在下一行添加你需要修改的新端口 Port 2048。(這裏不刪除 22 端口是爲了防止修改後新端口無法訪問,造成無法用 ssh 連接服務器。)

Port 22  
Port 2048

修改保存 sshd_config 文件後重啓 sshd 服務:

Bash

$  systemctl restart sshd

退出 ssh 會話後,再用新的端口連接:

Bash

$ ssh -p 2048 [email protected]
ssh: connect to host 0.0.0.0 port 2048: Connection refused

好吧,native 了……對於 CentOS 7 這一套修改端口的方法已經不能生效了。

打開 SELinux 端口

SELinux 全稱 Security Enhanced Linux (安全強化 Linux),是 MAC (Mandatory Access Control,強制訪問控制系統)的一個實現,目的在於明確的指明某個進程可以訪問哪些資源(文件、網絡端口等)。

對於 ssh,SELinux 默認只允許 22 端口,我們可以用 SELinux 管理配置工具 semanage,來修改 ssh 可訪問的端口。

安裝 semanage 工具

Bash

$ yum provides semanage
$ yum -y install policycoreutils-python
爲 ssh 打開 2048 端口

Bash

# 爲 ssh 添加新的允許端口$ semanage port -a -t ssh_port_t -p tcp 2048# 查看當前 SELinux 允許的端口$ semanage port -l | grep sshssh_port_t                     tcp      2048, 22
錯誤處理

當 SELINUX 配置爲禁用狀態時,使用 semanage 會報錯提示無法讀取 policy 文件:

SELinux:  Could not downgrade policy file /etc/selinux/targeted/policy/policy.30, searching for an older version.  
SELinux:  Could not open policy file <= /etc/selinux/targeted/policy/policy.30:  No such file or directory  
/sbin/load_policy:  Can't load policy:  No such file or directory
libsemanage.semanage_reload_policy: load_policy returned error code 2. (No such file or directory).  
FileNotFoundError: [Errno 2] No such file or directory

修改 /etc/selinux/config 配置,啓用 SELinux:

Bash

$ vi /etc/selinux/config
SELINUX=permissive  
# 重啓服務器$ init 6# 重啓後查看 SELinux 狀態$ sestatus# if it shows disable, you can run$ load_policy -qi
檢查配置:

Bash

$ semanage port -a -t ssh_port_t -p tcp 2048
$ semanage port -l | grep sshssh_port_t                     tcp      2048, 22  
# 重啓 ssh 服務systemctl restart sshd

注:semange 不能禁用 ssh 的 22 端口:

Bash

$ semanage port -d -t ssh_port_t -p tcp 22
ValueError: 在策略中定義了端口 tcp/22,無法刪除。

配置防火牆 firewalld

啓用防火牆 && 查看防火牆狀態:

Bash

$ systemctl enable firewalld
$ systemctl start firewalld
$ systemctl status firewalld
● firewalld.service - firewalld - dynamic firewall daemon
   Loaded: loaded (/usr/lib/systemd/system/firewalld.service; enabled; vendor preset: enabled)
   Active: active (running) since 二 2016-12-20 02:12:59 CST; 1 day 13h ago
 Main PID: 10379 (firewalld)
   CGroup: /system.slice/firewalld.service
           └─10379 /usr/bin/python -Es /usr/sbin/firewalld --nofork --nopid
$ firewall-cmd --state
running
查看防火牆當前「默認」和「激活」zone(區域):

Bash

$ firewall-cmd --get-default-zone
public  
$ firewall-cmd --get-active-zones
public  
  interfaces: eth0 eth1

若沒有激活區域的話,要執行下面的命令。

激活 public 區域,增加網卡接口:

Bash

$ firewall-cmd --set-default-zone=public
$ firewall-cmd --zone=public --add-interface=eth0
success  
$ firewall-cmd --zone=public --add-interface=eth1
success
爲 public zone 永久開放 2048/TCP 端口:

Bash

# 以防新端口不生效,先把 22 端口暴露$ firewall-cmd --permanent --zone=public --add-port=22/tcp
$ firewall-cmd --permanent --zone=public --add-port=2048/tcp
success  
# 重載防火牆$ firewall-cmd --reload# 查看暴露端口規則$ firewall-cmd --permanent --list-port
443/tcp 80/tcp 22/tcp 2048/tcp  
$ firewall-cmd --zone=public --list-all
public (default, active)  
  interfaces: eth0 eth1
  sources:
  services: dhcpv6-client ssh
  ports: 443/tcp 80/tcp 22/tcp 2048/tcp
  masquerade: no
  forward-ports:
  icmp-blocks:
  rich rules:

退出 ssh 後,嘗試連接新端口

Bash

$ ssh -p 2048 [email protected]

成功登錄的話,就可以做收尾工作了。

禁用 22 端口

刪除 ssh 允許端口

Bash

$ vi /etc/ssh/sshd_config#Port 22Port 2048  
$ systemctl restart sshd# 用 ss 命令檢查 ssh 監聽的端口,沒有 22 證明修改成功$ ss -tnlp | grep sshLISTEN     0      128                       *:2048                    *:*      users:(("sshd",18233,3))
防火牆移除 22 端口

Bash

$ firewall-cmd --permanent --zone=public --remove-port=22/tcp
success  
$ firewall-cmd --reload
$ firewall-cmd --permanent --list-port
443/tcp 80/tcp 2048/tcp

ssh 取消監聽 22 端口,就已經配置好了,防火牆只不過是在 ssh 外多一層訪問限制。如果要做的更好還可以將 22 端口的訪問流量轉向訪問者本地:

Bash

$ firewall-cmd --permanen --zone=public --add-forward-port=port=22:proto=tcp:toport=22:toaddr=127.0.0.1# 配置後重載防火牆,用 ssh -p 22 [email protected] 就會訪問到自己本地的 22 端口。

若要刪除 forward 配置,可以:

Bash

$ firewall-cmd --permanen --zone=public --remove-forward-port=port=22:proto=tcp:toport=22:toaddr=127.0.0.1

檢驗修改 ssh 端口是否成功:

Bash

$ ssh -p 22 [email protected]# 無響應,因爲轉到了本地的 22 端口# 若防火牆未 forward 連接,則會回顯 "ssh: connect to host {ip} port 22: Connection refused"$ ssh -p 2048 [email protected]# 成功 success



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章