Prosíme přihlašte se nebo zaregistrujte.

Přihlašte se svým uživatelským jménem a heslem.
Vaše pomoc je stále potřeba!

Autor Téma: Postfix zabezpečení veřejného serveru.  (Přečteno 11721 krát)

vojak

  • Návštěvník
  • Příspěvků: 58
Postfix zabezpečení veřejného serveru.
« kdy: 09 Října 2014, 13:40:27 »
Zdravím, mám server s dostupnou veřejnou IP. Nakonfiguroval jsem posfix+postfixadmin+dovecot na posílání a příjem pošty. Bohužel to má chybu, poštu lze odeslat i bez ověření. Odesílání pošty mám zatím nezabezpečené(port 25), příjem je přes IMAP SSL(port 993).
Uživatele mam uložené v databázi společně s hash heslem. Ověřování bych chtěl udělat přes dovecot. Lepší způsob mi nenapadá. Aktuální konfigurace postfixu je:
Kód: [Vybrat]
virtual_mailbox_domains = proxy:mysql:/etc/postfix/sql/mysql_virtual_domains_maps.cf
virtual_alias_maps =
   proxy:mysql:/etc/postfix/sql/mysql_virtual_alias_maps.cf,
   proxy:mysql:/etc/postfix/sql/mysql_virtual_alias_domain_maps.cf,
   proxy:mysql:/etc/postfix/sql/mysql_virtual_alias_domain_catchall_maps.cf
virtual_mailbox_maps =
   proxy:mysql:/etc/postfix/sql/mysql_virtual_mailbox_maps.cf,
   proxy:mysql:/etc/postfix/sql/mysql_virtual_alias_domain_mailbox_maps.cf
virtual_transport = dovecot
 
virtual_minimum_uid = 999
virtual_uid_maps = static:999permit_mynetworks,
virtual_gid_maps = static:999

smtpd_helo_restrictions =
smtpd_client_restrictions =
smtpd_relay_restrictions = permit_mynetworks, permit_sasl_authenticated, defer_unauth_destination
smtpd_data_restrictions = reject_unauth_pipelining
smtpd_sender_restrictions = check_recipient_access mysql:/etc/postfix/sql/mysql_virtual_recipient_access_maps.cf
smtpd_recipient_restrictions = check_sender_access mysql:/etc/postfix/sql/mysql_virtual_recipient_access_maps.cf,
  permit_mynetworks,
  permit_sasl_authenticated,
  reject_unauth_destination

smtpd_soft_error_limit=5
smtpd_hard_error_limit=10
smtpd_helo_required=yes
smtpd_delay_reject=no
smtpd_sasl_auth_enable = yes
smtpd_sasl_type = dovecot
smtpd_sasl_path = private/auth
smtpd_sasl_local_domain = $myhostname
smtpd_sasl_security_options = noanonymous
smtpd_sasl_tls_security_options = noanonymous
smtpd_sasl_authenticated_header = yes
smtpd_banner = $myhostname ESMTP $mail_name (Ubuntu)
broken_sasl_auth_clients = yes

default_destination_concurrency_limit = 1
local_destination_concurrency_limit = 1
dovecot_destination_concurrency_limit = 1
dovecot_destination_recipient_limit = 1

disable_vrfy_command=yes
strict_rfc821_envelopes=yes

maximal_queue_lifetime = 6d
delay_warning_time = 8h
biff = no
enable_original_recipient = yes
append_at_myorigin = yes

append_dot_mydomain = no

readme_directory = no

myhostname = localhost
alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases
myorigin = domena.cz

mydestination =
relayhost =
mynetworks = 127.0.0.0/8
mailbox_size_limit = 0
recipient_delimiter = +
inet_interfaces = all
Nyní by ověřování mělo fungovat přes script "/etc/postfix/sql/mysql_virtual_recipient_access_maps.cf".
Jeho obsah je:
Kód: [Vybrat]
user = postfix
password = heslo1234
dbname = postfixadmin
hosts = 127.0.0.1
query = SELECT maildir FROM mailbox WHERE username='%s' AND active = '1'
Ale bohužel poštu to odešle i bez ověření.
« Poslední změna: 09 Října 2014, 19:45:06 od vojak »

Petr Merlin Vaněček

  • Moderátor
  • Závislák
  • ***
  • Příspěvků: 5057
    • Lomítkáři
Re:Postfix zabezpečení veřejného serveru.
« Odpověď #1 kdy: 09 Října 2014, 14:23:22 »
Kód: [Vybrat]
SELECT maildir FROM mailbox WHERE username='%s' AND active = '1'

