(résolu) Problème de sécurité sur serveur mail

Bonjour à tous,

Depuis quelques temps, la société où je travaille subit de nombreuses et différentes attaques. Aujourd’hui, je cherche à protéger au mieux notre serveur mail (dédié) utilisant postfix, dovecot, amavis, mysql pour les users et ispconfig pour l’administration. Nos MX sont des firewalls qui analysent les mails entrants puis les envoient à notre serveur.

Depuis quelques semaines, notre serveur est passé de quelques centaines de mails sortant à environ 500000 par jour… Nous avons été blaklisté et le sommes encore chez certains destinataires.

Voici le fichier main.cf:

[code]# See /usr/share/postfix/main.cf.dist for a commented, more complete version

Debian specific: Specifying a file name will cause the first

line of that file to be used as the name. The Debian default

is /etc/mailname.

#myorigin = /etc/mailname

smtpd_banner = $myhostname ESMTP $mail_name (Debian/GNU)
biff = no

appending .domain is the MUA’s job.

append_dot_mydomain = no

Uncomment the next line to generate “delayed mail” warnings

#delay_warning_time = 4h

readme_directory = /usr/share/doc/postfix
debug_peer_list = 127.0.0.1

TLS parameters

smtpd_tls_cert_file = /etc/postfix/tls/smtpd.pem
smtpd_tls_key_file = /etc/postfix/tls/smtpd.key
smtpd_tls_CAfile = /etc/postfix/tls/smtpdI.pem
smtpd_tls_session_cache_database = btree:${data_directory}/smtpd_scache
smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache
myhostname = mail.notredomaine.com
mydomain = domaine.com
alias_maps = hash:/etc/aliases, hash:/var/lib/mailman/data/aliases
alias_database = hash:/etc/aliases, hash:/var/lib/mailman/data/aliases
myorigin = /etc/mailname
mydestination = localhost, localhost.localdomain
relayhost =
mynetworks = 127.0.0.0/8 [::1]/128 IP_MX1 IP_MX2 IP_MX3
relay_domains = domain1.com, domain2.com
mailbox_size_limit = 0
recipient_delimiter = +
inet_interfaces = all
html_directory = /usr/share/doc/postfix/html
virtual_alias_domains =
virtual_alias_maps = hash:/var/lib/mailman/data/virtual-mailman, proxy:mysql:/etc/postfix/mysql-virtual_forwardings.cf, proxy:mysql:/etc/postfix/mysql-virtual_email2email.cf
virtual_mailbox_domains = proxy:mysql:/etc/postfix/mysql-virtual_domains.cf
virtual_mailbox_maps = proxy:mysql:/etc/postfix/mysql-virtual_mailboxes.cf
virtual_mailbox_base = /var/vmail
virtual_uid_maps = static:5000
virtual_gid_maps = static:5000
#inet_protocols = all
inet_protocols = all
smtpd_sasl_auth_enable = yes
broken_sasl_auth_clients = yes
smtpd_sasl_authenticated_header = yes
smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination, check_recipient_access mysql:/etc/postfix/mysql-virtual_recipient.cf, reject_rbl_client zen.spamhaus.org, reject_rbl_client zen.spamhaus.org, reject_rhsbl_helo dbl.spamhaus.org, reject_rhsbl_sender dbl.spamhaus.org
smtpd_tls_security_level = may
transport_maps = hash:/var/lib/mailman/data/transport-mailman, proxy:mysql:/etc/postfix/mysql-virtual_transports.cf
relay_domains = mysql:/etc/postfix/mysql-virtual_relaydomains.cf
relay_recipient_maps = mysql:/etc/postfix/mysql-virtual_relayrecipientmaps.cf
proxy_read_maps = $local_recipient_maps $mydestination $virtual_alias_maps $virtual_alias_domains $virtual_mailbox_maps $virtual_mailbox_domains $relay_recipient_maps $relay_domains $canonical_maps $sender_canonical_maps $recipient_canonical_maps $relocated_maps $transport_maps $mynetworks
#smtpd_sender_restrictions = check_sender_access mysql:/etc/postfix/mysql-virtual_sender.cf
smtpd_sender_restrictions = check_sender_access mysql:/etc/postfix/mysql-virtual_sender.cf
#smtpd_client_restrictions = check_client_access mysql:/etc/postfix/mysql-virtual_client.cf
smtpd_client_restrictions = check_client_access mysql:/etc/postfix/mysql-virtual_client.cf
smtpd_client_message_rate_limit = 100
maildrop_destination_concurrency_limit = 1
maildrop_destination_recipient_limit = 1
virtual_transport = dovecot
header_checks = regexp:/etc/postfix/header_checks
mime_header_checks = regexp:/etc/postfix/mime_header_checks
nested_header_checks = regexp:/etc/postfix/nested_header_checks
body_checks = regexp:/etc/postfix/body_checks
owner_request_special = no
smtp_tls_security_level = may
smtpd_tls_mandatory_protocols = !SSLv2, !SSLv3
smtpd_tls_protocols = !SSLv2,!SSLv3
smtp_tls_protocols = !SSLv2,!SSLv3
dovecot_destination_recipient_limit = 1
smtpd_sasl_type = dovecot
smtpd_sasl_path = private/auth
content_filter = amavis:[127.0.0.1]:10024
receive_override_options = no_address_mappings
#smtpd_tls_auth_only = yes
smtp_tls_loglevel = 1
#tls_ssl_options = NO_COMPRESSION
smtpd_tls_mandatory_ciphers = high
tls_high_cipherlist = EDH+CAMELLIA:EDH+aRSA:EECDH+aRSA+AESGCM:EECDH+aRSA+SHA384:EECDH+aRSA+SHA256:EECDH:+CAMELLIA256:+AES256:+CAMELLIA128:+AES128:+SSLv3:!aNULL:!eNULL:!LOW:!3DES:!MD5:!EXP:!PSK:!DSS:!RC4:!SEED:!ECDSA:CAMELLIA256-SHA:AES256-SHA:CAMELLIA128-SHA:AES128-SHA
smtpd_tls_mandatory_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_dh1024_param_file = /etc/ssl/private/dhparams.pem
message_size_limit = 0
#smtp_tls_CAfile = /etc/ssl/certs/ca-certificates.crt

