Jak poprawić Postfix „Odmowa dostępu”


54

Dziś rano, aby rozwiązać problem z niedopasowaniem nazwy w certyfikacie bezpieczeństwa, wykonałem zalecane kroki z części Jak naprawić SSL serwera poczty? , ale teraz, gdy próbuję wysłać wiadomość e-mail od klienta (w tym przypadku klientem jest Poczta systemu Windows), pojawia się następujący błąd.

Odrzucony adres e-mail to „email@gmail.com”. Temat „To jest test. ”, Konto:„ mail.domain.com ”, Serwer:„ mail.domain.com ”, Protokół: SMTP, Odpowiedź serwera:„ 554 5.7.1: Odmowa dostępu do przekaźnika ”, Port: 25, Bezpieczny (SSL): Nie , Błąd serwera: 554, Numer błędu: 0x800CCC79

Edycja : Nadal mogę pobierać wiadomości e-mail z tego konta i wysyłam wiadomości e-mail na inne konta w tej samej domenie. Po prostu nie mogę wysyłać wiadomości e-mail do odbiorców spoza naszej domeny.

Próbowałem całkowicie wyłączyć TLS, ale bez kości, wciąż pojawia się ten sam błąd.

Kiedy sprawdzam plik mail.log, widzę następujące.

Jul 18 08:24:41 company imapd: LOGIN, user=user_name@domain.com, ip=[::ffff:111.111.11.11], protocol=IMAP
Jul 18 08:24:42 company imapd: DISCONNECTED, user=user_name@domain.com, ip=[::ffff:111.111.11.11], headers=0, body=0, rcvd=83, sent=409, time=1
Jul 18 08:25:19 company postfix/smtpd[29282]: connect from company.university.edu[111.111.11.11]
Jul 18 08:25:19 company postfix/smtpd[29282]: NOQUEUE: reject: RCPT from company.university.edu[111.111.11.11]: 554 5.7.1 <email@gmail.com>: Relay access denied; from=<user_name@domain.com> to=<email@gmail.com> proto=ESMTP helo=<UserPC>
Jul 18 08:25:19 company postfix/smtpd[29282]: disconnect from company.university.edu[111.111.11.11]
Jul 18 08:25:22 company imapd: DISCONNECTED, user=user_name@domain.com, ip=[::ffff:111.111.11.11], headers=13, body=142579, rcvd=3289, sent=215892, time=79

Plik main.cfwygląda następująco:

#
# Postfix MTA Manager Main Configuration File;
#
# Please do NOT edit this file manually;
#

#
# Postfix directory settings; These are critical for normal Postfix MTA functionallity;
#

command_directory = /usr/sbin
daemon_directory = /usr/lib/postfix
program_directory = /usr/lib/postfix

#
# Some common configuration parameters;
#

inet_interfaces = all
mynetworks = 127.0.0.0/8
mynetworks_style = host

myhostname = mail.domain.com
mydomain = domain.com
myorigin = $mydomain

smtpd_banner = $myhostname ESMTP 2.4.7.1 (Debian/GNU)
setgid_group = postdrop

#
# Receiving messages parameters;
#

mydestination = localhost, company 
append_dot_mydomain = no
append_at_myorigin = yes
transport_maps = mysql:/etc/postfix/transport.cf

#
# Delivering local messages parameters;
#

mail_spool_directory = /var/spool/mail
mailbox_size_limit = 0
mailbox_command = procmail -a "$EXTENSION"

biff = no

alias_database = hash:/etc/aliases

local_recipient_maps =

#
# Delivering virtual messages parameters;
#
virtual_mailbox_maps=mysql:/etc/postfix/mysql_virt.cf
virtual_uid_maps=mysql:/etc/postfix/uids.cf
virtual_gid_maps=mysql:/etc/postfix/gids.cf
virtual_mailbox_base=/usr/local/virtual
virtual_maps=mysql:/etc/postfix/virtual.cf
virtual_mailbox_domains=mysql:/etc/postfix/virtual_domains.cf


#
# SASL paramters;
#
smtp_use_tls = yes
smtpd_use_tls = yes
smtpd_tls_auth_only = yes
smtpd_tls_loglevel = 1
smtpd_tls_received_header = yes
smtpd_tls_session_cache_timeout = 3600s

smtp_tls_CAfile = /etc/postfix/ssl/smptd.pem
smtp_tls_cert_file = /etc/postfix/ssl/smptd.crt
smtp_tls_key_file = /etc/postfix/ssl/smptd.key

smtpd_tls_CAfile = /etc/postfix/ssl/smptd.pem
smtpd_tls_cert_file = /etc/postfix/ssl/smptd.crt
smtpd_tls_key_file = /etc/postfix/ssl/smptd.key

smtpd_sasl_auth_enable = yes

smtpd_sasl_security_options = noanonymous

smtpd_sasl_local_domain =

broken_sasl_auth_clients = yes

smtpd_sender_restrictions =
        permit_sasl_authenticated
        permit_mynetworks

smtpd_recipient_restrictions =
        permit_sasl_authenticated
        check_recipient_access hash:/etc/postfix/filtered_domains
        permit_mynetworks
        reject_unauth_destination

Na marginesie, mój pracodawca chce móc wysyłać wiadomości e-mail od klientów (Thunderbird i Outlook) zarówno z naszej sieci lokalnej, jak i poza nią.


6
Dlaczego nie akceptujesz?
Wieżowiec

Odpowiedzi:


58