Ono tohle vrací maildir k uživateli, který je aktivní, neověřuje to heslo.
Celá ta konfigurace je vůbec jakási divoká ...
Stiskni CTRL + W ...
80% mozku tvoří kapalina ... u některých brzdová

vojak

  • Návštěvník
  • Příspěvků: 58
Re:Postfix zabezpečení veřejného serveru.
« Odpověď #2 kdy: 09 Října 2014, 14:26:41 »
Ono tohle vrací maildir k uživateli, který je aktivní, neověřuje to heslo.
Celá ta konfigurace je vůbec jakási divoká ...
Ano je divoká, vím o tom, bohužel nemohu nalézt rozumné, funkční řešení. Tohle ověřování jsem vyčet v několika forech. A myslím, že i kdybych napsal "SELECT password" tak si moc nepomohu. Proto jsem se obrátil s dotazem o řešení sem.

Petr Merlin Vaněček

  • Moderátor
  • Závislák
  • ***
  • Příspěvků: 5057
    • Lomítkáři
Re:Postfix zabezpečení veřejného serveru.
« Odpověď #3 kdy: 09 Října 2014, 15:49:40 »
Celé řádky
Kód: [Vybrat]
check_sender_access mysql:/etc/postfix/sql/mysql_virtual_recipient_access_maps.cf

bych hodil do kopru. Od toho je tam přeci permit_sasl_authenticated který to bude ověřovat proti DB přes SASL.
Stiskni CTRL + W ...
80% mozku tvoří kapalina ... u některých brzdová

vojak

  • Návštěvník
  • Příspěvků: 58
Re:Postfix zabezpečení veřejného serveru.
« Odpověď #4 kdy: 09 Října 2014, 19:48:55 »
Tak jsem oba dva řádky smazal. Také se mi tam nelíbili. Výsledek:
Při pokusu o doručení emailu na server localhost není nutná autentizace. Při pokusu o doručení na jiný server: Relay access denied. V logu je
Kód: [Vybrat]
postfix/smtpd[24377]: NOQUEUE: reject: RCPT from unknown[10.200.10.2]: 454 4.7.1 <prijemce@seznam.cz>: Relay access denied; from=<postmaster@mojedomena.cz> to=<prijemce@seznam.cz> proto=ESMTP helo=<abcdefg>

Petr Merlin Vaněček

  • Moderátor
  • Závislák
  • ***
  • Příspěvků: 5057
    • Lomítkáři
Re:Postfix zabezpečení veřejného serveru.
« Odpověď #5 kdy: 09 Října 2014, 21:20:31 »
To je v pořádku.
Na lokální to jde logicky bez auth.

A na klientu je autentizace nastavená?
Stiskni CTRL + W ...
80% mozku tvoří kapalina ... u některých brzdová

vojak

  • Návštěvník
  • Příspěvků: 58
Re:Postfix zabezpečení veřejného serveru.
« Odpověď #6 kdy: 09 Října 2014, 21:40:57 »
Špatně jsem se vyjádřil. Z jiného PC v síti, jde odesílat v rámci serveru bez autentizace i když je nastaveno mynetworks = 127.0.0.0/8. Očekával bych, že pokud mám schránky box1@domain.com a box2@domain.com, nepůjde mezi nimi bez autentizace odesílat email. Pouze u vyjímek nastavených v mynetworks.

Odesílal jsem přes telnet - bez autentizace a přes outlook - nastavená autentizace.

Petr Merlin Vaněček

  • Moderátor
  • Závislák
  • ***
  • Příspěvků: 5057
    • Lomítkáři
Re:Postfix zabezpečení veřejného serveru.
« Odpověď #7 kdy: 09 Října 2014, 21:44:23 »
Ale kdepak!!!

Přece server, pokud je určený pro příjem zpráv na doménu domain.com logicky MUSÍ přijmout tyto zprávy i bez autentizace.
Jak jinak by se pak domluvil s cizím MX serverem, který o nějakém hesle těžko mohl někdy někde slyšet.

Jiná situace nastává, pokud chceme poslat něco na jinou doménu. Pak nastupuje SASL. A pokud nenastoupil, bude chyba vypíchnutá někde v logu.
Stiskni CTRL + W ...
80% mozku tvoří kapalina ... u některých brzdová

vojak

  • Návštěvník
  • Příspěvků: 58
