為有效管理伺服器,減少系統因軟體漏洞或遭受外部攻擊造成損失,以下介紹各種系統安全設定方式及步驟,提供伺服器管理者參考,本範例以 CentOS 5.9 (Kernel 2.6.18) 為例。其管理方式大致可分為以下三個階段:
近來許多網路作業系統都以搭配防火牆當作基礎功能,常見如下:
作業系統 | 防火牆 |
---|---|
GNU/Linux | netfilter/iptables |
FreeBSD | IPFilter、pfSense、ipfirewall |
Solaris | IPFilter |
建議系統管理者開啟防火牆功能,針對所需要提供的服務給予開放連線,其餘部份則透過防火牆的條件設定限制連線或訪問,形成伺服器的第一道防護。避免有心人士嘗試猜測系統漏洞,降低被攻擊之可能。
TCP Wrapper 是一個 host-based 的網路存取控制,它的設定通常包含客戶端與伺服器端 (client-server) 的對應關係,客戶端資訊通常有「主機名稱 (host name)
」、「主機位址 (host address)
」及「使用者名稱 (user name)
」;而伺服器端的資訊通常有「程序名稱 (process name)
」、「伺服器名稱 (host name)
」及「伺服器位址 (host address)
」。
而目前多數的網路應用程式,大多支援 TCP Wrapper 功能,如:vsftpd (FTP)、OpenSSH (SSH)、xinetd 等。
# ldd /usr/sbin/vsftpd | grep -i wrap libwrap.so.0 => /lib/libwrap.so.0 (0x00ad5000)
hosts.allow
與 hosts.deny
(檔案名稱請依實際安裝為主)。而系統則採 first-match 方式比對設定條件,首先是比對 hosts.allow
然後給予提升權限,再者比對 hosts.deny
限制權限,最後未滿足前二者的設定則全部開放。140.114.0.0/16
網段連線至 SSH 服務,其餘連線來源都限制。# vim /etc/hosts.allow sshd : 140.114.0.0/255.255.0.0
# vim /etc/hosts.deny sshd : ALL
對於伺服器必須提供給所有使用者的服務功能,如 HTTP (port 80) 或是 FTP (port 21) 等服務,因為無法完全使用防火牆或是 TCP Wrapper 加以限制,則容易成為有心人士加以攻擊的管道或對象,此時仍可透過一些即/及時防護的軟體加以限制,如Fail2ban、DenyHosts。該類軟體的運作原理是透過即/及時分析 log 紀錄檔,過濾一些可疑的使用行為紀錄,再針對這些來源作一適當的處置,如「通知管理者異常行為」、「透過防火牆或 TCP Wrapper 加以阻擋」等。其特色是,可以適性的針對不當用戶或來源加以阻擋,而非阻擋整個網段或是限制全部的服務功能,提供伺服器動態的防護需求。
定期的更新系統與修補漏洞,是維持系統安全的最基本工作。善用套件管理系統 (Package management system) 可以協助管理者有效的更新作業系統與應用程式。在軟體的安裝使用上,常見的問題有以下:
而透過設計良好的套件管理系統則可以減少上述的問題發生,常見的套件管理系統如下:
作業系統 | 套件管理系統 |
---|---|
CentOS / Fedora | YUM |
Debian | APT |
FreeBSD | FreeBSD Ports |
Solaris | Image Packaging System、OpenCSW |
適當的開啟系統紀錄 (Syslog),其中包含系統異動資訊、使用者登出或登入事件、各類軟體的除錯或警告資訊等,藉以紀錄重要事件的發生時間和內容,提供日後稽核使用。另外,透過定期的分析與統計系統紀錄,可以觀察伺服器的使用情形,也可以了解服務的營運狀況,除了使用既有的軟體自動分析外,也可以手動方式過濾一些錯誤訊息,以了解異常的使用行為。
# egrep -i -n '(fail|error|crit)' /var/log/secure
404
字樣的內容 (因 HTTP 當中的 HTTP 404 錯誤訊息)。# grep 404 /var/log/httpd/access_log