ฉันได้กำหนดค่า Postfix, Dovecot, Roundcube, Fail2Ban ที่ทำงานบน Apache และ MySQL โดยทำตามคำแนะนำที่นี่: https://www.linuxbabe.com/mail-server/ubuntu-16-04-iredmail-server-installation ฉันติดตั้งคอลเล็กชันแล้ว ของแพ็คเกจบน Ubuntu Server 16.04

ชื่อโฮสต์: mail.mydomain.com

IP: 10.10.10.11

ฉันทำตามคำแนะนำอย่างละเอียด แต่ยังไม่ได้กำหนดค่าระบบให้รับอีเมลสำหรับโดเมนมากกว่าหนึ่งโดเมน (ฉันต้องการเพียงโดเมนเดียวเท่านั้น) เซิร์ฟเวอร์นี้อยู่หลังไฟร์วอลล์ pfSense โดยมีพอร์ตที่จำเป็นที่ส่งต่อจาก WAN IP ของฉันไปยังเซิร์ฟเวอร์เมล

Pub.lic.ip.address -> 10.10.10.11

ยาวและสั้นคือ : ฉันสามารถส่งอีเมลออกไปและทั่วๆ ไปได้ แต่ไม่สามารถรับจดหมายจากภายนอกองค์กรได้ สิ่งที่ฉันได้ลอง:

