tcpwrapper的使用方法
? ?tcpwrapper:工作在第四層(傳輸層),能夠對有狀態連接的服務進行安全檢測并實現訪問控制的工具。部分功能上跟iptables重疊。
???? 對于進出本主機訪問某特定服務的連接基于規則進行檢查的一個訪問控制工具,這個訪問控制工具以庫文件形式實現;某進程是否接受libwrap的控制取決于發起此進程的程序在編譯時是否針對libwrap進行編譯的。
??????? tcpwrapper的作用是對基于tcp的程序進行安全控制。它通過使用/usr/sbin/tcpd這樣一個進程來代為監聽任何一個使用了tcpwrapper的發起連接的tcp請求。假設sshd接受tcpwrapper的驗證,當有一個連接發起ssh連接時先有tcpwrapper進行身份驗證,如果通過了驗證,則將連接轉向sshd,否則直接拒絕連接。
??????? tcpwrapper只能為tcp的連接進行驗證。它實際是通過庫文件libwrap.so來實現控制的,并不是所有的tcp連接都接受其控制。其次,主要針對基于tcp并且在編譯(兩種編譯方式:靜態和動態)時鏈接到libwrap庫上的程序才能生效。
所以tcpwrapper的功能并沒有iptables強大。
一、如何判斷一個程序是否可以tcpwrapper控制:
判斷一個二進制程序是否接受tcpwrapper的控制,只需檢查二進制程序在編譯的時候是否依賴libwrap.so庫
[root@station39 ~]# ldd `which sshd` | grep libwrap
??????? libwrap.so.0 => /lib/libwrap.so.0 (0x00c5a000)
某些二進制文件在編譯時直接以靜態的方式將對libwrap庫的依賴性編譯到文件中去,此時需要使用string來檢查
[root@station39 ~]# strings `which sshd` | grep hosts
[root@station39 ~]# strings `which portmap` | grep hosts???? //**提供RPC服務的進程
hosts_access_verbose
hosts_allow_table
hosts_deny_table
/etc/hosts.allow
/etc/hosts.deny
鏈接到libwrap.so的獨立進程有:sendmail,slapd,sshd,stunnel,xinetd,gdm,gnome-session,vsftpd,
portmap等等。
二、配置文件介紹
???1.TCP Wrappers配置文件
?? 要決定一個客戶是否被允許連接一項服務,TCP Wrappers會參考以下兩個文件,這兩個文件通常被稱為主機訪問文件:
??????????????? /etc/hosts.allow
??????????????? /etc/hosts.deny
?? 當一個TCP Wrappers接收到一個客戶請求時,它會運行以下幾個步驟:
?????? A.檢查/etc/hosts.allow.TCP會繞服務會循序地解釋/etc/hosts.allow文件并應用第一個為這個服務所指定的規則.如果找到了一個匹配的規則,則允許連接.如果找不到匹配的規則,就會進行下一個步驟.
?????? B.檢查/etc/hosts.deny.TCP會繞的服務會循序地來解釋/etc/hosts.deny文件.如果找到一個匹配的規則,則拒絕這個連接.如果找不到匹配的規則,則允許連接到這個服務.
???? 在使用TCP Wrappers保護網絡服務時應該考慮以下幾個要點:
?????? A.因為hosts.allow中的規則會首先被應用,所以比hosts.deny中指定的規則有優先權.因此,如果訪問一項服務在hosts.allow中設置為允許,那么在hosts.deny中同一項服務的拒絕訪問設置則被忽略.
?????? B.每個文件中的各項規則是由上到下被讀取的,第一個匹配的規則是唯一被應用的規則.因此,規則的排列順序極其重要.
?????? C.如果在這兩個文件中都沒有找到匹配的規則,或這兩個文件都不存在,那么就授予訪問這項服務的權限.
?????? D.TCP會繞的服務并不緩存主機訪問文件中的規則,因此對hosts.allow或hosts.deny的配置改變都無需重新啟動網絡服務便會馬上起作用.????2.格式化訪問規則
?? /etc/hosts.allow和/etc/hosts.deny文件的格式是完全相同的.每個規則都必須位于其正確的行位.空行或以井字號(#)開始的行會被忽略.
?? 每條規則都使用以下基本格式來對網絡服務的訪問進行控制:
???????? <daemon list>: <client list> [: <option>: <option>: ...]
?? 字段解釋如下:
????? <daemon list>,一個由逗號分隔的進程名(不是服務名)列表,或ALL通配符.守護進程列表也接受運算符來提供更大的靈活性.
????? <client list>,一個由逗號分隔的主機名,主機IP地址,特殊模式或通配符列表,該列表用來識別受這項規則影響的主機.客戶列表也接受運算符來允許更大的靈活性.
?????? <option>,這項規則被觸發時要運行一個動作選項或由冒號分隔開動作列表.選項領域支持擴展式,發布shell命令,允許或拒絕訪問以及修改日志記錄.
?? 下面是一個基本的主機訪問規則示例:
??????? vsftpd : .example.com
?? 這條規則指示TCP Wrappers監測在example.com域內的任何主機向FTP守護進程(vsftpd)發出的連接.如果這條規則出現在hosts.allow 中,連接則被接受.如果這條規則出現在hosts.deny中,連接則被拒絕.
?? 下面的主機訪問規則比較復雜,而且使用兩個選項領域:
??????? sshd : .example.com? \ :spawn /bin/echo `/bin/date` access denied>>/var/log/sshd.log \ :deny
?? 請注意每個選項領域前面都有反斜線(\).使用反斜線可以防止由于規則太長而造成失敗.
?? 這個范例規定如果example.com中的某個主機試圖向SSH守護進程(sshd)發出連接請求,那么執行echo命令來將這次嘗試添加到一個專用日志文件里,并且拒絕該連接.因為使用了命令選項 deny,這一行拒絕訪問,即使它出現在 hosts.allow 文件里.???3.通配符
? 通配符使TCP Wrappers更容易匹配各種守護進程或主機.使用通配符最頻繁的是在訪問規則的客戶列表領域內.
? 以下是可以被使用的通配符:
???????? ALL,完全匹配,可以用在守護進程列表和客戶列表中.
???????? LOCAL,與任何不包括圓點(.)的主機匹配,如localhost.
???????? KNOWN,與任何帶有已知主機名和主機地址或已知用戶的主機匹配.
???????? UNKNOWN,與任何帶有未知主機名和主機地址或未知用戶的主機匹配.
???????? PARANOID,與任何帶有主機名和主機地址不相匹配的主機匹配.???4.模式
? 模式可以用在訪問規則的客戶領域里,從而更準確地給客戶主機指定分組.
? 下面是一個常用模式列表:
?????? A.主機名以圓點(.)開始,如果在一個主機名的開始放置一個圓點,那么就與所有共享這個主機名中列出的相同組成部分的主機匹配.如:.example.com適用于example.com域內的任何主機.
?????? B.IP地址以圓點(.)結束,如果在一個IP地址的末尾放置一個圓點,那么就與所有共享一個IP地址的起始數值組的主機匹配.如:192.168.適用于192.168.x.x網絡內的任何主機.
?????? C.IP地址/網絡掩碼對,網絡掩碼表達式也可以作為一個模式用來控制對某一組特定的IP地址的訪問.如:192.168.0.0 /255.255.254.0適用于地址區間從192.168.0.0到192.168.1.255的任何主機.
?????? D.[IPv6地址]/前綴長度對,[網]/前綴長度對也可以作為一種模式用來控制對某一組特定的IPv6地址的訪問.如: [3ffe:505:2:1::]/64適用于地址區間從3ffe:505:2:1::到 3ffe:505:2:1:ffff:ffff:ffff:ffff的任何主機.
?????? E.星號(*),星號可以用來匹配整個不同組別的主機名或IP地址,只要在含有其它模式類型的客戶列表中這些組不混雜在一起的話.如:*.example.com適用于example.com域內的任何主機.
?????? F.斜線(/),如果一個客戶列表以斜線開始,這個列表就被當作一個文件名對待.若是需要指定很大數量主機的各種規則的話,這一點就很有用處.
?? 更多TCP Wrappers所接受的其它用到的模式.可參閱hosts_access man 5 page.
???5.Portmap(端口映射器)和TCP Wrappers
??? 實施TCP Wrappers的Portmap不支持主機查找,也就是說portmap命令不能用主機名來識別相應的主機.因此,在hosts.allow或 hosts.deny中對portmap的訪問控制規則必須使用IP地址來特指某主機,或用關鍵詞ALL.
??? 對portmap訪問控制規則的修改可能不會立即起作用.可能得重新啟動portmap服務.
??? 像NIS和NFS一樣的被廣泛使用的服務都有賴于portmap來進行運作,所以要了解這些局限性.????6.算子(Operators)
??? 目前,訪問控制規則接受一個算子EXCEPT,這個算子可以用在一個規則的守護程序列表中,也可以用在客戶列表中.
??? 這個EXCEPT算子允許特定的例外以用來在同一個規則中拓寬匹配的范圍.
??? 下面的例子來自一個hosts.allow文件,除cracker.example.com之外,允許所有example.com主機連接所有的服務
??????? ALL: .example.com EXCEPT cracker.example.com
??? hosts.allow文件內的另一個例子中,來自192.168.0.x網絡的所有客戶都可以使用除FTP之外的所有服務
??????? ALL EXCEPT vsftpd: 192.168.0.
??? 從組織結構上來說,避免使用EXCEPT算子更簡易一些.因為這樣可以讓其他的系統管理員能很快地掃描相關的文件以便查看哪些主機被允許或被拒絕訪問服務,而無須通過EXCEPT算子來進行排序.??? 同樣, EXCEPT可以進行嵌套, ‘a EXCEPT b EXCEPT c′ would parse as ‘(a EXCEPT (b EXCEPT c))′????7.記錄日志
??? 通過使用severity命令,其選項領域讓系統管理員能夠很容易地改變一個規則的日志設施和優先級別.
??? 在下面的例子中,example.com域內的任何主機向SSH守護進程發出的各種連接會登錄到默認的authprivsyslog設施內(因為沒有具體指明設施參數值),并且以emerg優先:
????????? sshd : .example.com : severity emerg
??? 使用severity選項也可以指定某個設施.下面的例子將來自example.com 主機的任何SSH連接意圖登錄到local0設施,并以alert優先.
??????????????? sshd : .example.com : severity local0.alert
??????? 實際操作中,這個例子直到syslog守護進程(syslogd)被配置為登錄到local0設施才會起作用.???? 8.訪問控制
??? 選項領域也允許系統管理員通過添加allow或deny作為命令的最后選項來明確地以單個規則方式允許或拒絕主機.
??? 例如,下面的兩個規則允許來自client-1.example.com的SSH連接但卻拒絕來自client-2.example.com的連接
?????? sshd : client-1.example.com : allow
?????? sshd : client-2.example.com : deny
??? 訪問控制以每個規則為基礎,這樣選項領域就允許系統管理員把所有訪問規則寫成一個單一文件,要么是hosts.allow,要么是hosts.deny.有些系統管理員認為這樣組織訪問規則更容易一些.?????9.Shell命令
??? 選項領域允許訪問規則通過下面兩個指令發出shell命令:
?????? (1).spawn,作為子進程發出一個shell命令.這個命令可以使用/usr/sbin/safe_finger來獲取發出請求客戶的更多信息,或使用 echo命令來創建專用日志文件.在下面的例子中,試圖訪問來自example.com 域的Telnet服務的客戶被俏俏地登錄到一個專用文件.
???????????? in.telnetd : .example.com? : spawn /bin/echo `/bin/date` from %h>>/var/log/telnet.log : allow
?????? (2).twist,把要求進行的服務轉換成特定的命令.這個命令經常用來給外侵者設立陷阱(也叫"蜜罐兒").也可以用來向預連接的客戶發送信息.這個 twist命令必須出現在該規則命令行的末尾.在下面的例子中,試圖訪問來自example.com域的FTP服務的客戶接收到用echo命令發送的一個 訊息.
??????????? vsftpd : .example.com : twist /bin/echo "421 This domain has been black-listed. Access denied!"?????10.擴展式
??? 擴展式命令與spawn和twist命令一起使用時,可以提供關于客戶/服務器以及相關進程的信息.
????? 下面是一個支持擴展式的命令列表:
???????????? %a,返回用戶的IP地址.
???????????? %A,返回服務器的IP地址.
???????????? %c,返回大量的客戶信息,比如用戶名和主機名,或用戶名和IP地址.
???????????? %d,返回守護進程的名稱.
???????????? %h,返回客戶的主機名(或IP地址,如果主機名沒有提供的話).
???????????? %H,返回服務器的主機名(或IP地址,如果主機名沒有提供的話).
???????????? %n,返回客戶的主機名.如果主機名沒有提供的話,屏幕上會顯示unknown.如果客戶的主機名和主機地址不匹配的話,屏幕上會顯示paranoid.
???????????? %N,返回服務器的主機名.如果主機名沒有提供的話,屏幕上會顯示unknown.如果服務器的主機名和主機地址不匹配的話,屏幕上會顯示paranoid.
???????????? %p,返回守護進程的進程ID.
???????????? %s,返回各種不同類型的服務器信息,比如守護進程的進程和服務器的主機或IP地址.
???????????? %u,返回客戶的用戶名.如果沒有提供的話,屏幕上會顯示unknown.
?? 下面用來示范的規則與spawn命令一起使用了一個擴展式來在一個定制的日志文件中確認客戶主機.
?? 當來自example.com域的一個主機向SSH守護進程(sshd)發出連接意圖時,執行echo命令來把這次包括客戶主機名(通過使用%h擴展式)的連接嘗試信息記錄到一個專用文件中.
????? sshd : .example.com : spawn /bin/echo `/bin/date` access denied to %h>>/var/log/sshd.log : deny
?? 同樣的,擴展式也可以用來把個性化的訊息返回給客戶.在下面的例子中,試圖訪問來自example.com域的FTP服務的客戶們得到通知,他們的訪問被服務器取締了.
????? vsftpd : .example.com : twist /bin/echo "421 %h has been banned from this server!"
??????? 有關可用擴展式的更完全的解釋,以及對附加的訪問控制選項的更完全的解釋,可參閱man page的第五部分,查看hosts_access(man 5 hosts_access)和hosts_options.?? 11.連接旗幟(Connection Banners)
?? 當用戶連接到服務器時,用合適的旗幟標示顯示其連接是一種很好的方式,可以讓潛在的襲擊者知道本系統管理員很有警惕性.同時也可以控制關于系統什么樣的信 息可以呈現給用戶.要想為一項服務設置一個TCP Wrappers旗幟標示,可使用banner選項。
?? 這個例子為vsftpd設置一個旗幟標示.首先,創建一個旗幟標示文件,可以儲存在系統的任何地方,但必須與其守護進程同名.例如,該文件命名為/etc/banners/vsftpd并包含下面一行:
??????? 220-Hello, %c 220-All activity on?ftp.example.com?is logged. 220-Inappropriate use will result in your access privileges being removed.?
???? %c權標可提供客戶的多種信息,比如用戶名和主機名,或用戶名和IP地址,也許這樣會使該連接更讓人覺得有脅迫感。
???? 要想使該旗幟在有外來連接進入時顯示,可在/etc/hosts.allow文件上加上下面一行:
?????????? vsftpd : ALL : banners /etc/banners/
?
三、舉例說明:
allow? : 允許訪問
deny?? : 拒絕訪問
spwan? : 拒絕訪問 并且在自己這邊執行后面自定義的命令或腳本
twist? : 拒絕訪問 并且在訪問者那邊執行后面自定義的命令或腳本
serverity : 將來訪者的信息記錄到日志中,然后繼續和后面的規則做比對
banners : 顯示指定文件中的信息給client端
例如:
vsftpd : 192.168.0. : swpan /bin/echo $(date) %c %d >> /var/log/tcpwrap.log
vsftpd : 192.168.1. : twist /bin/echo “421 Connection prohibited.”
vsftpd : 192.168.2. : banners /var/banners
第一條規則,是拒絕192.168.0的網段訪問,并且將日期和來訪者的信息記錄到tcpwrap.log中
第二條規則,是拒絕192.168.1的網段訪問,并且在來訪者客戶端的那邊顯示提示信息”421 Connection prohibited.”
第三條規則,當192.168.2的網段訪問,在客戶端那邊顯示提示信息,信息內容由 /var/banners文件來指定。
?? (1). ALLOW/DENY: 可以在/etc/hosts.deny或/etc/hosts.allow 中被當做一個選項來使用。
例:編輯/etc/hosts.allow
in.telnetd: 192.168.1.
in.telnetd: ALL: DENY
?? (2). spawn:在匹配到規則時重新發起一個額外的命令來執行其他的動作,可使用特殊展開。
在子進程中執行,并不影響當前進程。
in.telnetd: ALL : spawn echo "login? attempt? from? %c? to? %s"? | mail -s waring? root
?? (3). twist:啟動一個額外的命令來取代當前規則中定義的服務。
sshd: 192.168.0. twist /bin/echo "421 Connection prohibited."
???? 通過一個例子來說明二者區別:
???? 編輯/etc/hosts.allow
????????? in.telnetd: 192.168.0.: spawn /bin/echo `date`? %c accessd %d >> /var/log/tcpwrap.log
???? 可以正常訪問,我們來查看下日志:
???? [root@station39 xinetd.d]# cat /var/log/tcpwrap.log
?????????? Wed Mar 23 12:26:29 CST 2011 192.168.0.1 accessd in.telnetd
???? 我們使用twist來試一下:/etc/hosts.allow
?????????? in.telnetd: 192.168.0.: twist /bin/echo "421 connetcion deny!"
???? 使用物理機訪問,被拒絕:
?? (4). severity [facility.] priority
?????? 定義訪問某個服務時的日志級別,默認authpriv.info級別
????????????????? in.telnetd:ALL: serverity local7.info
?? (5). banners
?????? 訪問某個服務時返回的信息
????????????????? in.telnetd: ALL: banners? /some/directory
?????? 編輯/etc/hosts.allow
????????????????? in.telnetd: ALL: banners /var/tcpwrap
?????? 舉例:
????????????????? [root@station39 xinetd.d]# mkdir? /var/tcpwrap
????????????????? [root@station39 xinetd.d]# vim /var/tcpwrap/in.telnetd
?????? "Welcome to 192.168.0.39"
?????? 使用物理機訪問一下:
本文轉自 lirulei90 51CTO博客,原文鏈接:http://blog.51cto.com/lee90/1944325,如需轉載請自行聯系原作者
總結
以上是生活随笔為你收集整理的tcpwrapper的使用方法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: kvm 虚拟机 实用工具笔记(方便查看i
- 下一篇: Nginx 学习笔记(五)nginx-v