Próba skonfigurowania serwera pocztowego nie może doprowadzić do działania portów (25, 587)

9

Szukałem wszędzie i naprawdę mam z tym problem. Myślę, że próbowałem prawie wszystkiego.

Podstawowe informacje

  • VPS z CentOS 6.7
  • Postfiks 2.6.6
  • dovecot, amavis, mysql, fail2ban
  • Sprawdziłem u mojego dostawcy VPS, że nie blokują żadnych portów.

Rzeczy, które zrobiłem

  • Usunięto zapasowy sendmail
  • Zainstalowałem postfix, dovecot, mysql itp., Aby uzyskać kompletne rozwiązanie do obsługi poczty
  • Zezwalam tylko na imap, smtp z STARTTLS (porty 143 i 587)
  • Logowanie SSH wyłączone, tylko z kluczami
  • Mogę odbierać maile (przez port 143)
  • Mogę telnet z localhost na oba porty (587, 25) i otrzymuję pozdrowienie po postfiksie
  • Próba połączenia z 587 lub 25 (klientem poczty lub telnetem) daje mi zerową odpowiedź, tj. Limit czasu połączenia

Rzeczy, których próbowałem

1) Czy porty są otwarte? Tak, iptables:

Chain INPUT (policy DROP 11 packets, 1375 bytes)
 pkts bytes target     prot opt in     out     source               destination
    0     0 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0           tcp dpt:587
    0     0 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0           tcp dpt:587
   25  2579 f2b-dovecot  tcp  --  *      *       0.0.0.0/0            0.0.0.0/0           multiport dports 110,995,143,993,587,465,4190
   68  7788 f2b-postfix  tcp  --  *      *       0.0.0.0/0            0.0.0.0/0           multiport dports 25,465,587
    0     0 f2b-sshd   tcp  --  *      *       0.0.0.0/0            0.0.0.0/0           multiport dports 22
   25  2579 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0           tcp dpt:143
    7   600 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0           tcp dpt:8080
23464 2662K ACCEPT     all  --  *      *       0.0.0.0/0            0.0.0.0/0           state RELATED,ESTABLISHED
   49  2940 ACCEPT     all  --  lo     *       0.0.0.0/0            0.0.0.0/0
    0     0 ACCEPT     icmp --  *      *       0.0.0.0/0            0.0.0.0/0           icmp type 8
    0     0 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0           tcp dpt:3915
    0     0 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0           tcp dpt:80
    0     0 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0           tcp dpt:443
    0     0 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0           tcp dpt:143
    0     0 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0           tcp dpt:587
    5   300 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0           tcp dpt:25

Chain FORWARD (policy DROP 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination

Chain OUTPUT (policy ACCEPT 23235 packets, 2494K bytes)
 pkts bytes target     prot opt in     out     source               destination

Chain f2b-dovecot (1 references)
 pkts bytes target     prot opt in     out     source               destination
   25  2579 RETURN     all  --  *      *       0.0.0.0/0            0.0.0.0/0

Chain f2b-postfix (1 references)
 pkts bytes target     prot opt in     out     source               destination
   68  7788 RETURN     all  --  *      *       0.0.0.0/0            0.0.0.0/0

Chain f2b-sshd (1 references)
 pkts bytes target     prot opt in     out     source               destination
    0     0 RETURN     all  --  *      *       0.0.0.0/0            0.0.0.0/0

2) Czy postfix nasłuchuje na porcie 587? Tak. Czy nasłuchuje tylko na localhost? Nie, dowolny host.

Oto netstat:

Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address               Foreign Address             State       PID/Program name
tcp        0      0 0.0.0.0:25                  0.0.0.0:*                   LISTEN      7173/master
tcp        0      0 0.0.0.0:443                 0.0.0.0:*                   LISTEN      917/httpd
tcp        0      0 127.0.0.1:4190              0.0.0.0:*                   LISTEN      749/dovecot
tcp        0      0 0.0.0.0:587                 0.0.0.0:*                   LISTEN      7173/master
tcp        0      0 0.0.0.0:143                 0.0.0.0:*                   LISTEN      749/dovecot
tcp        0      0 127.0.0.1:24                0.0.0.0:*                   LISTEN      749/dovecot

Oto także postfix / main.cf, na wszelki wypadek:

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

# Enable all network interfaces.
inet_interfaces = all

3) Czy poprawnie wymuszasz bezpieczne połączenia? Zgodnie z moją najlepszą wiedzą, tak, oto postfix / master.cf:

# Submission, port 587, force TLS connection.
submission inet n       -       n       -       -       smtpd
  -o syslog_name=postfix/submission
  -o smtpd_tls_security_level=encrypt
  -o smtpd_sasl_auth_enable=yes
  -o smtpd_client_restrictions=permit_mynetworks,permit_sasl_authenticated,reject
  -o content_filter=smtp-amavis:[127.0.0.1]:10026

4) Co z ograniczeniami smtpd? Wygląda wporządku:

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

5) Czy postfiks w ogóle działa poprawnie?

Tak, logowanie do serwera i wysyłanie wiadomości testowej z konsoli działa, a e-mail jest odbierany na drugim końcu, tj .:

echo "Test mail from postfix" | mail -s "Test Postfix" [email protected]

6) Co dzieje się podczas podłączania do portu 587?

