如今,在主機上安裝一台服務器只需幾分鐘和點擊幾下鼠標。 但剛一發布,他就發現自己處於充滿敵意的環境中,因為他像搖滾迪斯科舞廳中的天真女孩一樣向整個互聯網開放。 掃描器將快速找到它並檢測數以千計的自動編寫腳本的機器人程序,這些機器人程序會搜索網絡以查找漏洞和錯誤配置。 啟動後應立即執行一些操作以確保基本保護。
Содержание
非root用戶
第一步是為自己創建一個非根用戶。 重點是用戶 root
在系統中擁有絕對的權限,如果你允許他遠程管理,那麼你就為黑客做了一半的工作,為他留下一個有效的用戶名。
因此,您需要創建另一個用戶,並通過 SSH 為 root 禁用遠程管理。
一個新用戶通過命令啟動 useradd
:
useradd [options] <username>
然後使用命令為其添加密碼 passwd
:
passwd <username>
最後,需要將該用戶添加到有權執行提升命令的組中 sudo
. 根據 Linux 發行版,這些可能是不同的組。 例如在CentOS和Red Hat中,將用戶添加到組中 wheel
:
usermod -aG wheel <username>
在 Ubuntu 中,它被添加到組中 sudo
:
usermod -aG sudo <username>
密鑰而不是 SSH 密碼
暴力破解或密碼洩露是一種標準的攻擊方式,因此最好在 SSH (Secure Shell) 中禁用密碼驗證並改用密鑰驗證。
有多種實現 SSH 協議的程序,例如
sudo apt install openssh-client
服務器安裝:
sudo apt install openssh-server
在 Ubuntu 服務器上啟動 SSH 守護進程 (sshd):
sudo systemctl start sshd
每次啟動時自動啟動守護進程:
sudo systemctl enable sshd
應該注意的是,OpenSSH 的服務器部分包括客戶端部分。 也就是說,通過 openssh-server
您可以連接到其他服務器。 此外,從您的客戶端機器,您可以啟動從遠程服務器到第三方主機的 SSH 隧道,然後第三方主機會將遠程服務器視為請求源。 一個非常方便的功能,用於屏蔽您的系統。 詳情見文章
在客戶端計算機上,通常沒有意義安裝功能齊全的服務器以防止遠程連接到計算機的可能性(出於安全目的)。
因此,對於您的新用戶,您首先需要在您將訪問服務器的計算機上生成 SSH 密鑰:
ssh-keygen -t rsa
公鑰存儲在一個文件中 .pub
看起來像一串隨機字符,以 ssh-rsa
.
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQ3GIJzTX7J6zsCrywcjAM/7Kq3O9ZIvDw2OFOSXAFVqilSFNkHlefm1iMtPeqsIBp2t9cbGUf55xNDULz/bD/4BCV43yZ5lh0cUYuXALg9NI29ui7PEGReXjSpNwUD6ceN/78YOK41KAcecq+SS0bJ4b4amKZIJG3JWm49NWvoo0hdM71sblF956IXY3cRLcTjPlQ84mChKL1X7+D645c7O4Z1N3KtL7l5nVKSG81ejkeZsGFzJFNqvr5DuHdDL5FAudW23me3BDmrM9ifUmt1a00mWci/1qUlaVFft085yvVq7KZbF2OP2NQACUkwfwh+iSTP username@hostname
然後,從 root 用戶的主目錄中的服務器上創建一個 SSH 目錄,並將 SSH 公鑰添加到文件中 authorized_keys
,使用像 Vim 這樣的文本編輯器:
mkdir -p /home/user_name/.ssh && touch /home/user_name/.ssh/authorized_keys
vim /home/user_name/.ssh/authorized_keys
最後,為文件設置正確的權限:
chmod 700 /home/user_name/.ssh && chmod 600 /home/user_name/.ssh/authorized_keys
並將所有權更改為該用戶:
chown -R username:username /home/username/.ssh
在客戶端,需要指定認證秘鑰的位置:
ssh-add DIR_PATH/keylocation
現在您可以使用此密鑰以用戶名登錄服務器:
ssh [username]@hostname
授權後,可以使用scp命令複製文件,實用程序
建議多備份幾份私鑰,因為如果禁用密碼驗證並丟失,那麼您將根本無法登錄自己的服務器。
如上所述,在 SSH 中,您需要禁用 root 身份驗證(這是我們啟動新用戶的原因)。
在 CentOS/Red Hat 上,我們找到了這條線 PermitRootLogin yes
在配置文件中 /etc/ssh/sshd_config
並改變它:
PermitRootLogin no
在 Ubuntu 上添加行 PermitRootLogin no
到配置文件 10-my-sshd-settings.conf
:
sudo echo "PermitRootLogin no" >> /etc/ssh/sshd_config.d/10-my-sshd-settings.conf
在驗證新用戶正在使用他們的密鑰進行身份驗證後,您可以禁用密碼身份驗證以消除密碼洩露或暴力破解的風險。 現在,為了訪問服務器,攻擊者需要獲得私鑰。
在 CentOS/Red Hat 上,我們找到了這條線 PasswordAuthentication yes
在配置文件中 /etc/ssh/sshd_config
並像這樣改變它:
PasswordAuthentication no
在 Ubuntu 上添加行 PasswordAuthentication no
歸檔 10-my-sshd-settings.conf
:
sudo echo "PasswordAuthentication no" >> /etc/ssh/sshd_config.d/10-my-sshd-settings.conf
有關通過 SSH 啟用雙因素身份驗證的說明,請參閱
防火牆
防火牆確保只有您直接允許的端口上的流量才會到達服務器。 這可以防止利用意外啟用其他服務的端口,從而大大減少攻擊面。
在安裝防火牆之前,您需要確保 SSH 包含在排除列表中並且不會被阻止。 否則啟動防火牆後,我們將無法連接到服務器。
Ubuntu 發行版附帶簡單的防火牆(
在 Ubuntu 的防火牆中允許 SSH:
sudo ufw allow ssh
在 CentOS/Red Hat 上使用命令 firewall-cmd
:
sudo firewall-cmd --zone=public --add-service=ssh --permanent
完成此過程後,您可以啟動防火牆。
在 CentOS/Red Hat 上,啟動 firewalld 的 systemd 服務:
sudo systemctl start firewalld
sudo systemctl enable firewalld
在 Ubuntu 上,我們使用以下命令:
sudo ufw enable
Fail2Ban
服務
在 CentOS 和 Red Hat 上安裝 Fail2Ban:
sudo yum install fail2ban
在 Ubuntu 和 Debian 上安裝:
sudo apt install fail2ban
發射:
systemctl start fail2ban
systemctl enable fail2ban
該程序有兩個配置文件: /etc/fail2ban/fail2ban.conf
и /etc/fail2ban/jail.conf
. 禁止限制在第二個文件中指定。
SSH 的 Jail 默認啟用默認設置(5 次嘗試,間隔 10 分鐘,禁止 10 分鐘)。
[默認] ignorecommand=bantime=10m findtime=10m maxretry=5
除了 SSH,Fail2Ban 還可以保護 nginx 或 Apache 網絡服務器上的其他服務。
自動安全更新
如您所知,在所有程序中不斷發現新的漏洞。 信息發布後,將漏洞添加到流行的漏洞利用包中,被黑客和青少年在連續掃描所有服務器時大量使用。 因此,一旦出現安全更新就安裝它非常重要。
在 Ubuntu 服務器上,默認情況下會啟用自動安全更新,因此無需進一步操作。
在 CentOS/Red Hat 上,您需要安裝該應用程序
sudo dnf upgrade
sudo dnf install dnf-automatic -y
sudo systemctl enable --now dnf-automatic.timer
定時器檢查:
sudo systemctl status dnf-automatic.timer
更改默認端口
SSH 於 1995 年開發,用於替代 telnet(23 端口)和 ftp(21 端口),因此該程序的作者 Tatu Iltonen
自然地,所有攻擊者都知道 SSH 在哪個端口上運行 - 並將它與其餘標準端口一起掃描以找出軟件版本、檢查標準根密碼等。
多次更改標準端口 - 混淆 - 可以減少垃圾流量、日誌大小和服務器負載,還可以減少攻擊面。 雖然有些
從理論上講,更改默認端口有悖於開放架構的做法。 但在實踐中,惡意流量實際上減少了,所以這是一種簡單有效的措施。
可以通過更改指令來配置端口號 Port 22
在配置文件中 -p <port>
в -p <port>
.
參數 -p <port>
可以用命令指定連接時的端口號 ssh
在 Linux 中。 在 scp
使用參數 -P <port>
(大寫P)。 命令行指令覆蓋配置文件中的任何值。
如果有很多服務器,幾乎所有這些保護 Linux 服務器的動作都可以在腳本中自動完成。 但如果只有一台服務器,那麼最好手動控制進程。
論廣告的權利
立即訂購併開始使用!
來源: www.habr.com