그래요이메일 서버 설정을 고려해보세요, 하지만 ISP가 포트 25를 차단할까봐 걱정됩니다. 이메일 서버를 설정하기 전에 포트 25가 열려 있는지 확인하는 것이 좋습니다.
실제로 이메일 서버를 설정하지 않고 내 ISP가 포트 25를 차단하는지 확인하는 데 사용할 수 있는 터미널 명령이 있습니까?
답변1
두 가지를 테스트해야 합니다. 차단합니까?나가는포트 25 연결(서버에 해당)보내다메시지) 및 차단 여부들어오는포트 25에 연결(서버인수하다정보).
나가는 연결을 테스트하는 것은 매우 쉽습니다. 테스트 대상으로 알려진 양호한 메일 서버를 선택하십시오. 여기서는 @google.com의 메일 서버를 찾습니다.
$ host -t mx google.com
google.com mail is handled by 10 smtp.google.com.
nc
그런 다음 연결을 시도하고 성공적인 연결과 SMTP 서버 메시지를 받았는지 확인합니다.
$ { sleep 2; echo "quit"; } | nc -w5 smtp.google.com. 25 && echo "connection succeeded" || echo "connection failed"
220 mx.google.com ESMTP p5-20020a170902eac500b001d7077d91b1si1426011pld.170 - gsmtp
221 2.0.0 closing connection p5-20020a170902eac500b001d7077d91b1si1426011pld.170 - gsmtp
connection succeeded
$
"220..." 메시지는 SMTP 프로토콜의 일부이며 기본적으로 "환영합니다..."라고 말하는 서버입니다. 그리고 "연결 성공"은 연결이 유효하다는 것을 알려줍니다.
제가 사용하고 있는 명령은 다소 복잡하므로 그 기능은 다음과 같습니다. 이 nc
명령은 서버의 포트 25에 대한 연결을 열려고 시도합니다( -w5
응답이 없으면 5초 후에 시간 초과됨). 2초를 기다린 다음 "exit" SMTP 명령을 보내 실제 이메일을 보내지 않고 연결을 닫을 것이라고 정중하게 서버에 알립니다. 2초 지연이 발생하는 이유는 "220..." 환영 메시지를 보내기 전에 명령을 보내기 시작하면 일부 서버가 사용자를 스팸 발송자로 취급하기 때문입니다. 마지막으로 echo
마지막 명령이 있는 이유는 nc
자체적으로 연결 성공 또는 실패 여부를 나타내는 아무 것도 인쇄하지 않기 때문입니다. 따라서 이러한 명령은 의 종료 상태에 따라 적절한 메시지를 제공합니다 nc
.
연결이 차단되면 종료되고(아마도 몇 초 후에) 서버에서 "220..." 내용이 나오지 않고 "Connection failed"가 인쇄됩니다.
더 모호한 다른 가능성도 있습니다. 기즈가 지적했듯이댓글에서, "220..." 및 "연결 성공" 메시지가 표시되지만 "220..." 메시지는 서버가 테스트하려는 회사가 아니라 ISP에 속해 있음을 나타내는 경우 ISP가 차단 중일 수 있습니다. 나가는 연결을 완전히 차단하는 대신), 영향을 알아내기 위해 그들의 전술을 조사해야 합니다. 서버 이름이 예상한 이름과 항상 일치하지 않기 때문에 다소 모호할 수 있습니다(예: "smtp.google.com"이라는 서버가 "mx.google.com"으로 응답함). 따라서 여러 다른 이름으로 테스트하면 대상 서버가 도움이 될 수 있습니다. - 만약 그들이모두같은 방식으로 대답하면 귀하가 차단되고 있음이 매우 분명해집니다.
"220..." 메시지 다음에 "연결 실패"가 오는 등 충돌하는 지시를 받거나 서버가 상태 확인에서 "연결 성공" 외에는 아무 것도 보내지 않는 경우도 있습니다. 이런 일이 발생하면 tcpdump
무슨 일이 일어나고 있는지 파악하기 위해 좀 더 자세한 검사(예: 연결 상태를 확인하기 위해 달려가는 등)를 수행해야 합니다 .
들어오는 연결을 테스트하는 것은 먼저 포트 25에 대한 포트 전달 설정(NAT를 사용한다고 가정), 공용 IP 주소 찾기 등의 모든 작업을 수행해야 하기 때문에 더 복잡합니다. 기본적으로 구성해야합니다당신의 역할네트워크는 포트 25에서 들어오는 연결을 수신하도록 연결되어 있습니다.
하지만 실제로 메일 서버를 설정할 필요는 없으며 포트 25에서 수신 대기만 하면 됩니다. 따라서 네트워크를 설정한 후에는 sudo nc -l 25
메일 서버로 사용하려는 컴퓨터에서 네트워크를 실행하기만 하면 됩니다(비밀번호로 인증해야 합니다 sudo
). 이는 포트 25에서 연결을 수신하고 수신하는 모든 내용을 인쇄합니다. 무언가가 연결될 때까지 기다려야 합니다.
그런 다음 액세스를 테스트해야 합니다.개인 네트워크 외부에서(바람직하게는 ISP 네트워크 외부에서). 가장 간단한 테스트는 아마도 갈 것입니다https://www.yougetsignal.com/tools/open-ports/, 공용 IP가 올바른지 확인하고 포트 번호를 25로 설정한 후 "확인"을 클릭하세요. 작동하면 "포트 25가 열려 있습니다"라고 표시되어야 합니다.[당신의 IP는 다음과 같습니다]" sudo nc
명령은 아무것도 인쇄하지 않고(기다리고 있던 연결을 얻었기 때문에) 종료됩니다(테스트에서 실제 데이터를 보내지 않았기 때문에).
연결에 실패하면 yougetsignal 페이지에 "포트 25가 닫혔습니다"와 유사한 메시지가 표시됩니다.[당신의 IP는 다음과 같습니다]"이며 sudo nc
여전히 연결을 기다리고 있습니다( Ctrl+를 사용하여 C연결을 끊을 수 있음). 이는 ISP가 액세스를 차단하고 있거나 사용자가 지정한 설정에 뭔가가 잘못되었음을 의미합니다.
답변2
제가 생각할 수 있는 가장 간단한 방법은 인터페이스로 들어오는 패킷을 사용 tcpdump
하고 스니핑하는 것입니다.public
# tcpdump -i public tcp port 25
그런 다음 다른 ISP 네트워크의 시스템에 로그인하고 다음을 수행합니다.
$ telnet myhost.example.com 25
tcpdump
들어오는 패킷이 표시되는지 확인하십시오 .
답변3
다음을 실행할 수 있습니다(포트 < 1024에 루트로 바인딩).
socat -u tcp-listen:25,reuseaddr 'system:
echo "Got a connection from ${SOCAT_PEERADDR}:${SOCAT_PEERPORT}"'
anyone@[a.b.c.d]
그런 다음 이메일 공급자로부터 이메일을 보내려고 하면 a.b.c.d
서버에 액세스할 수 있는 공용 IP 주소로 인해 다음과 같은 내용이 출력되어야 합니다.
Got connection from 1.2.3.4:59604
포트가 차단되지 않았는지 확인하세요.
답변4
무응답: 그냥 하지 마세요. 수신 이메일의 경우 동적 IP 주소에 대한 MX 레코드를 설정하는 것이 가능하지만 약간 까다롭습니다. 하지만 보내는 이메일의 경우 주거용/동적 IP 주소에서는 이 작업을 수행하지 마세요. ISP가 포트 25를 차단하지 않더라도 대부분의 정상적인 메일 서버는 IP 주소에서 오는 메일 수신을 거부해야 합니다.
고정 IP 주소를 사용하는 소규모 가상 사설 서버를 임대하는 것은 비용이 많이 들지 않으며 메일을 성공적으로 전송할 가능성도 높습니다. Gmail과 같은 일부 서비스는 대규모 작업을 위해 스팸 방지 메커니즘을 사용하는 경향이 있고 메일이 차단될 때 효과적인 완화 경로가 없기 때문에 여전히 운이 좋지 않을 수 있습니다.