標籤:主機存取控制 iptables tcp_wrapper
一、常用的主機存取控制工具
獨立(stand alone)守護進程(httpd,vsftpd)、瞬時(transient)守護進程(rsync,tftp,telnet), 這兩類守護進程都支援基於iptables進行控制。哪一連接埠運行用戶端訪問,哪一連接埠不允許用戶端訪問,基於主機做防火牆時,都能進行控制。
做主機防火牆時,有些瞬時守護進程,甚至是某些獨立獨立守護進程,還能夠接受另一種方式,tcp_wrapper,來控制。
在眾多的基於主機的安全存取控制中,tcp-wrapper是簡單而易於配置的一種。
在linux下能實現基於主機存取控制的常用工具有三個:iptables、tcp_wrapper、xinetd(超級守護進程)。
二、tcp_wrapper簡介
顯而易見,只能控制tcp協議下的軟體。
一般翻譯為tcp封裝器,能夠實現監聽在某一tcp服務上,對於進出某本主機區訪問某一通訊端的應用做檢查,而且能夠實現所謂授權訪問。
簡單來說,tcpwrapper本身是一個守護進程,工作於tcp協議上。iptables工作於核心的tcp/ip協議棧上,而tcp_wrapper工作於核心的tcp/ip協議棧的tcp協議上,而且是在tcp的入口處啟動一個進程,監視每一個tcp服務的相關請求,同時把這個報文本身跟tcp_wrapper的設定檔中的允許存取規則或拒絕規則中的規則進行對比。若果一旦匹配,則給予允許存取或拒絕訪問。
背景工作處理序為:tcpd
工作在tcp包文所要經過的位置上,有且只有一個位置。工作於tcp協議層,比工作在網路層的iptables更高一層,因此可以和iptables結合使用。但tcp_wrapper的控制完成之後,iptables就無需控制了,同理,iptables控制完成之後,tcp_wrapper也就無需控制了。二者可以有一個能完成控制就可以了。
iptables既然能完成工作,為什麼還需要tcp_wrapper呢?因為tcp_wrapper的配置非常簡單。
設定檔:/etc/hosts.allow,/etc/hosts.deny
但是並非所有服務都能接受tcp_wrapper的控制,事實上,tcp_wrapper與其說是一個服務,不如說是一個庫更合適。因為所有的守護進程,都是工作在使用者空間的,所以與其說tcp_wrapper是一個守護進程,不如說是一個庫更合適。
所有的服務都能接受iptables控制,但並非所有都接受tcp_wrapper控制。只有使用者在開發某個程式時,如果連結到這個庫上,或者說依賴於這個庫,就意味著他他是接受tcp_wrapper控制的。
三、使用tcp_wrapper控制
a).只需將受控製程序名寫入設定檔即可實現控制:
允許訪問:/etc/hosts.allow
拒絕訪問:/etc/hosts.deny
b).控制原理
程式連結的庫檔案,會自動在使用者訪問服務時,基於tcpd檢測
/etc/hosts.allow、/etc/hosts.deny兩個設定檔,並判斷某一主機是否能夠訪問服務。
c).匹配機制
1.先檢查/etc/hosts.allow,如果被允許,則直接允許存取;
2.如果/etc/hosts.allow沒有匹配項,則檢查/etc/hosts.deny;如果有匹配項則禁止訪問;
3.如果均無匹配,則預設允許存取。
d).設定檔文法格式
daemo_list:client_list [:options]daemon_list: 一定是應用程式名稱,不是進程名; 如果有多個,則用逗號隔開; 如果匹配所有,則用ALL;client_list: IP地址:172.16.100.100 主機名稱:www.magedu.com 網路地址/子網路遮罩:(子網路遮罩只能使用長格式) 簡短格式: 如:172.16. 表示 172.16.0.0/255.255.0.0[:options] deny 使在hosts.allow中選項deny allow 使在hosts.deny中選項allow 這樣的機制可以讓我們只需寫一個設定檔就可以將所有配置搞定 例: vim /etc/hosts.allow in.telnetd: ALL EXCEPT 172.16.251.105 :deny spawn 發起執行一條命令,比如:如果有人訪問訪問伺服器,別拒絕了,這通常是一種惡意訪問,或非正常訪問,就可以使用spawn echo一些命令儲存至日誌中 vim /etc/hosts.allow in.telnetd: 172.16 EXCEPT 172.16.251.105 vim /etc/hosts.deny in.telnetd: ALL : spawn echo `date` login attempt from %c to %s >> /var/log/tcp_wrapper.log %c:[email protected] %s:[email protected] %h:用戶端主機名稱 %p:伺服器上的進程PID 擷取完整協助資訊:man 5 hosts_access 注意:echo的資訊無需加引號,否則命令替換不會進行
e).tcp_wrapper有幾個內建的宏(Macro)
用於client_list的有:ALL,NONE,UNKNOW(主機名稱無法解析的地址), PARANOID(正反向解析不匹配的地址)用於daemon_list的有:ALL兩者都可以都可以用:EXCEPT (排除) 例: vim /etc/hosts.allow in.telnetd: 172.16. EXCEPT 172.16.251.105
f).案例
如果我們要定義僅允許存取某一網段,則定義/etc/hosts.allow允許存取網段,在/etc/hosts.deny定義拒絕所有主機。
示範控制:telnet
yum install telnet-server ldd `which in.telnetd` 沒有顯示 ldd `which xinetd` 顯示有,telnet自己本身不監聽程式,而是由xinetd監聽,所有它是接受tcp_wrapper控制的。 chkconfig telnet on service xinetd start ss -tnl | grep 23 僅允許存取172.16網段: vim /etc/hosts.allow in.telnetd: 172.16. vim /etc/hosts.deny in.telnetd: ALL 不用重啟,立即生效,因為工作在核心中的,和iptables一樣立即生效
總結:
tcp_wrapper確實非常簡單而又易於配置。尤其是控制ftp服務時,強烈推薦,因為基於iptables的存取控制與tcp_wrapper相比,真的太複雜了。
本文出自 “狐狸胡” 部落格,請務必保留此出處http://7944938.blog.51cto.com/7934938/1405392