====== 伺服器的基本防護 ====== 維護您 Gandi VPS 伺服器的安全是您的責任。 這個頁面中描述了很多方法可以保護您新創建的伺服器與預設的開啟服務,請儘可能的設定一些伺服器的安全防護。 ===== 一個剛創建的伺服器 ===== SSH 預設是開啟的並且使用只可以用建立伺服器時所輸入的密碼登入。這個使用者可以執行下列的指令取得 root 權限:su - 因為預設上 root 密碼與使用者密碼相同,所以請一定要用 "passwd" 這個命令來變更密碼。 ===== 最好的實做 ===== ==== SSH: 使用金鑰進行認證 ==== 在使用 SSH 連接伺服器的時候取代輸入密碼,您可以建立一對 公開/私有 金鑰讓您從本地電腦連線到伺服器時不需要輸入密碼。這個優點在於您不需要熟記密碼,金鑰在連線時相對安全,越長的金鑰長度則越安全。缺點則是在每台需要連線的電腦都必須要安裝金鑰。 在您的本地端電腦上面執行下列指令來建立金鑰: ssh-keygen -t rsa -b 2048 然後,複製公開金鑰到您的遠端伺服器(範例中 ''your_server_ip'' 要替換成您的 VPS 的 IP 位址): scp .ssh/id_rsa.pub user@your_server_ip:~/.ssh/authorized_keys 如果 "~/.ssh/" 目錄不存在於 VPS 上,您需要在傳送公開金鑰之前建立它。 現在,當您使用 SSH 連線時(''ssh username@your_server_ip'') 您將不會被要求輸入密碼。 關於更多公開金鑰認證的資訊,請參考 [[zh-tw:iaas:references:server:ssh]]. ==== SSH: Gandi 的金鑰 ==== 在基本的伺服器中都包含了 Gandi 的 SSH 金鑰,在 **已提供授權** 的情況下我們的代管團隊會可以登入已協助解決一些緊急或是複雜的狀況。 如果您想要關閉它,請修改 "/etc/default/gandi" 這個檔案。 ==== SSH: 啟動在別的埠,或是 port-knock 驗證 ==== 這項技術可以有效減少 SSH 的暴力攻擊,透過先 "敲" 別的埠然後 SSH 的連線才會開啟。 更多的資訊請參考 [[wp>Port_knocking|Wikipedia]]. ==== 關於資安工具 (Firewall, IDS...) ==== 您應該關閉公開介面上其他您沒有使用到的埠。有一些工具使用 iptables(Netfilter/Linux 防火牆規則) 的工具可以達成來增加您的伺服器安全,並且可以通知您有人嘗試惡意連接。另外 iptables 可以直接使用命令列模式來進行管理。 * 防火牆: Shorewall, Ufw, Arno-iptables-firewall, 等... * 減少系統被暴力攻擊: fail2ban... 注意那些軟體可以處理同一個介面上的 Pv4 與 IPv6。IPv6 的保護,透過 IPv6 的特殊防火牆即可(譬如, Shorwall6) 在 Unix/BSD 系統上,Packet Filter (PF) 是標準的防火牆。 您必須要開啟伺服器上的 icmp 回應("ping") 要求來符合 IPv6 的一些功能。 ==== 告警/報表 工具 ==== * Logwatch/logcheck: Email 的每日報表寄送 - 解析伺服器的日誌檔 * Rkhunter/Chkrootkit: 系統木馬檢查 * Ninja/Tiger: 報表系統 (監看系統檔案的變動與權限) * Debsecan: 回報安裝在系統上的套件已知的錯誤 ==== 在 CentOS(6.0 或是更高) 上啟動 SELinux ==== 您可以使用 [[http://en.wikipedia.org/wiki/Security-Enhanced_Linux|SELinux]] 來阻止您伺服器上未經授權的軟體安裝與設定檔修改,並且可以加強存取控制權限。對您的伺服器來說這是一個很重要的強化。 我們已經測試過在我們平台上的 CentOS 6.x 與核心 2.6.32 和 3.2 中開啟 SELinux 。 您首先需要透過進階的硬碟設定啟動 SELinux,在您的 Gandi 帳號內打開硬碟管理頁面中的核心區段。 在 "開機選項" 底下,選擇下列選項: * "在開機時啟動": 打勾 * "安全套件": selinux 點選 "送出" 來儲存硬碟設定變更。請注意,伺服氣在變更選項後需要重新開機設定才會生效。 在您伺服器上使用 root 帳號並輸入下列指令來確認是否正常運作: # cat /proc/cmdline console=hvc0 nosep loglevel=8 selinux=1 security=selinux ro root=/dev/xvda1 接下來,請在 "/etc/fstab" 這個檔案中加入下列資訊: none /selinux selinuxfs defaults 0 0 最後,請安裝下列套件: * ''libselinux'' * ''selinux-policy'' * ''selinux-policy-'' ( '''' 指的是 minimum, targeted...) SELinux 現在應該已經啟動了。 如果您重新啟動伺服器,您將會需要進行額外的步驟。 您可以使用 "semodule" 來管理伺服器上的 SELinux 原則模組,例如: # packages="execmem.pp.bz2 unconfined.pp.bz2 unconfineduser.pp.bz2" # semodule -n -r oracle-port -b base.pp.bz2 -i $packages -s \ targeted 2>&1 | grep -v "oracle-port" 在 ''/usr/share/selinux//*.pp.bz2'' 中可以找到可用的套件清單。 您也可以用 "load_policy" 這個指令來讀取其他額外的原則檔。 如果需要,您可以使用 "fixfiles" 來修復檔案。您也可以使用 "sestatus" 來確認 SELinux 的執行狀態。 您可以使用 "rpm -q -scripts" 從 selinux-policy- 套件中取得更多資訊,例如: ''rpm -q –scriptps selinux-policy-minimum''。