先前為了想檔暴力試 ssh 的狀況,找到了一些資料參考。
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 用戶,請執行:
至於不是用 Debian 的人,knockd 的官方網站在:
http://www.zeroflux.org/cgi-bin/cvstrac.cgi/knock/wiki
請自行下載來安裝囉!
安裝好後自然是要設定囉!
第一步先修改 /etc/default/knockd
START_KNOCKD=1 就是讓 knockd 在 init 時啟動。
KNOCKD_OPTION 的部份就是啟動 knockd 時的參數。我只列了他要監聽的介面。其他的部份請詳閱 man page。
第二步就是修改 /etc/knockd.conf
指定 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。
至於 client 端:
1. 可用內附的 knonk 程式 (有 Linux, Cygwin, & Windows)
不過,我比較偏好用第一及第二種方法。
當然這不只能用在 ssh 上,還有很多用法就請您再發揮自己的想像力囉!
這兩天我會再補上在 Linux 下,用 wrapper 簡化 ssh 的步驟!
設定的部份我有參考一些網站:
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
--------
another way is fail2ban.
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][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
指定 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。
至於 client 端:
1. 可用內附的 knonk 程式 (有 Linux, Cygwin, & Windows)
knock -v host port1 port2 port32. 也可以用 nmap:
nmap -sT -P0 -PSPort1,Port2,Port3 --packet_trace -v host3. 也可以用 Telnet:
telnet host Port1
telnet host Port2
telnet host Port3
不過,我比較偏好用第一及第二種方法。
當然這不只能用在 ssh 上,還有很多用法就請您再發揮自己的想像力囉!
這兩天我會再補上在 Linux 下,用 wrapper 簡化 ssh 的步驟!
設定的部份我有參考一些網站:
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
--------
another way is fail2ban.