Linux에서 SSH 서비스를 보호하기 위해 포트 노킹을 사용하는 방법
포트 노킹은 합법적인 사용자만 서버에서 실행되는 서비스에 액세스할 수 있도록 허용하여 포트에 대한 액세스를 제어하는 멋진 기술입니다. 올바른 순서의 연결 시도가 이루어지면 방화벽이 닫혀 있던 포트를 기꺼이 여는 방식으로 작동합니다.
포트 노킹의 논리는 SSH 서비스를 보호하는 것입니다. 데모 목적으로 Ubuntu 18.04를 사용합니다.
1단계: knockd 설치 및 구성
시작하려면 Linux 시스템에 로그인하고 표시된 대로 knockd 데몬을 설치하십시오.
$ sudo apt install knockd
설치가 완료되면 vim 명령줄 텍스트 편집기를 사용하여 knockd.conf 구성을 엽니다.
$ sudo vim /etc/knockd.conf
기본 구성 파일은 다음과 같이 나타납니다.

[openSSH]
섹션에서 기본 노크 시퀀스(7000,8000,9000)를 다른 것으로 변경해야 합니다. 이는 이러한 값이 이미 알려져 있고 시스템 보안을 손상시킬 수 있기 때문입니다.
테스트 목적으로 값을 10005, 10006, 10007로 설정했습니다. 이것은 클라이언트 시스템에서 SSH 포트를 여는 데 사용되는 순서입니다.
세 번째 줄 - 명령으로 시작하여 /sbin/iptables
명령 바로 뒤와 INPUT 앞에
.-A
를 -I
로 변경합니다. "
마지막으로 [closeSSH]
섹션에서 기본 시퀀스를 원하는 선택으로 다시 변경합니다. 이것은 사용자가 완료되고 서버에서 로그아웃한 후 SSH 연결을 닫는 데 사용되는 순서입니다.
다음은 전체 구성입니다.

완료되면 변경 사항을 저장하고 종료합니다.
수정해야 하는 또 다른 구성은 /etc/default/knockd입니다. 다시 한 번 텍스트 편집기를 사용하여 엽니다.
$ sudo vim /etc/default/knockd

START_KNOCKD=0
줄을 찾습니다. "주석을 제거하고 값을 1
로 설정합니다.
다음으로 KNOCKD_OPTS=”-i eth1”
줄로 이동하여 주석 처리를 제거하고 기본 eth1
값을 시스템의 활성 네트워크 인터페이스로 바꿉니다. 네트워크 인터페이스를 확인하려면 ifconfig 명령을 실행하기만 하면 됩니다.
우리 시스템의 경우 enp0s3은 활성 네트워크 카드입니다.

전체 구성은 다음과 같습니다.

변경 사항을 저장하고 종료합니다.
그런 다음 그림과 같이 knockd 데몬을 시작하고 활성화합니다.
$ sudo systemctl start knockd $ sudo systemctl enable knockd
knockd 데몬의 상태를 확인하려면 다음 명령을 실행합니다.
$ sudo systemctl status knockd

2단계: 방화벽에서 SSH 포트 22 닫기
knockd 서비스의 목적은 ssh 서비스에 대한 액세스를 허용하거나 거부하는 것이므로 방화벽에서 ssh 포트를 닫을 것입니다. 하지만 먼저 UFW 방화벽의 상태를 확인합시다.
$ sudo ufw status numbered

출력에서 SSH 포트 22가 각각 5와 9로 번호가 지정된 IPv4 및 IPv6 프로토콜 모두에서 열려 있음을 분명히 알 수 있습니다.
표시된 대로 가장 높은 값인 9부터 시작하여 이 두 규칙을 삭제해야 합니다.
$ sudo ufw delete 9 $ sudo ufw delete 5

이제 원격으로 서버에 로그인을 시도하면 그림과 같이 연결 시간 초과 오류가 발생합니다.

3단계: SSH 서버에 연결하도록 노크 클라이언트 구성
마지막 단계에서는 클라이언트를 구성하고 먼저 서버에서 구성한 노크 시퀀스를 전송하여 로그인을 시도합니다.
그러나 먼저 서버에서와 마찬가지로 knockd 데몬을 설치하십시오.
$ sudo apt install knockd
설치가 완료되면 표시된 구문을 사용하여 노크 시퀀스를 보냅니다.
$ knock -v server_ip knock_sequence
우리의 경우 이것은 다음과 같이 번역됩니다.
$ knock -v 192.168.2.105 10005 10006 10007
시퀀스에 따라 우리가 가지고 있는 것과 비슷한 출력을 얻어야 합니다. 이것은 노크 시도가 성공했음을 나타냅니다.

이 때 SSH를 사용하여 서버에 성공적으로 로그인할 수 있는 위치에 있어야 합니다.

원격 서버에서 작업을 마치면 클로징 노크 시퀀스를 보내 SSH 포트를 닫습니다.
$ knock -v 192.168.2.105 10007 10006 10005
서버에 로그인하려는 모든 시도는 표시된 대로 실패합니다.

이것으로 포트 노킹을 활용하여 서버의 SSH 서비스를 보호하는 방법에 대한 이 가이드를 마무리합니다. 더 좋고 쉬운 접근 방식은 SSH 키 쌍을 사용하여 비밀번호 SSH 인증을 구성하는 것입니다. 이렇게 하면 개인 키가 있는 사용자만 공개 키가 저장된 서버에 인증할 수 있습니다.