作者 主題: [分享]使用 knockd 來防止別人狂試 ssh 密碼  (閱讀 18031 次)

0 會員 與 1 訪客 正在閱讀本文。

phantom

  • SA 苦力組
  • 俺是博士!
  • *****
  • 文章數: 2185
    • 檢視個人資料
先前為了想檔暴力試 ssh 的狀況,在 SA 上找到了一些資料參考。
1. http://phorum.study-area.org/viewtopic.php?t=33194
2. http://phorum.study-area.org/viewtopic.php?t=30083&highlight=

兩個方式都不錯,我稍微修改了一下,算是把兩種方式做一點小結合。不過對我來說,會 ssh 到我這台電腦的人不多,就小貓兩三隻,所以,以上兩種方式是 ssh 一直開著,等到發現有人在試密碼時再將他擋掉。

可是我懶,當 IP 抓下來後,我還是得手動加到 bad IP list 裡,這樣子我每次執行 iptables 的 script 時,那些 banned IPs 才會一直被 ban。
另外一個原因是,我的電腦老舊,這 banned IP list 越來越長,越來越長,執行一個 iptables 的 scripy 竟要 20~30 秒。想想這樣下去也不是辦法。

所以換個角度來想,換個方式來作。

ssh port 一直都保持關閉,這樣就不用擔心會被狂試密碼。等到我要連進來的時候把我的 IP 加到允許連入 ssh 就好了。

有幾個現成的套件可以滿足我的需求:
1. knockd
2. portknocking

當然還有其他的,我就不詳列了。

我選擇的是 knockd。
為啥呢?倒不是我深入去比較覺得它比較好,而是... 我懶... knockd 有現成的套件可以安裝,也符合我的需要如此而已。

要做的第一件事當然是安裝套件。
還是一句老話,親愛的 Debian 用戶,請執行:

   
代碼: [選擇]
apt-get install knockd


至於不是用 Debian 的人,knockd 的官方網站在:
http://www.zeroflux.org/cgi-bin/cvstrac.cgi/knock/wiki

請自行下載來安裝囉!


安裝好後自然是要設定囉!

第一步先修改 /etc/default/knockd

代碼: [選擇]
   # control if we start knockd at init or not
    # 1 = start
    # anything else = don't start
    START_KNOCKD=1

    # command line options
    KNOCKD_OPTS="-i eth0"


我修改的部份:
START_KNOCKD=1 就是讓 knockd 在 init 時啟動。
KNOCKD_OPTION 的部份就是啟動 knockd 時的參數。我只列了他要監聽的介面。其他的部份請詳閱 man page。

第二步就是修改 /etc/knockd.conf

代碼: [選擇]
   [options]
            logfile = /var/log/knockd.log
    [openSSH]
            sequence    = port1,port2,...portx
            seq_timeout = 30
            tcpflags    = syn
            start_command = /sbin/iptables -I INPUT -s %IP% -p tcp --dport 22 -j ACCEPT
    [closeSSH]
            sequence    = portA,portB,...portX
            seq_timeout = 5
            command     = /etc/init.d/firewall
            tcpflags    = syn


[options] 這裡的設定就是:
指定 logfile 的檔案。

[openSSH] 的部份就是先設定:
1. sequence 指定你選用的幾個 ports 及順序。
2. seq_timeput = 30 就是這個 sequence 的 knocking 要在 30 秒內完成
3. tcpflags 設定 tcp 的 flag。
4. start_command 就是你要執行的東西!在這例子就是接受你做 knocking 動作的 IP 到 22 port。

[closeSSH] 的部份大同小異:
唯一有差的就是執行的指令而已。

修改完 /etc/knockd.conf 後請記得重新啟動 knockd。


Server 設定完了,接下來就是 client 要如何使用:
在 client 端,執行:
代碼: [選擇]
knock host port1 port2 portx

依照你先前設定的 ports 及順序就 ok 了!

當然這不只能用在 ssh 上,還有很多用法就請您再發揮自己的想像力囉!

其實還有許多設定的方式,端看您的需要。
我這一篇其實算是蠻精簡的,我下面提供的連結及 man page 有更多的範例可參考!

設定的部份我有參考一些網站:
1. http://www.zeroflux.org/cgi-bin/cvstrac.cgi/knock/wiki
2. http://frobnosticate.com/?p=81
3. http://gentoo-wiki.com/HOWTO_autossh_and_knockd
Linux 非萬能, 沒 Linux 萬萬不能.
root = God
apt-get install ultimate-horsepower

netman

  • 管理員
  • 俺是博士!
  • *****
  • 文章數: 17484
    • 檢視個人資料
    • http://www.study-area.org
[分享]使用 knockd 來防止別人狂試 ssh 密碼
« 回覆 #1 於: 2006-03-14 14:36 »
跟我之前的做法差不多:

http://www.study-area.org/tips/ssh_tips.htm

phantom

  • SA 苦力組
  • 俺是博士!
  • *****
  • 文章數: 2185
    • 檢視個人資料
[分享]使用 knockd 來防止別人狂試 ssh 密碼
« 回覆 #2 於: 2006-03-14 15:49 »
呵呵,先前沒看到 netman 這篇。

其實作法蠻多的,我是不會自己做,所以找現成得來玩。
:oops:
Linux 非萬能, 沒 Linux 萬萬不能.
root = God
apt-get install ultimate-horsepower

paulso

  • 俺是博士!
  • *****
  • 文章數: 1966
    • 檢視個人資料
[分享]使用 knockd 來防止別人狂試 ssh 密碼
« 回覆 #3 於: 2006-03-14 16:01 »
我是使用 denyhosts 來檔的, 不過唯一的缺點是要使用 python 2.3 或以上
centos 3.5 的 python 2.2 也不行, 需要 centos 4

所以其他的 server, 我自己寫了個 script, 定時把 /var/log/message authentication failure 的 ip 以 iptables 擋掉

shinhrn

  • 懷疑的國中生
  • **
  • 文章數: 31
    • 檢視個人資料
[分享]使用 knockd 來防止別人狂試 ssh 密碼
« 回覆 #4 於: 2007-03-16 17:02 »
引述: "paulso"
我是使用 denyhosts 來檔的, 不過唯一的缺點是要使用 python 2.3 或以上
centos 3.5 的 python 2.2 也不行, 需要 centos 4

所以其他的 server, 我自己寫了個 script, 定時把 /var/log/message authentication failure 的 ip 以 iptables 擋掉

我想要這個方法FTP的連線攻擊擋掉.可以給我參考嗎??

Arian5

  • 可愛的小學生
  • *
  • 文章數: 29
    • 檢視個人資料
[分享]使用 knockd 來防止別人狂試 ssh 密碼
« 回覆 #5 於: 2007-03-27 15:19 »
我是用snort+snortsam來做,理論上snort可以發現的攻擊都可以擋
不過debian上沒snortsam的現成package所以只好自己compile....
 :)

Drsin

  • 懷疑的國中生
  • **
  • 文章數: 88
    • 檢視個人資料
http://i-yow.blogspot.com/search/label/Linux%E5%9F%BA%E7%A4%8E

這裡也有~沒記錯的話是這裡的一位學長的我常常都在上面混^^"