這裡介紹 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 相關的文章。
