安全是相對的,使用本文介紹的這些方法不能絕對保證你的服務器是“安全的”,但可以肯定的是它比以前更安全,也比大多數服務器要安全,至少菜鳥級的黑客是無法攻破的;安全是一個持續的過程,它不是一蹴而就的,我們認為,在安全領域是需要一點偏執精神的。
本文所列舉的這些保護措施在Ubuntu Server 10.04(Lucid)和10.10(Maverick)中測試通過,如果你想讓你的新Ubuntu服務器變得堅不可摧,你應該仔細閱讀本文。
Ubuntu服務器設計優良,并有定期更新,相對來說是比較安全的,Ubuntu安全團隊表示會不斷努力,保護Ubuntu的安全,將會定期提供安全更新。
· 不打開端口
· 基于角色的管理
· 無X服務器
· 安全更新
· 內核和編譯器保護
在這篇文章中,我們將從不同方向來應對安全挑戰,包括:系統分析,修改設置,安裝防火墻,掃描rootkit和制定周期性維護制度。
· 修改設置,增強安全性
· 實施UFW,簡單的防火墻
· 使用denyhosts自動將攻擊者列入黑名單
· 使用Tiger掃描系統漏洞
· 使用psad檢測入侵嘗試行為
· 安裝nmap,掃描系統打開的端口
· 使用chkrootkit檢查系統rootkit
· 監控日志
修改設置,增強安全
保護共享內存
攻擊一個運行中的服務(如httpd)時經常要使用/dev/shm,修改/etc/fstab使其更安全。
sudo vi /etc/fstab
添加下面這一行內容:
tmpfs /dev/shm tmpfs defaults,noexec,nosuid 0 0
禁止root通過SSH登錄
Root帳號在Ubuntu中默認是被禁用了的,如果你在Slicehost或Linode上安裝Ubuntu,root則是被啟用的,無論怎樣,禁止root通過SSH登錄系統都是一個好主意。
sudo vi /etc/ssh/sshd_config
將PermitRootLogin設為no:
PermitRootLogin no
當然,如果你通過SSH訪問你的服務器,在禁用root使用SSH之前,確保其它用戶可以正常使用sudo工作。
只允許管理用戶使用su
這將有助于預防特權提升,默認情況下,Ubuntu沒有提供管理組,因此需要先創建一個管理組。
sudo groupadd admin
將你自己加入到管理組:
sudo usermod -a -G admin andrew
限制/bin/su的訪問權,僅授予管理組成員:
sudo dpkg-statoverride --update --add root admin 4750 /bin/su
檢查/bin/su的權限:
ls -lh /bin/su
看到下面的輸出內容:
-rwsr-x--- 1 root admin 31K 2010-01-26 17:09 /bin/su
不允許跟蹤入站數據包的源路由
sudo sysctl -w net.ipv4.conf.all.accept_source_route=0 sudo sysctl -w net.ipv4.conf.default.accept_source_route=0
不允許系統用戶訪問FTP服務器
只有當你安裝了ftpd才需要這么做,只要tiger掃描報告中不出現相關警告即可,SFTP比FTP的安全性要好,如果可能,應盡量使用SFTP。
Edit /etc/ftpusers:
sudo vi /etc/ftpusers
添加系統用戶拒絕使用ftpd:
- backup
- bin
- daemon
- games
- gnats
- irc
- libuuid
- list
- lp
- man
- mysql
- news
- ntp
- postfix
- proxy
- sshd
- sync
- sys
- syslog
- uucp
- www-data
UFW:簡單防火墻
UFW(Uncomplicated Firewall,簡單防火墻)提供了一個易于理解的接口控制iptable(iptable控制Netfilter,Netfilter內置于內核之中),只需要幾個簡單的命令,你的服務器就可以控制訪問,創建狀態也很容易。
UFW是用于配置iptable的一個簡單接口。
安裝并啟用Uncomplicated Firewall:
sudo aptitude install -y ufw sudo ufw enable
顯示可用的UFW命令:
sudo ufw show
顯示UFW配置:
sudo ufw status
允許SSH和HTTP訪問Apache服務器:
sudo ufw allow ssh sudo ufw allow http
在上面的示例中,OpenSSH和Apache的端口通過服務名(ssh和http)打開,你可以使用端口號替換這里的服務名(如用80替換http)。
查看服務運行情況:
查看運行中的服務,便知道應該打開哪些端口:
sudo ufw app list
查看UFW使用的服務:
less /etc/services
#p#副標題#e#
Denyhosts:避免SSH攻擊
項目主頁: http://denyhosts.sourceforge.net/
查看服務器上的/var/log/auth.log,我發現有一連串的SSH攻擊,對付這種攻擊有很多方法,首先就是denyhosts。
Denyhosts會周期性地掃描/var/log/auth.log,找出通過SSH反復失敗訪問系統的行為和來源,然后將它們添加到/etc/hosts.deny中。詳細情況請訪問項目主頁。
sudo aptitude -y install denyhosts
要做的就這些,剩下來的都是自動的,你可以使用下面的命令查看添加到/etc/hosts.deny中的IP地址:
sudo less /etc/hosts.deny
Tiger:系統安全掃描器
項目主頁: http://www.nongnu.org/tiger/
通過分析系統上的文件和設置,Tiger創建自動的安全審核,最終以報告的形式列出分析的內容,警告,警報和故障。
Tiger命令在/var/log/tiger中記錄了潛在的安全問題,使用tigexp命令查找結果編碼可以獲得詳細的解釋和安全加固建議,tiger認為很嚴重的問題都標記為Fail。
安裝tiger:
sudo aptitude -y install tiger
運行tiger,創建一個安全問題報告:
sudo tiger
使用less查看最近的tiger報告:
sudo -i less /var/log/tiger/`ls -t1 /var/log/tiger | head -1` exit
使用tigexp列出Fail代碼的解釋:
tigexp dev002f
當然使用Google搜索一下也可以。
忽略這些:
--FAIL-- [dev002f] /dev/fuse has world permissions --FAIL-- [logf005f] Log file /var/log/btmp permission should be 660
修改它們的權限可能會導致其它問題。
使用psad檢測入侵行為
項目主頁: http://www.cipherdyne.org/psad/
Psad可以記錄下入侵行為,還可以監控iptable。
安裝psad:
sudo aptitude -y install psad
后臺進程會自動運行。
檢查當前的狀態:
sudo psad -S
你可以修改psad設置,檢測到入侵行為時給管理員發送電子郵件。
Nmap:端口掃描
項目主頁: http://nmap.org/
Nmap允許你查看打開的端口,驗證UFW/iptable工作是否正常。
安裝nmap:
sudo aptitude install -y nmap
端口掃描:
nmap -v -sT localhost
SYN掃描:
sudo nmap -v -sS localhost
掃描類型解釋: http://nmap.org/book/man-port-scanning-techniques.html
Chkrootkit:檢查rootkit
項目主頁: http://www.chkrootkit.org/
Chkrootkit掃描系統中是否存在rootkit。
理想情況下,你并不需要做這種掃描,但現實中最好還是定期運行一下。
安裝chkrootkit:
sudo aptitude install -y chkrootkit
運行chkrootkit:
sudo chkrootkit
LogWatch
Ubuntu社區文檔: https://help.ubuntu.com/community/Logwatch
日志再詳細,如果沒有一款好用的日志查看器,日志起的作用也非常有限,Logwatch可以從海量的日志中精選出最有用的信息,形成一個易讀的報告,每天打開Logwatch看一下系統產生的日志是一個良好的習慣。
安裝:
sudo aptitude -y install logwatch
用法:
sudo logwatch | less
持續維護
你的服務器現在更安全了,但不要就此停下來,每周例行一次維護是個好習慣。
更新軟件:
sudo aptitude update sudo aptitude safe-upgrade
我喜歡使用safe-upgrade,因為它執行的是安全更新。
請看: http://wiki.debian.org/Aptitude
或者,你可以將安全更新設置為自動,如果你不能每周維護一次,這不是一個完美的解決方案,因為管理員沒有監控更新了什么,更新后也沒有執行測試。請看: https://help.ubuntu.com/10.04/serverguide/C/automatic-updates.html
檢查入侵行為:
sudo psad -S
請先使用tiger分析一下系統,因為tiger在/var/log/tiger中的報告屬于root用戶,每次都運行一下這些命令,解決有些用戶的權限問題。
sudo -i tiger grep FAIL /var/log/tiger/`ls -t1 /var/log/tiger | head -1` exit
在上面的命令中,使用grep從最新的報告文件中提取出Fail標記,ls子句給grep輸送目錄中的最新文件,sudo -i命令允許你以root用戶運行多個命令,使用exit結束命令。
使用tigexp列出Fail代碼的解釋:
tigexp dev002f
使用nmap掃描端口:
sudo nmap -v -sS localhost
檢查rootkit:
sudo chkrootkit
查看日志:
sudo logwatch | less
英文原文:Securing an Ubuntu Server 作者:Andrew Ault