01 ¼ò½é
ÔÚÍøÂçÇå¾²ÑÝÁ·¡¢¹¥»÷°¸ÀýÖУ¬¹¥»÷·½Í¨¹ýÐÅÏ¢ÍøÂç»ñȡĿµÄ¿ÉÓõÄÐÅÏ¢£¬½«¸÷¹¥»÷µãÅþÁ¬»ã³É¹¥»÷Ãæ£¬¹¥»÷ÃæÔ½¹ãÒâζ×Å·¢Ã÷DZÔÚÎó²îµÄ¿ÉÄÜÐÔÔ½´ó£¬¹¥»÷ÀֳɵĸÅÂÊÒ²¾ÍÔ½¸ß¡£Òò´Ë£¬Í¨¹ýÇå¾²¼Æ»®×îС»¯Ì»Â¶Ãæ¿ÉÒÔÓÐÓÃïÔÌÐÅϢϵͳÔâÊÜÈëÇֵĸÅÂÊ¡£±¾ÎÄÖ÷Ҫ̽ÌÖ¹¥»÷ÃæÊÕÁ²ÖÐͨ¹ýPort KnockingÊÖ¶ÎÒþ²ØSSH·þÎñÆ÷µÄÒªÁ죬ʹ¹«¹²ÍøÂçÉϵĹ¥»÷Õ߸üÄÑ·¢Ã÷¸Ã·þÎñÆ÷£¬µÖ´ïÊÕÁ²Ì»Â¶Ã棬½µµÍÇ徲Σº¦µÄÄ¿µÄ¡£
02 ¸ü¸ÄĬÈÏ SSH ¶Ë¿Ú
Òþ²Ø SSH ·þÎñÆ÷µÄµÚÒ»²½ÊǸü¸ÄĬÈÏ SSH ¶Ë¿Ú¡£ÔÚ±¾ÎÄÑÝʾ°¸ÀýÖÐSHH¶Ë¿ÚºÅÉèÖÃΪ60636£¬ÏÖʵ²Ù×÷ÖпÉÒÔʹÓÃí§Òâ×Ô½ç˵¶Ë¿ÚºÅ¡£·¿ªÖն˲¢Ê¹ÓÃÒÔÏÂÏÂÁîͨ¹ý SSH ÅþÁ¬µ½·þÎñÆ÷£º
$ ssh -i path-to-identity-file username@SERVER_IP
ÔÚ·þÎñÆ÷ÉÏʹÓÃviÖÕ¶ËÖеÄÏÂÁî»òÈκÎÎı¾±à¼Æ÷·¿ª SSH ÉèÖÃÎļþ£º
$ vi /etc/ssh/sshd_config
ÏÖÔÚ½«Ä¬È϶˿Ú22¸üÐÂΪ60636¡£
²Ù×÷Íê³ÉºóÖØÐÂÆô¶¯ SSH ·þÎñÆ÷ÊØ»¤³ÌÐò£¬ÒԱ㽫¸üÐÂÓ¦ÓÃÓÚеĴ«ÈëµÄËùÓÐSSHÅþÁ¬¡£
$ systemctl restart sshd.service
SSH·þÎñÆ÷ÏÖÔÚ½«½ÓÊܲ¢ÅþÁ¬¶Ë¿Ú60636£¬²Ù×÷ÏÂÁîÈçÏ£º
$ ssh -i path-to-identity-file username@SERVER_IP -p 60636