TLS po prostu włącza szyfrowanie w sesji smtp i nie wpływa bezpośrednio na to, czy Postfix będzie mógł przekazać wiadomość.

Komunikat o odmowie przekazania występuje, ponieważ reguły smtpd_recipient_restrictions nie zostały dopasowane. Aby komunikat mógł przejść, należy spełnić jeden z tych warunków:

smtpd_recipient_restrictions =
    permit_sasl_authenticated
    check_recipient_access hash:/etc/postfix/filtered_domains
    permit_mynetworks
    reject_unauth_destination

Aby wyjaśnić te zasady:

permit_sasl_authenticated

pozwala uwierzytelnionym nadawcom za pośrednictwem SASL. Będzie to konieczne do uwierzytelnienia użytkowników spoza sieci, którzy są zwykle zablokowani.

check_recipient_access

Spowoduje to, że postfix będzie szukał w / etc / postfix / filter_domains reguł w oparciu o adres odbiorcy. (Sądząc po nazwie pliku w nazwie pliku, prawdopodobnie po prostu blokuje określone domeny ... Sprawdź, czy gmail.com jest tam wymieniony?)

permit_mynetworks

Pozwoli to hostom według adresu IP, które pasują do zakresów IP określonych w $ mynetworks. W opublikowanym main.cf $ mynetworks ustawiono na 127.0.0.1, więc będzie przekazywał tylko wiadomości e-mail generowane przez sam serwer.

W oparciu o tę konfigurację klient poczty będzie musiał użyć uwierzytelniania SMTP, zanim będzie mógł przekazywać wiadomości. Nie jestem pewien, jakiej bazy danych używa SASL. Jest to określone w /usr/lib/sasl2/smtpd.conf Prawdopodobnie korzysta również z tej samej bazy danych co wirtualne skrzynki pocztowe, więc powinieneś móc włączyć uwierzytelnianie SMTP w swoim kliencie pocztowym i wszystko było ustawione.


14
smtpd_use_tls = no

Wyłączyłeś TLS, więc musisz teraz autoryzować sieć lokalną, dodając ją do mynetworks. Na przykład,

mynetworks = 192.168.1.0/24 127.0.0.0/8

Naprawi to wysyłanie tylko z sieci lokalnej. Aby wysyłać wiadomości e-mail spoza Twojej sieci lokalnej, musisz uruchomić uwierzytelnianie TLS.


Ustawiłem smtpd_use_tls = tak, ponieważ musimy być w stanie wysyłać wiadomości e-mail spoza sieci. Jednak problem utrzymuje się.
Noah Goodrich

Podbij smtpd_tls_loglevel do 3 i sprawdź, czy w dziennikach pojawi się coś interesującego (i pamiętaj, aby po zakończeniu zrzucić go z powrotem do 1 lub 0).
str.

Spróbuj także ustawić wartość smtp_use_tls na no (do wysyłania zewnętrznego e-maila). Zobacz postfix.org/postconf.5.html#smtp_use_tls
PGS

1
-1, ponieważ nie wszyscy mogą wyłączyć tls.
jgifford25

3
Nie mówię, że powinien wyłączyć tls; Mówię, że skoro już ją wyłączył, musi skonfigurować mynetworks. I że pełnym rozwiązaniem jest ponowne uruchomienie tls.
str.

6

Myślę, że tęsknisz za domeną domena.com w moim przeznaczeniu, ponieważ domyślnie relay_domains=$mydestinationmożesz dołączyć konfigurację linii:

mydestinations = $mydomain, $myhostname, localhost, localhost.localdomain

lub:

relay_domains = $mydomain

Nie zapomnij zrestartować serwera Postfix za service postfix restartkażdym razem, gdy edytujesz plik conf postfix.


+ 1 za dodanie „localhost, localhost.localdomain” do listy hostów (często problem na niektórych systemach, nie jest jasne, dlaczego nie jest to problem na innych)
Iain Collins

2

Miałem ten sam problem w Outlooku (z backendem dovecote i postfiksem) i spędziłem dwa dni na szukaniu rozwiązania i ulepszaniu moich plików konfiguracyjnych. Wszystko, co musiałem zrobić, to zaznaczyć „Serwer wymaga uwierzytelnienia” na karcie Wychodzące w ustawieniach poczty w programie Outlook, a moje wiadomości są teraz wysyłane do Gmaila. Zobacz szczegółowe instrukcje, jak znaleźć ustawienie tutaj http://support.bluetie.com/node/440 .


2

Ten problem mnie trochę denerwował. Próbowałem połączyć się z server1.domain.com z server2.domain.com.

Oto jak to naprawiłem -

#/etc/postfix/main.cf
mydomain = server1.domain.com
myhostname = $mydomain
virtual_alias_maps = hash:/etc/postfix/virtual
alias_database = hash:/etc/postfix/virtual
myorigin = /etc/mailname
mydestination = localhost.localdomain localhost $mydomain
relayhost =
mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128
mailbox_size_limit = 0
recipient_delimiter = +
inet_interfaces = all

Musisz także upewnić się, że poprawnie ustawiłeś / etc / hosts i / etc / hostname oraz że wykonałeś następujące zmiany po zmianach sieciowych -

sudo service networking restart

i następujące po zmianach konfiguracji Postfiksa

sudo service postfix reload

0

Dla mnie: musiałem dodać localhostdo mynetworkstego, niezależnie od tego, że 127.0.0.0/8już tam był. Teraz wygląda to następująco:

mynetworks = 1.1.1.1/32, 127.0.0.0/8, localhost

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.