Re:Postfix zabezpečení veřejného serveru.
« Odpověď #8 kdy: 09 Října 2014, 21:53:02 »
Přece server, pokud je určený pro příjem zpráv na doménu domain.com logicky MUSÍ přijmout tyto zprávy i bez autentizace.
A jak teda zabránit útoku:
Kód: [Vybrat]
telnet mail.gmail.com 25
helo cokoliv
mail from:<cokoliv@gmail.com>
rcpt to:<adresat@gmail.com>
To pak přece můžu zvesela šířit spam po celé cizí doméně.

Výpis z logu je o pár řádků výš - " Relay access denied"

Petr Merlin Vaněček

  • Moderátor
  • Závislák
  • ***
  • Příspěvků: 5057
    • Lomítkáři
Re:Postfix zabezpečení veřejného serveru.
« Odpověď #9 kdy: 09 Října 2014, 21:56:57 »
Ano! Přesně takto to funguje! :)
I proto máme třeba amavis, spamassassin, RBL, GBL a jiné *BL

Důležité je, aby (ne)fungovalo:
Kód: [Vybrat]
telnet mail.gmail.com 25
helo cokoliv
mail from:<cokoliv@gmail.com>
rcpt to:<adresat@ubuntu.com>
554 5.7.1 <adresat@ubuntu.com>: Relay access denied

Jak jinak by to mohlo fungovat? Jakože by se MX servery mezi sebou prokazovali nějakým heslem?

Výpis je značně zkrácen. Taky bych se podíval do auth.log, jestli SASL něco neblije.
« Poslední změna: 09 Října 2014, 22:00:21 od Petr Merlin Vaněček »
Stiskni CTRL + W ...
80% mozku tvoří kapalina ... u některých brzdová

vojak

  • Návštěvník
  • Příspěvků: 58
Re:Postfix zabezpečení veřejného serveru.
« Odpověď #10 kdy: 09 Října 2014, 22:10:14 »
Jasný, po odeslání mi to napadlo, že je to třeba řešit jinak  ;). V auth.log se nezobrazí nic při neúspěšném odeslání. Mail.err také nic neobsahuje a v mail.log je pouze:
Kód: [Vybrat]
Oct  9 22:08:16 ubuntu postfix/smtpd[2800]: connect from unknown[10.200.10.2]
Oct  9 22:08:16 ubuntu postfix/smtpd[2800]: NOQUEUE: reject: RCPT from unknown[10.200.10.2]: 454 4.7.1 <prijemce@seznam.cz>: Relay access denied; from=<postmaster@mojedomena.cz> to=<prijemce@seznam.cz> proto=ESMTP helo=<abcdefg
Oct  9 22:08:16 ubuntu postfix/smtpd[2800]: disconnect from unknown[10.200.10.2]

EDIT:
Je potřeba nějak nastavovat dovecot? Aby jsme nehledali chybu jinde. Poštu ale předává normálně a v logu nic není.
« Poslední změna: 09 Října 2014, 22:13:20 od vojak »

Petr Merlin Vaněček

  • Moderátor
  • Závislák
  • ***
  • Příspěvků: 5057
    • Lomítkáři
Re:Postfix zabezpečení veřejného serveru.
« Odpověď #11 kdy: 09 Října 2014, 22:15:58 »
To vypadá jakoby SASL vůbec neproběhl.
Je správně nakonfigurovaný dovecot pro postfix?
Stiskni CTRL + W ...
80% mozku tvoří kapalina ... u některých brzdová

vojak

  • Návštěvník
  • Příspěvků: 58
Re:Postfix zabezpečení veřejného serveru.
« Odpověď #12 kdy: 09 Října 2014, 22:26:48 »
Jestli stačí oddíl service auth tak je nastaven:
Kód: [Vybrat]
service auth {
  unix_listener /var/spool/postfix/private/auth {
    mode = 0666
  }
  unix_listener auth-userdb {
    group = vmail
    mode = 0600
    user = vmail
  }
}
cesta /var/spool/postfix/private/auth existuje a uživatel vmail také

Petr Merlin Vaněček

  • Moderátor
  • Závislák
  • ***
  • Příspěvků: 5057
    • Lomítkáři
Re:Postfix zabezpečení veřejného serveru.
« Odpověď #13 kdy: 09 Října 2014, 22:33:00 »
Vypadá to vlastně ok, ale nejde mi do hlavy, proč nikde nevidím informaci, že selhalo ověření uživatele.
Skutečně je na mailovém klientu zapnutá autentizace proti SMTP?

Zkus mrknout sem a ověřít to telnetem:
http://networking.ringofsaturn.com/Protocols/howtotestsendmailauthentication.php
Stiskni CTRL + W ...
80% mozku tvoří kapalina ... u některých brzdová

