TCP_Wrappers
事實上,除了使用 xinetd 的設定檔來設定安全機制以外, 咱們還能夠利用額外的機制來抵擋某些不受歡迎的資料來源喔! 那就是 /etc/hosts.allow 以及 /etc/hosts.deny 這兩個檔案的功能啦! 這兩個檔案能夠藉由分析:
* 啓動的服務名稱 (daemon 執行檔檔名);
* 用戶端的 IP 來源或網段來源。
來進行用戶端使用者是否可以登入的判斷呢!不過,雖然這兩個檔案已經被整合到 xinetd 裏面去了, 不過,要得到更多的功能,仍是得要安裝 tcp_wrappers 這個套件才行! 由於,這兩個檔案自己就是 tcp_wrappers ( 實際上是 /usr/sbin/tcpd 那個檔案而已啦! ) 的設定檔啊! 而他也能夠整合到整個系統的服務裏頭去,能夠算是最最基礎的一個防火牆架構啦! ^_^
其實, /etc/hosts.allow 與 /etc/hosts.deny 是 /usr/sbin/tcpd 的設定檔, 而這個 /usr/bin/tcpd 則是用來分析進入系統的 TCP 封包的一個軟體,他是由 TCP Wrappers 所提供的。 那爲何叫作 TCP_Wrappers 呢?那麼 wrappers 有包裹的意思,因此說,這個套件自己的功能就是在分析 TCP 網路資料封包啦!那麼剛剛咱們稍微提到咱們網路的封包資料主要是以 TCP 封包爲主,這個 TCP 封包的檔頭至少記錄了來源與目主機的 IP 與 port ,所以,若藉由分析 TCP 封包,就能夠比對看我要不要讓這個資料進入到主機裏面來囉!因此啦,咱們要使用 TCP_Wrappers 來控管的,就是: 1. 來源 IP 2. port (就是服務啦)TCP_Wrappers 設定 TCP 封包是否能夠進入的設定檔在 /etc/hosts.allow 與 /etc/hosts.deny 當中。所以,基本上,若是一個服務是受到 xinetd 或 TCP_Wrappers 的控制時,那麼該服務就會受限於 hosts.allow 與 hosts.deny 的管理了!而若是你本身安裝的套件當中( 亦即便用 Tarball 安裝的方式之套件 ),除非有自行定義支援 TCP_Wrappers 的功能 ,不然就沒法使用這個玩意囉!嘿嘿!那麼這兩個檔案是幹嗎用的?剛剛不是提過哪!他主要是用來規範 TCP 封包的規則的,因此呢, 裏面記錄的固然就是:‘某些 IP 在特定服務中是否可以進入主機’!那麼要怎麼寫? 這兩個檔案的內容基本的語法是:<service(program_name)> : <IP, domain, hostname> : <action>因此咱們要先找出來那個 service_name 才行,例如以咱們剛剛的 telnet 爲例,那個 service_name 是什麼呢?其實指的就是在 xinetd.conf 設定檔中的 server 這個設定後面接的程式名稱啦!因此, telnet 在 FC4 底下的名稱爲 in.telnetd 所以,若是你不想讓 140.116.44.202 這個位址及 140.116.32.0/255.255.255.0 這個 C class 的網域進入你的主機的話,那麼能夠這樣在 /etc/hosts.deny 裏面設定: ( 關於 IP, 網域, 網段, 還有相關的網路知識,在這個基礎篇當中咱們不會談到, 詳細的資料請先自行參考伺服器架設篇的內容! )[root@linux ~]# vi /etc/hosts.denyin.telnetd : 140.116.44.202 140.116.32.0/255.255.255.0 : deny固然也能夠寫成兩行,亦便是:[root@linux ~]# vi /etc/hosts.denyin.telnetd : 140.116.44.202 : denyin.telnetd : 140.116.32.0/255.255.255.0 : deny這樣一來,對方就沒法以 telnet 進入你的主機啦!方便吧!不過,既然如此,爲何要設定成 /etc/hosts.allow 及 /etc/hosts.deny 兩個檔案呢?其實只要有一個檔案存在就夠了, 不過,爲了設定方便起見,咱們存在兩個檔案,其中須要注意的是: * 寫在 hosts.allow 當中的 IP 與網段,爲預設‘可通行’的意思,亦即最後一個欄位 allow 能夠不用寫; * 而寫在 hosts.deny 當中的 IP 與網段則預設爲 deny ,第三欄的 deny 亦可省略; * 這兩個檔案的判斷依據是: (1) 以 /etc/hosts.allow 爲優先,而 (2) 若分析到的 IP 或網段並無紀錄在 /etc/hosts.allow ,則以 /etc/hosts.deny 來判斷。 也就是說, /etc/hosts.allow 的設定優先於 /etc/hosts.deny 囉!瞭解了嗎?基本上,只要 hosts.allow 也就夠了,由於咱們能夠將 allow 與 deny 都寫在同一個檔案內, 只是這樣一來彷佛顯得有點雜亂無章,所以,一般咱們都是: 1. 容許進入的寫在 /etc/hosts.allow 當中; 2. 不準進入的則寫在 /etc/hosts.deny 當中。此外,咱們還可使用一些特殊參數在第一及第二個欄位喔!內容有: * ALL:表明所有的 program_name 或者是 IP 都接受的意思,例如 ALL: ALL: deny * LOCAL:表明來自本機的意思,例如: ALL: LOCAL: allow * UNKNOWN:表明不知道的 IP 或者是 domain 或者是服務時; * KNOWN:表明爲可解析的 IP, domain 等等資訊時; 再強調一次,那個 service_name 實際上是啓動該服務的程式,舉例來講, /etc/init.d/ssh 這個 script 裏面, 實際上啓動 ssh 服務的是 sshd 這個程式,因此,你的 service_name 天然就是 sshd 囉! 而 /etc/xinetd.d/telnet 內有個 server 的設定項目, 那個項目指到 in.telnetd 這個程式來啓動的喔!要注意的很!(請分別使用 vi 進這兩支 scripts 查閱) 好了,咱們仍是以 telnet 爲例子來講明好了,如今假設一個比較安全的流程來設定,就是: 1. 只容許 140.116.44.0/255.255.255.0 與 140.116.79.0/255.255.255.0 這兩個網域,及 140.116.141.99 這個主機能夠進入咱們的 telnet 伺服器; 2. 此外,其餘的 IP 所有都擋掉! 這樣的話,我能夠這樣設定:[root@linux ~]# vi /etc/hosts.allowin.telnetd: 140.116.44.0/255.255.255.0in.telnetd: 140.116.79.0/255.255.255.0in.telnetd: 140.116.141.99in.telnetd: LOCAL[root@linux ~]# vi /etc/hosts.denyin.telnetd: ALL 那麼有沒有更安全的設定,例如,噹噹有其餘人掃瞄個人 telnet port 時,我就將他的 IP 記住!以作爲將來的查詢與認證之用! 是有的!只是,那就得要有額外的動做參數加在第三欄了。主要的動做有: * spawn (action) 能夠利用後續接的 shell 來進行額外的工做,且具備變數功能,主要的變數內容爲: %h (hostname), %a (address), %d (daemon)等等; * twist (action) 馬上之後續的指令進行,且執行完後終止該次連線的要求 (DENY) 咱們知道 finger 能夠反向追蹤網路封包的來源,因此,我但願這樣: 1. 利用 safe_finger 去追蹤出對方主機的資訊; 2. 將該追蹤到的結果以 email 的方式寄給 root ; 3. 在對方螢幕上面顯示不可登入的訊息此時能夠利用 spwan (action1) | (action2) : twist (action3) 來進行, 也就是說,其實在 /etc/hosts.deny 的第三個欄位能夠繼續延伸下去的!整個資訊有如這樣:[root@linux ~]# vi /etc/hosts.denyin.telnetd: ALL: spawn (echo "security notice from host `/bin/hostname`" ;\ echo; /usr/sbin/safe_finger @%h ) | \ /bin/mail -s "%d-%h security" root & \ : twist ( /bin/echo -e "\n\nWARNING connection not allowed.\n\n" )在上面的例子中,第三行的 root 那個賬號,能夠寫成你的我的賬號或者其餘 e-mail ,以避免不多以 root 身份登入 Linux 主機時,容易形成不知道的狀況,另外,最後幾行,亦即 :twist 以後的那幾行爲同一行。如此一來,當未經容許的電腦嘗試登入你的主機時, 對方的螢幕上就會顯示上面的最後一行,而且將他的 IP 寄到 root ( 或者是你本身的信箱 )那裏去! 另外請注意,那個 /usr/sbin/safe_finger 是由 tcp_wrappers 套件所提供的, 因此您必需要安裝該套件才行喔! ^_^