這裡介紹 Linode VPS 在安裝 Ubuntu Linux 系統之後,需要馬上進行的一些基本安全性設定。

購買 Linux VPS 虛擬專屬主機之後,只要滑鼠點幾下,花個幾秒鐘就可以裝好一個 Ubuntu Linux 系統,不過後續還有很多安全性設定必須自己動手處理,以下是各種設定的步驟教學。

更新系統套件

安裝好 Ubuntu Linux 後,最先要做的就是更新系統套件:

sudo apt-get update
sudo apt-get upgrade

主機名稱與 FQDN

主機名稱(hostname)可以自己任意取,他跟網址與 E-mail 位址等沒有直接關係,各主機的名稱不可以重複,有些人喜歡用星球、動物或是偉人的名字來命名,您可以自己想一個喜歡的名字,不過請避免使用 www 這類太過於一般化的名稱。

Ubuntu Linux 可以下列指令變更主機名稱:

echo "einstein" > /etc/hostname
hostname -F /etc/hostname

這樣會將主機名稱設定為 einstein

接著編輯 /etc/hosts,設定 FQDN(fully qualified domain name)。假設我們的主機名稱為 einstein,網域名稱(domain name)為 gtwang.org,FQDN 為 einstein.gtwang.org,主機對外的 IP 位址為 12.34.56.78,則將 /etc/hosts 設定為:

127.0.0.1 localhost.localdomain localhost
12.34.56.78 einstein.gtwang.org einstein

如果有使用 IPv6 的話,也要連同 IPv6 的位址一起加入:

127.0.0.1 localhost.localdomain localhost
12.34.56.78 einstein.gtwang.org einstein
2600:3c01::a123:b456:c789:d012 einstein.gtwang.org einstein

這裡設定的 IP 位址與 FQDN 的對應必須跟 DNS 的 A 紀錄吻合,若有使用 IPv6 的話,DNS 伺服器上也要有對應的 AAAA 紀錄。

時區

將時區(timezone)調整為自己所在地的時區,可以讓系統紀錄檔上的時間戳記看起來更直覺。

Linode 的 Linux 時區預設是使用格林威治標準時間(UTC),我們可以使用下列指令更改時區的設定:

dpkg-reconfigure tzdata

更改完成後,再用 date 確認一下:

date

看看輸出的時間是否正確。

新增使用者

Linode 上剛裝好的 Ubuntu Linux 是直接用 root 登入的,沒有一般使用者帳號,但如果所有的動作都使用 root 來操作,會給系統帶來很大的風險,通常我們都會一般帳號來登入,必要時才切換成 root 權限,以避免下錯指令等意外發生。

在 Ubuntu Linux 下新增一個使用者:

adduser myuser

myuser 這個使用者加入 sudo 群組:

usermod -a -G sudo myuser

這樣設定好之後,在用這個帳號以 SSH 登入:

ssh myuser@12.34.56.78

然後測試看看是否能使用 sudo

sudo su

如果能取得 root 權限就表示沒問題了。

SSH 金鑰認證登入

SSH 公開金鑰認證可以大幅增加伺服器的安全性,我們可以使用 ssh-keygen 在自己的電腦中產生金鑰後,再將公鑰放進伺服器中:

ssh-keygen
scp ~/.ssh/id_rsa.pub myuser@12.34.56.78:

接著再到伺服器上,建立 .ssh 目錄,把公鑰放置在 .ssh/authorized_keys

mkdir .ssh
mv id_rsa.pub .ssh/authorized_keys

設定好檔案權限:

chown -R myuser:myuser .ssh
chmod 700 .ssh
chmod 600 .ssh/authorized_keys

設定好之後,記得要測試 myuser 這個使用者是否可以不需要密碼登入 SSH。

停用 SSH 密碼登入

編輯 /etc/ssh/sshd_config,將密碼登入功能關閉:

PasswordAuthentication no

同時也停用 root 登入:

PermitRootLogin no

重新啟動 SSH 伺服器:

sudo service ssh restart

防火牆

防火牆我習慣使用 ufw 來設定:

sudo ufw enable
sudo ufw allow ssh
sudo ufw allow http/tcp
sudo ufw allow https/tcp
ufw allow from 12.34.0.0/16

這裡開啟 SSH、HTTP 與 HTTPS 這幾個連接埠,另外對 12.34.0.0/16 這個子網域開放所有的連線,用來開發與測試用。

Fail2Ban

Fail2Ban 可以用來阻擋一些來自網路上的惡意攻擊,當它偵測到來自網路的某個 IP 不斷嘗試入侵系統時,會建立一個暫時性的防火牆規則,將攻擊者的 IP 封鎖。Fail2Ban 可以用下列指令安裝:

sudo apt-get install fail2ban

安裝完成後,Fail2Ban 預設只會對 SSH 進行監控,若要更改設定可以將自己的設定寫在 /etc/fail2ban/jail.local 設定檔中,在這個檔案中,我們也可以設定當偵測到幾次登入失敗後才開始阻擋 IP(maxretry),還有每次阻擋 IP 的時間長度(bantime)。修改設定之後,記得重新啟動 Fail2Ban:

service fail2ban restart

更多 Linode 相關的教學,可以參考本站 Linode 相關的文章

參考資料