在Linux下使用TCP封裝器來加強網路服務安全

roc_guo發表於2023-02-15

在Linux下使用TCP封裝器來加強網路服務安全在Linux下使用TCP封裝器來加強網路服務安全

就這一點而言,你可以把這個工具看作是一個基於主機的訪問控制列表,而且並不能作為你的系統的終極安全措施。透過使用一個防火牆和 TCP 封裝器,而不是隻偏愛其中的一個,你將會確保你的服務不會被出現單點故障。

正確理解 hosts.allow 和 hosts.deny 檔案

當一個網路請求到達你的主機的時候,TCP 封裝器會使用 hosts.allow 和 hosts.deny (按照這樣的順序)來決定客戶端是否應該被允許使用一個提供的服務。.
在預設情況下,這些檔案內容是空的,或者被註釋掉,或者根本不存在。所以,任何請求都會被允許透過 TCP 過濾器而且你的系統被置於依靠防火牆來提供所有的保護。因為這並不是我們想要的。由於在一開始我們就介紹過的原因,清確保下面兩個檔案都存在:

# ls -l /etc/hosts.allow /etc/hosts.deny

兩個檔案的編寫語法規則是一樣的:

<services> : <clients> [: <option1> : <option2> : ...]

在檔案中,
1. services 指當前規則對應的服務,是一個逗號分割的列表。
2. clients 指被規則影響的主機名或者 IP 地址,逗號分割的。下面的萬用字元也可以接受:

1).ALL 表示所有事物,應用於clients和services。

2).LOCAL 表示匹配在正式域名中沒有完全限定主機名(FQDN)的機器,例如 localhost。

3).KNOWN 表示主機名,主機地址,或者使用者是已知的(即可以透過 DNS 或其它服務解析到)。

4).UNKNOWN 和 KNOWN 相反。

5).PARANOID 如果進行反向 DNS 查詢彼此返回了不同的地址,那麼連線就會被斷開(首先根據 IP 去解析主機名,然後根據主機名去獲得 IP 地址)。

3. 最後,一個冒號分割的動作列表表示了當一個規則被觸發的時候會採取什麼操作。

你應該記住 /etc/hosts.allow 檔案中允許一個服務接入的規則要優先於 /etc/hosts.deny 中的規則。另外還有,如果兩個規則應用於同一個服務,只有第一個規則會被納入考慮。不幸的是,不是所有的網路服務都支援 TCP 過濾器,為了檢視一個給定的服務是否支援他們,可以執行以下 :

# ldd /path/to/binary | grep libwrap

如果以上 執行以後得到了以下結果,那麼它就可以支援 TCP 過濾器,sshd 和 vsftpd 作為例子,輸出如下所示。
在Linux下使用TCP封裝器來加強網路服務安全在Linux下使用TCP封裝器來加強網路服務安全

如何使用 TCP 過濾器來限制服務的許可權

當你編輯 /etc/hosts.allow 和 /etc/hosts.deny 的時候,確保你在最後一個非空行後面透過Enter鍵來新增一個新的行。
為了使得 SSH 和 FTP 服務只允許 localhost 和 192.168.0.102 並且拒絕所有其他使用者,在 /etc/hosts.deny 新增如下內容:

sshd,vsftpd : ALL 
ALL : ALL

而且在 /etc/hosts.allow 檔案中新增如下內容:

sshd,vsftpd : 192.168.0.102,LOCAL

這些更改會立刻生效並且不需要重新啟動。
在下圖中你會看到,在最後一行中刪掉 LOCAL 後,FTP 伺服器會對於 localhost 不可用。在我們新增了萬用字元以後,服務又變得可用了。
在Linux下使用TCP封裝器來加強網路服務安全在Linux下使用TCP封裝器來加強網路服務安全
為了允許所有服務對於主機名中含有 example.com 都可用,在 hosts.allow 中新增如下一行:

ALL : .example.com

而為了禁止 10.0.1.0/24 的機器訪問 vsftpd 服務,在 hosts.deny 檔案中新增如下一行:

vsftpd : 10.0.1.

在最後的兩個例子中,注意到客戶端列表每行開頭和結尾的點。這是用來表示 “所有名字或者 IP 中含有那個字串的主機或客戶端”


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69901823/viewspace-2935354/,如需轉載,請註明出處,否則將追究法律責任。

相關文章