접미사 구성:
~ # postconf -n | grep mynetworks
mynetworks = 127.0.0.0/8
mynetworks_style = host
smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, reject
smtpd_relay_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination, reject
smtpd_sender_restrictions = reject_sender_login_mismatch, reject_non_fqdn_sender, reject_unlisted_sender, permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination, reject_invalid_hostname, reject_unknown_sender_domain, reject_unauth_pipelining, reject
그러나 내 기대와는 달리 postfix 서버는 존재하지 않는 도메인, 잘못된 도메인의 모든 것을 허용합니다. 이에 대해 전혀 책임이 없으며 따라서 오픈 릴레이입니다.
{} ~ telnet SERVER 25
Trying IP...
Connected to SERVER.
Escape character is '^]'.
220 SERVER ESMTP Postfix (Debian/GNU)
HELO google.de
250 SERVER
MAIL FROM: [email protected]
250 2.1.0 Ok
RCPT TO: [email protected]
250 2.1.5 Ok
DATA
354 End data with <CR><LF>.<CR><LF>
Subject: Test
.
250 2.0.0 Ok: queued as 4AB737C1039
QUIT
221 2.0.0 Bye
Connection closed by foreign host.
보시다시피 이는 postfix 구성에 정의된 여러 규칙을 명백히 위반합니다.
Q: 이 문제를 해결하는 이유와 방법은 무엇입니까?
전체 접미사 구성:
~ # postconf -n
alias_database = hash:/etc/aliases
alias_maps = hash:/etc/aliases
append_dot_mydomain = no
biff = no
compatibility_level = 2
home_mailbox = Mail/Inbox/
inet_interfaces = all
inet_protocols = all
mailbox_command = /usr/lib/dovecot/deliver
mailbox_size_limit = 0
milter_default_action = accept
milter_protocol = 6
mydestination = $myhostname, SERVER, localhost.DOMAIN, localhost
myhostname = SERVER
mynetworks = 127.0.0.0/8
mynetworks_style = host
myorigin = /etc/mailname
non_smtpd_milters = inet:localhost:12301
readme_directory = no
recipient_delimiter = +
smtp_tls_CAfile = /etc/letsencrypt/live/SERVER/cert.pem
smtp_tls_CApath = /etc/ssl/certs
smtp_tls_mandatory_protocols = !SSLv2, !SSLv3, !TLSv1, !TLSv1.1
smtp_tls_protocols = !SSLv2, !SSLv3, !TLSv1, !TLSv1.1
smtp_tls_security_level = may
smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache
smtpd_banner = $myhostname SOOS ESMTP $mail_name (Debian/GNU)
smtpd_milters = inet:localhost:12301
smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, reject
smtpd_relay_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination, reject
smtpd_sasl_auth_enable = yes
smtpd_sasl_path = private/auth
smtpd_sasl_security_options = noanonymous, noplaintext
smtpd_sasl_tls_security_options = noanonymous
smtpd_sasl_type = dovecot
smtpd_sender_restrictions = reject_sender_login_mismatch, reject_non_fqdn_sender, reject_unlisted_sender, permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination, reject_invalid_hostname, reject_unknown_sender_domain, reject_unauth_pipelining, reject
smtpd_tls_auth_only = yes
smtpd_tls_cert_file = /etc/letsencrypt/live/SERVER/fullchain.pem
smtpd_tls_exclude_ciphers = aNULL, LOW, EXP, MEDIUM, ADH, AECDH, MD5, DSS, ECDSA, CAMELLIA128, 3DES, CAMELLIA256, RSA+AES, eNULL
smtpd_tls_key_file = /etc/letsencrypt/live/SERVER/privkey.pem
smtpd_tls_mandatory_protocols = !SSLv2, !SSLv3, !TLSv1, !TLSv1.1
smtpd_tls_protocols = !SSLv2, !SSLv3, !TLSv1, !TLSv1.1
smtpd_tls_security_level = may
tls_preempt_cipherlist = yes
답변1
청취 인터페이스는 무제한입니다lo/127.0.0.1
inet_interfaces = all
답변2
확인을 위해 텔넷 테스트를 수행할 때 mail.log를 추적하는 것이 좋습니다.확실히연결하려는 IP 주소는 실제로 네트워크에 없습니다. 그렇다면 릴레이 제한의 첫 번째 규칙이 트래픽을 허용합니다.
예를 들어 방화벽의 구성 변경으로 인해 피어링 연결의 소스 IP가 차단되었습니다. 이것은 만든다모두연결이 네트워크 내에 있는 것 같습니다. postfix 구성에는 아무것도 변경되지 않았습니다. 메일 로그에 따르면 모든 트래픽은 방화벽 자체에서 발생합니다. 모두에게 나쁜 날입니다.
인터페이스를 localhost로 설정한다는 것은 localhost에서도 연결한다는 의미입니다. 지정된 규칙에 따라 릴레이회의이 경우에는 허용됩니다.