Postfix Amavis et ses filtres

Postfix Amavis et ses filtres - Sécurité - Systèmes & Réseaux Pro

Marsh Posté le 01-03-2009 à 20:12:18    

Bonjour, dans le cadre d'un stage de fin d'étude je dois mettre en place une passerelle antispam dans l'entreprise. Je me suis orienté sur Postfix, amavis, SpamAssassin, ClamAV et Mailzu pour le rendu graphique le tout géré par une base de donnée MySQL. Seulement j'ai plusieurs problèmes de configuration et ça fait plus de deux semaines que je tourne en rond.
 
Je trouve pas de doc adapté a ce que je veux faire. Les problèmes que j'ai c'est que les spams ne sont pas taggés ni BOUNCE. Ensuite lorsque je les vois en quarantaine avec mailzu je ne peux pas les renvoyer dans la chaine de serveur mail j'ai l'erreur " authentification echouee ".
 
Je pense que ces problèmes viennent de la configuration d'Amavis puisque c'est lui qui a la priorité par rapport aux filtres sur la configuration. Mon amavis est une versions 2.6.x avec les fichiers de configuration éclatés.
 
Si vous avez des infos a me donner sur la configuration des filtres ou de la doc je serai très intéressé.
 
A+

Reply

Marsh Posté le 01-03-2009 à 20:12:18   

Reply

Marsh Posté le 01-03-2009 à 22:34:07    

man :o

Reply

Marsh Posté le 02-03-2009 à 00:03:54    

man + postconf -n + extrait des logs

Reply

Marsh Posté le 02-03-2009 à 09:28:52    

et la conf d'amavisd + le config.php de mailzu


---------------
Messagerie dédiée, Relais Mail Antispam/Antivirus, Infogérance 24/7: http://www.eole-its.com
Reply

Marsh Posté le 03-03-2009 à 18:11:02    

Les man je les ai tous epluchés sans parvenir à mes fins.
Je vous envoie des logs et les configs demains.

Reply

Marsh Posté le 05-03-2009 à 15:50:15    

Oups j'ai oublié de récuperer les logs :D
 
Quel fichier de log est intéressant pour la configuration ?
 
J'ai des extraits de fichier de conf par contre. Je déballe :D
 
Ma table SQL amavis qui reprend l'exemple de la doc amavisd.sql

