說明:我建議學習防火牆只單一學習一種就夠了,這種方式雖然簡單和快速,但也有些不太靈活,因此若是要深刻防火牆建議轉iptables html
1、背景簡介java
在Linux上多用iptables來限制ssh和telnet,編緝hosts.allow和hosts.deny感受比較麻煩比較少用。linux
2、hosts.allow和hosts.deny支持哪些服務web
2.一、hosts.allow和hosts.deny支持哪些服務安全
hosts.allow和hosts.deny規則的執行者爲TCP wrappers,對應守護進程爲tcpd;而tcpd執行依賴於程序使用了libwrap庫。網絡
也就是說:hosts.allow和hosts.deny支持且只支持使用了libwrap庫的服務。 app
通常這個是針對守護進程Daemon。dom
2.二、查看程序是否使用libwarpssh
方法1、查看hosts_access字段串tcp
查看應用程序是否支持wrapper,可使用strings程序而後grep字符串hosts_access:
strings /usr/sbin/sshd | grep hosts_access
方法2、使用ldd
ldd /usr/sbin/sshd | grep libwrap
查測發現使用xinetd的均可以、sshd能夠、vsftpd能夠,httpd不能夠,weblogic等java程序就不要想了。
3、語法以及選項規則
Wrappers 首先在 hosts.allow 文件中查找規則匹配。若是找到匹配,那麼 tcpd 會根據規則停下來,批准或拒絕訪問。若是在 hosts.allow 文件中未找到匹配,那麼 tcpd 會讀取 hosts.deny 文件直到找到匹配。若是找到匹配,就拒絕訪問,不然批准訪問。
我在前面提到了兩個文件 hosts.allow 和 deny,但根據規則的靈活性,能夠只用一個文件,一般是 hosts.allow 來包含 wrappers 全部規則。
Wrappers 會查詢 hosts.allow 和 hosts.deny 中的規則來肯定訪問。規則的基本格式是:
daemon, daemon, ...: client, client, ...: option
要關閉 wrappers,只需將 hosts.allow 和 hosts.deny 文件改爲其餘文件名便可。若是不存在容許或拒絕訪問文件,wrappers 將不會使用訪問控制,從而有效關閉 wrappers 。或者將主機文件清空或清零,這會有一樣的效果。
其中:
daemon 要監控的服務,如 telnetd、ftpd、sshd
client 主機名、IP 地址/IP 範圍,或域名
選項有:
allow 容許對客戶端的訪問
deny 拒絕對客戶端的訪問
except 會匹配第一個列表中全部項,除非匹配第二個列表。例如,容許 domainA 中全部項,除了 hostX.domainA 和 hostY.domanA。
當一行有多個守護進程或客戶端時,用逗號分隔開來。能夠用 ALL 關鍵字來表示全部守護進程或全部客戶端。
LOCAL 關鍵字表示匹配全部不包含點號(「.」)的主機;這表示全部與域不相關的主機。
若是規則容許的話,在每一個規則末尾都加上容許或拒絕選項,這是一個好的作法、好的習慣(由於這能夠清晰地描繪訪問規則,尤爲是在 hosts.allow 中有多個容許或拒絕規則時)。
還有一些其餘的選項,我將在稍後演示。如今,咱們將訪問控制結合在一塊兒。
一個好的起點是,僅僅容許您想要訪問主機的客戶端使用容許的守護進程,拒絕其餘全部客戶端。
因此,hosts.deny 可使用如下規則拒絕全部客戶端訪問全部守護進程:
ALL:ALL
本節的其餘示例都是隻與 hosts.allow 文件有關。爲了能讓全部守護進程從本地主機(即,與域名不相關的主機)訪問,可使用:
ALL:LOCAL : allow
就我我的而言,我不喜歡使用在任何主機上匹配的 LOCAL 模式,由於網絡中全部主機應該屬於您的或是某個域。若是原來不是,那麼應該是的。儘管如此,在一些小型網絡的狀況下,卻不是這樣,LOCAL 容許這些主機訪問。
咱們假設僅僅容許屬於 mydomain.com 域的主機使用 telnet 或 ssh。如下的 hosts.allow 條目能完成此任務:
telnetd,sshd:.mydomain.com :allow
請注意本例中 mydomain.com 以前的點號(「.」)。這是個通配符,表示全部主機以 mydomain.com 結尾。咱們還在規則結尾指定這是一條容許規則。儘管這不是嚴格限制,但如前所述,這樣作是一種好的作法。
如今進一步假設咱們容許使用如下 IP 地址遠程登陸 ssh 和 telnet:192.168.4.10 和全部以 192.168.6 開頭的 IP 地址。請再次注意,在部分 IP 地址後使用點號;這至關於 192.168.6.*.,或者更精確一點,以 192.168.6 開頭的全部 IP 地址。另外一種看待 192.168.6. 範圍內 IP 地址的方法是等於 192.168.6/24 或全部 192.168.6.1 與 192.168.6.254 之間的 IP 地址。
另外,咱們還想容許使用 telnet 和 ssh 訪問如下域:mydomain.com 和 mydomain2.com 域。如下命令能完成此任務:
telnetd,sshd:.mydomain.com, .mydomain2.com :allow telnetd,sshd:192.168.4.10 , 192.168.6.: allow
如今,咱們假設容許從 mydomain.com 域中的全部主機上進行 ftp 訪問,除了 mydomain.com 中的兩個主機:uktrip1 和 uktrip2 。經過使用容許規則,咱們能夠利用 except 選項提供兩個列表,讓 「except」 左側的主機容許訪問,「except」 右側列表中包含的主機拒絕訪問。
telnetd,sshd:.mydomain.com :allow telnetd,sshd:192.168.4.10 , 192.168.6.: allow ftpd:.mydomain.com except uktrip1.mydomain.com, uktrip2.mydomain.com : allow
咱們如今看看拒絕規則。要拒絕 192.168.8. 和 192.168.9. 的 telnet 訪問,但容許 192.168.6. 的 telnet 訪問,我可使用:
telnetd :192.168.8., 192.168.9.: deny telnetd :192.168.6.: allow
前一個示例也能夠用 except 選項來改寫:
telnetd:192.168.6. except 192.168.8., 192.168.9.: allow
Wrappers 會將消息記錄到 /var/adm/messages 文件中。消息文件中一個典型的名爲 tardis 的被拒絕 telnent 鏈接會像這樣:
Oct 23 15:50:55 rs6000 auth|security|warning telnetd[270546]: refused connect from tardis
一個典型的名爲 tardis 的失敗的 ssh 鏈接像這樣:
Oct 23 15:53:36 rs6000 auth|security:info sshd[262252]: refused connect from tardis
若是打開 PARANOID,那麼 wrappers 會通知您全部沒法解析的主機與 IP 不匹配狀況:
error ftpd[2605110]: warning:/etc/hosts.allow, line 2: host name/address mismatch: 192.168.7.12 != uktrn004.mydomain.com
有時候能看到哪些主機 DNS 條目不正確也是好事,這樣能夠被負責 DNS 維護的人員糾正過來。在公司內部網絡尤爲如此。與拒毫不匹配主機/IP 不一樣的是,只容許域用戶進入(假設這是在安全的公司網絡中)。在如下示例中,全部屬於 mydomain.com 域的用戶都容許訪問,請注意對全部守護進程都使用了 ALL:
ALL:PARANOID, mydomain:allow
4、實例
1.限制全部的ssh
除非從218.64.87.0——127上來。
hosts.deny:
sshd:ALL
hosts.allow:
sshd:218.64.87.0/255.255.255.128
2.封掉218.64.87.0——127的telnet
hosts.deny
sshd:218.64.87.0/255.255.255.128
3.限制全部人的TCP鏈接,除非從218.64.87.0——127訪問
hosts.deny
ALL:ALL
hosts.allow
ALL:218.64.87.0/255.255.255.128
4.限制218.64.87.0——127對全部服務的訪問
hosts.deny
ALL:218.64.87.0/255.255.255.128
參考:
http://www.javashuo.com/article/p-dikecnky-dm.html(以上內容部分轉自此篇文章)
https://www.ibm.com/developerworks/cn/aix/library/au-tcpwrapper/(以上內容部分轉自此篇文章)
https://www.lifewire.com/hostsallow-linux-command-4094314
https://www.cnblogs.com/jydeng/archive/2013/04/03/4418478.html
http://tubaluer.iteye.com/blog/1349785
http://bbs.51cto.com/thread-923533-1.html
http://blog.csdn.net/atec2000/article/details/12774641
http://blog.csdn.net/yangjiehuan/article/details/9253855
http://blog.51cto.com/jschu/1694549
http://www.360doc.com/content/15/1218/08/15947598_521216288.shtml