IACMS 六、安全性
防火牆設定:
本步驟旨在於設定防火牆,以保護系統安全。
準備材料:已完成遠端連線設定之樹莓派、個人電腦(須連上網路)
以 SSH 連線登入樹莓派伺服器
輸入 sudo ufw status
,應可以得到如下結果
1 | ubuntu@ubuntu:~$ sudo ufw status |
此提示則表示防火牆未開啓
此時輸入 sudo ufw allow <SSH連接埠號>
,如下例所示
1 | ubuntu@ubuntu:~$ sudo ufw allow 8384 |
此結果表示防火牆規則已成功更新,並開啓 Port 8384 供 SSH 連線使用
另外輸入 sudo ufw allow 'Nginx FULL'
來將防火牆之 80、443 網頁伺服器端口打開
輸入 sudo ufw enable
開啓防火牆,提示可能造成 SSH 中斷時,輸入 y
繼續動作
1 | ubuntu@ubuntu:~$ sudo ufw enable |
此時應可以看到提示說明防火牆已開啓,並在開機時自動啓動
(可選)可以輸入 sudo ufw status verbose
查看目前啓用之規則
詳細 ufw 操作方式請參考官方說明文件 https://help.ubuntu.com/community/UFW
另外也可以參考 DigitalOcean 的 How To Set Up a Firewall with UFW on Ubuntu 20.04 爲不錯的教學文件
系統帳戶認證
本步驟旨在於將 LDAP 整合 NSS 與 PAM,並給管理員帳戶 SUDO 權限
準備材料:已完成 LDAP 部署之樹莓派、個人電腦(須連上網路)
安裝 libnss-ldapd 和 libpam-ldapd
1 | sudo apt-get install libnss-ldap libpam-ldap |
修改 NSS 設定檔
1 | sudo nano /etc/nsswitch.conf |
內容如下
1 | passwd: files systemd ldap |
安裝 nslcd
1 | sudo apt-get install nslcd |
重新啟動系統
更改 PAM 設定
1 | sudo pam-auth-update |
勾選 Create home directory on login
後選擇 OK 確認
安裝 sudo-ldap
1 | sudo su |
此時應該可見提示字符變為 root 開頭
1 | # export SUDO_FORCE_REMOVE=yes |
離開 root 模式
1 | # exit |
新建資料夾以暫時存放 ldap 之 sudo 基模(schema),供後續編輯及導入
1 | mkdir ~/sudoWork |
複製預設 sudo 基模至 LDAP 之基模庫中
1 | sudo cp /usr/share/doc/sudo-ldap/schema.OpenLDAP /etc/ldap/schema/sudo.schema |
將匯入之基模轉為暫時設定檔
1 | sudo echo "include /etc/ldap/schema/sudo.schema" > ~/sudoWork/sudoSchema.conf |
將設定檔轉為可匯入 LDAP 之 LDIF 檔
1 | slapcat -f ~/sudoWork/sudoSchema.conf -F /tmp/ -n0 -s "cn={0}sudo,cn=schema,cn=config" > ~/sudoWork/cn\=sudo.ldif |
清理 LDIF
1 | nano ~/sudoWork/cn\=sudo.ldif |
將文件開頭更改如下
1 | dn: cn=sudo,cn=schema,cn=config |
將文件尾末如下內容去除
1 | structuralObjectClass: olcSchemaConfig |
將此基模載入 LDAP 伺服器
1 | sudo ldapadd -Y EXTERNAL -H ldapi:/// -f ~/sudoWork/cn\=sudo.ldif |
增加 sudo 基模之索引
1 | sudo bash -c 'echo "index sudoUser eq" >> /etc/ldap.conf' |
重啟 LDAP 伺服器
1 | sudo systemctl restart slapd |
於 LAM 管理介面匯入如下內容
1 | version: 1 |
- 注意修改 dc 部分
- sudouser 部分更改為先前添加之使用者,此處以 iacms 為例
修改 sudo-ldap.conf
設定,以連接 ldap 伺服器
1 | sudo nano /etc/sudo-ldap.conf |
添加下面內容,並修改 dc 部分
1 | sudoers_base ou=SUDOers,dc=iacms,dc=net |
修改 ssh 伺服器配置
1 | sudo nano /etc/ssh/sshd_config |
於文件尾末添加如下內容
1 | Match User ubuntu |
將之前於遠端連線設定十修改之 PasswordAuthentication no
註解如下
1 | #PasswordAuthentication no |
測試先前於 LDAP 建立之使用者應能夠使用 SSH 以密碼登入,並使用 sudo 指令
參考資料
- LDAP authentication
- LDAP authentication with nss-pam-ldapd
- Configuring LDAP Authentication
- How to Configure LDAP Client to Connect External Authentication
- HOW TO: Configure LDAP for SUDO Support on Ubuntu Server 9.10 (Karmic Koala)
- ldap sudo权限
SSL之設定
本步驟將使用 phpMyAdmin 管理 MySQL 資料庫,並導入必要之資料表。
準備材料:已完成建立 Reverse Proxy 之樹莓派伺服器、個人電腦(須連上網路)
安裝證書申請工具
1 | sudo apt install certbot python3-certbot-nginx |
在 nginx 啓用的網頁設定檔中更改伺服器名稱,以下使用 ntuhort.ddns.net 之域名爲例,且設定檔路徑爲 /etc/nginx/sites-enabled/arduinoproject
1 | sudo nano /etc/nginx/sites-enabled/arduinoproject |
找到該行並修改伺服器名稱爲
1 | ... |
測試設定檔是否正確
1 | sudo nginx -t |
若無錯誤則重新載入 nginx 服務
1 | sudo systemctl reload nginx |
允許 HTTPS 通過防火牆
1 | sudo ufw allow 'Nginx Full' |
取得 SSL 憑證
1 | sudo certbot --nginx -d ntuhort.ddns.net |
Fail2ban 安裝及設定
本步驟將利用 Fail2ban 防止惡意之帳戶暴力攻擊。
準備材料:已完成建立 Reverse Proxy 之樹莓派伺服器、個人電腦(須連上網路)
以 SSH 登入伺服器,並更新套件庫
安裝 Fail2ban
1 | sudo apt install fail2ban |
查看 Fail2ban 狀態
1 | sudo systemctl status fail2ban |
新增本地設定檔
1 | sudo nano /etc/fail2ban/fail2ban.local |
內容如下
1 | [DEFAULT] |
新增本地監獄規則
1 | sudo nano /etc/fail2ban/jail.local |
內容如下
1 | [DEFAULT] |
詳細用法參考官方說明文件,參考資料有