ÐèÒª×¢ÖØµÄÊÇ£¬ÈôÊǸ÷þÎñÆ÷ÉÏÉèÖÃÁË·À»ðǽ£¬»¹Ó¦¸Ãͬ²½¸üзÀ»ðǽ¹æÔò£¬ÔÊÐí¶Ë¿ÚÉ쵀 SSH 60636ÅþÁ¬£¬×èÖ¹SSH 22ÅþÁ¬¡£
03 ʹÓÃknockdʵÏÖ¶Ë¿ÚÅöײ
¶Ë¿ÚÅöײÊÇÒ»ÖÖÔÚÒ»×éÔ¤ÏÈÖ¸¶¨µÄ¹Ø±Õ¶Ë¿ÚÉϱ¬·¢ÅþÁ¬ÇëÇ󣬴ÓÍⲿ·¿ª·À»ðǽÉϵĶ˿ڵÄÒªÁì¡£Ò»µ©ÊÕµ½×¼È·µÄÅþÁ¬ÇëÇóÐòÁУ¬·À»ðǽ¹æÔò¾Í»á±»¶¯Ì¬Ð޸ģ¬ÔÊÐí·¢ËÍÅþÁ¬ÇëÇóµÄÖ÷»úͨ¹ýÌØ¶¨¶Ë¿Ú¾ÙÐÐÅþÁ¬¡£¶Ë¿ÚÅöײµÄÖ÷ҪĿµÄÊDZÜÃâ¹¥»÷Õßͨ¹ý¶Ë¿ÚɨÃèÀ´É¨ÃèϵͳÖÐDZÔڵĿÉʹÓ÷þÎñ£¬³ý·Ç¹¥»÷Õß·¢ËÍ׼ȷµÄÅöײÐòÁУ¬²»È»Êܱ£»¤µÄ¶Ë¿Ú½«ÏÔʾΪ¹Ø±Õ¡£
3.1 ×°ÖúÍÉèÖà knockd
ΪÁËʵÏÖ¶Ë¿ÚÅöײ£¬Ê×ÏÈÒªÔÚLinux·þÎñÆ÷ÉÏ×°ÖÃknockd¡£ÔËÐÐÒÔÏÂÏÂÁî¾ÙÐÐ×°Öãº
$ sudo apt-get install knockd
½ÓÏÂÀ´·¿ªknockdλÓÚ/etc/knockd.confµÄÉèÖÃÎļþ£º

ÔÚÉèÖÃÎļþÖÐÏàʶһÏÂĬÈÏÉèÖÃÖµ°üÀ¨µÄÐÅÏ¢£º
¡ñsequenceÊÇÒ»×é¶Ë¿ÚºÅ£¬±»ÊÓΪÅöײÐòÁС£
¡ñseq_timeout½ç˵ÐòÁеÄÓÐÓÃÆÚ¡£
¡ñcommand°üÀ¨iptablesÌí¼Ó¹æÔòÒÔÔÊÐíÀ´×ÔÖ¸¶¨ IP µØµãµÄ´«Èë SSH ÅþÁ¬µÄÏÂÁî¡£½öµ±Óû§Æô¶¯ÓÐÓõÄÅöײÐòÁÐʱ²Å»áÖ´ÐдËÏÂÁî¡£
¡ñtcpflags½ç˵ÅöײÅþÁ¬ÖÐÒª½ÓÊÜµÄ TCP Êý¾Ý°üÀàÐÍ¡£SYNÔÚÕâÖÖÇéÐÎÏ·ÖÅÉÁËÒ»¸öTCPÀàÐ͵ÄÊý¾Ý°ü¡£
[openSSH]¿éºÍ[closeSSH]¿éÖ®¼äµÄÖ÷񻂿±ðÔÚÓÚ[closeSSH]¿é¾ßÓж˿ںŵĹرÕÐòÁкÍiptablesɾ³ý²åÈë[openSSH]¿éÖеĹæÔòµÄÏÂÁî¡£
ÏÂÃæÊDzο¼µÄ×îÖÕÉèÖÃÎļþ¡£×¢ÖØ£¬ÓÉÓÚĬÈÏÖµ ( 7000, 8000, 9000) ÖÚËùÖÜÖª£¬ÒÔÊÇÏÖÒѽ«¿ª·ÅÐòÁÐÖµ¸ü¸ÄΪ20001, 20002£¬20003¡£Í¬ÑùÒ²¸üÐÂÁËĬÈϵĹرÕ˳Ðò¡£³ý´ËÖ®Í⻹½«¶Ë¿Ú¸ü¸ÄΪ22£¬60636£¬ÓÉÓÚÒѾÔÚÉÏÒ»²½Öн« SSH ¶Ë¿Ú¸üÐÂΪ´ËÖµ¡£ÁíÍâ×¢ÖØ£¬ÔÚ¸Ã[openSSH]¿éÖУ¬iptablesÏÂÁîÖµ´Ó¸ü¸Ä-AΪ-I£¬ÌåÏÖ´Ëiptables¹æÔò½«´òÆðÔ´¿Ú²¢½«³ÉΪµÚÒ»¸öÖ´ÐеĹæÔò¡£×îºó½«³¬Ê±Öµ´Ó5ÔöÌíµ½10£¬ÓÉÓÚ 5 ÃëÊÇÔÚÅöײÐòÁкóÁ¬Ã¦Æô¶¯ SSH ÅþÁ¬µÄÒ»¸öС´°¿Ú¡£

