MTA, MUA, MDA의 정의를 찾아보았습니다.https://ccm.net/contents/116-how-email-works-mta-mda-mua그리고https://en.wikipedia.org/wiki/Email_agent_(인프라)
Lubuntu에서 기본 이메일 클라이언트는 Sylpheed이며 많은 사람들이 Thunderbird도 사용합니다. 내 기억이 맞다면 Sylpheed와 Thunderbird는 모두 MUA입니다.
존재하다https://unix.stackexchange.com/a/479613/674, Stephen은 cron이 작업 결과를 이메일로 보내기 위해 MTA(예: postfix 또는 sendmail)를 사용한다고 언급했습니다.
내 질문은 다음과 같습니다
cron이 이메일을 보낼 때 MUA 대신 MTA를 사용하는 이유는 무엇입니까? cron이 MUA를 사용하여 이메일을 보낼 수 있다면 어떻게 될까요?
이메일을 보낼 때 MTA 대신 MUA(Sylpheed 또는 Thunderbird)를 사용하는 이유는 무엇입니까? MTA를 사용하여 이메일을 보낼 수 있다면 어떻게 해야 합니까?
MUA(Sylpheed 또는 Thunderbird)를 설치할 때 Sylpheed 또는 Thunderbird에서 시스템에 MTA를 설치해야 합니까?동일한이메일을 보내는 기계?
감사해요.
답변1
Unix의 메일은 근본적으로 지역적 현상입니다. 동일한 호스트의 사용자는 네트워크 연결 없이도 서로 메일을 보낼 수 있습니다. ("주소"는 단지 사용자 이름일 뿐이며 아무것도 없습니다 @
.) 이는 물론 MUA에서 MTA로 메시지를 전달하는 방법이 로컬이어야 함을 의미합니다. 일반적으로 메서드는 이라는 프로그램을 가리키는 파이프입니다 sendmail
.
MTA가 이 기호가 포함된 주소를 이해하도록 함으로써 순전히 로컬 메일을 참여하는 인터넷 메일 시스템으로 확장할 수 있습니다 @
. MUA는 여전히 네트워크가 존재하는지 알 필요가 없습니다. 단순히 주소를 불투명 문자열로 처리하고 로컬 MTA가 네트워크를 통과해야 하는 주소를 결정하도록 합니다.
시스템에 MTA가 하나만 있기 때문에 MTA는 분명히 네트워크 구성을 위한 올바른 위치이지만, 여러 MUA는 다른 사용자 또는 동일한 사용자가 사용할 수 있습니다. 이 모든 네트워킹 작업을 처리하는 단일 프로그램은 구성을 여러 번 수행할 필요가 없음을 의미합니다.
나가는 메시지를 원격 서버에 주입하는 MUA는 "Unix 계열" 시스템이 MTA 없이도 정상적으로 작동하는 것처럼 보이도록 설계되었습니다. 이 구성은 기존 솔루션을 거부합니다. 이는 메일 시스템의 핵심(모든 로컬 사용자에게 메시지를 보내는 기능)을 차단하며 적절한 대체 기능을 제공하지 않습니다.
Cron은 MUA 역할을 합니다. 이것이 "MUA를 사용"하는 것이 아니라 Unix MUA가 항상 해왔던 작업을 수행하는 것입니다. 즉, 네트워크가 존재한다는 사실을 모르고 메일을 보내고 이를 파악하기 위해 로컬 MTA에 의존합니다. 로컬 사용자 이름으로 수신자 주소를 지정하는 것은 cron 작업이 로컬 사용자를 대신하여 실행되고 해당 사용자가 일부 원격 호스트에 어떤 주소를 가지고 있는지 알 수 있는 방법이 없기 때문에 유일한 합리적인 기본값입니다.
답변2
cron 및 MUA-MTA 연결 정보
실용적인 답변
저는 보통 cron 사용자를 위한 접미사 별칭을 만듭니다. 이렇게 하면 모든 크론 작업 이메일이 조회 테이블의 별칭 주소로 전송됩니다.
- 따라서 실용적인 대답은 다음과 같습니다.
크론 메시지는 서버/도메인/머신에서 인터넷 전체 이메일 주소로 보낼 수 있습니다.
또한 메일러cron
MTA를 사용하도록 자체 구성할 수도 있습니다 .
Debian Buster의 cron 소스 트리에서:
cron-3.0pl1/config.h
45 #define MAILCMD _PATH_SENDMAIL /*-*/
46 /* #define MAILARGS "%s -i -FCronDaemon -odi -oem %s" /*-*/
47 #define MAILARGS "%s -i -FCronDaemon -B8BITMIME -oem %s" /*-*/
48 /* -i = don't terminate on "." by itself
49 * -Fx = set full-name of sender
50 * -odi = Option Deliverymode Interactive
51 * -oem = Option Errors Mailedtosender
52 * -t = read recipient from header of message
53 * -or0s = Option Readtimeout -- don't time out
54 * XXX: sendmail doesn't allow -or0s when invoked
55 * by joe user. --okir
56 */
57
58 /* #define MAILCMD "/bin/mail" -*/
59 /* #define MAILARGS "%s -d %s" -*/
60 /* -d = undocumented but common flag: deliver locally?
61 */
62
63 /* #define MAILCMD "/usr/mmdf/bin/submit" -*/
64 /* #define MAILARGS "%s -mlrxto %s" -*/
- 두 번째 실제 대답은 다음과 같습니다.
Cron은 모든 MTA를 사용하도록 컴파일될 수 있습니다.
이론적인 대답
댓글과 기타 답변에서 언급했듯이 cron
MUA 역할을 하고 있습니다. 자체 논리 시스템에서 예약된 MTA가 되는 것 외에는 실제 메시지 전송을 처리하는 코드 기반이 없습니다. 논리적 머신이 실제로 동일한 물리적 머신이 아닐 수도 있다는 점은 주목할 가치가 있습니다.
MTA를 사용한 이메일 전송 정보
SMTP 포트를 통해 MTA에 직접 연결
SMTP.URL:port
MTA에 연결하고 인증을 수동으로 수행하면 MTA를 통해 직접 이메일을 보낼 수 있습니다.
telnet example.com 25
이는 일반적으로 ISP 연결을 통해 포트 25에 대한 액세스를 차단 해제한 경우에 작동합니다. 다음과 유사한 메시지를 받게 됩니다.
Trying xxxx:xxxx::xxxx:xxxx:xxxx:xxxx...
Trying xxx.xxx.xxx.xxx...
Connected to example.com.
Escape character is '^]'.
220 mail.example.com ESMTP Postfix (Debian/GNU)
하지만...대부분의 ISP는 포트 25 연결을 차단합니다. 게다가 이 이메일 전송 방법은 더 번거롭기 때문에 일반적으로 우리는 sylpheed
잘 설계된 MUA를 사용하거나 기다립니다.thunderbird
ISP가 표준 SMTP 포트를 차단하는 이유: 25
대부분의 인터넷 사용자는 ISP(인터넷 서비스 공급자)를 통해 WAN(광역 네트워크)에 연결합니다. 이러한 ISP는 일반적으로 HTTP(80), SMTP(25) 및 기타 여러 가능한 포트와 같이 인터넷 서비스를 실행하는 데 사용되는 일반 포트를 차단합니다.
일반적으로 ISP는 고객과 네트워크에서 인터넷 서비스 작동을 금지하는 이용 약관 계약을 맺고 있습니다. 이 일반 ISP 정책에는 최소한 두 가지 이유가 있습니다.
- 인터넷 서비스는 대역폭을 소비합니다.
- ISP는 많은 스패머나 악성 웹 서비스에 대한 가장 작은 장애물입니다.
ISP는 종종 자체 동적 IP 주소 풀을 블랙리스트에 추가합니다. 따라서 ISP의 동적 IP 주소에서 실행되는 모든 메일 서비스는 거부되거나 대규모 이메일 제공업체의 "스팸" 폴더에 직접 배치될 가능성이 높습니다.
블랙리스트 IP 차단
IP 블랙리스트는 매우 간단하고 효과적입니다. 블랙리스트에 등록된 도메인에서 들어오는 메일을 즉시 거부하기 위해 MTA 구성에 사용됩니다.
/etc/postfix/main.cf
...
smtpd_client_restrictions = ...
reject_rbl_client cbl.abuseat.org
reject_rbl_client pbl.spamhaus.org
reject_rbl_client sbl.spamhaus.org
reject_rbl_client bl.blocklist.de
...
내 실제 서버 로그 중 하나의 예:
Oct 14 04:45:23 xxxx postfix/smtpd[17679]: NOQUEUE: reject: RCPT from xxxxx.xxxx.xxxx.jp[xxx.149.xxx.xxx]: 554 5.7.1 Service unavailable; Client host [xxx.149.xxx.xxx] blocked using sbl.spamhaus.org; https://www.spamhaus.org/sbl/query/SBL319039; from=<[email protected]> to=<[email protected]> proto=ESMTP helo=<xxxx.xxx.xxx.jp>
봇넷 시대의 포트 차단과 RBL의 효율성
이러한 전략은 현재 주문형 웹 서버 시대 이전에 더 효과적이었습니다. 내 경험에 따르면 스패머와 악의적인 행위자는 ISP 연결 서비스에서 봇넷과 주문형 명령 및 제어(C&C) 서버로 이동합니다.
내 서버에 대한 대부분의 스팸 또는 무차별 대입 공격은 일반적으로 Amazon EC2 IP 주소에서 실행되는 C&C 프로브로 시작됩니다. 그 뒤를 이어 멀리 떨어진 국가의 주소에서 시작된 일련의 봇넷이 탄생했습니다.
포트를 차단하지 않는 ISP
미국 ISP가 모든 포트를 허용하는지 잘 모르겠습니다. 그러나 일부 유럽 ISP는 차단된 포트나 필터 없이 소비자에게 인터넷 소방 호스만 제공하는 것을 보았습니다.
그래서 "ISP에 확인하세요" 외에는 답이 없습니다.
답변3
짧은 대답은 아마도: 그것은 유닉스 철학입니다."뭔가를하고 잘해라".
먼저 MTA와 MUA의 차이점을 이해하십시오.
- MUA(Mail User Agent)(Thunderbird 등과 같은)는 사용자와 쉽게 상호 작용할 수 있는 프로그램입니다. 이 프로그램은 주로 사용자 상호 작용에 중점을 둡니다. 다양한 사서함에 있는 현재 메시지를 사용자에게 표시하고 사용자가 지정된 이메일 주소로 메시지를 보낼 수 있도록 합니다. 추가 기능이 가능합니다. 주로 사용자를 만족시키기 위해 모든 하위 수준 작업을 처리합니다.
- MTA는 백그라운드 프로그램입니다. 유일한 목적은 한 "위치"에서 다른 "위치"로 메일을 전송하기 위한 안정적인 백엔드를 제공하는 것입니다. (여기서 "위치"는 호스트, 사람 또는 다른 것을 의미할 수 있습니다. 그 뒤에 있는 아이디어를 이해하기만 하면 됩니다.) 해당 인터페이스는 주로 프로그래밍 API입니다(참조SMTP 프로토콜). 물론 인간은 그러한 텍스트를 위조할 수 있지만 실제 이메일 예제를 수행할 때 사양 내에서 이를 수동으로 유지하는 것은 쉽지 않습니다.
- MDA(Mail Delivery Agent)는 사용자의 메일함에 대한 액세스를 제공하는 프로그램입니다. 또한 프로그래밍 인터페이스를 사용합니다. 이러한 인터페이스의 예로는 POP3 또는 IMAP이 있습니다.
사용자가 MUA에서 메일을 보내면 MUA는 ISP의 MTA에 연결됩니다. MTA는 사용자 자격 증명을 확인하고 메시지 배달을 수락합니다. 이제 메시지가 사용자에게 전달된 것으로 보고됩니다. ISP의 MTA는 이제 메시지 전달 방법을 확인하고 메시지를 배치할 다음 사이트를 찾을 수 있습니다. 메시지는 최종 목적지인 호스트를 찾기 전에 이런 방식으로 여러 홉을 만들 수 있습니다. 이 MTA는 이를 대상 사용자의 편지함(보통 서버의 로컬 편지함)에 넣는 방법을 알고 있습니다. 이제 수신자는 MUA를 켜고 ISP의 MDA에 연결할 수 있습니다. MDA는 로컬 파일 시스템을 살펴보고 새 메시지와 해당 내용을 보고합니다.
따라서 간단한 대답은 다음과 같습니다. Cron은 프로그램이므로 MUA가 아닌 MTA의 프로그래밍 인터페이스를 사용합니다. (크론은 이러한 프로그램과 어떻게 상호 작용해야 합니까?)
MTA를 사용하여 메일을 보내려면: 포트 25, 578 또는 사용하는 포트에 연결하고 SMTP(S) 프로토콜을 사용합니다. 이것이 바로 MUA가 뒤에서 당신을 위해 하는 일입니다. MUA 설정에 사용된 것과 동일한 자격 증명/호스트/포트 설정을 사용할 수 있거나 사용해야 합니다.
MUA는 MTA와의 네트워크 통신이 가능합니다. 그러므로, 각 머신에 로컬 MTA가 필요하지 않습니다(Thunderbird를 실행하기 위해 로컬에서 postfix를 실행할 필요는 없습니다, 그렇죠?).
그러나 어디에서나 메일을 보낼 수 있어야 하는 시스템의 서비스에 대해 이야기할 때 실제로는 두 가지 옵션이 있습니다.
- 프로그램(예: cron)은 메일을 수락하는 원격 MTA를 알고 있습니다. 이는 프로그램별로 개별적으로 수행해야 하는데, 이는 많은 서비스를 관리할 때 번거로운 작업입니다.
- 모든 메일에는 "기본 경로"가 있습니다. 그러면 모든 로컬 프로그램이 수동 구성 없이 해당 경로를 간단히 사용할 수 있습니다.
여기에서 위에서 언급한 유닉스 철학이 적용됩니다. 모든 프로그램에 대해 통신(및 인증 등)을 구현하는 대신 한 번만 수행하고(MTA) 프로그램은 로컬 서비스에서 메일을 수락하는 기본 인터페이스를 제공합니다( 명령 또는 네트워크 포트로 파이프되는 유닉스 소켓 인터페이스). 이것이 대부분의 서비스가 로컬 MTA가 실행 중이라고 가정하는 이유입니다. MTA는 정렬 등을 위해 단순히 메일을 더 큰 MTA로 전달하는 매우 작은 MTA일 수 있습니다.
여기서 사실상의 표준은 최근 프로그램인 sendmail(MTA이기도 함)입니다. 큰 문제가 있었기 때문에 여전히 이전 sendmail 인터페이스를 제공하는 postfix와 같은 다른 MTA로 대체되었습니다(이것이 바로 sendmail 래퍼가 postfix 패킷에 존재하는 이유입니다).
편집 1: @Tim, 왜 보내고 받는 것이 대칭이어야 한다고 생각하시나요? MTA는 서버 간 통신을 담당합니다. (다른 사람에게 메일을 보내는 동안) 한쪽 면만 볼 수 있다는 점에서 대칭입니다. 수신은 공급자의 서버에 의해 수행됩니다. 메일 전송 자체는 매우 빠릅니다(몇 밀리초).
따라서 송신 측에는 MDA와 같은 것이 필요하지 않습니다. 한번 시도해 보시면 메일이 배달될 것입니다. 우편 서비스처럼 생각해보세요. 우체국에 패키지를 맡기면 추가 설정이 처리됩니다.
MUA는 단순히 메일을 도중에 보냅니다. 첫 번째 MTA에서 승인되면 MUA는 이를 고려합니다.보내다. 다시 한 번, 우편 서비스를 예로 들어 보겠습니다. 보내기 위해 우체국에 패키지를 넣으면 배달될 것이라고 가정합니다. 도중에 문제가 발생하면 패키지를 반품해 드립니다. 배송 중 메일에 문제가 있을 때 발생합니다. 메시지가 다음 정류장으로 배달될 수 없는 경우 MTA는 반환 메시지(소위 바운스 메시지)를 보냅니다.
이제 다시 수신 측에 있습니다. 나는 우편 아날로그를 다시 선택하는 것으로 시작했습니다. 항상 연락이 가능하고 항상 같은 위치에 있는 경우 우체부가 직접 귀하에게 와서 우편물을 배달할 수 있습니다. 이는 MTA가 귀하에게 직접 메일을 보낼 것임을 의미합니다.
불행하게도 당신은 비정적 IP를 가지고 있고(항상 같은 위치에 있지는 않음) 항상 거기에 있는 것은 아닙니다(항상 집에 있는 것은 아닙니다). 따라서 MTA에서 메일 배달을 시도할 수 있지만 귀하의 부재로 인해 메일이 반송됩니다(위 참조).
이를 방지하려면 자신만의 이메일 주소가 있어야 합니다. 이는 이메일과 일반 메일 모두에 해당됩니다. 우체국 직원/MTA는 자신이 정한 시간(시간)에 맞춰 우편물을 우편함에 넣습니다. 메시지를 전달해야 할 때마다 그는 그렇게 할 수 있습니다. MTA의 경우 이는 전용 폴더에 파일을 저장하는 것을 의미합니다.
사서함은 귀하와 우체부 사이의 동기화 요소를 나타냅니다. 언제든지 P.O로 갈 수 있습니다.너올바른 것을 찾아 게시물을 찾으십시오. MTA는 메시지를 서버에 저장하기 때문에 직접 액세스할 수 없습니다. 이것이 바로 MDA가 유용한 곳입니다. MDA를 사용하면 귀하를 대신하여 귀하가 원하는 시간에 사서함에 액세스할 수 있습니다.