Vitaliy Kolesov 原做,受權 LeanCloud 翻譯。html
加固服務器並不難,但有不少例行操做須要進行時,有可能會遺忘。以我爲例,剛買的服務器就在兩週內被人入侵了。有天早上我收到幾封來自第三方的郵件,說我服務器上有東西在嘗試入侵他們的服務器。因此,我須要快速解決這個問題。bash
我碰到的狀況比較簡單,我執行了如下命令:服務器
cat /var/log/auth.log | grep Accepted
複製代碼
該命令返回了個人服務器上的成功認證記錄,其中有一個 IP 不是個人。因此,是 SSH 服務被入侵了。ssh
別忘了還有一個命令 last
,這個命令返回最近成功登陸的用戶。tcp
購買服務器後須要馬上進行的操做:工具
/var/log/auth.log
識別惡意行爲並封禁 IP;若是發生了入侵,你須要知道如何調查和清掃。最好的方式是從新建立 VPS。我就是這麼作的。我在 hetzner 買了服務器,它的控制檯提供了從新建立(移除舊 VPS,新建一個)VPS 並保留原 IP 的功能。 因此我從新建立了一個 VPS。以後我在本地計算機上使用 ssh-keygen
工具(標準 OpenSSH 包的一部分)生成了 SSH 密鑰:(下面的命令同時適用於 Linux 和 macOS)ui
ssh-keygen
複製代碼
該命令在 ~/.ssh
目錄中建立了一對密鑰。以後運行如下命令:spa
ssh-copy-id you_user@your_server_id
複製代碼
該命令會將新建立的公鑰上傳到服務器。接下來,登陸服務器並修改 sshd 配置:翻譯
nano /etc/ssh/sshd_config
複製代碼
修改配置文件中的 PasswordAuthentication 配置:code
PasswordAuthentication no
複製代碼
這一配置禁用了使用密碼登陸(只能使用密鑰登陸)。
服務器上我用的系統是 Ubuntu,因此經過如下命令能夠安裝這兩個工具:
apt install ufw fail2ban
複製代碼
只開 ssh 和 http(s) 端口:
ufw allow ssh
ufw allow 80
ufw allow 443
複製代碼
啓用 ufw:
ufw enable
複製代碼
接下來配置 fail2ban 工具:
# 備份默認配置
cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
nano /etc/fail2ban/jail.local
複製代碼
在配置文件中查找 banaction =
,將其設爲 ufw
。而後從新加載 fail2ban 配置:
fail2ban-client reload
複製代碼
這樣簡單配置以後,來自同一 IP 的三次錯誤登陸嘗試將封禁該 IP 10 分鐘。我我的將封禁期限調成了 7 天。如下命令能夠查看 fail2ban 的狀態:
fail2ban-client status sshd
複製代碼
個人配置是這樣的:
Status for the jail: sshd
|- Filter
| |- Currently failed: 1
| |- Total failed: 6
| `- File list: /var/log/auth.log
`- Actions
|- Currently banned: 1
|- Total banned: 2
`- Banned IP list: 187.109.168.150
複製代碼
如你所見,有一個 IP 已經被防火牆封禁了。咱們也能夠經過 ufw 的報告確認這一點:
ufw status
Status: active
To Action From
-- ------ ----
Anywhere REJECT 187.109.168.150
80/tcp ALLOW Anywhere
22 ALLOW Anywhere
443 ALLOW Anywhere
複製代碼
能夠配置 fail2ban,若是有 IP 被封,給你發一封電子郵件。