DNS ของฉันได้รับการกำหนดค่าอย่างถูกต้องด้วยระเบียน A, MX, PTR, SPF และ TXT ซึ่งระบุว่าโดเมนผู้ส่งของฉันน่าเชื่อถือและอินเทอร์เน็ตสามารถค้นหาเซิร์ฟเวอร์อีเมลที่ถูกต้องได้สำเร็จ (ได้รับบน IP เดียวกันกับโดเมนราก) และมี/คือ ไม่มีปัญหา (นี่คือคำแนะนำ #2 ดูเหมือนว่าผู้คนจะโพสต์ในฟอรัม)

ฉันสามารถ telnet พอร์ต 25 เข้าสู่เซิร์ฟเวอร์จากภายใน LAN ของฉัน 10.10.10.10 -> 10.10.10.11:25

ฉันไม่สามารถ telnet ไปยังเซิร์ฟเวอร์ของฉันผ่านพอร์ต 25 จากภายนอกโดเมนของฉันได้ ฉันรู้ว่าสิ่งที่ #1 ทุกคนแนะนำในฟอรัมคือ "ISP ของคุณต้องบล็อกพอร์ต 25" แต่นี่ไม่เป็นความจริงในกรณีของฉัน... ฉันสามารถเปลี่ยนการตั้งค่า NAT บน pfSense เพื่อส่งต่อพอร์ต WAN 25 ไปยังพอร์ต LAN 587 telnet จาก WAN ผ่านพอร์ต 25 และได้รับการตอบสนองสำเร็จ

ฉันได้แนบ main.cf ที่แก้ไขแล้ว (ลบ IP ที่กำหนดเองและชื่อโดเมนเพื่อความปลอดภัย) และคุณสามารถเห็นได้ในการกำหนดค่าที่ฉันทำดังต่อไปนี้:

ฉันได้แก้ไขให้รวมซับเน็ต 10.10.10.0/24 ของฉัน

ฉันได้เพิ่มการตั้งค่าที่แนะนำไปยังปลายทางของฉันแล้ว =

ฉันยังพบการอ้างอิงถึงที่อยู่เครือข่ายภายนอก proxy/nat และได้เพิ่มไปยัง main.cf ของฉันโดยไม่มีการเปลี่ยนแปลง: http://www.postfix.org/BASIC_CONFIGURATION_README.html#proxy_interfaces

enter # location of the Postfix queue. Default is /var/spool/postfix.
queue_directory = /var/spool/postfix

# location of all postXXX commands. Default is /usr/sbin.
command_directory = /usr/sbin

daemon_directory = /usr/lib/postfix/sbin

data_directory = /var/lib/postfix

mail_owner = postfix

sendmail_path = /usr/sbin/sendmail

newaliases_path = /usr/bin/newaliases

mailq_path = /usr/bin/mailq

setgid_group = postdrop

debugger_command =
    PATH=/bin:/usr/bin:/usr/local/bin:/usr/X11R6/bin
    ddd $daemon_directory/$process_name $process_id & sleep 5

debug_peer_level = 2

# SMTP server response code when recipient or domain not found.
unknown_local_recipient_reject_code = 550

# Do not notify local user.
biff = no

# Disable the rewriting of "site!user" into "[email protected]".
swap_bangpath = no

# Disable the rewriting of the form "user%domain" to "[email protected]".
allow_percent_hack = no

# Allow recipient address start with '-'.
allow_min_user = no

disable_vrfy_command = yes

# Enable both IPv4 and/or IPv6: ipv4, ipv6, all.
inet_protocols = all

# Enable all network interfaces.
inet_interfaces = all

#
# TLS settings.
#
# SSL key, certificate, CA
#
smtpd_tls_key_file = /etc/ssl/private/iRedMail.key
smtpd_tls_cert_file = /etc/ssl/certs/iRedMail.crt
smtpd_tls_CAfile = /etc/ssl/certs/iRedMail.crt

#
# Disable SSLv2, SSLv3
#
smtpd_tls_protocols = !SSLv2 !SSLv3
smtpd_tls_mandatory_protocols = !SSLv2 !SSLv3
smtp_tls_protocols = !SSLv2 !SSLv3
smtp_tls_mandatory_protocols = !SSLv2 !SSLv3
lmtp_tls_protocols = !SSLv2 !SSLv3
lmtp_tls_mandatory_protocols = !SSLv2 !SSLv3

#
# Fix 'The Logjam Attack'.
#
smtpd_tls_exclude_ciphers = aNULL, eNULL, EXPORT, DES, RC4, MD5, PSK, aECDH, EDH-DSS-DES-CBC3-SHA, EDH-RSA-DES-CDC3-SHA, KRB5-DE5, CBC3-SHA
smtpd_tls_dh512_param_file = /etc/ssl/dh512_param.pem
smtpd_tls_dh1024_param_file = /etc/ssl/dh2048_param.pem

tls_random_source = dev:/dev/urandom


smtp_tls_loglevel = 1
smtpd_tls_loglevel = 1

# Opportunistic TLS: announce STARTTLS support to remote SMTP clients, but do
# not require that clients use TLS encryption.
smtpd_tls_security_level = may

# This is disabled by default, as the information may be modified in transit
# through other mail servers. Only information that was recorded by the final
# destination can be trusted.
#smtpd_tls_received_header = yes

smtp_tls_security_level = may

# Use the same CA file as smtpd.
smtp_tls_CAfile = $smtpd_tls_CAfile
smtp_tls_note_starttls_offer = yes

#enable_long_queue_ids = yes

# Reject unlisted sender and recipient
smtpd_reject_unlisted_recipient = yes
smtpd_reject_unlisted_sender = yes

# Header and body checks with PCRE table
header_checks = pcre:/etc/postfix/header_checks
body_checks = pcre:/etc/postfix/body_checks.pcre

#smtpd_command_filter = pcre:/etc/postfix/command_filter.pcre

# HELO restriction
smtpd_helo_required = yes
smtpd_helo_restrictions =
    permit_mynetworks
    permit_sasl_authenticated
    check_helo_access pcre:/etc/postfix/helo_access.pcre
    reject_non_fqdn_helo_hostname
    reject_unknown_helo_hostname

# Sender restrictions
smtpd_sender_restrictions =
    permit_mynetworks
    permit_sasl_authenticated
    reject_unknown_sender_domain
    reject_non_fqdn_sender
    reject_unlisted_sender
    check_sender_access pcre:/etc/postfix/sender_access.pcre

# Recipient restrictions
smtpd_recipient_restrictions =
    permit_mynetworks
    permit_sasl_authenticated
    reject_unknown_sender_domain
    reject_non_fqdn_sender
    reject_unlisted_sender
    check_sender_access pcre:/etc/postfix/sender_access.pcre

# Recipient restrictions
smtpd_recipient_restrictions =
    permit_mynetworks
    permit_sasl_authenticated
    reject_unknown_recipient_domain
    reject_non_fqdn_recipient
    reject_unlisted_recipient
    check_policy_service inet:127.0.0.1:7777
    reject_unauth_destination

# END-OF-MESSAGE restrictions
smtpd_end_of_data_restrictions =
    check_policy_service inet:127.0.0.1:7777

# Data restrictions
smtpd_data_restrictions = reject_unauth_pipelining

proxy_read_maps = $canonical_maps $lmtp_generic_maps $local_recipient_maps $mydestination $mynetworks $recipient_bcc_maps $recipient_canonical_maps $relay_domains $relay_recipient_maps $relocated_maps $sender_bcc_maps $sender_canonical_maps $smtp_generic_maps $smtpd_sender_login_maps $transport_maps $virtual_alias_domains $virtual_alias_maps $virtual_mailbox_domains $virtual_mailbox_maps $smtpd_sender_restrictions $sender_dependent_relayhost_maps

# Avoid duplicate recipient messages. Default is 'yes'.
enable_original_recipient = no

# Virtual support.
virtual_minimum_uid = 2000
virtual_uid_maps = static:2000
virtual_gid_maps = static:2000
virtual_mailbox_base = /var/vmail

# Do not set virtual_alias_domains.
virtual_alias_domains =

#
# Enable SASL authentication on port 25 and force TLS-encrypted SASL authentication.
# WARNING: NOT RECOMMENDED to enable smtp auth on port 25, all end users should
#          be forced to submit email through port 587 instead.
#
#smtpd_sasl_auth_enable = yes
#smtpd_sasl_security_options = noanonymous
#smtpd_tls_auth_only = yes

# hostname
myhostname = mail.mydomain.com
myorigin = mail.mydomain.com
mydomain = mail.mydomain.com


#       MYNETWORKS = ['xx.xx.xx.xx', 'xx.xx.xx.0/24', ...]
#
mynetworks = 10.10.10.0/24, 127.0.0.0/8, [::1]

proxy_interfaces = My.Public.IP.ADDRESS

# Accepted local emails
mydestination = $myhostname, localhost, localhost.localdomain, localhost.mydomain.com, mail.mydomain.com, mydomain.com

alias_maps = hash:/etc/postfix/aliases
alias_database = hash:/etc/postfix/aliases

# Default message_size_limit.
message_size_limit = 15728640

recipient_delimiter = +


compatibility_level = 2

transport_maps =
    proxy:mysql:/etc/postfix/mysql/transport_maps_user.cf
    proxy:mysql:/etc/postfix/mysql/transport_maps_domain.cf

sender_dependent_relayhost_maps =
    proxy:mysql:/etc/postfix/mysql/sender_dependent_relayhost_maps.cf

# Lookup table with the SASL login names that own the sender (MAIL FROM) addresses.
smtpd_sender_login_maps =
    proxy:mysql:/etc/postfix/mysql/sender_login_maps.cf

virtual_mailbox_domains =
    proxy:mysql:/etc/postfix/mysql/virtual_mailbox_domains.cf

relay_domains =
    $mydestination
    proxy:mysql:/etc/postfix/mysql/relay_domains.cf

virtual_mailbox_maps =
    proxy:mysql:/etc/postfix/mysql/virtual_mailbox_maps.cf

virtual_alias_maps =
    proxy:mysql:/etc/postfix/mysql/virtual_alias_maps.cf
    proxy:mysql:/etc/postfix/mysql/domain_alias_maps.cf
    proxy:mysql:/etc/postfix/mysql/catchall_maps.cf
    proxy:mysql:/etc/postfix/mysql/domain_alias_catchall_maps.cf

sender_bcc_maps =
    proxy:mysql:/etc/postfix/mysql/sender_bcc_maps_user.cf
    proxy:mysql:/etc/postfix/mysql/sender_bcc_maps_domain.cf

recipient_bcc_maps =
    proxy:mysql:/etc/postfix/mysql/recipient_bcc_maps_user.cf
    proxy:mysql:/etc/postfix/mysql/recipient_bcc_maps_domain.cf

#
# Postscreen
#
postscreen_greet_action = enforce
postscreen_blacklist_action = enforce
postscreen_dnsbl_action = enforce
postscreen_dnsbl_threshold = 2
postscreen_dnsbl_sites =
    zen.spamhaus.org=127.0.0.[2..11]*3
    b.barracudacentral.org=127.0.0.[2..11]*2

postscreen_dnsbl_reply_map = texthash:/etc/postfix/postscreen_dnsbl_reply
postscreen_access_list = permit_mynetworks cidr:/etc/postfix/postscreen_access.cidr

# Require Postfix-2.11+
postscreen_dnsbl_whitelist_threshold = -2
#
# Dovecot SASL support.
#
smtpd_sasl_type = dovecot
smtpd_sasl_path = private/dovecot-auth
virtual_transport = dovecot
dovecot_destination_recipient_limit = 1

#
# Amavisd + SpamAssassin + ClamAV
#
content_filter = smtp-amavis:[127.0.0.1]:10024

# Concurrency per recipient limit.
smtp-amavis_destination_recipient_limit = 1

/var/log/mail.log แสดง:

“ BlahBlah daemon กำลังทำงาน” และรายงานการเปลี่ยนแปลงเท่านั้นเมื่อฉันส่งออก (ซึ่งใช้งานได้ดีอีกครั้ง) การขาดรายการบันทึกทำให้ฉันเชื่อว่ามีบางอย่างขัดขวางการส่งไปยัง postfix (fail2ban?) หรือ postfix ปฏิเสธความพยายาม SMTP ทันทีเนื่องจากการกำหนดค่าผิดพลาด

ฉันไม่ชอบการโพสต์บนฟอรั่มจนกว่ามันจำเป็นจริงๆ และ ณ ตอนนี้ ฉันกำลังสูญเสียไปโดยสิ้นเชิง ด้วยเหตุผลบางอย่าง พอร์ต 25 ไม่สามารถเข้าถึงได้จากสิ่งใดก็ตามที่อยู่นอกเครือข่ายของฉัน

iptables -L

Chain INPUT (policy DROP)
target     prot opt source               destination
f2b-roundcube  tcp  --  anywhere             anywhere             multiport dports http,https,smtp,submission,pop3,pop3s,imap2,imaps,sieve
f2b-postfix  tcp  --  anywhere             anywhere             multiport dports http,https,smtp,submission,pop3,pop3s,imap2,imaps,sieve
f2b-dovecot  tcp  --  anywhere             anywhere             multiport dports http,https,smtp,submission,pop3,pop3s,imap2,imaps,sieve
f2b-postfix  tcp  --  anywhere             anywhere             multiport dports http,https,smtp,submission,pop3,pop3s,imap2,imaps,sieve
f2b-nginx  tcp  --  anywhere             anywhere             multiport dports http,https,smtp,submission,pop3,pop3s,imap2,imaps,sieve
f2b-sshd-ddos  tcp  --  anywhere             anywhere             multiport dports ssh
f2b-sshd   tcp  --  anywhere             anywhere             multiport dports ssh
ACCEPT     all  --  anywhere             anywhere             state RELATED,ESTABLISHED
ACCEPT     all  --  anywhere             anywhere
ACCEPT     icmp --  anywhere             anywhere             icmp echo-request
ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:ssh
ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:http
ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:https
ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:smtp
ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:submission
ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:pop3
ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:pop3s
ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:imap2
ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:imaps

Chain FORWARD (policy DROP)
target     prot opt source               destination

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination

Chain f2b-dovecot (1 references)
target     prot opt source               destination
RETURN     all  --  anywhere             anywhere

Chain f2b-nginx (1 references)
target     prot opt source               destination
RETURN     all  --  anywhere             anywhere

Chain f2b-postfix (2 references)
target     prot opt source               destination
RETURN     all  --  anywhere             anywhere
RETURN     all  --  anywhere             anywhere

Chain f2b-roundcube (1 references)
target     prot opt source               destination
RETURN     all  --  anywhere             anywhere

Chain f2b-sshd (1 references)
target     prot opt source               destination
RETURN     all  --  anywhere             anywhere

Chain f2b-sshd-ddos (1 references)
target     prot opt source               destination
RETURN     all  --  anywhere             anywhere

การแปล NAT ของฉันบน pfSense อยู่ที่นี่:

ฉันสามารถเปลี่ยนกฎที่ไฮไลต์ด้วยสีแดงเป็น WAN_IP:25 -> LAN_IP:587 ได้ ณ จุดนี้ ฉันสามารถใช้ telnet ผ่านพอร์ต 25 ได้สำเร็จและได้รับการตอบกลับ pfsense แนท

answer

I can telnet port 25 into the server from within my LAN 10.10.10.10 -> 10.10.10.11:25

คุณได้ตรวจสอบกฎไฟร์วอลล์ pfsense สองครั้งแล้วหรือยัง

คุณได้ลองเรียกใช้ tcpdump บนไฟร์วอลล์ pfsense เพื่อตรวจสอบจากแพ็กเก็ตขาเข้าไปจนถึงแพ็กเก็ตขาออกที่กฎ NAT ที่คุณต้องการใช้ทำงาน โดยพอร์ตปลายทางตั้งไว้ที่ 25 และ 587 หรือไม่

ฉันแนะนำให้รัน tcpdump ทั้งบนไฟร์วอลล์และเซิร์ฟเวอร์ระหว่างการทดสอบของคุณเพื่อดูความแตกต่างระหว่างการทดสอบ 2 ครั้ง