vojak

  • Návštěvník
  • Příspěvků: 58
Re:Postfix zabezpečení veřejného serveru.
« Odpověď #14 kdy: 09 Října 2014, 22:47:59 »
Outlook mám nastaven na port 25, bez zabezpečeného SSL. Pokud do mynetworks uvedu IP klienta, email odeslat jde.

Když zkusím odeslat email přes telnet, tak:
Kód: [Vybrat]
220 localhost ESMTP Postfix (Ubuntu)
ehlo abcdef
250-localhost
250-PIPELINING
250-SIZE 10240000
250-ETRN
250-AUTH PLAIN
250-AUTH=PLAIN
250-ENHANCEDSTATUSCODES
250-8BITMIME
250 DSN
AUTH LOGIN name
535 5.7.8 Error: authentication failed: Invalid authentication mechanism
A v mail.log je stejná hláška. V ostatních logach nic.

vojak

  • Návštěvník
  • Příspěvků: 58
Re:Postfix zabezpečení veřejného serveru.
« Odpověď #15 kdy: 09 Října 2014, 22:57:37 »
Abych mohl vyzkoušet testsaslauthd musel jsem nainstalovat balíky db-util db5.3-util sasl2-bin. Když ale zadam na serveru autentizační údaje, dostanu hlášku connect() : No such file or directory

Petr Merlin Vaněček

  • Moderátor
  • Závislák
  • ***
  • Příspěvků: 5057
    • Lomítkáři
Re:Postfix zabezpečení veřejného serveru.
« Odpověď #16 kdy: 10 Října 2014, 08:08:51 »
Co máš v /etc/default/saslauthd
Stiskni CTRL + W ...
80% mozku tvoří kapalina ... u některých brzdová

vojak

  • Návštěvník
  • Příspěvků: 58
Re:Postfix zabezpečení veřejného serveru.
« Odpověď #17 kdy: 10 Října 2014, 11:26:05 »
Co máš v /etc/default/saslauthd
Kód: [Vybrat]
START=yes
DESC="SASL Authentication Daemon"
NAME="saslauthd"
MECHANISMS="pam"
MECH_OPTIONS=""
THREADS=5
OPTIONS="-c -m /var/run/saslauthd"

Petr Merlin Vaněček

  • Moderátor
  • Závislák
  • ***
  • Příspěvků: 5057
    • Lomítkáři
Re:Postfix zabezpečení veřejného serveru.
« Odpověď #18 kdy: 10 Října 2014, 14:58:19 »
Ještě mi vlezlo na oči toto:
Kód: [Vybrat]
virtual_uid_maps = static:999permit_mynetworks,

Další věc:
/etc/postfix/main.cf:
Kód: [Vybrat]
    # Postfix 2.3 and later
    smtpd_sasl_path = smtpd

    # Postfix < 2.3
    smtpd_sasl_application_name = smtpd

A do třetice:
/etc/default/saslauthd
Kód: [Vybrat]
...
OPTIONS="-c -m /var/spool/postfix/var/run/saslauthd"
Stiskni CTRL + W ...
80% mozku tvoří kapalina ... u některých brzdová

vojak

  • Návštěvník
  • Příspěvků: 58
Re:Postfix zabezpečení veřejného serveru.
« Odpověď #19 kdy: 10 Října 2014, 19:01:21 »
Citace
Ještě mi vlezlo na oči toto:
Kód: [Vybrat]
virtual_uid_maps = static:999permit_mynetworks,
Ano, toho jsem si nevšiml, nějaký úklep. permit_mynetworks, jsem tedy odmazal. Hodnotu smtpd_sasl_path jsem změnil na smtpd.
Citace
A do třetice:
/etc/default/saslauthd
Kód: [Vybrat]
...
OPTIONS="-c -m /var/spool/postfix/var/run/saslauthd"
S tím nevim co mám dělat, taková cesta u mě neexistuje, není to překlep?

Po připojení telnetem mam pak v logu mail.log:
Kód: [Vybrat]
postfix/smtpd[9335]: connect from unknown[10.200.10.2]
postfix/smtpd[9335]: warning: SASL: Connect to smtpd failed: No such file or directory
postfix/smtpd[9335]: fatal: no SASL authentication mechanisms
postfix/master[1677]: warning: process /usr/lib/postfix/smtpd pid 9335 exit status 1
postfix/master[1677]: warning: /usr/lib/postfix/smtpd: bad command startup -- throttling
Tyto chyby to píše jen pokud je smtpd_sasl_path nastaven na smtpd. Pokud změním zpátky na
private/auth tak v logu je opět Error: authentication failed: Invalid authentication mechanism. A v auth.log nic nového.

