只允許特定使用者通過 sshd 登錄,但拒絕連接到未列出的使用者
我正在執行 CentOS 伺服器(7.0),我想通過 sshd 以使用者身份登錄,而不是 root。所以我
PermitRootLogin no
在配置文件和su -
登錄後設置。我收到了很多黑客活動,我決定只允許一個使用者通過 sshd 登錄。由於使用者名不是我的真實姓名或任何常用名稱,我認為這已經足夠了。假設它是“hkbjhsqj”。我已經嘗試過在 nixCraft 上介紹的兩種方法:sshd_config 中的 AllowUsers或PAM 中的 pam_listfile.so。對我來說唯一的問題是其他任何人仍然有機會輸入密碼,並且會在 /var/log/secure 中留下記錄。我假設這些操作會消耗我伺服器的資源來執行密碼檢查和其他東西。
假設我嘗試使用使用者名“admin”登錄:
www$ ssh admin@0.0.0.0 admin@0.0.0.0's password: Permission denied, please try again. admin@0.0.0.0's password: Permission denied, please try again. admin@0.0.0.0's password: Permission denied (publickey,gssapi-keyex,gssapi-with-mic,password).
並在安全日誌中:
Aug 8 08:28:40 www sshd[30497]: pam_unix(sshd:auth): check pass; user unknown Aug 8 08:28:40 www sshd[30497]: pam_listfile(sshd:auth): Refused user admin for service sshd Aug 8 08:28:43 www sshd[30497]: Failed password for invalid user admin from 192.168.0.1 port 52382 ssh2 Aug 8 08:28:47 www sshd[30497]: pam_unix(sshd:auth): check pass; user unknown Aug 8 08:28:47 www sshd[30497]: pam_listfile(sshd:auth): Refused user admin for service sshd Aug 8 08:28:50 www sshd[30497]: Failed password for invalid user admin from 192.168.0.1 port 52382 ssh2 Aug 8 08:28:52 www sshd[30497]: pam_unix(sshd:auth): check pass; user unknown Aug 8 08:28:52 www sshd[30497]: pam_listfile(sshd:auth): Refused user admin for service sshd Aug 8 08:28:55 www sshd[30497]: Failed password for invalid user admin from 192.168.0.1 port 52382 ssh2 Aug 8 08:28:55 www sshd[30497]: Connection closed by 192.168.0.1 [preauth] Aug 8 08:28:55 www sshd[30497]: PAM 2 more authentication failures; logname= uid=0 euid=0 tty=ssh ruser= rhost=192.168.0.1
如果我在 /etc/hosts.deny 中添加 IP,這一切都不會發生:
www$ ssh admin@0.0.0.0 ssh_exchange_identification: Connection closed by remote host
並在安全日誌中:
Aug 8 08:35:11 www sshd[30629]: refused connect from 192.168.0.1 (192.168.0.1) Aug 8 08:35:30 www sshd[30638]: refused connect from 192.168.0.1 (192.168.0.1)
所以我的問題是,有沒有一種方法可以在不檢查密碼的情況下拒絕來自任何地方的所有不相關使用者的 ssh 請求,就像我將它們放在 hosts.deny 列表中一樣?但與此同時,我確實需要允許來自任何地方的使用者名 ‘hkbjhsqj’ 的所有 ssh 請求,然後檢查密碼。
我認為不可能按照您的要求進行操作。如果可以的話,有人可以“蠻力”在您的伺服器上找到有效的使用者名。我也很確定客戶端同時發送了使用者名和密碼,您可以通過在未加密的 SSH 連接上使用 Wireshark 擷取數據包來驗證這一點。
通過“黑客活動”,我假設您正在談論密碼的暴力嘗試。有很多方法可以保護自己免受此傷害,我將解釋最常見的方法。
禁用 root 登錄 通過拒絕使用 SSH 的 root 登錄,攻擊者必須知道或猜測一個有效的使用者名。大多數自動蠻力攻擊僅嘗試以 root 身份登錄。
在身份驗證失敗時阻止 IP 諸如 fail2ban 和 sshguard 之類的守護程序會監視您的日誌文件以檢測登錄失敗。您可以配置這些以阻止在多次登錄嘗試失敗後嘗試登錄的 IP 地址。在你的情況下,這是我推薦的。這減少了日誌垃圾郵件和伺服器上的壓力,因為來自該 IP 的所有數據包在到達 sshd 守護程序之前都會被阻止。例如,您可以將 fail2ban 設置為在過去 5 分鐘內阻止 3 次登錄失敗的 IP,持續 60 分鐘。在最壞的情況下,假設攻擊者沒有放棄並繼續前進,您將每 60 分鐘在您的日誌中看到 3 次登錄失敗。
公鑰身份驗證 您可以完全禁用密碼身份驗證,只允許具有特定密鑰的客戶端。這通常被認為是最安全的解決方案(假設客戶保持其密鑰安全和加密)。要禁用密碼驗證,請將您的公鑰添加到伺服器
~/.ssh/authorized_keys
上並在 sshd_config 中設置。有許多教程和工具可以幫助解決這個問題。PasswordAuthentication``no