Vitaliy Kolesov 原做,受權 LeanCloud 翻譯。html
加固服務器並不難,但有不少例行操做須要進行時,有可能會遺忘。以我爲例,剛買的服務器就在兩週內被人入侵了。有天早上我收到幾封來自第三方的郵件,說我服務器上有東西在嘗試入侵他們的服務器。因此,我須要快速解決這個問題。服務器
我碰到的狀況比較簡單,我執行了如下命令:ssh
cat /var/log/auth.log | grep Accepted
該命令返回了個人服務器上的成功認證記錄,其中有一個 IP 不是個人。因此,是 SSH 服務被入侵了。tcp
別忘了還有一個命令 last
,這個命令返回最近成功登陸的用戶。工具
購買服務器後須要馬上進行的操做:翻譯
/var/log/auth.log
識別惡意行爲並封禁 IP;若是發生了入侵,你須要知道如何調查和清掃。最好的方式是從新建立 VPS。我就是這麼作的。我在 hetzner 買了服務器,它的控制檯提供了從新建立(移除舊 VPS,新建一個)VPS 並保留原 IP 的功能。 因此我從新建立了一個 VPS。以後我在本地計算機上使用 ssh-keygen
工具(標準 OpenSSH 包的一部分)生成了 SSH 密鑰:(下面的命令同時適用於 Linux 和 macOS)code
ssh-keygen
該命令在 ~/.ssh
目錄中建立了一對密鑰。以後運行如下命令:server
ssh-copy-id you_user@your_server_id
該命令會將新建立的公鑰上傳到服務器。接下來,登陸服務器並修改 sshd 配置:htm
nano /etc/ssh/sshd_config
修改配置文件中的 PasswordAuthentication 配置:get
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 被封,給你發一封電子郵件。