tcp wrapper其實是一個庫(libwrap.so),也叫做網絡資源訪問控制器,是工作在tcp層的訪問控制工具,通常只對基於tcp協議的服務做控制,通過鏈接工作在內核和應用程序之間。所以可以把它理解爲一個工作在用戶請求與服務所監聽的套接字之間的一種檢查過濾機制,可以實現攔截對於某種特定服務的訪問請求,並根據所定義的規則來絕對是否允許其訪問。
#ldd `which app` | grep libwrap #此命令可以查看是否受tcp warpper控制
tcp wrapper可以直接編譯進某個應用程序叫靜態編譯;也可動態鏈接。
靜態編譯的實例:portmap應用程序的rpc服務。
查看靜態編譯的命令如下:
#string `which portmap` | grep hosts
tcp wrapper有兩個訪問控制配置文件,定義允許與拒絕,內容爲某個服務允許或拒絕哪些主機訪問: /etc/hosts.allow和/erc/hosts/.deny
優先級:首先檢查/etc/hosts.allow,然後檢查/etc/hosts.deny,最後/etc/會執行默認允許。語法中主要包含兩項,詳細介紹如下:
文件語法格式:
daemon_list: client_list [:options],如:
daemon_list表達方式並舉例:
sshd: #單個服務
vsftpd,sshd,in.telnetd: #多個服務
ALL #所有服務
daemon@host #某特定主機的特定服務
client_list表達方式並舉例:
-
IP
-
network address metwork /mask:只接受類似1.0.0.0/255.0.0.0的表達方式也可簡寫成:172.16.
3. HOSTNAME
fqdn
.lhf.com->www.lhf.com
4. MACRO:
ALL
LOCAL(主機同網段),KNOWN(可解析),UNKNOWN,PARANOID(正向解析和反向解析不匹配)
EXCETP(除了)
服務分兩種:
standalone:獨立守護進程。
transient:非獨立守護進程,依賴於超級守護的管理,所以超級守護進程是按需啓動的,取決於它所管理的進程。
xinetd:叫做超級守護進程,可以管理多個進程,其中就包括telnet服務,配置好本地yum源的情況下,安裝telnet-server,它依賴於xinetd,所以會把xinetd一併裝上:
#yum install telnet-server -y
#ldd `which xinetd` #查看xinetd服務是否受tcp wrapper控制
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++
例:sshd服務僅允許172.16.0.0/16網段訪問:
#vim /etc/hosts.allow #編輯允許列表
sshd:172.16.
#vim /etc/hosts.deny #編輯拒絕列表
sshd:ALL
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
如果想要此服務的訪問被記錄在指定目錄下的日誌文件中,只需在編譯中增加指定日誌即可。
後面添加spawn,指定日誌包含內容
%c :client infomation(user@host) #記錄客戶端
%s :service info(server@host) #記錄訪問的服務器
%h :client hostname #記錄客戶端的主機名
%p :server PID #記錄服務器的PID
例:telnet服務僅允許172.16.0.0、16網段訪問,並以指定格式的日誌文件記錄下每次訪問:
#service xinetd start #開啓超級守護進程xinetd,它管理telnet服務
#chkconfig telnet on #使其開機自動啓動
#vim /etc/hosts.allow
in.telnetd:172.16.:spawn echo "`date`,Login attempt from %c to %s " >> /vat/log/tcpwrapper.log
#vim /etc/hosts.deny #保存退出
in.telnetd:ALL: spawn echo "`data`,Login attempt %h " >> /vat/log/tcpwrapper.log
#保存退出,spawn指定日誌內容
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
上面已經說了,xinetd是超級守護進程,此服務的配置文件是/etc/xinetd.conf,xinetd是由n個非獨立進程組成的,每個進程都在/etc/xinetd.d/目錄下有以該服務名命名的配置文件。
配置文件主要有兩部分組成:
1、全局配置(服務的默認配置)
2、服務配置,由三部分組成:
屬性 賦值操作符(=;+=;-=) 值
以telnet服務爲例,打開它的配置文件/etc/xinetd.d/telnet:
# default: on
# description: The telnet server serves telnet sessions; it uses \
# unencrypted username/password pairs for authentication.
service telnet
{
disable = no
flags = REUSE
socket_type = stream
wait = no
user = root
server = /usr/sbin/in.telnetd
log_on_failure += USERID
}
# description: The telnet server serves telnet sessions; it uses \
# unencrypted username/password pairs for authentication.
service telnet
{
disable = no
flags = REUSE
socket_type = stream
wait = no
user = root
server = /usr/sbin/in.telnetd
log_on_failure += USERID
}
主要屬性的介紹與實例:
1.訪問控制法則:
only_from=
IP:172.16.3.1 #只允許某主機訪問
no_access =
#不允許訪問
2.時間控制;
access_times = hh:mm-hh:mm #定義訪問時間
3. 監聽的地址:
bind = #綁定在某個ip上,只這個提供服務
#netstat -tnlp | grep 23 #檢測是否綁定成功
4.資源訪問控制:控制每秒鐘入站連接的個數:
cps = 2 10 #每秒入站連接的最大數和臨時禁用的時長
5.定義一個ip同時發起幾個請求:per_source = 1
6.定義最大同時連接數 instances =
7. 向啓動的server傳遞參數:
server_args =
banner = /etc/telnet.banner
#vim /etc/telnet.banner
welcome to xinetd #定義連接服務成功時的歡迎語
保存退出後,就可以重啓xinetd服務進行測試了。