一、tcp wrapper
tcp wrapper是一種訪問控制工具,類似於iptables可以作訪問控制。
tcp wrapper只能對基於tcp協議的服務作訪問控制,但並不是所有基於tcp協議的服務都能實現用tcp wraper作訪問控制。
1.tcp wrapper實現訪問控制主要依靠兩個文件,一個是/etc.hosts.allow文件,另一個是/etc/hosts.deny文件.從文件的名字上可以理解:一個是定義允許的,一個是定義拒絕的。那這兩個文件生效的次序是怎樣的呢?
說明:如圖所示,N表示沒有匹配的規則,Y表示有匹配的規則,OK表示允許訪問,DENY表示拒絕訪問。
首先檢查hosts.allow文件中是否有匹配的規則。如果有匹配的規則,則允許訪問;如果沒有匹配的規則,則檢查hosts.deny文件。
其次,檢查hosts.deny文件中是否有匹配的規則。如果有匹配的規則,則拒絕訪問;如果沒有匹配的規則,則視爲默認規則,默認規則則爲允許,所以允許訪問。
2.文件內容的書寫規則:
Daemon_list:client_list[:options]
Daemon_list 要寫的可執行程序的二進制文件名。例ssh的二進制文件名sshd,http的二進制文件名爲httpd。
ALL 本機上所有接受tcp wrapper 訪問控制的服務
client_list
IP 單獨的ip地址 例:172.16.22.1
Network address 不能使用長度格式,只能使用完整長度格式。例:172.16. 172.16.0.1/255.255.0.0 但不能使用172.16.0.1/16
HOSTNAME 主機名 例:www.lihuan.com
[:options] 選項,可有可無
看個例子:
例:ssh僅允許172.16.0.0/16網段訪問。
首先在/etc/hosts.allow中定義:
sshd:172.16.
然後在/etc/hosts.deny中定義:
sshd:ALL
即可實現要求了。
3.特殊用法
spaw 記錄日誌功能
DENY 拒絕
ALLOW 允許
例:ssh允許172.16.0.0/16網段訪問。
可在/etc/hosts.deny中這樣定義:
sshd:172.16. :ALLOW
例:ssh允許172.16.0.0/16網段訪問,記錄日誌。
可在/etc/hosts.allow中這樣定義:
sshd:172.16. :spawn echo ”someone login” >> /var/log/tcpwrapper.log
在spawn中也可帶上這幾個選項:
%c 客戶端信息
%s 服務端信息
%h 客戶端主機名
%p 服務端的pid
例:ssh允許172.16.0.0/16網段訪問,記錄日誌。
sshd:172.16. :spawn echo ”someone login attempt from%c to %s” >> /var/log/tcpwrapper.log
二、xinetd
xinetd是超級守護進程,xinetd提供類似於inetd+tcp wrapper的功能,但是更加強大和安全。
進程有獨立守護進程和非獨立守護進程。
獨立守護進程響應速度快,消耗資源大;費獨立守護進程響應速度慢,但消耗資源少,需要超級守護進程xinetd進行代理。
支持對tcp、udp、rpc服務
* 基本訪問控制
only_from 僅允許 例:only_from = 172.16.22.1 only_from = 172.16.22.1/16
no_access 不允許 例:no_access = 172.16.22.1 no_access = 172.16.22.1/16
備註:兩者同時使用,一般誰的匹配範圍小誰生效,但不建議同時使用。
* 基於時間段的訪問控制
access_times 例:access_times = 10:00-16:00
* 基於資源的訪問控制
cps 能限制每秒鐘客戶端能啓動服務的個數(帶兩個參數:每秒連接數的最大值;超出最大連接數後臨時禁用的時長) 例:cps = 50 5
per_source 能限制每個客戶端能啓動的最大服務器數目 例:per_source = 20
instances 能限制客戶端能啓動的最大服務器數目總數 例:instances = 200
* 功能完備的log功能,即可以記錄連接成功也可以記錄連接失敗的行爲
type_log type_log=FILE /var/log/ftp.log
* 將某個服務綁定在特定的系統接口上,從而能實現只允許私有網絡訪問某項服務
bind 例:bind = 172.16.22.1
這些訪問控制規則在哪兒寫呢?當然會有一個文件專門保存這些規則的:/etc/xinetd.conf
只要把規則寫進這個文件就會生效!
service daytime { socket_type = stream protocol = tcp wait = no user = nobody server = /usr/sbin/in.date instances = 1 nice = 10 only_from = 0.0.0.0
}
defaults { log_type = FILE /var/log/servicelog log_on_success = PID log_on_failure = HOST RECORD only_from = 128.138.193.0 128.138.204.0 only_from = 128.138.252.1 instances = 10 disabled = rstatd }
看看上面這2個例子,相信你應該懂得什麼意思了!