防禦你的伺服器 – LINODE 主機的安全性教戰手冊



買 Linode 主機順便逛逛他網站看到的文件,照著操作還挺不賴的乾脆寫一下筆記起來。

想直接參考原文的前往-> 這裡

摘要就是

  1. 新增一個有管理權限的帳號取代 root
  2. 使用SSH Key的方式取代密碼登入
  3. 建立防火牆規則
  4. 安裝與設定主動防禦的 Fail2Ban 套件

機器預設是 Ubuntu server,使用 Windows 的 Putty SSH 連線遠端操作

新增一個有管理權限的帳號取代 root

這邊操作的用意就是不要使用大家都知道的 root 帳號直接管理,密碼容易被破解!

操作如下:

遠端 SSH 登入伺服器主機 (初始預設帳號為 root)

adduser cool_user_name //新增一名使用者: cool_user_name
usermod -a -G sudo cool_user_name //加入管理員群組
passwd cool_user_name //新增-修改 cool_user_name 使用者密碼

接下來可以登出,改用 coolusername 帳號登入看看

到這邊可以登入新帳號並使用 sudo 就算成功了

使用SSH Key的方式取代密碼登入

回到 Windows 上使用 PuTTYgen 產生一組 SSH 的公鑰與私鑰

打開這支程式點選 Generate 後把滑鼠在上方空白處滑來滑去給他產生鑰匙

結果如下

在這邊要存兩個檔案,公鑰與私鑰。 公鑰不要點下方的 Save public key 在 Ubuntu 裡會有問題,請直接在上方公鑰反白處的地方使用 Ctrl+C 的超強組合鍵複製,並隨便貼在一份空白純文字檔裡,私鑰的部分點選 Save private key 記得存哪就好!

然後就是把剛剛的公鑰內容複製後,在伺服器上 coolusername 家目錄下產生一個文件名: authorized_keys 然後貼近去,移到 .ssh 目錄下搞定!

操作如下

touch authorized_keys //產生 authorized_keys 檔案
vi authorized_keys //編輯器看個人習慣

編輯模式下貼上那一坨公鑰 (SSH視窗下,右鍵就是貼上),存檔

mv authorized_keys .ssh //移動這檔案到 .ssh 目錄中

然後編輯 SSH 的設定檔

sudo vi /etc/ssh/sshd_config

將 PasswordAuthentication 改成 no
將 PermitRootLogin 改成 no

存檔重新啟動 SSH 服務,讓設定變更

sudo service ssh restart

接下來關閉登出再重登看看,已經不能使用 root 登入而且需使用私鑰登入了!

Q: 阿…那現在要怎麼私鑰登入…?
A: putty中有個設定可以把私鑰加上使用登入,如下圖

建立防火牆規則

這地方需根據服務定義輸入與輸出的連線權限,官方參考的適用普遍 Web 應用的服務

sudo iptables -L //先觀察防火牆是否已有設定

理論上"應該"會是沒設定任何規則,所以繼續

sudo vi /etc/iptables.firewall.rules //這裡是建立一個新檔案 iptables.firewall.rules 描述防火牆規則的檔案

將下面設定內容一樣貼上這個 iptables.firewall.rules 檔案中,並存檔

*filter

#  Allow all loopback (lo0) traffic and drop all traffic to 127/8 that doesn't use lo0
-A INPUT -i lo -j ACCEPT
-A INPUT -d 127.0.0.0/8 -j REJECT

#  Accept all established inbound connections
-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

#  Allow all outbound traffic - you can modify this to only allow certain traffic
-A OUTPUT -j ACCEPT

#  Allow HTTP and HTTPS connections from anywhere (the normal ports for websites and SSL).
-A INPUT -p tcp --dport 80 -j ACCEPT
-A INPUT -p tcp --dport 443 -j ACCEPT

#  Allow SSH connections
#
#  The -dport number should be the same port number you set in sshd_config
#
-A INPUT -p tcp -m state --state NEW --dport 22 -j ACCEPT

#  Allow ping
-A INPUT -p icmp -j ACCEPT

#  Log iptables denied calls
-A INPUT -m limit --limit 5/min -j LOG --log-prefix "iptables denied: " --log-level 7

#  Drop all other inbound - default deny unless explicitly allowed policy
-A INPUT -j DROP
-A FORWARD -j DROP

COMMIT

規則只開放 80(http), 443(https), SSH(22), ICMP 服務

接下來啟用規則

sudo iptables-restore < /etc/iptables.firewall.rules
sudo iptables -L //再觀察一次看規則有上了嗎!

最後是確保每次重開機都會載入這規則

sudo vi /etc/network/if-pre-up.d/firewall //建立一個bash執行檔

firewall 內容如下

#!/bin/sh
/sbin/iptables-restore < /etc/iptables.firewall.rules

複製貼上存檔後,再賦予執行權限

sudo chmod +x /etc/network/if-pre-up.d/firewall

搞定! 注意有開新網路服務時要記的調整這部分的規則喔

安裝與設定主動防禦的 Fail2Ban 套件

ubuntu 下一行指令就安裝好了

sudo apt-get install fail2ban //記得先更新一下

設定的話,預設是會開啟防止有人去try你的SSH登入管理。

sudo vi /etc/fail2ban/jail.conf //此檔案描述監控的應用
sudo vi /etc/fail2ban/jail.local //檔尾local的設定會覆蓋conf的設定

在這邊只是提到這工具,詳細介紹起來又是一大篇,所以….

更多設定資料可以參考-> 清大計中官方設定

有完成到這邊,至少有一定安全性囉~

筆記起來,做為之後使用伺服器主機都應該參考的標準程序!

Facebook 功能:

Share: