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
== 最後 ==