Port Knocking for Ubuntu 14.04 Server
OS:ubuntu 14.04 server
原理簡單分析:
端口敲門服務,即:knockd服務。該服務通過動態的添加iptables規則來隱藏系統開啟的服務,使用自定義的一系列序列號來“敲門”,使系統開啟需要訪問的服務端口,才能對外訪問。不使用時,再使用自定義的序列號來“關門”,將端口關閉,不對外監聽。進一步提升了服務和系統的安全性。
1.安裝knockd
#apt-get install update
#apt-get install build_essential -y
#apt-get install knockd -y
2.配置knockd服務:
1)配置/etc/knockd.conf。
[options]
#UseSyslog
LogFile = /knock.log
[openSSH]
sequence = 7000,8000,9000 //定義敲門順序號
seq_timeout = 30 //設置超時時間太小的話會出錯,我開始設置為5的時候不能添加以下iptables規則
command = /sbin/iptables -D INPUT -p tcp --dport 22 -j DROP && /sbin/iptables -A INPUT -s [允許遠程的IP] -p tcp --dport 22 -j ACCEPT && /sbin/iptables -A INPUT -p tcp --dport 22 -j DROP
//因為ubuntu系統iptables規則默認是禁止所有的規則,如果在這里直接添加,添加的規則是在drop all規則之后的,相當於無效。所以先刪除drop all的規則再添加,然后再開啟drop all的規則就可以了。
tcpflags = syn
[closeSSH]
sequence = 9000,8000,7000 //定義關門順序號
seq_timeout = 30 //設置超時時間太小的話會出錯,我開始設置為5的時候不能添加以下iptables規則
command = /sbin/iptables -D INPUT -s [允許遠程的IP] -p tcp --dport 22 -j ACCEPT
tcpflags = syn
2)配置/etc/default/knockd,修改START_KNOCKD=1。
################################################
#
# knockd's default file, for generic sys config
#
################################################
# control if we start knockd at init or not
# 1 = start
# anything else = don't start
#
# PLEASE EDIT /etc/knockd.conf BEFORE ENABLING
START_KNOCKD=1
# command line options
#KNOCKD_OPTS="-i eth1"
3.啟動knockd。
#service knockd start
4.添加iptables規則,禁止ssh的包。
#iptables -A INPUT -p tcp --dport 22 -j DROP
#iptables-save
5.測試knockd服務。
1)使用ssh登錄。
#root@knockd_server_ip //不能登錄
2)使用7000/8000/9000隊列號敲門。
#for x in 7000 8000 9000; do nmap -Pn --host_timeout 201 --max-retries 0 -p $x [knockd_server_ip]; done //客戶端需要安裝nmap
這條命令和以下三條命令等效
#nmap -p 7000
#nmap -p 8000
#nmap -p 9000
3)敲門之后ssh登錄
#ssh root@knockd_server_ip //可以登錄
4)使用9000/8000/7000隊列號關門。
#for x in 9000 8000 7000; do nmap -Pn --host_timeout 201 --max-retries 0 -p $x [knockd_server_ip]; done //客戶端需要安裝nmap
這條命令和以下三條命令等效
#nmap -p 9000
#nmap -p 8000
#nmap -p 7000
5)再次ssh測試。
#ssh root@knockd_server_ip //不能登錄
6.測試完成。