Petr Merlin Vaněček

  • Moderátor
  • Závislák
  • ***
  • Příspěvků: 5057
    • Lomítkáři
Stiskni CTRL + W ...
80% mozku tvoří kapalina ... u některých brzdová

vojak

  • Návštěvník
  • Příspěvků: 58
Re:Postfix zabezpečení veřejného serveru.
« Odpověď #21 kdy: 10 Října 2014, 19:43:53 »
Takže dovecot mi nevzal parametr client {..}. V komentářích je řešení, nastavené jsem to měl. Akorát mode = 0600 jsem změnil na 0666. Soubor main.cf jsem doplnil o queue_directory. Bohužel výsledek pořád stejný.
A cesta /var/spool/postfix/private/auth existovala i před změnou.
Celá konfigurace dovecotu je:
Kód: [Vybrat]
# dovecot -n
# 2.2.9: /etc/dovecot/dovecot.conf
# OS: Linux 3.13.0-36-generic x86_64 Ubuntu 14.04.1 LTS ext4
auth_socket_path = /var/run/dovecot/auth-userdb
first_valid_gid = 999
first_valid_uid = 999
hostname = server
last_valid_gid = 999
last_valid_uid = 999
lda_mailbox_autocreate = yes
lda_mailbox_autosubscribe = yes
log_path = /var/log/dovecot.log
mail_gid = vmail
mail_location = maildir:/home/mail/%d/%n/Maildir
mail_uid = vmail
mbox_write_locks = fcntl
namespace inbox {
  inbox = yes
  location =
  prefix =
}
passdb {
  driver = pam
}
passdb {
  args = /etc/dovecot/dovecot-sql.conf.ext
  driver = sql
}
postmaster_address = postmaster@domena.cz
protocols = imap pop3
rejection_reason = Your message to < %t> was automatically rejected:%n%r
service auth {
  unix_listener /var/spool/postfix/private/auth {
    mode = 0666
  }
  unix_listener auth-userdb {
    group = vmail
    mode = 0666
    user = vmail
  }
}
service imap-login {
  inet_listener imap {
    port = 143
  }
  inet_listener imaps {
    port = 993
    ssl = yes
  }
}
service imap {
  process_limit = 1024
}
service pop3-login {
  inet_listener pop3 {
    port = 110
  }
  inet_listener pop3s {
    port = 995
    ssl = yes
  }
}
service pop3 {
  process_limit = 256
}
ssl_cert = </etc/dovecot/ssl/cert.pem
ssl_key = </etc/dovecot/ssl/key.pem
userdb {
  driver = passwd
}
userdb {
  args = /etc/dovecot/dovecot-sql.conf.ext
  driver = sql
}
protocol lda {
  postmaster_address = postmaster@domena.cz
}
« Poslední změna: 10 Října 2014, 19:58:29 od vojak »

Petr Merlin Vaněček

  • Moderátor
  • Závislák
  • ***
  • Příspěvků: 5057
    • Lomítkáři
Re:Postfix zabezpečení veřejného serveru.
« Odpověď #22 kdy: 10 Října 2014, 20:02:18 »
Po restartu dovecotu, je něco v adresáři /var/spool/postfix/private/auth ?
Stiskni CTRL + W ...
80% mozku tvoří kapalina ... u některých brzdová

vojak

  • Návštěvník
  • Příspěvků: 58
Re:Postfix zabezpečení veřejného serveru.
« Odpověď #23 kdy: 10 Října 2014, 20:16:36 »
není. a název je s rovnítkem.
Kód: [Vybrat]
srw-rw-rw- 1 root    root    0 říj 10 19:47 auth=

Petr Merlin Vaněček

  • Moderátor
  • Závislák
  • ***
  • Příspěvků: 5057
    • Lomítkáři
Re:Postfix zabezpečení veřejného serveru.
« Odpověď #24 kdy: 10 Října 2014, 20:18:45 »
To je ok.

Mrkni sem>
http://wiki2.dovecot.org/HowTo/PostfixAndDovecotSASL

Myslím, že to máš zbytečně moc přeplácané a popravdě se v té Tvé konfiguraci těžko orientuju :(
Stiskni CTRL + W ...
80% mozku tvoří kapalina ... u některých brzdová

 

Provoz zaštiťuje spolek OpenAlt.