利用tcp_wrapper實現SSH登陸的IP訪問控制

tcp_wrapper 是一個工做在傳輸層、對於進出本機訪問某特定服務的鏈接基於規則進行檢查的一個訪問控制工具,tcp wrapper只能對基於tcp協議的服務做訪問控制,但並非全部基於tcp協議的服務都能實現用tcp wraper做訪問控制
1、判斷某服務是否可以由tcp_wrapper進行訪問控制的方法:
1)動態編譯:使用命令ldd查詢某個服務是否受TCP wrapper控制
ldd $(which COMMAND) | grep libwrap
ldd `which COMMAND` | grep libwrap
例如: ldd `which sshd` | grep libwrap
2)靜態編譯方式可以使用如下命令查詢:以portmap爲例
strings `which portmap` | grep hosts
包含hosts_access這類文件說明支持tcp_wrapper


2、tcp wrapper實現訪問控制主要依靠兩個文件,一個是/etc.hosts.allow文件,另外一個是/etc/hosts.deny文件,訪問控制的流程大體以下
首先檢查hosts.allow文件中是否有匹配的規則。若是有匹配的規則,則容許訪問,若是沒有匹配的規則,則檢查hosts.deny文件中是否有匹配的規則,若是有匹配的規則,則拒絕訪問,若是沒有匹配的規則,則視爲默認規則,默認規則則爲容許,因此容許訪問。


3、/etc/hosts.allow,/etc/hosts.deny文件配置文件語法:
daemon_list:client_list  [:options]
daemon_list:
1)      單個應用程序的文件名稱,而非服務名;
2)      以逗號分隔的應用程序文件名列表;
例如:sshd,vsftpd
3)      ALL:全部接受tcp_wrapper控制的程序;
Client_list:
    Ip地址;
    主機名;
    網絡地址:必須使用完成格式的掩碼,不能使用前綴格式掩碼;
    簡短格式網絡地址:例如172.16.  表示172.16.0.0/255.255.0.0
    ALL:全部主機;
    KNOWN:能被解析的主機名
    UNKNOWN:沒法解析的主機名
    PARANOID:主機名和ip地址的各自的正反解析結果不匹配
    EXCEPT:除了
options
    deny:拒絕,主要用於hosts.allow文件
    allow:容許,主要用於hosts.deny文件;
    spawn:啓動指定的應用程序


4、下面介紹利用tcp_wrapper實現SSH登陸的IP訪問控制
1)通常CentOS Linux系統發行版默認已經安裝了tcp_wrapper,若沒有安裝,可以使用yum等方式進行安裝
2)服務器IP爲192.168.31.160,要拒絕192.168.31.51 ssh登陸,其它主機所有容許,並記錄日誌
能夠只用編輯/etc/hosts.deny文件,加入以下一行
sshd:192.168.31.51:spawn echo `date` login attempt from %c to %s ,the host is %h .PID is %p >> /var/log/tcpwrapper.log
%c: Client  information:  user@host,  user@address,  a  host name, or just an address, depending on how much information is available.
%s: Server  information:  daemon@host, daemon@address, or just a daemon name, depending on how much information is available.
%h: client hostname
%p: server PID
3)接下來測試效果,PC 192.168.31.51 進行SSH登陸時會被拒絕掉
4)查看/var/log/secure以及/var/log/tcpwrapper.log日誌,拒絕192.168.31.51 SSH登陸 


本文分享自微信公衆號 - WalkingCloud(WalkingCloud2018)。
若有侵權,請聯繫 support@oschina.cn 刪除。
本文參與「OSC源創計劃」,歡迎正在閱讀的你也加入,一塊兒分享。web

相關文章
相關標籤/搜索