附註: 本篇文章為自己備忘用,網路上已有很多很多很多相關文件,請自行搜尋.
tcp wrapper是FreeBSD預設的tcp daemon防護措施,只要開啟 inetd 服務就可以了.
開機自動執行, 修改 /etc/rc.conf , 新增內容:
inetd_enable="YES"手動執行:
/usr/sbin/inetd -wW -C 60設定檔案: /etc/hosts.allow , 規則:
服務名稱 : 來源 : 參數設定檔規則說明:
來源可以是 IP或 FQDN.
採用 first match first win 方式, 也就是遇到符合的規則就不在往下確認.
# 只要將最初的規則註解,tcp wrapper就開始運作.
#ALL : ALL : allow # 所有服務,所有來源 ,允許.
# 限定服務存取來源
# 範例:允許192.168.0.0/24 使用 sshd服務.
# sshd : 192.168.0.0/255.255.255.0 : allow
# 若為區段請加上子網路遮罩,如 0/24 則為: IP/255.255.255.0 , 其餘類推.
# 範例: 拒絕 某IP使用
#sshd : .evil.cracker.example.com : deny
# 常見範例1:
服務名稱 : localhost : allow # 允許本機使用
服務名稱 : ip.trustdomain.com : allow # 允許信任的IP連線
服務名稱 : all : deny # 拒絕其餘不信任的來源.
# 常見範例2: 使用 spawn 讓透過某些命令檢察此服務是否合宜.
# 至於spawn要執行哪些指令由您自行考量(可搭配shell語法).
#
# 當 所有來源 使用fingerd服務, 透過mail -s 發出警告信件 ,列出 並且拒絕.
# 信件結果: tcpd: 來源端使用者@來源端hostname[來源端ip] fingered me !
fingerd : ALL \
: spawn (echo Finger. | \
/usr/bin/mail -s "tcpd\: %u@%h[%a] fingered me!" root) & \
: deny
# tcp wrapper預設將所有未在hosts.allow列入允許的服務保護,也就是全部拒絕.
# 並且回應 You are not welcome to use 服務名稱 form 來源IP
ALL : ALL \
: severity auth.info \
: twist /bin/echo "You are not welcome to use %d from %h."
# 若您不希望全部服務皆透過tcp wrapper管理,您可以將上述三行註解.
# 這樣將會導致沒有在hosts.allow表列拒絕的服務皆會開放.
# 實際範例:
#ALL : ALL : allow
sshd : 192.168.0.1 : allow
ALL : ALL \
: severity auth.info \
: twist /bin/echo "You are not welcome to use %d from %h."
#將會允許 192.168.0.1 進行 ssh 連線, 但其餘ip皆無法使用sshd服務.
提醒: 設定hosts.allow時,請務必留有一個連線的視窗,避免因為設定失敗而被踢出系統.
enjoy it!!
補充,開啟tcp wrapper之後,連線方的dns正反解名稱需要配合,不然會出現拒絕連線的狀況.
實際範例: (記錄檔 /var/log/messages)
Mar 28 11:42:42 sshd[81621]: warning: /etc/hosts.allow, line 24: host name/address mismatch: 210.202.113.21 != NK210-202-113-21.adsl.static.ebtnet.net
作者 藍色泡泡 — 28 三月 2008, 12:42