數據包經過本地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登陸,配置生效。
