本篇文章更新時間:2019/02/16
如有資訊過時或語誤之處,歡迎使用 Contact 功能通知。
一介資男的 LINE 社群開站囉!歡迎入群聊聊~
如果本站內容對你有幫助,歡迎使用 BFX Pay 加密貨幣 或 新台幣 贊助支持。
買 Linode 主機順便逛逛他網站看到的文件,照著操作還挺不賴的乾脆寫一下筆記起來。
想直接參考原文的前往-> 這裡
摘要就是
- 新增一個有管理權限的帳號取代 root
- 使用SSH Key的方式取代密碼登入
- 建立防火牆規則
- 安裝與設定主動防禦的 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的設定
在這邊只是提到這工具,詳細介紹起來又是一大篇,所以....
有完成到這邊,至少有一定安全性囉~
筆記起來,做為之後使用伺服器主機都應該參考的標準程序!