Don’t accept mail from domains that don’t exist.

smtpd_sender_restrictions = reject_unknown_sender_domain

Block clients that speak too early.

smtpd_data_restrictions = reject_unauth_pipelining [/code]

Notre master.cf

[code]#

Postfix master process configuration file. For details on the format

of the file, see the master(5) manual page (command: “man 5 master”).

Do not forget to execute “postfix reload” after editing this file.

==========================================================================

service type private unpriv chroot wakeup maxproc command + args

(yes) (yes) (yes) (never) (100)

==========================================================================

smtp inet n - - - - smtpd
-o smtpd_tls_security_level=none
-o smtpd_sasl_auth_enable=yes
-o smtpd_client_restrictions=permit_sasl_authenticated,permit_mynetworks,reject

#smtp inet n - - - 1 postscreen
#smtpd pass - - - - - smtpd
#dnsblog unix - - - - 0 dnsblog
#tlsproxy unix - - - - 0 tlsproxy
#submission inet n - - - - smtpd

-o syslog_name=postfix/submission

-o smtpd_tls_security_level=encrypt

-o smtpd_sasl_auth_enable=yes

-o smtpd_client_restrictions=permit_sasl_authenticated,permit_mynetworks,check_relay_domains,reject

-o milter_macro_daemon_name=ORIGINATING

#smtps inet n - - - - smtpd

-o syslog_name=postfix/smtps

-o smtpd_tls_wrappermode=yes

-o smtpd_sasl_auth_enable=yes

-o smtpd_client_restrictions=permit_sasl_authenticated,reject

-o milter_macro_daemon_name=ORIGINATING

#628 inet n - - - - qmqpd
pickup fifo n - - 60 1 pickup
cleanup unix n - - - 0 cleanup
qmgr fifo n - n 300 1 qmgr
#qmgr fifo n - n 300 1 oqmgr
tlsmgr unix - - - 1000? 1 tlsmgr
rewrite unix - - - - - trivial-rewrite
bounce unix - - - - 0 bounce
defer unix - - - - 0 bounce
trace unix - - - - 0 bounce
verify unix - - - - 1 verify
flush unix n - - 1000? 0 flush
proxymap unix - - n - - proxymap
proxywrite unix - - n - 1 proxymap
smtp unix - - - - - smtp
relay unix - - - - - smtp

-o smtp_helo_timeout=5 -o smtp_connect_timeout=5

showq unix n - - - - showq
error unix - - - - - error
retry unix - - - - - error
discard unix - - - - - discard
local unix - n n - - local
virtual unix - n n - - virtual
lmtp unix - - - - - lmtp
anvil unix - - - - 1 anvil
scache unix - - - - 1 scache

====================================================================

Interfaces to non-Postfix software. Be sure to examine the manual

