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ЧÀÍÆ÷

¾©¹«Íø°²±¸ 11010802026257ºÅ