# 9.2 TCP Wrappers
## 9.2 TCP Wrappers
在進入主題之前,我們先來玩一個簡單的防火墻機制,那就是 TCP Wrappers 這玩意兒。如同前面說的, TCP wrappers 是透過客戶端想要鏈接的程序文件名,然后分析客戶端的 IP ,看看是否需要放行。那么哪些程序支持 TCP wrappers 的功能?這個 TCP wrappers 又該如何設定?我們這里先簡單的談談吧!(這個小節僅是簡單的介紹過 TCP wrappers ,更多相關功能請參考基礎學習篇的[第十八章](http://linux.vbird.org/linux_basic/0560daemons.php#security)內容喔!)
- - - - - -
### 9.2.1 哪些服務有支持
說穿了, TCP wrappers 就是透過 /etc/hosts.allow, /etc/hosts.deny 這兩個寶貝蛋來管理的一個類似防火墻的機制, 但并非所有的軟件都可以透過這兩個檔案來控管,只有底下的軟件才能夠透過這兩個檔案來管理防火墻規則,分別是:
- 由 super daemon (xinetd) 所管理的服務;
- 有支援 libwrap.so 模塊的服務。
經由 xinetd 管理的服務還好理解,就是配置文件在 /etc/xinetd.d/ 里面的服務就是 xinetd 所管理的啊! 那么什么是有支持 libwrap.so 模塊呢?就讓我們來進行底下的例題,你就比較容易明白啰:
例題:請查出你的系統有沒有安裝 xinetd ,若沒有請安裝。安裝完畢后,請查詢 xinetd 管理的服務有哪些?答:
```
[root@www ~]# yum install xinetd
Setting up Install Process
Package 2:xinetd-2.3.14-29.el6.x86_64 already installed and latest version
Nothing to do
# 畫面中顯示,已經是最新的 xinetd !所以,已經有安裝啰!
# 接下來找出 xinetd 所管理的服務群!
[root@www ~]# chkconfig xinetd on <==要先讓 xinetd on 后才能看到底下的
[root@www ~]# chkconfig --list
....(前面省略)....
xinetd based services:
chargen-dgram: off
chargen-stream: off
....(中間省略)....
rsync: off <==下一小節的范例就用這玩意兒來解釋
tcpmux-server: off
telnet: on
```
上述結果最終輸出的部分就是 xinetd 所管理的服務群啰!上述的服務之防火墻簡易設定,都可以透過 TCP wrappers 來管理的嚕!
例題:請問, rsyslogd, sshd, xinetd, httpd (若該服務不存在,請自行安裝軟件),這四個程序有沒有支持 tcp wrappers 的抵擋功能?答:由于支持 tcp wrappers 的服務必定包含 libwrap 這一個動態函式庫,因此可以使用 ldd 來觀察該服務即可。 簡單的使用方式為:
```
[root@www ~]# ldd $(which rsyslogd sshd xinetd httpd)
# 這個方式可以將所有的動態函式庫取出來查閱,不過需要眼睛搜尋。
# 可以透過底下的方式來處理更快!
[root@www ~]# for name in rsyslogd sshd xinetd httpd; do echo $name; \
> ldd $(which $name) | grep libwrap; done
rsyslogd
sshd
libwrap.so.0 => /lib64/libwrap.so.0 (0x00007fb41d3c9000)
xinetd
libwrap.so.0 => /lib64/libwrap.so.0 (0x00007f6314821000)
httpd
```
上述的結果中,在該檔名檔下有出現 libwrap 的,代表有找到該函式庫,才有支持 tcp wrappers。 所以, sshd, xinetd 有支持,但是 rsyslogd, httpd 這兩支程序則不支持。也就是說, httpd 與 rsyslogd 不能夠使用 /etc/hosts.{allow|deny} 來進行防火墻機制的控管。
- - - - - -
### 9.2.2 /etc/hosts.{allow|deny} 的設定方式
那如何透過這兩個檔案來抵擋有問題的 IP 來源呢?這兩個檔案的語法都一樣,很簡單的:
```
<service(program_name)> : <IP, domain, hostname>
<服務 (亦即程序名稱)> : <IP 或領域 或主機名>
# 上頭的 > < 是不存在于配置文件中的喔!
```
我們知道防火墻的規則都是有順序的,那這兩個檔案與規則的順序優先是怎樣呢?基本上是這樣的:
- 先以 /etc/hosts.allow 為優先比對,該規則符合就予以放行;
- 再以 /etc/hosts.deny 比對,規則符合就予以抵擋;
- 若不在這兩個檔案內,亦即規則都不符合,最終則予以放行。
我們拿 rsync 這個 xinetd 管理的服務來進行說明好了,請參考底下的例題吧:
例題:先開放本機的 127.0.0.1 可以進行任何本機的服務,然后,讓區網 (192.168.1.0/24) 可以使用 rsync , 同時 10.0.0.100 也能夠使用 rsync ,但其他來源則不允許使用 rsync 喔。答:我們得要先知道 rsync 的服務啟動的檔名為何,因為 tcp wrappers 是透過啟動服務的檔名來管理的。 當我們觀察 rsync 的配置文件時,可以發現:
```
[root@www ~]# cat /etc/xinetd.d/rsync
service rsync
{
disable = yes
flags = IPv6
socket_type = stream
wait = no
user = root
server = /usr/bin/rsync <==檔名叫做 rsync
server_args = --daemon
log_on_failure += USERID
}
```
因此程序字段的項目要寫的是 rsync 喔!因此,我們應該要這樣設定的:
```
[root@www ~]# vim /etc/hosts.allow
ALL: 127.0.0.1 <==這就是本機全部的服務都接受!
rsync: 192.168.1.0/255.255.255.0 10.0.0.100
[root@www ~]# vim /etc/hosts.deny
rsync: ALL
```
上面的例題有幾個重點,首先, tcp wrappers 理論上不支持 192.168.1.0/24 這種透過 bit 數值來定義的網域, 只支持 netmask 的地址顯示方式。另外,如果有多個網域或者是單一來源,可以透過空格來累加。 如果想要寫成多行呢?也可以啊!多寫幾行『 kshd: IP 』的方式也可以,不必要將所有數據集中在一行啦!因為 tcp wrappers 也是一條一條規則比對嘛!
基本上,你只要理解這些數據即可!因為絕大部分的時刻,我們都會建議使用底下介紹的 Netfilter 的機制來抵擋封包。 那讓我們準備開始來玩玩 iptables 封包過濾防火墻吧!
- - - - - -
- 鳥哥的Linux私房菜:服務器架設篇 第三版
- 第一部份:架站前的進修專區
- 作者序
- 第一章、架設服務器前的準備工作
- 1.1 前言: Linux 有啥功能
- 1.2 基本架設服務器流程
- 1.3 自我評估是否已經具有架站的能力
- 1.4 本章習題
- 第二章、基礎網絡概念
- 2.1 網絡是個什么玩意兒
- 2.2 TCP/IP 的鏈結層相關協議
- 2.3 TCP/IP 的網絡層相關封包與數據
- 2.4 TCP/IP 的傳輸層相關封包與數據
- 2.5 連上 Internet 前的準備事項
- 2.6 重點回顧:
- 2.7 本章習題
- 2.8 參考數據與延伸閱讀
- 第三章、局域網絡架構簡介
- 3.1 局域網絡的聯機
- 3.2 本書使用的內部聯機網絡參數與通訊協議
- 第四章、連上 Internet
- 4.1 Linux 連上 Internet 前的注意事項
- 4.2 連上 Internet 的設定方法
- 4.3 無線網絡--以筆記本電腦為例
- 4.4 常見問題說明
- 4.5 重點回顧
- 4.6 本章習題
- 4.7 參考數據與延伸閱讀
- 第五章、 Linux 常用網絡指令
- 5.1 網絡參數設定使用的指令
- 5.2 網絡偵錯與觀察指令
- 5.3 遠程聯機指令與實時通訊軟件
- 5.4 文字接口網頁瀏覽
- 5.5 封包擷取功能
- 5.6 重點回顧
- 5.7 本章習題
- 5.8 參考數據與延伸閱讀
- 第六章、 Linux 網絡偵錯
- 6.1 無法聯機原因分析
- 6.2 處理流程
- 6.3 本章習題
- 6.4 參考數據與延伸閱讀
- 第二部分:主機的簡易資安防護措施
- 第七章、網絡安全與主機基本防護:限制端口, 網絡升級與 SELinux
- 7.1 網絡封包聯機進入主機的流程
- 7.2 網絡自動升級軟件
- 7.3 限制聯機埠口 (port)
- 7.4 SELinux 管理原則
- 7.5 被攻擊后的主機修復工作
- 7.6 重點回顧
- 7.7 課后練習
- 7.8 參考數據與延伸閱讀
- 第八章、路由觀念與路由器設定
- 8.1 路由
- 8.2 路由器架設
- 8.3 動態路由器架設:quagga (zebra + ripd)
- 8.4 特殊狀況:路由器兩邊界面是同一個 IP 網段: ARP Proxy
- 8.5 重點回顧
- 8.6 本章習題
- 8.7 參考數據與延伸閱讀
- 第九章、防火墻與 NAT 服務器
- 9.1 認識防火墻
- 9.2 TCP Wrappers
- 9.3 Linux 的封包過濾軟件:iptables
- 9.4 單機防火墻的一個實例
- 9.5 NAT 服務器的設定
- 9.6 重點回顧
- 9.7 本章習題
- 9.8 參考數據與延伸閱讀
- 第十章、申請合法的主機名
- 10.1 為何需要主機名
- 10.2 注冊一個合法的主機名
- 10.3 重點回顧
- 10.4 本章習題
- 10.5 參考數據與延伸閱讀
- 第三部分:局域網絡內常見的服務器架設
- 第十一章、遠程聯機服務器SSH / XDMCP / VNC / RDP
- 11.1 遠程聯機服務器
- 11.2 文字接口聯機服務器: SSH 服務器
- 11.3 最原始圖形接口: Xdmcp 服務的啟用
- 11.4 華麗的圖形接口: VNC 服務器
- 11.5 仿真的遠程桌面系統: XRDP 服務器
- 11.6 SSH 服務器的進階應用
- 11.7 重點回顧
- 11.8 本章習題
- 11.9 參考數據與延伸閱讀
- 第十二章、網絡參數控管者: DHCP 服務器
- 12.1 DHCP 運作的原理
- 12.2 DHCP 服務器端的設定
- 12.3 DHCP 客戶端的設定
- 12.4 DHCP 服務器端進階觀察與使用
- 12.5 重點回顧
- 12.6 本章習題
- 12.7 參考數據與延伸閱讀
- 第十三章、文件服務器之一:NFS 服務器
- 13.1 NFS 的由來與其功能
- 13.2 NFS Server 端的設定
- 13.3 NFS 客戶端的設定
- 13.4 案例演練
- 13.5 重點回顧
- 13.6 本章習題
- 13.7 參考數據與延伸閱讀
- 第十四章、賬號控管: NIS 服務器
- 14.1 NIS 的由來與功能
- 14.2 NIS Server 端的設定
- 14.3 NIS Client 端的設定
- 14.4 NIS 搭配 NFS 的設定在叢集計算機上的應用
- 14.5 重點回顧
- 14.6 本章習題
- 14.7 參考數據與延伸閱讀
- 第十五章、時間服務器: NTP 服務器
- 15.1 關于時區與網絡校時的通訊協議
- 15.2 NTP 服務器的安裝與設定
- 15.3 客戶端的時間更新方式
- 15.4 重點回顧
- 15.5 本章習題
- 15.6 參考數據與延伸閱讀
- 第十六章、文件服務器之二: SAMBA 服務器
- 16.1 什么是 SAMBA
- 16.2 SAMBA 服務器的基礎設定
- 16.3 Samba 客戶端軟件功能
- 16.4 以 PDC 服務器提供賬號管理
- 16.5 服務器簡單維護與管理
- 16.6 重點回顧
- 16.7 本章習題
- 16.8 參考數據與延伸閱讀
- 第十七章、區網控制者: Proxy 服務器
- 17.1 什么是代理服務器 (Proxy)
- 17.2 Proxy 服務器的基礎設定
- 17.3 客戶端的使用與測試
- 17.4 服務器的其他應用設定
- 17.5 重點回顧
- 17.6 本章習題
- 17.7 參考數據與延伸閱讀
- 第十八章、網絡驅動器裝置: iSCSI 服務器
- 18.1 網絡文件系統還是網絡驅動器
- 18.2 iSCSI target 的設定
- 18.3 iSCSI initiator 的設定
- 18.4 重點回顧
- 18.5 本章習題
- 18.6 參考數據與延伸閱讀
- 第四部分:常見因特網服務器架設
- 第十九章、主機名控制者: DNS 服務器
- 19.1 什么是 DNS
- 19.2 Client 端的設定
- 19.3 DNS 服務器的軟件、種類與 cache only DNS 服務器設定
- 19.4 DNS 服務器的詳細設定
- 19.5 協同工作的 DNS: Slave DNS 及子域授權設定
- 19.6 DNS 服務器的進階設定
- 19.7 重點回顧
- 19.8 本章習題
- 19.9 參考數據與延伸閱讀
- 第二十章、WWW 伺服器
- 20.1 WWW 的簡史、資源以及伺服器軟體
- 20.2 WWW (LAMP) 伺服器基本設定
- 20.3 Apache 伺服器的進階設定
- 20.4 登錄檔分析以及 PHP 強化模組
- 20.5 建立連線加密網站 (https) 及防砍站腳本
- 20.6 重點回顧
- 20.7 本章習題
- 20.8 參考資料與延伸閱讀
- 第二十一章、文件服務器之三: FTP 服務器
- 21.1 FTP 的數據鏈路原理
- 21.2 vsftpd 服務器基礎設定
- 21.3 客戶端的圖形接口 FTP 聯機軟件
- 21.4 讓 vsftpd 增加 SSL 的加密功能
- 21.5 重點回顧
- 21.6 本章習題
- 21.7 參考數據與延伸閱讀
- 第二十二章、郵件服務器: Postfix
- 22.1 郵件服務器的功能與運作原理
- 22.2 MTA 服務器: Postfix 基礎設定
- 22.3 MRA 服務器: dovecot 設定
- 22.4 MUA 軟件:客戶端的收發信軟件
- 22.5 郵件服務器的進階設定
- 22.6 重點回顧
- 22.7 本章習題
- 22.8 參考數據與延伸閱讀