Najwyraźniej nic. Jeśli spróbuję telnet do dowolnego losowego portu, przynajmniej coś dostanę. Na przykład próba telnet do portu 666 (który nie jest otwarty) nie daje odpowiedzi klientowi, ale przynajmniej dostaję coś w tcpdump:

15:22:20.305697 IP xxx > xxx.com.mdqs: Flags [S], seq 3195304468, win 8192, options [mss 1352,nop,wscale 8,nop,nop,sackOK], length 0

Kiedy tcpdumping port 587, absolutnie nic się nie dzieje podczas próby telnet do niego.

Czego wciąż mi brakuje?

Wszystko powyżej wyczerpuje moją wiedzę o rzeczach, które wciąż mogę wypróbować. Udało mi się przybić do mojego portu 587, będąc czymś całkowicie zablokowanym. Jak powiedziałem, mój dostawca VPS potwierdził, że w ogóle nie blokuje żadnych portów. Próbowałem portu 25 i to ta sama historia.

Jedyne, co widzę, to to, że jakoś zablokowałem te porty podczas konfigurowania serwera, ale nie mogę sobie przypomnieć, czy tak jest i nie wiem, jak to przetestować.

Byłbym wdzięczny za każdą pomoc, jaką możesz mi udzielić. W rzeczywistości kupuję piwo dla każdego, kto pomoże mi rozwiązać ten problem , zmarnowałem już dwa dni i zaczyna się to naprawdę denerwować.

reachergilt
źródło
3
Czy możesz zastąpić iptablespowyższy wynik iptables -L -n -vcałkowitym i nieprzereagowanym? Ponadto, biorąc pod uwagę twoje tcpdupmptesty i zapewnienie twojego dostawcy, że nie blokuję ruchu przychodzącego 25 i 587 , możliwe jest również, że miejsce, w którym testujesz, z wychodzących bloków 25 i 587 . Jeśli podałeś adres IP, o wiele łatwiej byłoby potwierdzić lub odrzucić tę hipotezę.
MadHatter
Dzięki za odpowiedź. Jasne, zredagowałem swój post. Hmm, nigdy nie myślałem o blokowaniu portów po mojej stronie, to dobry pomysł. Spróbuję to przetestować.
reachergilt
1
@MadHatter, miałeś całkowitą rację w sprawie zablokowanych portów po mojej stronie. Okazało się (po wielu połączeniach), że administrator VPN mojej firmy postanowił zacząć blokować niektóre porty, 25 i 578 jest jednym z nich, ale nie innymi. To wyjaśnia, dlaczego nigdy wcześniej nie miałem takich problemów i nawet o tym nie myślałem. Mój serwer prawdopodobnie działał już dobrze przez ostatnie kilka dni, kiedy traciłem rozum. Jeśli chcesz, możesz opublikować jako prawdziwą odpowiedź, a ja ją zaakceptuję. Ponadto, proszę, wyślij mi PM swoje dane PayPal (lub podobne), naprawdę zasługujesz na dużą zimną, Bóg wie, kiedy to wymyślę.
reachergilt
Napisałem to, abyś mógł zaakceptować odpowiedź - ponieważ w przeciwnym razie pytanie będzie pływać na zawsze, a to źle. Może to być również przydatne dla innych w przyszłości. Miałem na myśli to, co powiedziałem w odpowiedzi na to, że wykonałeś już większość pracy dochodzeniowej (więcej mocy dla ciebie!), Ale jeśli czujesz się zobowiązany do wysłania mi jednego piwa, możesz znaleźć moje dane kontaktowe na mojej osobistej stronie internetowej, za pośrednictwem mój profil.
MadHatter
Zrobione i jeszcze raz dziękuję za pomoc, prawdopodobnie zaoszczędziłeś mi godziny, jeśli nie dni straconego czasu. Skontaktuję się z tobą jutro, już sprawdziłem twoją stronę.
reachergilt

Odpowiedzi:

4

Reachergilt, witamy w SF i dziękuję za doskonałe pierwsze pytanie. Może ci się wydawać, że cię uratowaliśmy, ale szczerze mówiąc - wykonałeś już wszystkie ciężkie prace i przedstawiłeś je bardzo systematycznie. Przy takim podejściu kryminalistycznym mam nadzieję, że pozostaniesz przy tych częściach jeszcze przez jakiś czas.

Wynik tcpdumpjest szczególnie potworny. Ponad wszelką wątpliwość dowodzi, że twoje próby połączenia nie docierają nawet do twojego serwera, co uwalnia zaporę ogniową serwera, postfixpowiązania i wszystko inne po stronie serwera.

Uzbrojony w ten wskaźnik odszedłeś i potwierdziłeś, że twoje połączenia wychodzące są blokowane, więc twoje testy nigdy nie docierały aż do twojego serwera. Jest dość (przygnębiająco) normalne, że 25 (i w mniejszym stopniu 587) jest blokowane wychodzące z nowoczesnych sieci, ponieważ używają ich botnety wysyłające spam.

W każdym razie cieszysz się, że twój nowy serwer pocztowy działa zgodnie z reklamą, i to dobrze.

Szalony Kapelusznik
źródło
3
Tak, mój post stanowi dobrą listę kontrolną dla każdego, kto ma podobne problemy. Zabawne, ponieważ myślałem, że coś jest nie tak z moim serwerem, czterokrotnie sprawdziłem wszystko od A do Z, pozwalając mi to wszystko udokumentować.
reachergilt