Fórum Ubuntu CZ/SK
Ostatní => Ubuntu Server => Téma založeno: vojak 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: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: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í.
-
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á ...
-
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.
-
Celé řádky
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.
-
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 jepostfix/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>
-
To je v pořádku.
Na lokální to jde logicky bez auth.
A na klientu je autentizace nastavená?
-
Š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.
-
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.
-
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: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"
-
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:
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.
-
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:
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í.
-
To vypadá jakoby SASL vůbec neproběhl.
Je správně nakonfigurovaný dovecot pro postfix?
-
Jestli stačí oddíl service auth tak je nastaven:
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é
-
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
-
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:
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.
-
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
-
Co máš v /etc/default/saslauthd
-
Co máš v /etc/default/saslauthd
START=yes
DESC="SASL Authentication Daemon"
NAME="saslauthd"
MECHANISMS="pam"
MECH_OPTIONS=""
THREADS=5
OPTIONS="-c -m /var/run/saslauthd"
-
Ještě mi vlezlo na oči toto:
virtual_uid_maps = static:999permit_mynetworks,
Další věc:
/etc/postfix/main.cf:
# Postfix 2.3 and later
smtpd_sasl_path = smtpd
# Postfix < 2.3
smtpd_sasl_application_name = smtpd
A do třetice:
/etc/default/saslauthd
...
OPTIONS="-c -m /var/spool/postfix/var/run/saslauthd"
-
Ještě mi vlezlo na oči toto:
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.
A do třetice:
/etc/default/saslauthd
...
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:
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.
-
http://www.howtoforge.com/postfix-dovecot-warning-sasl-connect-to-private-auth-failed-no-such-file-or-directory
-
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:
# 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
}
-
Po restartu dovecotu, je něco v adresáři /var/spool/postfix/private/auth ?
-
není. a název je s rovnítkem.
srw-rw-rw- 1 root root 0 říj 10 19:47 auth=
-
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 :(
-
Nastavoval jsem to podle článku http://blog.bcvsolutions.eu/mailserver-postfix-dovecot-a-mysql/ (http://blog.bcvsolutions.eu/mailserver-postfix-dovecot-a-mysql/).
Zkusim to podle toho článku, ovšem nevím co čim nahradit. Přece tam nenecham jen tich pár řádků.
-
SSL certifikáty jsou vygenerované a na místě?
Nevím, fakt střílím od boku, musel bych se na to podívat.
-
Certifikáty snad nepotřebuji. Nemám nastavenou TLS podporu. Zabezpečené spojení mám zatím pouze u IMAPu a tam funguje. Podíval jsem se do toho návodu, soubor master.cf jsem doplnil o
submission inet n - - - - smtpd
-o smtpd_tls_security_level=encrypt
-o smtpd_sasl_auth_enable=yes
-o smtpd_sasl_type=dovecot
-o smtpd_sasl_path=private/auth
-o smtpd_sasl_security_options=noanonymous
-o smtpd_sasl_local_domain=$myhostname
-o smtpd_client_restrictions=permit_sasl_authenticated,reject
-o smtpd_sender_login_maps=hash:/etc/postfix/virtual
-o smtpd_sender_restrictions=reject_sender_login_mismatch
-o smtpd_recipient_restrictions=reject_non_fqdn_recipient,reject_unknown_recipient_domain,permit_sasl_authenticated,reject
Nevím co s tim dál, několikrát jsem konfiguraci smazal a začal stavět od nuly. A nemohu ani najít žádný příklad, kde je všechno nastaveno tak jak potřebuji a je pro nové verze postfixu a dovecotu.
-
Nevím co s tim dál, několikrát jsem konfiguraci smazal a začal stavět od nuly. A nemohu ani najít žádný příklad, kde je všechno nastaveno tak jak potřebuji a je pro nové verze postfixu a dovecotu.
Výše uvedené je akorát pro změnu portu. Osobně bych zálohoval, co mám → k tomu se mohu vrátit kdykoliv.
A zase začal od nuly a hlavně postupně tj. prvě bych rozjel dovecot + postfix a ověřoval proti systémovému uživateli. Pak teprve bych na to balil mysql a virtuály. Tupě okopírovat cosi velmi málokdy vede ke spolehlivému řešení.
-
Takže po tomto testování jsem zjistil, že přes telnet lze odeslat zprávu pouze na místní server. Ven odeslat nejde, autentizace přes AUTH LOGIN nejde. Ale zato je funkční odesílání pošty kamkoliv z outlooku. Při odesílání se ale v auth.log objeví hláška:
auth: pam_unix(dovecot:auth): check pass; user unknown
auth: pam_unix(dovecot:auth): authentication failure; logname= uid=0 euid=0 tty=dovecot ruser=postmaster@domena.cz rhost=10.200.10.2
V mail.log:
postfix/smtpd[6329]: connect from unknown[10.200.10.2]
postfix/smtpd[6329]: D6AA7120031D: client=unknown[10.200.10.2], sasl_method=LOGIN, sasl_username=postmaster@domena.cz
postfix/cleanup[6342]: D6AA7120031D: message-id=<EDA57A780D1C40858DF9E8F06A499454@vojaknb>
postfix/qmgr[3568]: D6AA7120031D: from=<postmaster@domena.cz>, size=1392, nrcpt=1 (queue active)
postfix/smtpd[6329]: disconnect from unknown[10.200.10.2]
postfix/smtp[6343]: D6AA7120031D: to=<vojak@seznam.cz>, relay=mx1.seznam.cz[77.75.76.42]:25, delay=12, delays=0.17/0.01/11/0.85, dsn=2.0.0, status=sent (250 2.0.0 Mail 1344871411 queued for delivery in session 5586000001ba.)
postfix/qmgr[3568]: D6AA7120031D: removed
Při zadání špatného hesla, se pošta neodešle.