ÍêÓñ³É²¿²Ù×÷ºóÉúÑĸü¸Ä²¢Í˳öÎļþ¡£
3.2 ÉèÖà knockd ÕìÌýÌØ¶¨ÍøÂç½Ó¿Ú
knockd¼àÌýµÄÍøÂç½Ó¿ÚµÄÃû³ÆÐèÒªÖ¸¶¨¡£ÔÚÕâÀïʹÓÃip addrÏÂÁîÀ´¼ì²éÓë·þÎñÆ÷¹ØÁªµÄÍøÂç½Ó¿ÚÁÐ±í£¬²¢Ñ¡ÔñÏëÒªknockd¼àÌýµÄ½Ó¿ÚÃû³Æ¡£

ÕâÖÖÇéÐÎÏ£¬eth0Êǰ󶨵½¹«¹² IP µØµãµÄ½Ó¿Ú¡£ÒÔÊÇÓÃÕâ¸ö½Ó¿ÚÀ´ÉèÖÃknockd¡£½ÓÏÂÀ´£¬±à¼knockdÉèÖÃÎļþ¡£

ÉúÑĸü¸Ä²¢Í˳öÎļþ£¬Á¬Ã¦Æô¶¯knockd·þÎñ£º
$ systemctl start knockd
ÆôÓÃknockd·þÎñ£¬ÒÔ±ãÔÚÏÂ´ÎÆô¶¯·þÎñÆ÷ʱͬ²½Æô¶¯¸Ã·þÎñ¡£
$ systemctl enable knockd
3.3 ÔÚ·À»ðǽÉÏ×èÖ¹¶Ë¿Ú 60636
ΪÁËʵÏÖ60636¶¯Ì¬·¿ªknockd¶Ë¿ÚµÄÄ¿µÄ£¬Ä¬ÈÏÇéÐÎϽ«×èÖ¹¶Ô¸Ã¶Ë¿ÚµÄ»á¼û£¬Ê¹ÓÃiptablesÏÂÁîÀ´Ö´Ðд˲Ù×÷¡£Ö´ÐÐÒÔÏÂÏÂÁî¾Í²»»áÆÆËðÄ¿½ñµÄÔ˶¯ÅþÁ¬£º
$ sudo iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
½ÓÏÂÀ´Ö´ÐÐÏÂÁÒÔĬÈÏiptables×èÖ¹¶Ë¿ÚÉϵÄËùÓд«Èë SSH ÅþÁ¬60636£º
$ sudo iptables -A INPUT -p tcp --dport 60636 -j REJECT
ÏÖÔÚʵÑéÔÙ´ÎÅþÁ¬µ½ SSH ·þÎñÆ÷£¬Ó¦¸Ã»áÊÕµ½¡°Connection refused¡±ÏìÓ¦£º
$ ssh -i path-to-identity-file username@SERVER_IP -p 60636ssh: connect to host SERVER_IP port 60636: Connection refused
Linux ·þÎñÆ÷ÏÖÔÚÉèÖÃÁËknockd£¬²¢ÇÒ SSH ¶Ë¿Ú½«Ö»¿ª·Å¸ø¿ÉÒÔÀֳɷºÆðÇû÷ÐòÁеÄÌØ¶¨ IP¡£
04 ÅþÁ¬ SSH ·þÎñÆ÷
ÏÖÔÚÒѾ¸ü¸ÄÁËĬÈ쵀 SSH ¶Ë¿Ú£¬ÊµÏÖÁËÖ»ÓÐÌṩ׼ȷµÄÅöײÐòÁÐʱ²Å´òÆðÔ´¿Ú60636µÄ¹¦Ð§£¬½ÓÏÂÀ´²âÊÔһϡ£
ÓÉÓÚÒѾÉèÖÃknockd¼àÌýTCP SYN¶Ë¿ÚÉϵÄÊý¾Ý°ü20001£¬20002ÇÒ20003×÷ΪÅöײÐòÁУ¬ÏÖÔÚ¿ÉÒÔʹÓÃí§ÒâÔÊÐíÆô¶¯µ½ÕâÐ©ÌØ¶¨¶Ë¿ÚµÄ TCP ÅþÁ¬¹¤¾ß£¬ÏÂÃæÑÝʾÏêϸ²Ù×÷°ì·¨¡£
4.1 ʹÓÃÅöײ
Ê×ÏÈ£¬ÔÚ¿Í»§¶ËÅÌËã»úÖÐ×°ÖÃknockd¡£
$ sudo apt-get install knockd
ʹÓÃÈçÏÂknockÏÂÁîÖ´ÐÐÅöײÐòÁУº