pages of the non-Postfix software to find out what options it wants.

Many of the following services use the Postfix pipe(8) delivery

agent. See the pipe(8) man page for information about ${recipient}

and other message envelope options.

====================================================================

maildrop. See the Postfix MAILDROP_README file for details.

Also specify in main.cf: maildrop_destination_recipient_limit=1

maildrop unix - n n - - pipe
flags=DRhu user=vmail argv=/usr/bin/maildrop -d vmail ${extension} ${recipient} ${user} ${nexthop} ${sender}

====================================================================

Recent Cyrus versions can use the existing “lmtp” master.cf entry.

Specify in cyrus.conf:

lmtp cmd=“lmtpd -a” listen=“localhost:lmtp” proto=tcp4

Specify in main.cf one or more of the following:

mailbox_transport = lmtp:inet:localhost

virtual_transport = lmtp:inet:localhost

====================================================================

Cyrus 2.1.5 (Amos Gouaux)

Also specify in main.cf: cyrus_destination_recipient_limit=1

#cyrus unix - n n - - pipe

user=cyrus argv=/cyrus/bin/deliver -e -r ${sender} -m ${extension} ${user}

====================================================================

Old example of delivery via Cyrus.

#old-cyrus unix - n n - - pipe

flags=R user=cyrus argv=/cyrus/bin/deliver -e -m ${extension} ${user}

====================================================================

See the Postfix UUCP_README file for configuration details.

uucp unix - n n - - pipe
flags=Fqhu user=uucp argv=uux -r -n -z -a$sender - $nexthop!rmail ($recipient)

Other external delivery methods.

ifmail unix - n n - - pipe
flags=F user=ftn argv=/usr/lib/ifmail/ifmail -r $nexthop ($recipient)
bsmtp unix - n n - - pipe
flags=Fq. user=bsmtp argv=/usr/lib/bsmtp/bsmtp -t$nexthop -f$sender $recipient
scalemail-backend unix - n n - 2 pipe
flags=R user=scalemail argv=/usr/lib/scalemail/bin/scalemail-store ${nexthop} ${user} ${extension}
mailman unix - n n - - pipe
flags=FR user=list argv=/usr/lib/mailman/bin/postfix-to-mailman.py
${nexthop} ${user}

ispconfig 3

submission inet n - - - - smtpd
-o syslog_name=postfix/submission
-o smtpd_tls_security_level=encrypt
-o smtpd_sasl_auth_enable=yes
-o smtpd_client_restrictions=permit_sasl_authenticated,reject
-o smtpd_client_restrictions=permit_sasl_authenticated
smtps inet n - - - - smtpd
-o syslog_name=postfix/smtps
-o smtpd_tls_wrappermode=yes
-o smtpd_sasl_auth_enable=yes
-o smtpd_client_restrictions=permit_sasl_authenticated,reject
dovecot unix - n n - - pipe
flags=DRhu user=vmail:vmail argv=/usr/lib/dovecot/deliver -f ${sender} -d ${user}@${nexthop}
amavis unix - - - - 2 smtp
-o smtp_data_done_timeout=1200
-o smtp_send_xforward_command=yes

127.0.0.1:10025 inet n - - - - smtpd
-o content_filter=
-o local_recipient_maps=
-o relay_recipient_maps=
-o smtpd_restriction_classes=
-o smtpd_client_restrictions=
-o smtpd_helo_restrictions=
-o smtpd_sender_restrictions=
-o smtpd_recipient_restrictions=permit_mynetworks,reject
-o mynetworks=127.0.0.0/8
-o strict_rfc821_envelopes=yes
-o receive_override_options=no_unknown_recipient_checks,no_header_body_checks[/code]

Voici un extrait de nos logs:

Apr 21 13:24:02 mail postfix/smtpd[15613]: NOQUEUE: reject: RCPT from LStLambert-xxxx[xx.xx.xx.xx]: 450 4.1.8 <xxxxxpcome.com.tw>: Sender address rejected: Domain not found; from=<xxxxxpco me.com.tw> to=<xxxxxyahoo.com.tw> proto=SMTP helo=<xx.xx.xx.xx> Apr 21 13:24:02 mail postfix/smtpd[15602]: NOQUEUE: reject: RCPT from LStLambert-xxxx[xx.xx.xx.xx]: 450 4.1.8 xxxxxpcome.com.tw>: Sender address rejected: Domain not found; from=<xxxxxp come.com.tw> to=<xxxxxyahoo.com.tw> proto=SMTP helo=<xx.xx.xx.xx> Apr 21 13:24:02 mail postfix/smtpd[11077]: NOQUEUE: reject: RCPT from LStLambert-xxxx[xx.xx.xx.xx]: 450 4.1.8 <xxxxxyahoo.com.jp>: Sender address rejected: Domain not found; from=<xxxxxyahoo .com.jp> to=<xxxxxyahoo.com.tw> proto=SMTP helo=<xx.xx.xx.xx> Apr 21 13:24:03 mail postfix/smtpd[19386]: NOQUEUE: reject: RCPT from LStLambert--xxxx[xx.xx.xx.xx]: 450 4.1.8 <xxxxxwysina.com.tw>: Sender address rejected: Domain not found; from=<xxxxx wysina.com.tw> to=<xxxxxyahoo.com.tw> proto=SMTP helo=<xx.xx.xx.xx> Apr 21 13:24:03 mail postfix/smtpd[15612]: NOQUEUE: reject: RCPT from LStLambert-6-xxxx[xx.xx.xx.xx] 450 4.1.8 <xxxxxyahoo.com.jp>: Sender address rejected: Domain not found; from=<xxxxxyahoo.com.jp> t o=<xxxxxyahoo.com.tw> proto=SMTP helo=<xx.xx.xx.xx>

ayant accepté les ip de nos mx, j’ai l’impression que j’ai créé une faille que je ne sais pas comment bloquer. Nos firewalls ne bloque pas 100% de ces envois de mails pourtant avec des @ mails pratiquement identiques

Pouvez-vous m’aider svp?

Vu que c’est dans un cadre pro et que le temps joue contre toi je pense, il serait bon de faire un audit de sécurité via un presta. Là clairement ce n’est pas avec des conseils d’un forum (même avisé) que tu vas avoir la garantie que tout le réseau de ton entreprise est sain ou pas.

Bonjour Mimoza,
Je suis d’accord avec toi mais je suis le seul à avoir conscience du problème dans la société. Au mieux, on va croire que je suis alarmiste, au pire que cela vient de moi pour me rendre indispensable…

Commence par utiliser les balises [code][/code]

Tu autorise MX1, MX2, MX3 et les utilisateurs authentifiés à envoyer des mails.
Ton problème vient donc d’un de ces acteurs. Il faut que tu analyse les logs en regardant par quelle porte les mails sont envoyés en masse. Ensuite il suffit de suivre la piste jusqu’à ou aux machines incriminées.

Cela risque de te prendre effectivement beaucoup de temps si tu n’as pas déjà eu des cas d’analyse avancer à faire.

Un prestataire spécialisé te ferais gagner du temps. Autrement je te conseillerais de regarder dans donc /var/log/mail.info et d’utiliser (entre autre) les commandes GREP, SORT et WC.

Bon courage.

Merci pour l’info sur les balises Vanson.
J’ai retracé d’où ça venait. Cela vient des MX en si je remonte (le plus possible), j’arrive sur des IP à Dubai. Donc aucune plainte possible et la publicité serait mauvaise…

En //, je viens d’ouvrir un ticket chez le fabricant du firewall. Je viens de voir qu’en faisant un telnet sur le port 25 sur le MX, j’arrive directement sur le serveur mail sans avoir besoin d’authentification… De ce fait, je ne suis même plus sûr que je puisse faire quoique ce soit au niveau du serveur…

Vanson t’a donné la bonne marche a suivre, trouver l’origine des mails envoyés avant même d’essayer d’endiguer le flux de mail. Pas la peine d’écoper si tu ne bouche pas le trou dans le bateau.

Il est normal que tu soi, pour l’instant, le seul a avoir conscience du problème, c’est toi le responsable info. Le mieux que je puisse te dire serait d’alerter ta hiérarchie par écrit si ce n’est déjà fait et leur exposer les risques encouru, n’hésite pas a être alarmiste et a utiliser des image genre «les serveurs sont en feu ! On nous attaque ! Vous aller perdre toutes vos données !». Tu leur dit bien que tu investigue sur le sujet mais que cela risque de prendre énormément de temps. Je sais que ce n’est pas très moral mais laisse la situation empirer le temps de tes investigations, comme ça si a un moment ils ne peuvent plus envoyer de mail ils verront bien qu’il ne t’ont pas donner les moyens nécessaire.

Bref comme d’habitude ils voient le service info comme un centre de coût et non de profit.

Je vous remercie pour votre aide.
Et oui, ta dernière phrase est très juste…

Je vous souhaite une bonne journée