| SUPPORT |
| |
SUPPORT
-> 技術文章-> 一些FreeBSD 相關的安全問題 2
|
系統安全實務
-
一些FreeBSD 相關的安全問題
-
-
Crontab、at
問題
- crontab 是一個比較強大的服務,有不少漏洞在 cron 發現過,普通用戶最起碼也可以浪費資源等操作,這裡建議
'www'、'nobody'、'bind' 不能使用 crontab。
建立 /var/cron/allow 文件並把需要使用的用戶放進去,如:
# echo root > /var/cron/allow
# chmod 600 /var/cron/allow
並設置權限 crontab 不能由其他用戶任意觀看:
# chmod 600 /etc/crontab
如果不需要使用 'at' 命令,就關閉這個服務,因為安全的原則始終是 "你不用它,就丟掉它",在 /etc/crontab
文件中 mark 掉下面一行:
# */5 * * * * root /usr/libexec/atrun
-
inetd、rate
限制問題
- Inetd 預設情況下是啟用的,它控制了不少不安全的服務,如:telnet、ntalk、finger。檢查你所有
/etc/inetd.conf 中的服務,關閉任何你不需要的服務。如果沒有一個用戶需要,請在 /etc/rc.conf
中關閉 inetd:
inetd_enable="NO"
如果你要使用 FreeBSD 的inetd。可以經由 ident 請求來控制 rate 的資源,如:
auth stream tcp nowait/10/10 root internal auth -r -f -n -o UNKNOWN -t 30
第一個 10 表示我們允許的最大子進程數量 第二個值是每一個 IP 每一分鐘連接的最大數量,一般 10/10 的值是較佳的
一般情況下不要使用這個 ident,我們一般也只在 IRC 裡看到這個服務。
-
Securelevel
問題
- FreeBSD 核心有一個安全等級(securelevel)的概念,這是指系統核心運作使用的安全等級,不同的等級具備不同的保護和檢查機制。一般工作站運行在
securelevel 0 等級,因為他們可能需要運行 X11,而服務一般運行在 2 或者 1 等級上。
如果你要改變級別系統為 2,你可以在 /etc/rc.conf 中增加如下項目:
kern_securelevel_enable="YES"
kern_securelevel="2"
你可以重新去啟動,或者使用
# sysctl -w kern.securelevel=2
來啟動
-
一些本地安全技巧
- 1. 編輯 /etc/ttys,把下面的一行的 secure 改為 insecure:
console none unknown off secure
這樣用戶進入 single user mode 時會要求輸入 ROOT 密碼,當然這樣也使你忘記 ROOT 密碼時的恢復存在一定難度了。
2. 修改一些電腦相關設定,如 BIOS,不允許軟碟啟動,CDROM 啟動等,即在硬碟驅動以前不允許其他媒介啟動。並設定
BIOS 密碼。
3. 關於虛擬終端和虛擬終端緩衝,虛擬終端緩衝中的內容在你登出以後並不清除,所有你在機器的操作活動可以被復查。你可以重新設定核心參數如:
SC_NO_HISTORY # 取消歷史記錄
SC_DISABLE_DDBKEY # 取消 debug 鍵
SC_DISABLE_REBOOT # 取消 clt-alt-del 鍵
4. 對 /bin, /sbin 進行安全保護。
#chflags schg /bin/*
#chflags schg /sbin/*
-
訊息過濾問題
- FreeBSD 的封包過濾工具擁有強大的設定規則來過濾你想阻擋的訊息,你可以使用 ipfw 來達成封包過濾,不過你需要在核心中有一定的選項設置,如:
需要在編譯核心時打開下面選項重新編譯核心。
options IPFIREWALL
options IPFIREWALL_VERBOSE
options “IPFIREWALL_VERBOSE_LIMIT=100”
options IPFIREWALL_DEFAULT_TO_ACCEPT
options IPDIVERT
其中第一項 IPFIREWALL 設定是用於開啟基本的封包過濾功能,只有使用它才能在核心支援封包過濾。IPFIREWALL_VERBOSE
和 IPFIREWALL_VERBOSE_LIMIT 是設定記錄過濾日誌及日誌記錄的限制。IPFIREWALL_DEFAULT_TO_ACCEPT
是設定 IPFIREWALL 的例外狀況,在封包不符合所有的過濾規則的情況下進行轉送,顯然這是一種寬鬆的限制,此時系統主要用於阻擋特定位址和特定服務,而提供其他的例外網路功能。如果沒有定義這個選項,系統就只能允許符合已定義規則的封包通過,而阻擋其他任何封包,這樣在沒有定義過濾規則的情況下,系統不能和其他電腦相互通信。最後一個選項 IPDIVERT 是用於定義 IPFIREWALL 與 natd 的 port。
建立 /etc/firewall.rules 建立自己的規則,並把文件設為 600 屬性,下面的規則僅供參考:
ipfw -q -f flush
ipfw -q add 00100 allow ip from any to any via lo0
ipfw -q add 00220 deny log ip from me to any in
#syn fin 封包,一般來說是 nmap 和 queso 掃描器使用,所以過濾
ipfw -q add 00225 deny log tcp from any to any in tcpflags syn,fin
# 檢查通信狀態
ipfw -q add 00230 check-state
ipfw -q add 00235 deny tcp from any to any in established
ipfw -q add 00240 allow ip from any to any out keep-state
# 控制 icmp 封包,只能通過 icmp 類型來限制
ipfw -q add 00300 allow icmp from any to any icmptype 3
ipfw -q add 00301 allow icmp from any to any icmptype 4
ipfw -q add 00302 allow icmp from any to any icmptype 11
# 允許 DHCP 通過
ipfw -q add 00401 allow udp from 192.168.2.1 67 to any 68
ipfw -q add 00402 allow udp from 192.168.1.1 67 to any 68
# allow ident requests
ipfw -q add 00500 allow tcp from any to any 113 keep-state setup
# log anything that falls through
ipfw -q add 09000 deny log ip from any to any
可以使用下面命令馬上啟動規則:
# sh /etc/firewall.rules
如果你要在你日誌裡查看有關丟棄封包的記錄,你需要如下設置:
# sysctl -w net.inet.ip.fw.verbose=1
如果你要所有這些設置在機器啟動時候執行,編輯 /etc/rc.conf 增加下列項目:
firewall_enable="YES"
firewall_logging="YES"
firewall_script="/etc/firewall.rules"
如果要記錄這些訊息進行測試,不要忘了在 /etc/syslog.conf 中增加下列項目:
!ipfw
*.* /var/log/ipfw.log
記得在 /etc/newsyslog.conf 中設置下列選項:
/var/log/ipfw.log 600 3 100 * Z
|
|
|