UbuntuServerTips
出自Ubuntu 正體中文 Wiki
目錄 |
前言
最近利用 Ubuntu 架設 Server ,把一些最近的設定過程分享出來,有些設定是針對 Security 部份, 雖然不能保證完全抵擋入侵者,至少可以減少不必要的風險。
Server 安裝
硬碟分割
硬碟分割,建議分割成如下
目錄 | 容量 | 說明 | |
/boot | 100M | 建立硬碟分割區較前面地方,並單純 Ext2 / Ext3 。 | |
/ | 1G | Apache + PHP + Mysql 的 Server,安裝後只需要 600 ~ 700 Mb。 | |
/var | 1G 以上 | 此部份隨 Server用途而定,通常都需要大一點空間。 | |
/home | 1G 以上 | 隨著 User 數量統計,若此部份用 LVM 分割區,對未來擴充會比較方便。也可以設定Quota。 | |
/tmp | 100 ~ 500M | 避免某些程式灌暴,而影響系統運作。 |
若要細分, /usr、 /root 也是可以獨立出來。
而不可分割是 / 、 /etc 、 /bin 、 /sbin 、 /dev 這五個目錄一定要在 / (根目錄底下)
設定 Root 密碼
Ubuntu 預設把 Root Account 關閉,要使用 Root 權限全都是靠 sudo 指令處理。
不過還是建議把 root 啟動,並且設定 root 密碼,因為在某狀況下,還是需要 root 密碼。
sudo passwd root
Apache 2.X
Vhosts
Apache 1.3.X
Vhosts
PHP
MySQL
Bind
- 安裝 Bind
sudo apt-get install bind
- 設定 Bind
/etc/bind/named.conf
zone "abc.com" { type master; file "/etc/bind/db.abc.com"; }
- 設定 資料庫
/etc/bind/db.abc.com
; ; BIND data file for abc.com ; $TTL 604800 @ IN SOA @ root.abc.com ( 2006081002 ; Serial 604800 ; Refresh 86400 ; Retry 2419200 ; Expire 604800 ) ; Negative Cache TTL ; @ IN NS abc.com. @ IN A 192.168.1.1 @ IN MX 10 192.168.1.2 www IN A 192.168.1.3
- 啟動 Bind
/etc/init.d/bind start
Proftpd
Mrtg
Awstats
Security Tips
實體防護
- 主機放置安全地方,移除鍵盤滑鼠,鎖置機櫃。
- 鎖住機殼。
- 設定 BIOS 密碼密碼。
- 設定硬碟為開機第一優先。
- 移除光碟機。
Grub 設定
- 移除 Recovery 模式
Grub 選項中,有 recovery 模式,讓 Ubuntu 無法正常開機時,可以透過此模式開機,不過對於管理者來說,卻是一個潛在問題。
當外來者選擇此模式開機,是無需詢問密碼就可以以 Root 身份登入主機,所以請取消此項目。
- 增加 Grub 密碼
對於進階使用者來說,是可以透過 Grub 進階模式,在開機時候,把 kernel 參數丟進去,例如加上 single 參數,也可以無需密碼進入系統。
所以可以請設定 Grub 密碼,在編輯 Grub 時要詢問密碼,才能編輯。另外 Grub 好處是密碼有經過 md5 編碼過。
grub-md5-crypt
將此產生的密碼加到 /boot/grub/menu.list
password --md5 [編碼過密碼]
LILO 設定
- 設定 LILO 密碼
password=[明碼]
由於 LILO 密碼是名碼,請設定 /etc/lilo.conf 只讓 Root 存取。
fstab 設定
可以針對分割區增加一些限制。
- suid / nosuid : 限制 suid 程式
- exec / noexec : 限制 執行程式
- dev / nodev : 限制建立 dev 檔案
例如 /tmp 限制 nosuid , noexec , nodev ,而在 fstab 設定方式為
/dev/sda5 /tmp ext3 defaults,nosuid,noexec,nodev 0 2
設定好之後,請重開機,或者
mount -o remount /tmp
請執行 mount | grep /tmp
mount | grep /tmp /dev/sda5 on /tmp type ext3 (rw,noexec,nosuid,nodev)
測試是否能在/tmp執行程式
cp /bin/ls /tmp/ls /tmp/ls -bash: /tmp/ls: Permission denied
Firewall 設定
Linux 最簡單的Firewall 指令就是透過 iptables 處理。 防火牆最基本的規則就是檔掉全部,只開放所需要的服務。
#!/bin/bash iptables -F iptables -P INPUT DROP # 清除所有防火牆規則,並建立全部阻擋封包進入 iptables -A INPUT -p icmp --icmp-type 8 -j DROP iptables -A INPUT -p icmp --icmp-type 0 -j ACCEPT # 對於 ping 要求的封包全部拒絕,不過對於自己發出去的 ping 封包要接受 for port in 20 21 22 80 do iptables -A INPUT -i eth0 -p tcp --dport $port -j ACCEPT done # 開放 ftp (20,21) ,ssh (22),http (80) tcp port for uport in 22 53 do iptables -A INPUT -p udp --dport $uport -j ACCEPT done # 開放 ssh (22),bind (53) udp port # 請參考 /etc/services iptables -A INPUT -i eth0 -m state --state RELATED,RELATED -j ACCEPT iptables -A INPUT -i eth0 -m state --state NEW,INVALID -j DROP # 不正確的封包檔掉 iptables -A INPUT -i eth0 -p tcp --tcp-flags ALL FIN,URG,PSH -j DROP iptables -A INPUT -i eth0 -p tcp --tcp-flags ALL ALL -j DROP iptables -A INPUT -i eth0 -p tcp --tcp-flags ALL SYN,RST,ACK,FIN,URG -j DROP iptables -A INPUT -i eth0 -p tcp --tcp-flags ALL NONE -j DROP iptables -A INPUT -i eth0 -p tcp --tcp-flags SYN,RST SYN,RST -j DROP iptables -A INPUT -i eth0 -p tcp --tcp-flags SYN,FIN SYN,FIN -j DROP # 檔掉 scan port 的程式 iptables -A INPUT -i lo -j ACCEPT # lo 所產生的 port 都允許接受 iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT # 對於自己所產生的連線,並且後續的要求封包都接受
將此 shell script 存好,並在 /etc/rc.local 指定此 shell script 執行。
Log 監視
好的管理者,除了會設定各項服務,最重要是要換看 Log 檔案。現在有些不錯的套件可以幫助管理者分析 Log 內容,讓管理者判斷目前 Server狀況。
sudo apt-get install logcheck
每天會將 log 分析結果郵寄到 root 的信箱。
主要分析內容是
- cron log
- httpd log
- kernel log
- named log
- pam_unix log
- postfix log
- Connections (secure-log)
- sshd log
- Sudo (secure-log)
- Disk Space
這些資訊對於管理者是非常有幫助。
Host Allow / Deny
預設有安裝 tcp_wrappers 所以設定 hosts.allow 、hosts.deny 限制使用者存取特定服務。
舉例1: 只有 192.168.1.x 開頭的 IP ,可以透過 ssh 連線到伺服器。
/etc/hosts.deny
sshd: ALL : deny
/etc/hosts.allow
sshd: 192.168.1.0/255.255.255.0 : allow
舉例2: 只有 192.168.2.1 的 IP ,可以透過 telnet 連線到伺服器。
/etc/hosts.deny
telnetd: ALL : deny
/etc/hosts.allow
telnetd: 192.168.2.1 : allow
Open SSH Server
- 嚴禁 root 帳號遠端登入
/etc/ssh/sshd_config PermitRootLogin no
移除不必要服務
請按照該伺服器,執行所需要服務,不必要的服務都不要啟動。
sysv-rc-conf== 最後 ==