CentOS 7 서버에는 postfix, dovecot 및 mailx가 설치되어 있습니다. 내 로컬 devbox에서 실행되는 원격 Thunderbird 클라이언트에서 서버에 IMAP 연결을 만들 수 있습니다. 하지만 내 개발 박스에 로컬로 설치된 Thunderbird에서 서버를 통해 이메일을 보낼 수 없습니다. 많은 연구 끝에 내 devbox ISP가 포트 25를 차단했기 때문에 원인이 발견되었습니다. 그래서메일 발송 포트를 465로 변경하고 싶어요. 여기에는 서버 방화벽 및 postfix에 대한 변경 사항과 devbox Thunderbird의 변경 사항이 포함됩니다.
이 질문은 방화벽으로 인해 상황이 복잡해지는 CentOS 7에서 이 작업을 수행하는 방법을 묻고 있기 때문에 stackexchange 네트워크의 유사한 질문과 다릅니다.
단순히 SMTP 포트를 변경하는 것의 문제점은 다른 메일 서버가 서로 이메일을 보낼 때 포트 25를 사용한다는 것입니다. smtp 포트를 465로 변경하면 아무도 내 서버에 이메일을 보낼 수 없습니다. 내 아웃바운드 이메일이 포트 465를 통과하고 포트 25는 다른 메일 서버에서 메일을 받기 위해 열려 있도록 postfix, Firewalld 및 Thunderbird를 어떻게 변경합니까?
특정 구성 파일에 대한 특정 구문이 필요합니다. 나는 이미 알고 있다대답은 릴레이 호스트 설정과 관련이 있습니다. 하지만 CentOS 7에서는 어떻게 설정하나요?
지금까지 내가 한 일은 다음과 같습니다.
465 inet n - - - - smtpd
1.) 다음 줄을 다음에 추가합니다 /etc/postfix/master.cf
.
# =========================================
# service type private unpriv chroot wakeup maxproc command + args
# (yes) (yes) (yes) (never) (100)
# ====================================================================
smtp inet n - n - - smtpd
465 inet n - - - - smtpd
/usr/lib/firewalld/services/smtp.xml
2.) 그런 다음 다음과 같이 읽어 방화벽의 SMTP 포트 번호를 465로 변경했습니다.
<?xml version="1.0" encoding="utf-8"?>
<service>
<short>Mail (SMTP)</short>
<description>This option allows incoming SMTP mail delivery. If you need to allow remote hosts to connect directly to your machine to deliver mail, enable this option. You $
<port protocol="tcp" port="465"/>
</service>
3.) 여전히 서버에 있는 상태에서 systemctl stop postfix
그런 systemctl start postfix
다음 입력하면 systemctl status postfix
모든 것이 잘 됩니다. 그러면 firewall-cmd --reload
타이핑하는 데 아무런 문제가 없었습니다.
4.) 다음으로, devbox의 Thunderbird에서 나가는 smtp 포트를 465로 변경했습니다.
5.) 서버에서 @derobert의 제안에 따라 tcpdump -n -i any tcp port 465
내 devbox Thunderbird를 입력하고 사용하여 서버를 통해 이메일을 보내고 서버에서 다음을 인쇄해 보았습니다.
tcpdump -n -i any tcp port 465
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on any, link-type LINUX_SLL (Linux cooked), capture size 65535 bytes
18:07:36.276193 IP my.SERVER.ip.addr.urd > my.DEVBOX.ip.addr.37589: Flags [S.], seq 3232257854, ack 2935370285, win 14480, options [mss 1460,sackOK,TS val 979486294 ecr 14200749,nop,wscale 7], length 0
18:07:36.361712 IP my.DEVBOX.ip.addr.37589 > my.SERVER.ip.addr.urd: Flags [.], ack 1, win 115, options [nop,nop,TS val 14200832 ecr 979486294], length 0
18:07:36.362152 IP my.SERVER.ip.addr.urd > my.DEVBOX.ip.addr.37589: Flags [P.], seq 1:43, ack 1, win 114, options [nop,nop,TS val 979486380 ecr 14200832], length 42
18:07:36.366824 IP my.DEVBOX.ip.addr.37589 > my.SERVER.ip.addr.urd: Flags [P.], seq 1:186, ack 1, win 115, options [nop,nop,TS val 14200832 ecr 979486294], length 185
18:07:36.366865 IP my.SERVER.ip.addr.urd > my.DEVBOX.ip.addr.37589: Flags [.], ack 186, win 122, options [nop,nop,TS val 979486385 ecr 14200832], length 0
18:07:36.454916 IP my.DEVBOX.ip.addr.37589 > my.SERVER.ip.addr.urd: Flags [.], ack 43, win 115, options [nop,nop,TS val 14200920 ecr 979486380], length 0
18:07:36.454961 IP my.SERVER.ip.addr.urd > my.DEVBOX.ip.addr.37589: Flags [P.], seq 43:195, ack 186, win 122, options [nop,nop,TS val 979486473 ecr 14200920], length 152
18:07:36.539237 IP my.DEVBOX.ip.addr.37589 > my.SERVER.ip.addr.urd: Flags [.], ack 195, win 123, options [nop,nop,TS val 14201009 ecr 979486473], length 0
18:09:20.466757 IP my.DEVBOX.ip.addr.37589 > my.SERVER.ip.addr.urd: Flags [F.], seq 186, ack 195, win 123, options [nop,nop,TS val 14304941 ecr 979486473], length 0
18:09:20.467113 IP my.SERVER.ip.addr.urd > my.DEVBOX.ip.addr.37589: Flags [F.], seq 195, ack 187, win 122, options [nop,nop,TS val 979590485 ecr 14304941], length 0
18:09:20.550693 IP my.DEVBOX.ip.addr.37589 > my.SERVER.ip.addr.urd: Flags [.], ack 196, win 123, options [nop,nop,TS val 14305025 ecr 979590485], length 0
^C
11 packets captured
12 packets received by filter
0 packets dropped by kernel
6.) 다시 한 번 @derobert의 제안에 따라 devbox에서 nc my.server.ip.addr 465 < /dev/null
터미널에 응답을 입력하고 인쇄했습니다 220 mydomain.com ESMTP Postfix
.
Thunderbird의 발신 서버(SMTP) 설정은 다음과 같습니다:
Description: <Not Specified>
Server Name: mydomain.com
Port: 465
User Name: me
Authentication Method: Normal Password
Connection Security: SSL/TLS
하지만 Thunderbird 연결 시간이 여전히 초과되어 이메일이 전송되지 않습니다. 또 무엇을 해야 합니까?
참고: /usr/lib/firewalld/services/smtp.xml
포트 25를 표시하도록 다시 변경하고 위의 다른 5단계에서 다른 모든 항목을 동일하게 유지했을 때 서버에서 이메일을 받을 수 있는 기능을 다시 얻었지만 서버를 통해 이메일을 보낼 수는 없었습니다.
편집하다:
@jsbillings는 master.cf에 제출 포트를 정의할 것을 제안했습니다. 더 발전하기 위해 postconf -M
터미널에 master.cf의 관련 내용을 입력하고 인쇄했습니다. 여전히 이메일을 보낼 수 없습니다. 하지만 오늘 이 문제를 해결하는 동안 변경한 결과는 다음과 같습니다.
smtp inet n - n - - smtpd
587 inet n - - - - smtpd
submission inet n - - - - smtpd
-o smtpd_tls_security_level=encrypt -o smtpd_sasl_auth_enable=yes
-o smtpd_sasl_type=dovecot -o smtpd_sasl_path=private/auth
-o smtpd_sasl_security_options=noanonymous
-o smtpd_sasl_local_domain=$myhostname
-o smtpd_client_restrictions=permit_sasl_authenticated,reject
-o smtpd_sender_login_maps=hash:/etc/postfix/virtual
-o smtpd_sender_restrictions=reject_sender_login_mismatch
-o smtpd_recipient_restrictions=permit_sasl_authenticated,reject
pickup unix n - n 60 1 pickup
cleanup unix n - n - 0 cleanup
qmgr unix n - n 300 1 qmgr
tlsmgr unix - - n 1000? 1 tlsmgr
rewrite unix - - n - - trivial-rewrite
bounce unix - - n - 0 bounce
defer unix - - n - 0 bounce
trace unix - - n - 0 bounce
verify unix - - n - 1 verify
flush unix n - n 1000? 0 flush
proxymap unix - - n - - proxymap
proxywrite unix - - n - 1 proxymap
smtp unix - - n - - smtp
relay unix - - n - - smtp
showq unix n - n - - showq
error unix - - n - - error
retry unix - - n - - error
discard unix - - n - - discard
local unix - n n - - local
virtual unix - n n - - virtual
lmtp unix - - n - - lmtp
anvil unix - - n - 1 anvil
scache unix - - n - 1 scache
답변1
다른 사람들이 포트 25가 아닌 다른 포트에서 수신 대기하는 SMTP 서버를 가질 것이라고 기대할 수는 없습니다. ISP가 아웃바운드 포트 25를 차단하는 경우 ISP를 통해 메일을 릴레이하도록 postfix 시스템을 설정할 수 있습니다.Comcast의 이 예에서는.
하지만 솔직히 아웃바운드 포트 25를 차단하는 ISP에서 자체 메일 서비스를 실행하고 있다면 포트 25를 차단하지 않는 상용 인터넷 제공업체로 서비스를 전환하거나 메일을 호스팅으로 옮기는 것이 좋습니다. SMTP 공급자를 허용합니다.
편집하다:
이제 질문하신 내용을 더 잘 이해하게 되었습니다. SMTP 서버가 메일을 수락하도록 하려는 경우그리고SMTP 제출 호스트입니다. 두 번째 서비스를 추가 /etc/postfix/master.cf
하고 SASL 인증을 설정해야 합니다. Dovecot 위키에는구성 예이 과정을 위해.