포트 노킹은 미리 정의된 특정한 순서로 닫힌 포트에 연결 시도를 함으로써 방화벽에서 포트를 개방하는 방식을 말합니다. 미리 정해진대로 정확하게 닫힌 포트를 대상으로 연결 시도를 하면, 해당 호스트가 접속 가능하도록 방화벽 정책이 자동으로 변경됩니다. 마치 들어가기 전에 문을 똑똑 두드리는 것과 유사하다고 해서 포트 노킹이라고 부릅니다. 비슷한 방법으로는 Single Packet Authentication이 있는데, 암호화된 패킷으로 딱 한 번 노크하는 방식입니다.
포트 노킹을 사용하면 포트 스캔을 통해서 취약한 서비스를 찾아내지 못하도록 할 수 있습니다. 포트를 노크하는 순서가 맞지 않으면 그냥 포트가 닫혀있는 것으로 나오니까요. 그리고 접속 허용 대상 IP를 수작업으로 관리하는 대신 자동으로 처리할 수 있다는 장점이 있습니다. 반면에 공개적으로 사용되는 서비스에서는 사용할 수 없는 단점이 있습니다. 정해진 노크 순서가 알려지거나, 노크 순서를 생성하는 방법이 공개되면 의미가 없으니까요.
포트 노킹이 잘 맞는 경우는 원격 터미널 서비스입니다. SSH나 원격 터미널 같은 경우는 포트 스캔 후 집중적으로 패스워드 추측 공격을 당하기 십상인데, 아예 닫혀있는 포트처럼 숨겨버리면 이런 공격을 받지 않을 수 있습니다.
구현은 여러가지 방법이 있습니다. 간단하게는 방화벽 로그를 모니터링하고 있다가, 순서가 맞으면 방화벽 룰을 조정하도록 데몬을 만들어 놓는 방법이 있습니다. 제대로 구현하려고 한다면 커널의 TCP/IP 스택에 심어넣는게 좋겠지요.
포트 노킹에 대해 더 자세히 알아보시려면 이 웹페이지에 걸린 글들을 읽어보세요.