Code :
  1. --
  2. -- Structure de la table `maddr`
  3. --
  4. CREATE TABLE `maddr` (
  5.   `id` int(10) unsigned NOT NULL auto_increment,
  6.   `email` varchar(255) NOT NULL,
  7.   `domain` varchar(255) NOT NULL,
  8.   PRIMARY KEY  (`id`),
  9.   UNIQUE KEY `email` (`email`)
  10. ) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=13 ;
  11. --
  12. -- Structure de la table `mailaddr`
  13. --
  14. CREATE TABLE `mailaddr` (
  15.   `id` int(10) unsigned NOT NULL auto_increment,
  16.   `priority` int(11) NOT NULL default '7',
  17.   `email` varchar(255) NOT NULL,
  18.   PRIMARY KEY  (`id`),
  19.   UNIQUE KEY `email` (`email`)
  20. ) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=3 ;
  21. -- --------------------------------------------------------
  22. --
  23. -- Structure de la table `msgrcpt`
  24. --
  25. CREATE TABLE `msgrcpt` (
  26.   `mail_id` varchar(12) NOT NULL,
  27.   `rid` int(10) unsigned NOT NULL,
  28.   `ds` char(1) NOT NULL,
  29.   `rs` char(1) NOT NULL,
  30.   `bl` char(1) default '',
  31.   `wl` char(1) default '',
  32.   `bspam_level` float default NULL,
  33.   `smtp_resp` varchar(255) default '',
  34.   KEY `msgrcpt_idx_mail_id` (`mail_id`),
  35.   KEY `msgrcpt_idx_rid` (`rid`)
  36. ) ENGINE=InnoDB DEFAULT CHARSET=latin1;
  37. -- --------------------------------------------------------
  38. --
  39. -- Structure de la table `msgs`
  40. --
  41. CREATE TABLE `msgs` (
  42.   `mail_id` varchar(12) NOT NULL,
  43.   `secret_id` varchar(12) default '',
  44.   `am_id` varchar(20) NOT NULL,
  45.   `time_num` int(10) unsigned NOT NULL,
  46.   `time_iso` char(16) NOT NULL,
  47.   `sid` int(10) unsigned NOT NULL,
  48.   `policy` varchar(255) default '',
  49.   `client_addr` varchar(255) default '',
  50.   `size` int(10) unsigned NOT NULL,
  51.   `content` char(1) default NULL,
  52.   `quar_type` char(1) default NULL,
  53.   `quar_loc` varchar(255) default '',
  54.   `dsn_sent` char(1) default NULL,
  55.   `spam_level` float default NULL,
  56.   `message_id` varchar(255) default '',
  57.   `from_addr` varchar(255) default '',
  58.   `subject` varchar(255) default '',
  59.   `host` varchar(255) NOT NULL,
  60.   PRIMARY KEY  (`mail_id`),
  61.   KEY `msgs_idx_sid` (`sid`),
  62.   KEY `msgs_idx_time_num` (`time_num`)
  63. ) ENGINE=InnoDB DEFAULT CHARSET=latin1;
  64. -- --------------------------------------------------------
  65. --
  66. -- Structure de la table `policy`
  67. --
  68. CREATE TABLE `policy` (
  69.   `id` int(10) unsigned NOT NULL auto_increment,
  70.   `policy_name` varchar(32) default NULL,
  71.   `virus_lover` char(1) default NULL,
  72.   `spam_lover` char(1) default NULL,
  73.   `banned_files_lover` char(1) default NULL,
  74.   `bad_header_lover` char(1) default NULL,
  75.   `bypass_virus_checks` char(1) default NULL,
  76.   `bypass_spam_checks` char(1) default NULL,
  77.   `bypass_banned_checks` char(1) default NULL,
  78.   `bypass_header_checks` char(1) default NULL,
  79.   `spam_modifies_subj` char(1) default NULL,
  80.   `virus_quarantine_to` varchar(64) default NULL,
  81.   `spam_quarantine_to` varchar(64) default NULL,
  82.   `banned_quarantine_to` varchar(64) default NULL,
  83.   `bad_header_quarantine_to` varchar(64) default NULL,
  84.   `spam_tag_level` float default NULL,
  85.   `spam_tag2_level` float default NULL,
  86.   `spam_kill_level` float default NULL,
  87.   `spam_dsn_cutoff_level` float default NULL,
  88.   `addr_extension_virus` varchar(64) default NULL,
  89.   `addr_extension_spam` varchar(64) default NULL,
  90.   `addr_extension_banned` varchar(64) default NULL,
  91.   `addr_extension_bad_header` varchar(64) default NULL,
  92.   `warnvirusrecip` char(1) default NULL,
  93.   `warnbannedrecip` char(1) default NULL,
  94.   `warnbadhrecip` char(1) default NULL,
  95.   `newvirus_admin` varchar(64) default NULL,
  96.   `virus_admin` varchar(64) default NULL,
  97.   `banned_admin` varchar(64) default NULL,
  98.   `bad_header_admin` varchar(64) default NULL,
  99.   `spam_admin` varchar(64) default NULL,
  100.   `spam_subject_tag` varchar(64) default NULL,
  101.   `spam_subject_tag2` varchar(64) default NULL,
  102.   `message_size_limit` int(11) default NULL,
  103.   `banned_rulenames` varchar(64) default NULL,
  104.   PRIMARY KEY  (`id`)
  105. ) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=8 ;
  106. --
  107. -- Contenu de la table `policy`
  108. --
  109. INSERT INTO `policy` (`id`, `policy_name`, `virus_lover`, `spam_lover`, `banned_files_lover`, `bad_header_lover`, `bypass_virus_checks`, `bypass_spam_checks`, `bypass_banned_checks`, `bypass_header_checks`, `spam_modifies_subj`, `virus_quarantine_to`, `spam_quarantine_to`, `banned_quarantine_to`, `bad_header_quarantine_to`, `spam_tag_level`, `spam_tag2_level`, `spam_kill_level`, `spam_dsn_cutoff_level`, `addr_extension_virus`, `addr_extension_spam`, `addr_extension_banned`, `addr_extension_bad_header`, `warnvirusrecip`, `warnbannedrecip`, `warnbadhrecip`, `newvirus_admin`, `virus_admin`, `banned_admin`, `bad_header_admin`, `spam_admin`, `spam_subject_tag`, `spam_subject_tag2`, `message_size_limit`, `banned_rulenames`) VALUES
  110. (1, 'Non-paying', 'N', 'N', 'N', 'N', 'Y', 'Y', 'Y', 'N', 'Y', NULL, NULL, NULL, NULL, 3, 7, 10, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
  111. (2, 'Uncensored', 'Y', 'Y', 'Y', 'Y', 'N', 'N', 'N', 'N', 'Y', NULL, NULL, NULL, NULL, 3, 5, 5, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, '***SPAM***', '***SPAM***', NULL, NULL),
  112. (3, 'Wants all spam', 'N', 'Y', 'N', 'Y', 'Y', 'N', 'N', 'N', 'Y', NULL, 'spam@ad-dspam.local', 'spam@ad-dspam.local', 'spam@ad-dspam.local', 3, 7, 7, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, '[SPAM]', '[SPAM]', NULL, NULL),
  113. (4, 'Wants viruses', 'Y', 'N', 'Y', 'Y', 'N', 'N', 'N', 'N', 'Y', NULL, NULL, NULL, NULL, 3, 6.9, 6.9, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
  114. (5, 'Normal', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'Y', NULL, NULL, NULL, NULL, 3, 6.9, 6.9, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
  115. (6, 'Trigger happy', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'Y', NULL, NULL, NULL, NULL, 3, 5, 5, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
  116. (7, 'Permissive', 'N', 'N', 'N', 'Y', 'N', 'N', 'N', 'N', 'Y', NULL, NULL, NULL, NULL, 3, 10, 20, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL);
  117. -- --------------------------------------------------------
  118. --
  119. -- Structure de la table `quarantine`
  120. --
  121. CREATE TABLE `quarantine` (
  122.   `mail_id` varchar(12) NOT NULL,
  123.   `chunk_ind` int(10) unsigned NOT NULL,
  124.   `mail_text` text NOT NULL,
  125.   PRIMARY KEY  (`mail_id`,`chunk_ind`)
  126. ) ENGINE=InnoDB DEFAULT CHARSET=latin1;
  127. -- --------------------------------------------------------
  128. --
  129. -- Structure de la table `users`
  130. --
  131. CREATE TABLE `users` (
  132.   `id` int(10) unsigned NOT NULL auto_increment,
  133.   `priority` int(11) NOT NULL default '7',
  134.   `policy_id` int(10) unsigned NOT NULL default '1',
  135.   `email` varchar(255) NOT NULL,
  136.   `fullname` varchar(255) default NULL,
  137.   `local` char(1) default NULL,
  138.   PRIMARY KEY  (`id`),
  139.   UNIQUE KEY `email` (`email`)
  140. ) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=6 ;
  141. --
  142. -- Contenu de la table `users`
  143. --
  144. INSERT INTO `users` (`id`, `priority`, `policy_id`, `email`, `fullname`, `local`) VALUES
  145. (1, 7, 3, '@mondomaine.fr', NULL, NULL),
  146. (2, 7, 3, 'seb@mondomaine.fr', 'Sebastien', NULL),
  147. (3, 7, 1, 'spam@as-dspam.localdomain', 'Boite mail de SpamAssassin', 'Y');
  148. -- --------------------------------------------------------
  149. --
  150. -- Structure de la table `wblist`
  151. --
  152. CREATE TABLE `wblist` (
  153.   `rid` int(10) unsigned NOT NULL,
  154.   `sid` int(10) unsigned NOT NULL,
  155.   `wb` varchar(10) NOT NULL,
  156.   PRIMARY KEY  (`rid`,`sid`)
  157. ) ENGINE=MyISAM DEFAULT CHARSET=latin1;
  158. --
  159. -- Contenu de la table `wblist`
  160. --
  161. --
  162. -- Contraintes pour les tables exportées
  163. --
  164. --
  165. -- Contraintes pour la table `msgrcpt`
  166. --
  167. ALTER TABLE `msgrcpt`
  168.   ADD CONSTRAINT `msgrcpt_ibfk_1` FOREIGN KEY (`rid`) REFERENCES `maddr` (`id`),
  169.   ADD CONSTRAINT `msgrcpt_ibfk_2` FOREIGN KEY (`mail_id`) REFERENCES `msgs` (`mail_id`) ON DELETE CASCADE;
  170. --
  171. -- Contraintes pour la table `msgs`
  172. --
  173. ALTER TABLE `msgs`
  174.   ADD CONSTRAINT `msgs_ibfk_1` FOREIGN KEY (`sid`) REFERENCES `maddr` (`id`);
  175. --
  176. -- Contraintes pour la table `quarantine`
  177. --
  178. ALTER TABLE `quarantine`
  179.   ADD CONSTRAINT `quarantine_ibfk_1` FOREIGN KEY (`mail_id`) REFERENCES `msgs` (`mail_id`) ON DELETE CASCADE;


 
La config du Postfix :
Le fichier main.cf :

Code :
  1. myhostname = as-dspam.localdomain
  2. alias_maps = hash:/etc/aliases
  3. alias_database = hash:/etc/aliases
  4. myorigin = /etc/mailname
  5. mydestination = as-dspam.localdomain, localhost.localdomain, , localhost
  6. relayhost =
  7. mynetworks = 127.0.0.0/8 192.168.153.0/24
  8. mailbox_command = procmail -a "$EXTENSION"
  9. mailbox_size_limit = 0
  10. recipient_delimiter = +
  11. inet_interfaces = all
  12. content_filter = smtp-amavis:[127.0.0.1]:10024
  13. transport_maps = hash:/etc/postfix/relai


 
Le fichier master.cf

Code :
  1. # Configuration Postfix/Amavis :
  2. smtp-amavis unix -      -       y       -       2  smtp
  3.   -o smtp_data_done_timeout=1200
  4.   -o smtp_send_xforward_command=yes
  5.   -o disable_dns_lookups=yes
  6.   -o max_use=20
  7. 127.0.0.1:10025 inet n  -       n       -       -  smtpd
  8.   -o content_filter=
  9.   -o mynetworks=127.0.0.0/8
  10.   -o strict_rfc821_envelopes=yes
  11.   -o smtpd_error_sleep_time=0
  12.   -o smtpd_soft_error_limit=1001
  13.   -o smtpd_hard_error_limit=1000
  14.   -o smtpd_client_connection_count_limit=0
  15.   -o smtpd_client_connection_rate_limit=0


 
Mon fichier relai s'est fait postmappé et ressemble à :
mondomaine.fr              smtp:[serveursmtp]
 
La configuration de mon fichier 50-user Amavis :

Code :
  1. # Here we set up access to MySQL data:
  2. @lookup_sql_dsn = ( ['DBI:mysql:amavis:localhost', '*********', '********'] );
  3. @storage_sql_dsn = @lookup_sql_dsn;
  4. # If using MailZu, store banned files and spam to MySQL if you want to give users the
  5. # ability to read those messages in the MailZu interface:
  6. $banned_files_quarantine_method = 'sql:';
  7. $spam_quarantine_method         = 'sql:';
  8. $bad_header_quarantine_method  = 'sql:';
  9. $sql_select_policy =
  10. 'SELECT *, users.id'.
  11. ' FROM users LEFT JOIN policy ON users.policy_id=policy.id'.
  12. ' WHERE users.email IN (%k) ORDER BY users.priority DESC';
  13. #$inet_socket_port = [10024,9998];
  14. #$interface_policy{'9998'} = 'AM.PDP';
  15. #$policy_bank{'AM.PDP'} = {
  16. #    protocol => 'AM.PDP',
  17. #    inet_acl => [qw( 127.0.0.1 [:1] 192.168.153.30 )],
  18. #  };
  19. $unix_socketname = "$MYHOME/amavisd.sock";  # listen on Unix socket
  20. # alternatively (less common):
  21. $inet_socket_port = [10024, 9998];  # listen on listed inet tcp ports
  22. # apply policy bank AM.PDP-SOCK on a Unix socket:
  23. #  (note that this precludes the use of old amavis-milter
  24. #   helper program (with sendmail) on the same socket)
  25. $interface_policy{'SOCK'} = 'AM.PDP-SOCK';
  26. # apply policy bank AM.PDP-INET to some inet tcp socket, e.g. tcp port 9998:
  27. $interface_policy{'9998'} = 'AM.PDP-INET';
  28. $policy_bank{'AM.PDP-SOCK'} = {
  29.   protocol => 'AM.PDP',  # select Amavis policy delegation protocol
  30.   auth_required_release => 0,  # don't require secret_id for amavisd-release
  31. };
  32. $policy_bank{'AM.PDP-INET'} = {
  33.   protocol => 'AM.PDP',  # select Amavis policy delegation protocol
  34.   inet_acl => [qw( 127.0.0.1 [:1] 192.168.153.30 )],  # restrict access to these IP addresses
  35.   auth_required_release => 0,  # don't require secret_id for amavisd-release
  36. };


 
Pour la configuration de mailzu j'ai créer la base de donnée mailzu avec les comptes utilisateurs.
Elle est configurer pour accéder à la base d'amavis quelle lis et remplis.
Pour le renvoie des pourriels j'ai configurer de sorte que le message soit renvoyé vers un autre serveur smtp sur le port 25.
 
Dites moi si un élément manque.


Message édité par seb-info le 05-03-2009 à 15:55:04
Reply

Marsh Posté le 08-03-2009 à 18:09:20    

Ca n'inspire personne cette utilisation des filtres spam ?
 
Je vous comprend, moi c'est pareil :D

Reply

Marsh Posté le 08-03-2009 à 19:28:24    

moi c'a m'inspire  ;)  mais comme tu n'as pas mis toutes les informations demandées  (fichiers de conf COMPLETS et les logs) c'est compliqué de t'aider..


---------------
Messagerie dédiée, Relais Mail Antispam/Antivirus, Infogérance 24/7: http://www.eole-its.com
Reply

Marsh Posté le 09-03-2009 à 12:10:36    

Je vais quand même pas poster tout mes fichiers de configuration sur le forum ... Est ce que je peux t'envoyer les fichiers par mail ou ftp ou irc ou .... :D
Ca m'embete de tout poster ici.

Reply

Marsh Posté le 09-03-2009 à 21:58:20    

tu peux me l'envoyer en MP si tu veux


---------------
Messagerie dédiée, Relais Mail Antispam/Antivirus, Infogérance 24/7: http://www.eole-its.com
Reply

Marsh Posté le 09-03-2009 à 21:58:20   

Reply

Marsh Posté le 17-03-2009 à 09:57:48    

J'apporte quelques nouvelles sur ma configuration.
 
Les spams et virus sont bien détectés. Grâce à Mailzu je vois les mails filtrés cependant je ne peut pas les libérés directement depuis Mailzu.
 
J'ai configuré Mailzu pour libérer les mails via smtp sur 127.0.0.1:10025 et j'ai l'erreur :  
 

Code :
  1. [Tue, 17 Mar 2009 10:47:27]     192.168.153.1   monutilisateur-admin Error connecting to as-dspam.localdomain:10025, Connection refused


 
Le serveur SMTP 127.0.0.1 a l'adresse 192.168.153.30 192.168.153.1 correspond à ma passerelle VMWare.
 
Le comble .... lorsque je change ma config Mailzu dans le fichier ./repertoire-web/mailzu/config/config.php pour libérer les mails différemment ( autre serveur SMTP ou envoie de mail avec PHP ) les modifications ne sont pas prises en compte même après reboot du PC. Il veut toujours m'envoyer les mails sur 127.0.0.1 10025.  
 
Je trouve aucun sujet a propos de ce problème avec Mailzu. Si quelqu'un a une piste ....

Reply

Marsh Posté le 17-03-2009 à 10:01:05    

J'ai mis en place avamavis-d new + spamassassin + postfix mais j'ai choisis une option + simple et tout aussi efficace.
 
Si le mail est flagué en spam il est redirigé vers une boite mais spambox@mondomaine.com, je regarde cette boite avec webmin et si y'a erreur je peux redispatcher le mail à l'utilisateur.
c'est simple leger et ça marche tres bien.

Reply

Marsh Posté le 17-03-2009 à 11:48:20    

Ton idée m'a l'air plutôt sympatique le problème c'est que je ne vois pas comment faire la redirection des spams de tout mes utilisateurs vers la boite spam.  
 
Il faut faire un procmailrc dans ce genre ?
:0
^Subject *SPAM*
! spam@mondomaine.fr
 
Mais pour quel utilisateur ?
 
Ca m'interesse

Reply

Marsh Posté le 17-03-2009 à 19:29:32    

ce n'est pas une solution industrialisable comparée a la mise en quarantaine dans un gestionnaire accessible par chaque user
 
seb-info : si tu as changé ta conf je crois qu'il faut tu m'envoies les fichiers à jour par MP alors


---------------
Messagerie dédiée, Relais Mail Antispam/Antivirus, Infogérance 24/7: http://www.eole-its.com
Reply

Marsh Posté le 17-03-2009 à 19:37:00    

j'ai regardé les fichiers que tu m'avais deja passé et y deja pas mal d'erreur, donc j'attends tes fichiers a jour avant de t'indiquer les corrections


---------------
Messagerie dédiée, Relais Mail Antispam/Antivirus, Infogérance 24/7: http://www.eole-its.com
Reply

Marsh Posté le 17-03-2009 à 21:10:34    

J'avais essayé de mettre en place une gestion par user d'une "spambox" mais c'est super dur, j'avais jeté l'éponge.
Du coup je redirige tous les SPAM de l'entreprise vers une seule Boite mails poubelle "spambox@mondomaine.com". Que j'efface tous les 10 jours.
Quand les users me demandent un mail qui n'est pas arrivé, je consulte cette boite et généralement j'y retrouve le mail.


Message édité par lecharcutierdelinux le 17-03-2009 à 21:11:46
Reply

Marsh Posté le 17-03-2009 à 22:06:38    

Le sujet à avancé de mon côté malgré les erreurs :)
Je marque cette discussion comme résolu et je vais ouvrir un autre sujet :
http://forum.hardware.fr/hfr/syste [...] 5509_1.htm
 
Par ailleurs je me permets de vous donnez un lien pour tout ce qui ont des problèmes de configuration de leur passerelle antispam. Car au cours de mes recherches je suis tombé sur pas mal de tuto soit trop simpliste, trop complexe ou incomplet. C'est pourquoi je posterais les details et de façon complète la config de ma passerelle ( si elle fonctionne :D ) d'ici début avril ( elle fonctionnera :D ) sur :
 
http://www.newon.fr/tuto11.html


Message édité par seb-info le 19-03-2009 à 11:32:08
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed