1. 程式人生 > >Linux 通過host.allow限制特定IP來訪

Linux 通過host.allow限制特定IP來訪

host.allow

Linux 通過host.allow限制特定IP來訪

SSH

本文轉載:原文地址

  看起來通常的做法是利用hosts的拒絕設置,而它的設置是針對某一個具體的進程,具體的服務,在這裏就是sshd了
看起來設置一個網段使用的是

    x.x.x.0/24    後面加個24真是有趣,是保持所有的可能性嗎
上面的方法看起來是子網匹配的方式
如果更簡單一些看起來可以直接保留前面一部分去
    131.155. 可以匹配後面是任何玩意的玩意,比如131.155.1.1
除了作為sshd限制,它看起來能限制一切玩意呢,這個就像是更特殊一點的hosts,只是hosts只是解析域名而已

經驗

生效是立即發生的,但是對已經打開的shell無效,所以一邊留著shell設置,一邊再開shell
它的語法很有趣,最後一部分看起來可以要也可以不要

192.168.0.0/255.255.255.0:deny

在每一條裏,[,]是分割多個ip,而[:]是分割它的處理
噢見鬼的[255.255.255.0]看起來指的是局域網
看起來all大小小寫都可以
它的工作是實時的,修改後就生效了

困擾

allow和deny的優先是怎樣的呢

一個有效的IP段工作

開啟設置

  1. [[email protected]-236 ~]# cat /etc/hosts.allow

  2. #

  3. # hosts.allow This file describes the names of the hosts which are

  4. # allowed to use the local INET services, as decided

  5. # by the ‘/usr/sbin/tcpd‘ server.

  6. #


  7. # for the shell

  8. sshd:11.8.,12.1.,18.3

    .:allow

有趣

看起來.0這個ip是不存在的,它看起來是虛擬的

    192.168.1.0

首次嘗試
限制sshd
hosts.deny

直接進入編輯

    vim /etc/hosts.deny

加入這個玩意,拒絕一切

  1. # no sshd

  2. sshd : ALL


  3. hosts.allow

  4. 進入編輯


  5. vim /etc/hosts.allow

  6. 試試一個0.0的段落-遺憾無法登陸!被屏蔽

匹配設置

  1. # for the shell - 它什麽也沒做到

  2. sshd : 101.11.0.0/24


  3. 如果全部IP匹配呢?它可以登陸,這說明了它工作了


  4. # for the shell - 它可以準確的允許這個ip,24起到作用了

  5. sshd : 101.11.10.1/24


  6. # for the shell - 它可以允許這個ip段!

  7. sshd : 101.11.


  8. 別的情況


  9. 這裏註意有個詭異的情況!-如果省略最後的部分的話,必須完全避開空格!空格也會作為正則匹配的一部分

  10. 在這個基礎上加個24的玩意呢?-它不工作


  11. # for the shell - 它不能允許這個ip段,失敗

  12. sshd : 101.11./24


  13. 後面加個標簽什麽的呢?-它也工作

  14. # for the shell - 後面的標簽看起來不礙事

  15. sshd : 101.11.: allow


  16. 如果是任意的標簽呢?-不,它不幹了

  17. # for the shell - 它現在什麽也不幹了,不認ip了- 可能有正則問題

  18. sshd : 101.11. : hello


  19. 如果再補回中間的allow呢?-不也不幹了

  20. # for the shell - 依舊的啥也不幹- 可能有正則問題

  21. sshd : 101.11.:allow : hello


  22. 加上逗號,多個ip段呢?這次第二個沒工作,可能少了.的原因

  23. # for the shell - 逗號,這次工只工作了第一個,可能少了第二個的點-值得再嘗試

  24. sshd : 101.11.,103.22:allow : hello


  25. 帶上逗號,然後每個都有最後的點,它工作了!

  26. # for the shell - 逗號,全部工作了!必須最後帶點,而且看起來空格也不要依賴(最好了)

  27. sshd:101.11.,103.22.:allow

想法

linux下的/etc/hosts.allow和/etc/hosts.deny文件
  /etc/hosts.allow和/etc/hosts.deny這兩個文件是tcpd服務器的配置文件,tcpd服務器可以控制外部IP對本機服務的訪問。這兩個配置文件的格式如下:

服務進程名:主機列表:當規則匹配時可選的命令操作server_name:hosts-list[:command]

/etc/hosts.allow控制可以訪問本機的IP地址,/etc/hosts.deny控制禁止訪問本機的IP。如果兩個文件的配置有沖突,以/etc/hosts.deny為準。下面是一個/etc/hosts.allow的示例:

  1. ALL:127.0.0.1 #允許本機訪問本機所有服務進程smbd:192.168.0.0/255.255.255.0


  2. #允許192.168.0.網段的IP訪問smbd服務

  3. ALL關鍵字匹配所有情況,EXCEPT匹配除了某些項之外的情況,PARANOID匹配你想控制的IP地址和它的域名不匹配時(域名偽裝)的情況。

今天用來禁止一些惡意的ip地址登陸到服務器。因為遠程登陸需要sshd進程,所以:
修改步驟如下:

1:修改“/etc/hosts.allow”文件,在最下面添加一行:sshd:192.168.100.0/255.255.255.0        #允許局域網內所有機器訪問服務器上的sshd進程sshd:60.28.160.244                                  #允許外網的60.28.160.244訪問這個服務器上的sshd進程2:修改“/etc/hosts.deny”文件,在最後一行添加:sshd:all                                                    #禁止所有

註:
1):修改前,請先修改“/etc/hosts.allow”文件,並且修改完畢之後切勿立即退出,應該做登陸測試
2):文件修改後,立即生效,但是對於已經運行的程序則不生效。

