나는 docker와 UFW 방화벽이 있는 서버를 가지고 있습니다(Docker가 UFW 규칙에도 불구하고 일부 포트를 열기 때문에 충돌이 발생할 수 있다는 것을 알고 있습니다).
무작위로 닫힌 포트를 통해 외부에서 이 서버에 텔넷을 연결하면 텔넷이 "노력하다..."보내는 대신"연결이 거부되었습니다."
서버로 가서 Telnet 127.0.0.1 7777을 사용하여 동일한 작업을 수행하면 "연결이 거부되었습니다."
어떤 아이디어가 있나요?
답변1
많은 방화벽은 포트를 실제로 "닫는" 대신 "숨깁니다". 이는 "Connection Rejected"를 긍정적으로 다시 보내는 대신 시간이 초과되기 전에 응답을 받을 것이라고 생각하여 클라이언트의 시간을 낭비한다는 것을 의미합니다. 이는 어떤 포트가 실제로 닫혀 있는지, 어떤 포트가 느리거나 현재 응답하지 않는 서비스 뒤에 있는지 알 수 있는 방법이 없기 때문에 잠재적인 공격자에게 포트 검색의 유용성을 떨어뜨립니다. 이는 또한 교활한 공격자가 목표물을 낭비하게 만들 수 없다는 것을 의미합니다.그것은아무것도 보내지 않는 대신 "죄송합니다. 문을 닫았습니다" 패킷을 많이 보낼 시간입니다.
답변2
가장 일반적으로 사용되는 방화벽 규칙은 allow
및 이지만 deny
일반적으로 이라고 하는 다른 옵션도 사용할 수 있습니다 reject
. UFW에도 그런 것이 있습니다.
"거부"와 "거부"의 차이점은 "거부"를 선택하면 방화벽이 들어오는 패킷을 완전히 무시하는 반면, "거부"를 선택하면 방화벽이 항상 적절한 "죄송합니다. 닫혀 있습니다"라는 메시지를 보냅니다.실제 수신자를 나타냅니다., 서비스가 실제로 들어오는 연결을 수신하는지 여부에 관계없이.
대부분의 운영 체제와 심지어 절반 수준의 방화벽이라도 "죄송합니다. 다운되었습니다" 패킷을 보내는 작업에 항상 매우 낮은 우선 순위를 부여합니다. 따라서 방화벽 여부에 관계없이 시스템에 약간 더 중요한 작업이 있는 경우 , 이러한 패킷은 지연되거나 완전히 무시됩니다.
따라서 방화벽에서 무언가를 차단하고 싶지만 해당 포트에 대한 연결 시도가 명백한 "연결 거부" 오류와 함께 빠르게 실패해야 하는 경우 reject
기본 규칙 대신 방화벽의 규칙을 사용하십시오 deny
.