ÏÖÔÚ¿ÉÒÔͨ¹ýSSH»á¼ûÅþÁ¬ Linux ·þÎñÆ÷£º
$ ssh -i path-to-identity-file username@SERVER_IP -p 60636
...
Íê³É SSH »á¼ûºó¿ÉÒÔÆô¶¯¹Ø±ÕÐòÁУ¬ÈçÏÂËùʾ£º
$ knock -v SERVER_IP 20003 20002 20001 -d 500
¿ÉÒÔÉó²éknockdµÇ¼syslogä¯ÀÀÏêϸÐÅÏ¢£º

4.2 ʹÓÃÔ¶³ÌµÇ¼
ʹÓÃÒÔÏÂÏÂÁîÆô¶¯Çû÷ÐòÁÐtelnet£º

ÊÕµ½¡°Connection refused¡±ÐÂÎŲ¢ÅþÁ¬Ê§°Ü£¬µ«Ã»¹ØÏµ£¬ÓÉÓڸö˿ÚÉϽûÓÃÁË telnet£¬ÎÒÃÇÖ»Ïë·¢ËÍÔÚ telnet ÅþÁ¬Ê±´ú·¢Ë굀 TCP SYN Êý¾Ý°ü¡£Íê³ÉËùÓÐÈý¸öÐòÁÐµÄ telnet ÏÂÁîºó¼´¿Éͨ¹ý SSH ÅþÁ¬µ½·þÎñÆ÷¡£
05 ²Î¿¼Á´½Ó
https://goteleport.com/blog/ssh-port-knocking/
https://www.howtoing.com/how-to-use-port-knocking-to-hide-the-ssh-port-from-attackers-on-ubuntu
- Òªº¦´Ê±êÇ©£º
- Çå¾²ÔËÓª ¼ì²âÓë·À»¤ÄÜÁ¦ ÍøÂçÇå¾²ÑÝÁ· Port KnockingÒþ²ØSSH·þÎñÆ÷