鳥哥的 Linux 私房菜 -- 移除不要的服務 沿途見識

  1. 察看是否具有 tcp_wrappers 套件:


  2. 要使連線電腦的設定啟動,以使用 /etc/hosts.allow /etc/hosts.deny 檔案的話,需要這一套軟體『tcp_wrappers』,要察看你的 Linux 主機內是否有這一套軟體的話,請使用:


  3. rpm -q tcp_wrappers 或者 rpm -qa | grep tcp


  4. 如果有這套軟體的話,自然就會顯示出來,如果沒有的話,請放入你的 Linux 光碟片,將 rpm 檔案裝上去吧!



  5. 設定允許登入的電腦(/etc/hosts.allow):


  6. 其實很簡單,只要修改 /etc/hosts.allow(如果沒有此檔,請自行以 vi 編輯)這這檔案即可,例如,我家裡的電腦中,我的內部網域(區域網路)是 192.168.1.0/255.255.255.0,這樣的網域代表電腦 IP 在於 192.168.1.1 - 192.168.1.255 之間!所以,我就將 /etc/hosts.allow 這個檔案的內容設定成為如此:


  7. in.telnetd: 192.168.1.0/255.255.255.0, .ncku.edu.tw : Allow


  8. 加入 .ncku.edu.tw 的原因是因為我人在成大,所以加入此行的話,可以使我在成大連上我家裡的 Linux 主機。



  9. 設定不許登入的電腦(/etc/hosts.deny):


  10. 由於正常的情況下, Linux 會先判斷 hosts.allow 這個檔案,這個檔案中的電腦如果設定為可連線的話,則 hosts.deny 就不會被使用,因此,設定好了 hosts.allow 之後,將 /etc/hosts.deny 設定為『所有電腦都不許登入』的情況,如下所示:


  11. in.telnetd: ALL : Deny


  12. 這樣一來,基本的防護措施就有了(不用重新開機就自動執行了!)。

  13. hosts.allow - Linux Command - Unix Command 沿途見識[3]


  14. PATTERNS


  15. The access control language implements the following patterns:


  16. A string that begins with a `.‘ character. A host name is matched if the last components of its name match the specified pattern. For example, the pattern `.tue.nl‘ matches the host name `wzv.win.tue.nl‘.

  17. A string that ends with a `.‘ character. A host address is matched if its first numeric fields match the given string. For example, the pattern `131.155.‘ matches the address of (almost) every host on the Eindhoven University network (131.155.x.x).

  18. A string that begins with an `@‘ character is treated as an NIS (formerly YP) netgroup name. A host name is matched if it is a host member of the specified netgroup. Netgroup matches are not supported for daemon process names or for client user names.

  19. An expression of the form `n.n.n.n/m.m.m.m‘ is interpreted as a `net/mask‘ pair. An IPv4 host address is matched if `net‘ is equal to the bitwise AND of the address and the `mask‘. For example, the net/mask pattern `131.155.72.0/255.255.254.0‘ matches every address in the range `131.155.72.0‘ through `131.155.73.255‘.

SSH限制ip登陸

/etc/hosts.allow輸入
(其中192.168.10.88是你要允許登陸ssh的ip,或者是一個網段192.168.10.0/24)
sshd:192.168.10.88:allow

/etc/hosts.deny輸入(表示除了上面允許的,其他的ip 都拒絕登陸ssh)
sshd:ALL
本文將講述一些可以加強Unix,Linx服務器SSH訪問的安全性的一些措施。

我個人極力非常推薦的措施是:

1.限制性SSH訪問,將sshd綁定到一個ip地址,和允許所有ip地址是完全不同的安全。
2.將sshd默認端口22改為其它端口。

步驟如下:
前提:

SSH 客戶端 - 我推薦使用 putty (搜索google,你會很快找到它)
SSH 服務已安裝

第一步: 以root身份SSH登錄到服務器。
第二步:在命令提示符下輸入:pico -w /etc/ssh/sshd_config
第三步:向下翻頁,在這個文件中找到像這樣的區域:

Port 22Protocol 2, 1ListenAddress 0.0.0.0ListenAddress ::

第四步:取消註釋符號#,並修改

端口 #Port 22

像這樣修改它
Port 5678
(選擇你未被使用的4到5位數字組成的端口(49151是最高端口數))

協議 #Protocol 2, 1
改為這樣:
Protocol 2

監聽地址 #ListenAddress 0.0.0.0
改為這樣:
ListenAddress 125.121.123.15(這裏的地址改為你自己訪問服務器常用的客戶端ip地址)
第五步 如果你想禁用直接用root登錄,向下翻知道你看見
PermitRootLogin yes

去掉前面的註釋符號#,修改為
PermitRootLogin no

第六步 在命令提示符下輸入: /etc/init.d/sshd restart
第七步 退出SSH,以後再登錄就必須使用新的端口號(如:49151),並且服務器限制只允許從一個指定的
IP地址(如:125.121.123.15)SSH登錄了。
註意事項:
如果修改後出現不能登錄或者其他問題,你只需要為服務器接上顯示器 或者 Telnet 到你的服務器,修改設置,然後再重新SSH登錄。Telnet 是一個非常不安全的協議,所以在你使用它之後最好是修改一下你的root密碼。
(the end)

或者
linux限制IP訪問ssh

  1. 在/etc/hosts.allow輸入

  2. (其中192.168.10.88是你要允許登陸sship,或者是一個網段192.168.10.0/24)

  3. sshd:192.168.10.88:allow


  4. 在/etc/hosts.deny輸入(表示除了上面允許的,其他的ip 都拒絕登陸ssh)

  5. sshd:ALL


  6. 更改端口

  7. vi /etc/ssh/sshd_config

  8. port 3333


  9. 最後一行加上ip

  10. allowusers [email protected] ------------------允許某個ip用什麽帳戶登陸


本文出自 “一首老歌” 博客,謝絕轉載!

Linux 通過host.allow限制特定IP來訪