OpenSSH 安全配置
下面是基于 Ubuntu Server 14.04 的 OpenSSH 配置說明,其他發行版的應該是類似的:
默認 ubuntu 是沒有安裝 openssh-server 的,首先安裝sudo apt-get install openssh-server
安裝好以后就自動啟動了,此時默認運行的端口在 22,簡單的話通過ssh {user}@{host}的方法就能遠程訪問了,當然為了保證安全性,建議做兩件事,一是將默認端口改掉,二是只允許通過密鑰連接,禁止輸入用戶名密碼直接登錄
在服務器修改上面2點的配置以前,我們可以先在客戶端執行ssh-keygen,根據具體的提示生成 RSA 的密鑰對,最簡單的就是一路回車
將生成的公鑰id_rsa.pub放到服務器需要登錄的用戶驗證文件中,一般為/home/{user}/.ssh/authorized_keys,可以將內容cat id_rsa.pub >> authorized_keys,或者直接在客戶端中執行ssh-copy-id -i id_rsa.pub {user}@{host},在默認的配置下客戶端自動在服務器上生成相應的文件,記得客戶端保留好私鑰
這里需要注意的是,不管是authorized_keys還是id_rsa文件,對應的權限應該是600或者400,即除了 owner 以外其它用戶都沒有權限讀寫,否則設置無效
完成上面這步以后,可以修改服務器上的/etc/ssh/sshd_config文件了,重要的部分設置如下
Port 2088 #端口設置變更 **重要**(默認為#Port 22,需要將注釋符#去掉后再修改為自己設定的端口) PermitRootLogin no #禁止用root進行登錄 RSAAuthentication yes PubkeyAuthentication yes ChallengeResponseAuthentication no PasswordAuthentication no #不允許通過密碼登錄 **重要** UsePAM no
用 ss 命令檢查 ssh 監聽的端口,沒有 22 證明修改成功
[root@hiyouther_testServer ~]ss -tnlp | grep ssh
LISTEN 0 128 *:2088 *:* users:(("sshd",995,3))
重啟服務sudo service sshd restart(centos 7以下) 或者 sudo /etc/init.d/sshd restart(centos 7以下)或者sudo systemctl restart sshd(centos 7)
也可以同時在sshd_config配置文件中保留Port 22,這樣可以防止新端口無法訪問的困境,但是這導致了22端口還可以被訪問
如果還不通訪問,或者需要關閉防火墻:
/etc/init.d/iptables stop 或者service iptables stop
或者在防火墻過濾規則中上增加一條,允許對新增的端口2088的訪問:
vi /etc/sysconfig/iptables
新增一條策略,放行端口2088:
:INPUT ACCEPT [0:0] :FORWARD ACCEPT [0:0] :OUTPUT ACCEPT [0:0] -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT -A INPUT -p icmp -j ACCEPT -A INPUT -i lo -j ACCEPT -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 2088 -j ACCEPT -A INPUT -j REJECT --reject-with icmp-host-prohibited -A FORWARD -j REJECT --reject-with icmp-host-prohibited COMMIT
至此就可以在客戶端直接通過私鑰進行訪問了
訪問方式:
ssh -p 2088 username@example.com
然而對于centos7則還需要對selinux進行相關設置,使得新設置的ssh端口可以連通
SELinux 全稱 Security Enhanced Linux (安全強化 Linux),是 MAC (Mandatory Access Control,強制訪問控制系統)的一個實現,目的在于明確的指明某個進程可以訪問哪些資源(文件、網絡端口等)。
對于 ssh,SELinux 默認只允許 22 端口,我們可以用 SELinux 管理配置工具 semanage,來修改 ssh 可訪問的端口。
安裝 semanage 工具
yum provides semanage yum -y install policycoreutils-python
為 ssh 打開 2088 端口
# 為 ssh 添加新的允許端口 semanage port -a -t ssh_port_t -p tcp 2088 # 查看當前 SELinux 允許的端口 semanage port -l | grep ssh ssh_port_t tcp 2088, 22
當 SELINUX 配置為禁用狀態時,使用 semanage 為ssh增加運允許的端口會報錯提示無法讀取 policy 文件:
SELinux: Could not downgrade policy file /etc/selinux/targeted/policy/policy.24, searching for an older version. SELinux: Could not open policy file <= /etc/selinux/targeted/policy/policy.24: No such file or directory libsemanage.semanage_reload_policy: load_policy returned error code 2. SELinux: Could not downgrade policy file /etc/selinux/targeted/policy/policy.24, searching for an older version. SELinux: Could not open policy file <= /etc/selinux/targeted/policy/policy.24: No such file or directory libsemanage.semanage_reload_policy: load_policy returned error code 2. /usr/sbin/semanage: Could not commit semanage transaction
修改/etc/selinux/config配置,啟用 SELinux:
vi /etc/selinux/config SELINUX=permissive # 重啟服務器 init 6 # 重啟后查看 SELinux 狀態 sestatus # 如果狀態為permissive,則可以load policy load_policy -qi
檢查配置:
semanage port -a -t ssh_port_t -p tcp 2088 semanage port -l | grep ssh ssh_port_t tcp 2088, 22 # 重啟 ssh 服務 systemctl restart sshd
注:semange 不能禁用 ssh 的 22 端口(可以在防火墻里面禁止):
semanage port -d -t ssh_port_t -p tcp 22 /usr/sbin/semanage: Port tcp/22 is defined in policy, cannot be deleted
經過上面的配置,SELinux將不會禁止2088端口
接下來為對centos7的防火墻進行的相關設置
配置防火墻 firewalld
啟用防火墻 && 查看防火墻狀態:
查看防火墻當前「默認」和「激活」zone(區域):
若沒有激活區域的話,要執行下面的命令:
激活 public 區域,增加網卡接口:
為 public zone 永久開放 2088/TCP 端口:
# 以防新端口不生效,先把 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 后,嘗試連接新端口
ssh -p 2088 username@example.com
如果登錄成功,則后面繼續將22端口禁止
先刪除sshd_config配置文件中的port 22,方法在上面
后再在防火墻里面禁止22端口
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 端口的訪問流量轉向訪問者本地:
firewall-cmd --permanen --zone=public --add-forward-port=port=22:proto=tcp:toport=22:toaddr=127.0.0.1 # 配置后重載防火墻,用 ssh -p 22 root@example.com 就會訪問到自己本地的 22 端口。
若要刪除 forward 配置,可以:
firewall-cmd --permanen --zone=public --remove-forward-port=port=22:proto=tcp:toport=22:toaddr=127.0.0.1
檢驗修改 ssh 端口是否成功:
ssh -p 22 root@example.com
# 無響應,因為轉到了本地的 22 端口
# 若防火墻未 forward 連接,則會回顯 "ssh: connect to host {ip} port 22: Connection refused"
ssh -p 2048 root@example.com
# 成功 success
參考文章:
怎樣修改 CentOS 7 SSH 端口
Linux centos 遠程SSH默認22端口修改為其他端口
總結
以上是生活随笔為你收集整理的OpenSSH 安全配置的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: delphi 搭建安卓开发环境
- 下一篇: VNC的安装与配置