1. 程式人生 > 其它 >hosts.allow、hosts.deny配置不生效的解決方法

hosts.allow、hosts.deny配置不生效的解決方法

資料包經過本地iptables防火牆後的許可權分佈圖

資料包通過iptables規則檢查之後,系統還會判斷這個資料包所使用的的應用程式是否呼叫到Libwrap.So連結庫檔案,如果使用Libwrap.so連結庫檔案的話會走/etc/hosts.allow和hosts.deny檔案,可以在這兩個檔案再次做一次管控,如果應用程式不呼叫Libwrap.so連結庫那麼資料包就直接到達本地應用程式了。

說明:

1.一個IP請求連入,linux的檢查策略是先看/etc/hosts.allow中是否允許,如果允許直接放行;如果沒有,則再看/etc/hosts.deny中是否禁止,如果禁止那麼就禁止連入。

2.實驗發現對/etc/hosts.allow和/etc/hosts.deny的配置不用重啟就立即生效,但不管重啟不重啟當前已有會話都不會受影響;也就是說對之前已經連入的,即便IP已配置為禁止登入會話仍不會強制斷開。不過不知是否所有linux都一樣,由此第四步標為可選。

3.網上發現有些教程寫成不是sshd而是in.sshd不是in.telnetd而是telnetd的,個人覺得應該是獨立啟的不用加in.託管於xinetd的需要加in.

通過配置hosts.allow、hosts.deny,控制SSH限制固定IP登陸

按照以往的方法,分別在hosts.allow、hosts.deny加入以下配置

# more /etc/hosts.allow

sshd:192.168.x.x

# more /etc/hosts.deny

sshd:all

儲存後測試,發現配置無效,其他IP還是可以登陸成功。

解決方法如下:

hosts.allow和hosts.deny屬於tcp_Wrappers防火牆的配置檔案,而用tcp_Wrappers防火牆控制某一服務訪問策略的前提是,該服務支援tcp_Wrappers防火牆,即該服務應用了libwrapped庫檔案。

檢視某服務(如ssh)是否應用了libwrapped庫檔案的方法是:

# ldd /usr/sbin/sshd |grep libwrap.so.0

沒有顯示,表示此伺服器上安裝的SSH沒有應用libwrapped庫檔案,也就不能用tcp_Wrappers防火牆控制訪問策略。(一般情況下伺服器預設安裝的SSH都是支援libwrapped庫檔案,這臺伺服器不清楚為什麼不支援)

最終解決方法是重新安裝SSH。

# yum -y remove openssh

# yum -y install openssh

# yum -y install openssh-server

安裝完成後再次檢視是否應用了libwrapped庫檔案,顯示支援。

# ldd /usr/sbin/sshd |grep libwrap.so.0

libwrap.so.0 => /lib64/libwrap.so.0 (0x00007f3fb7f09000)

再測試SSH登陸,配置生效。