[ 永遠的UNIX::UNIX技術資料的寶庫 ]   GB | BIG5

首頁 > 安全技術 > 工具 > 正文
Tcp_wrapper的安裝和使用
本文出自: 作者: Yiming Gong (2001-10-05 12:00:00)
      --------------
      Copyright 2000-2003 by 水銀流動 Yiming Gong(yiming@security.zz.ha.cn) 
      All rights reserved. This document may only be reproduced (whole or in 
      part) for non-commercial purposes. All reproductions must contain this 
      copyright notice and must not be altered, except by permission of the 
      author. 
      --------------    

      Internet的開放互連性使得每一台連在網上的服務器都逃脫不了被攻擊的可能性,事實上我
      國從接入互聯網以來這類事從未中斷過。對目前我國的絕大部分網絡管理員而言,熟練的使
      用Unix操作系統尚是一個亟待解決的問題, 
      網絡安全,很難顧及。然而
      今天我們來介紹一個軟件Tcp_wrapper,說起這個軟件,可算得上是大名鼎鼎了,互聯網上, 
      無論採用何種unix操作系統,安裝了這個軟件的主機恐怕都是不計其數的,事實上它已經成為
      一種安全的標準配置.本文就以solaris作為操作環境對這個軟件做一說明,在其它的Unix操
      作系統平台上是相通的,讀者根據自己的操作系統的種類稍加變化即可。
      Tcp_wrapper是Wietse 
      Venema開發的一個可用各種Unix平台的免費軟件,說起Tcp_wrapper的誕生,到有個小小的
      故事,大約在1990年,作者所在大學的服務器屢屢受到一個外來黑客侵入, 
      因為受害主機的硬盤數據屢次被rm rf / 
      命令整個抹掉,所以找尋線索極為困難,直到有一天晚上Venema在工作的過程中無意中發現
      這個黑客在不斷的finger 
      受害主機,偷窺受害者的工作,在那個時候一個想法誕生了:設計一個軟件,使它可以截獲發
      起finger請求的IP,用戶名等資料,Venema 
      很快投入了工作,而Tcp_wrapper也由此出現!在這以,Tcp_wrapper隨著應用逐漸成為一種標
      準的Unix安全工具,成為unix守護程序inetd的一個插件.通過Tcp_wrapper,管理員可以設置對
      inetd提供的各種服務進行監控和過濾.
      我們知道,unix中各種服務的實現是基inetd這個守護進程的,每當有網絡服務請求時,無論是
      ftp,telnet,rlogin等等,這種請求都被送到處偵聽狀態的inetd守護進程,inetd再根據請求啟
      動相應服務.inetd的設置是根據/etc目錄下inetd.conf決定的.inetd.conf中標識了每種服務由
      什進程來控制,我們抽取一行如下:
      telnet stream tcp nowait root /usr/sbin/in.telnted in.telned
      從上面這一行我們可以看到,telnet這個服務,是由/usr/sbin目錄下的in.telnetd來控制的,每當
      有telnet的連接請求時,inetd就指導in.telnetd來啟動telnet服務.這是unix默認的連接方式,在
      這個過程中,沒有管理員可以控制的部分,也沒有連接紀錄.
      而在安裝了Tcp_wrapper的主機上,管理員可以對上述服務加以控制,當Tcp_wrapper編譯安裝成功
      ,會生成一個tcpd程序,它可以在inetd.conf這個控制文件中取代in.telnetd的位置,這樣,每
      當有telnet的連接請求時,tcpd即會截獲,先讀取管理員所設置的訪問控制文件,合乎要求,則會
      把這次連接原封不動的轉給真正的in.telnetd程序,由in.telnetd完成以的工作.如果這次連
      接發起的ip不符合訪問控制文件中的設置,則會中斷連接請求,拒絕提供telnet服務.除
      in.telnetd以外,tcpd還可以替代其它各種tcp服務.
      Tcp_wrapper訪問控制的實現是依靠兩個文件:hosts.allow,hosts.deny來實現的.這兩個文件的
      語法是比較簡單的,基本語法就是:服務類型 
      :本服務有效ip范圍 : 許可或拒絕.如hosts.allow中為:
      In.telnetd : secu.unix.org : allow
      In.ftpd : 10.68.32. : allow
      in.rshd : all :  /usr/local/sbin/safe_finger -l @%h | 
      usr/ucb/mail yiming@371.net
      而hosts.deny為:all : 
      all.這兩個文件的意思是對telnet來講,只允許來自secu.unix.org的連接,對ftp而言,允許
      10.68.32這個c類地址的連接.in.rshd這一部分語法稍微復雜一些,它的意思是外界任何一個ip每
      次試圖使用rsh連接本系統的時候系統會finger發起連接請求的遠程用戶,並立即將結果發mail
      到一個管理員的遠程信箱yiming@371.net,我們知道,管理員之所以這做,是因為一般試圖進行
      rsh的連接, 
      都是有很大的潛在危險性的,這說明也許系統已經被人入侵,並安插了.rhosts文件了,這很危險!
       所以對管理員來說,這種連接需要引起極大的注意. 
      hosts.deny文件中的all : 
      all表示除了這些以外,拒絕來自任何地方的任何服務.以上只是對訪問控制文件的一個簡單說明,
      管理員可以參看Tcp_wrapper的相應說明定制更為復雜的控制策略.同時需要說明的是,如果需要
      象上例中設置對rsh的這種finger,mail功能,是需要在Makefile中打開language 
      extension的.
      下面來講講Tcp_wrapper的安裝
      首先,我們從可信站點下載tcp_wrappers,如
      ftp://ftp.porcupine。org/pub/security/tcp_wrappers_7.6.tar.gz(目前最新的版本是7.6)
      我們假設你的主機已有了各種所需的編譯工具,cc(或gcc),make(或gmake),gzip等,如果
      使用solaris的讀者主機上沒有這些工具,可到sunfreeware.com下載它們,使用其它Unix系統亦
      可到相關站點下載。我們在得到Tcp_wrapper包,用gzip和tar將壓縮包解開,會生成
      Tcp_wrapper目錄,進入目錄,我們需要編輯Makefile文件,使它合乎我們的工作要求。編輯的
      基本工作可以分為3步。
      1:在Makefile的頭一部分我們可以看到REAL_DAEMON_DIR的描述,它表明了Unix系統中真正的
      守護程序所在位置,即上面提到的第六個分隔段的守護進程所在目錄,solaris中這些守護程序
      的目錄是/usr/sbin,所以我們將SysV.4 
      Solaris 2.x OSF AIX前的#注釋號去掉,即下面的形式:
      # Ultrix 4.x SunOS 4.x ConvexOS 10.x Dynix/ptx
      #REAL_DAEMON_DIR=/usr/etc
      #
      # SysV.4 Solaris 2.x OSF AIX
      REAL_DAEMON_DIR=/usr/sbin
      #
      # BSD 4.4
      #REAL_DAEMON_DIR=/usr/libexec
      #
      # HP-UX SCO Unicos
      #REAL_DAEMON_DIR=/etc 
      2:在Makefile 中查找FACILITY= 
      LOG_MAIL這幾個關鍵字,Tcp_wrapper的紀錄功能就是由這裡實現的,系統默認是使用solaris的
      MAIL精靈來做連接紀錄的,但這樣會造成Tcp_wrapper的連接紀錄和系統的mail日志混雜在一起,
      不利管理員分辨.所以建議還是選用一個solaris中未使用的local精靈.我們在這裡使用LOCAL3,
      即FACILITY= 
      LOG_ LOCAL3 ,SEVERITY級別保持INFO級別不變。在讀者的機器上可視情況而定用何種精靈。修
      改即下面的形式:
      # The LOG_XXX names below are taken from the /usr/include/syslog.h file.
      FACILITY= LOG_LOCAL3 #LOG_MAIL is what most sendmail daemons use
      # The syslog priority at which successful connections are logged。
      SEVERITY= LOG_INFO # LOG_INFO is normally not logged to the console 
      3:接著查找/etc/hosts.allow,/etc/hosts.deny,也就是上文提到的訪問控制文件,建議將默
      認的/etc替換為其它路徑。
      由此Makefile編輯完成,退出vi,執行make 
      sunos5(sunos5這個參數是由Makefile開始描述部分得到,採用其它操作系統的將sunos5替換為為
      相應參數即可)。我們可以看到系統在編譯,成功,在當前目錄下會生成tcpd,tcpdmatch,
      safe_finger等5個可執行文件。建議選一個目錄如/usr/local/sbin,將上述5個文件拷貝到這個目
      錄中,至此Tcp_wrapper本身的編譯工作就此結束。
      下一步,編輯/etc/inetd.conf,將原
      telnet stream tcp nowait root /usr/sbin/in.telnetd 
      in.telnetd中的/usr/sbin/in.telnetd替換為tcpd及其所在路徑,在此例中即
      telnet stream tcp nowait root /usr/local/sbin/tcpd in.telnetd
      其它ftp , tftp , rsh , rlogin等同樣操作即可,建議至少替換telnet,ftp,rsh,rlogin
      這幾個守護程序。
      編輯結束,保存文件,ps ef | grep inetd找出inetd的進程號,kill HUP 重啟inetd進
      程使改動生效。
      接著我們編輯/etc/syslog.conf文件,加入日志紀錄功能,在此例中即
      #tcp wrapper log
      local3.info /var/log/tcplog
      編輯結束,保存文件, 在/var/log下生成tcplog文件,注意這個文件的讀寫屬性, 應該只對
      root有讀寫權限。然ps ef | 
      grep syslogd,找出syslogd的進程號,kill HUP 重啟syslogd進程使改動生效。
      最一項工作是編輯hosts.deny和hosts.allow文件,按上面的語法編輯即可。至此所有工作完成,
      我們可以用上述兩個文件的設置來試一試,假設主機refuse(IP 
      11.22.33.44)telnet本機,我們看一看,會有什反應?
      refuse#telnet www.yiming.com
      Trying www.yiming.com ...
      Connected to www.yiming.com
      Connection closed by foreign host.
      我們再看看本機Tcp_wrapper的日志,多了一條:
      Apr 2 13:56:20 yiming in.telnetd[1769]: refused connect from 11.22.33.44
      實際上這種測試可用Tcp_wrapper自帶的測試文件tcpdmatch,使用很簡單,格式tcpdmatch 守護
      程序 假定IP 
      即可,這裡也不介紹了。



(http://www.fanqiang.com/)
    進入【UNIX論壇

相關文章
 

★  樊強制作 歡迎分享  ★