Linux 服務器保護。 先做什麼

Linux 服務器保護。 先做什麼
Habib M'henni/維基共享資源,CC BY-SA

如今,在主機上安裝一台服務器只需幾分鐘和點擊幾下鼠標。 但剛一發布,他就發現自己處於充滿敵意的環境中,因為他像搖滾迪斯科舞廳中的天真女孩一樣向整個互聯網開放。 掃描器將快速找到它並檢測數以千計的自動編寫腳本的機器人程序,這些機器人程序會搜索網絡以查找漏洞和錯誤配置。 啟動後應立即執行一些操作以確保基本保護。

Содержание

非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 協議的程序,例如 利甚 и 落熊,但最受歡迎的是 OpenSSH。 在 Ubuntu 上安裝 OpenSSH 客戶端:

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 密鑰:

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命令複製文件,實用程序 SSHFS 遠程掛載文件系統或目錄。

建議多備份幾份私鑰,因為如果禁用密碼驗證並丟失,那麼您將根本無法登錄自己的服務器。

如上所述,在 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 發行版附帶簡單的防火牆(UFW), 以及 CentOS/Red Hat - firewalld.

在 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

服務 Fail2Ban 分析服務器上的日誌併計算每個 IP 地址的訪問嘗試次數。 這些設置指定了在特定時間間隔內允許訪問嘗試次數的規則 - 之後該 IP 地址將在指定時間段內被阻止。 例如,讓我們在 5 小時內允許 2 次失敗的 SSH 身份驗證嘗試,然後阻止給定的 IP 地址 12 小時。

在 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 上,您需要安裝該應用程序 dnf-自動 並打開定時器:

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 默認選擇端口 22, 並已獲得 IANA 批准。

自然地,所有攻擊者都知道 SSH 在哪個端口上運行 - 並將它與其餘標準端口一起掃描以找出軟件版本、檢查標準根密碼等。

多次更改標準端口 - 混淆 - 可以減少垃圾流量、日誌大小和服務器負載,還可以減少攻擊面。 雖然有些 批評這種“默默無聞地保護”的方法 (通過默默無聞的安全)。 原因是這種技術與基本原理相反 建築保護. 因此,例如,美國國家標準技術研究院在 《服務器安全指南》 表明需要一個開放的服務器架構:“系統的安全性不應依賴於其組件實現的保密性,”該文件說。

從理論上講,更改默認端口有悖於開放架構的做法。 但在實踐中,惡意流量實際上減少了​​,所以這是一種簡單有效的措施。

可以通過更改指令來配置端口號 Port 22 在配置文件中 的/ etc / SSH / sshd_config中. 也由參數表示 -p <port> в sshd的. SSH 客戶端和程序 SFTP 也支持選項 -p <port>.

參數 -p <port> 可以用命令指定連接時的端口號 ssh 在 Linux 中。 在 SFTP и scp 使用參數 -P <port> (大寫P)。 命令行指令覆蓋配置文件中的任何值。

如果有很多服務器,幾乎所有這些保護 Linux 服務器的動作都可以在腳本中自動完成。 但如果只有一台服務器,那麼最好手動控制進程。

論廣告的權利

立即訂購併開始使用! VDS的創建 一分鐘內任何配置和任何操作系統。 最高配置將使您發揮最大作用——128 個 CPU 內核、512 GB RAM、4000 GB NVMe。 史詩🙂

Linux 服務器保護。 先做什麼

來源: www.habr.com