== Autómitizálás==
A tanító scripteket a /etc/cron.daily mappában kell elhelyezni és 755 jogot kell rá futni. A /etc/cron.daily scriptek körülbelül 3 és 4 között lesznek futtatva hajnalba. Fontos, hogy hajnalba fusson a script, mert ilyenkor a legkisebb a valószínűsége hogy a ham mappában spam is van.
=== Egyszerűsített script===
A script első változatában azon felhasználók email mappája akikre a sa-learn programot futtatni szeretnénk egyenként fel van sorolva. Az összes felhasználóra nem szabad lefuttatni az sa-learn-t, mert egyrészt vannak technikai email címek (mint pl.ahova a spam megy), vagy vannak olyan felhasználók, akik nem rakják a spam mappába a valódi spam-eket.
{{note|Mivel az adatbázis szinkronizálása nagyon időigényes, fontos, hogy ham és spam mappákat átadó futtatások esetében a '''--no-sync''' szerepeljen, ami nem frissíti be kapásból a db-be az új szabályokat, hanem egy ideglenes fájlban tárolja őket. Mikor az összes új szabályt hozzáadtuk az ideglenes fájlhoz akkor a végén egyszer meghívjuk a sa-update-et '''--sync''' kapcsolóval}}
<!-- ==================================== tanító script start ===================================== -->
===Teljes megoldás===
Itt csak az alapötletet írom le, nem próbáltam ki. Vagy a webmail felületet vagy az email admin felületet és az email adatbázist ki kell egészíteni egy falg-el, ami azt állítaná, hogy az adott felhasználó akarja e tanítani ezen rendszereket. (Ezt implementálni kell nekünk, jelenleg nincs ilyen).
Majd az adatbázisból lekérdezzük azokat akik részt vesznek a tanításba:
A spamassassin-t tanítani fogjuk a felhasználók által spam-nek és ham-nek jelentett emailekkel.
https://kb.site5.com/email/how-to-train-spamassassin/<br />
http://www.hostdango.com/train-spamassassin/<br />
https://spamassassin.apache.org/full/3.1.x/doc/sa-learn.html
<pre>
# stat /var/spool/postfix/virtual/berki2.org/adam/.Spam/cur/1475424394.Vfd00I2aefM211849.centostest\:2\,S
File: `/var/spool/postfix/virtual/berki2.org/adam/.Spam/cur/1475424394.Vfd00I2aefM211849.centostest:2,S'
Size: 3131 Blocks: 8 IO Block: 4096 regular file
Device: fd00h/64768d Inode: 10991 Links: 1
Access: (0600/-rw-------) Uid: ( 150/ vmail) Gid: ( 12/ mail)
Access: 2016-10-04 20:38:12.332000003 +0200
Modify: 2016-10-02 18:06:34.211000190 +0200
Change: 2016-10-04 20:38:11.261000002 +0200
</pre>
Szerintem nem jó, hogy a root nevében fut, és hogy oda rakja le a ./spamassassin mappába amit talál. Onnan hogy fogja felnyalni?
<!-- ==================================== tanító script start ===================================== -->
<!-- ============================================================================================== -->
<source lang='sh'>
#!/bin/bash
## Database details
USER=''
PASS=''
HOST=''
DB='postfix'
## Where to log stuff
LOG='/var/log/sa-learn.log'
...
mysql --skip-column-names -u$USER -p$PASS -h$HOST -D$DB -e "SELECT SUBSTRING(email, 1, LOCATE('@', email) - 1) AS user, SUBSTRING(email, LOCATE('@', email) + 1) AS domain FROM virtual_users" WHERE <be van pipálva hogy részt vesz a tanításban>| while read user domain;
do
....
echo "Syncing the SpamAssassin journal" >> $LOG 2>&1
...
<ide jöhet a tanítás>
## How many days to wait before deleting spam## Comment out to disable CLEAN=30 echo -e "\n\nRun started `date +%c`" >> $LOG 2>&1 ## Spam and ham training for all virtual users## Delete spam older than $CLEAN days mysql --skip-column-names -u$USER -p$PASS -h$HOST -D$DB -e "SELECT SUBSTRING(email, 1, LOCATE('@', email) - 1) AS user, SUBSTRING(email, LOCATE('@', email) + 1) AS domain FROM virtual_users" | while read user domain; do ## Spam echo "Spam training for $user@$domain" >> $LOG 2>&1 /usr/bin/sa-learn --no-sync --spam /var/spool/postfix/virtual/$domain/$user/.Junk/{cur,new} >> $LOG 2>&1 ## Ham echo "Ham training for $user@$domain" >> $LOG 2>&1 /usr/bin/sa-learn --no-sync --ham /var/spool/postfix/virtual//$domain/$user/{cur} >> $LOG 2>&1 ## Delete if [ -n $CLEAN ]; then echo "Deleting spam for $user@$domain older than $CLEAN days" >> $LOG 2>&1 find /var/spool/postfix/virtual/$domain/$user/.Junk/cur/ -type f -mtime +$CLEAN -exec rm {} \; fi
done
## Sync the SpamAssassin journal and print out stats echo "Syncing the SpamAssassin journal" >> $LOG 2>&1/usr/bin/sa-learn --sync >> $LOG 2>&1echo "Statistics for this run:" >> $LOG 2>&1/usr/bin/sa-learn --dump magic >> $LOG 2>&1 echo -e "Run finished `date +%c`" >> $LOG 2>&1exit
exit
</source>
{{note|Mivel az adatbázis szinkronizálása nagyon időigényes, fontos, hogy ham és spam mappákat átadó futtatások esetében a '''--no-sync''' szerepeljen, ami nem frissíti be kapásból a db-be az új szabályokat, hanem egy ideglenes fájlban tárolja őket. Mikor az összes új szabályt hozzáadtuk az ideglenes fájlhoz akkor a végén egyszer meghívjuk a sa-update-et '''--sync''' kapcsolóval}} <pre>Run started Sat 10 Sep 2016 10:57:28 PM CESTSpam trainingLearned tokens from 3889 message(s) (3889 message(s) examined)Learned tokens from 1 message(s) (1 message(s) examined)Learned tokens from 1 message(s) (1 message(s) examined)Ham trainingLearned tokens from 3479 message(s) (3479 message(s) examined)bayes: bayes db version 0 is not able to be used, aborting! at /usr/share/perl5/vendor_perl/Mail/SpamAssassin/BayesStore/DBM.pm line 203.Learned tokens from 11401 message(s) (11503 message(s) examined)Deleting spam for @ older than 30 daysSyncing the SpamAssassin journalexpired old bayes database entries in 37 seconds132820 entries kept, 645263 deletedtoken frequency: 1-occurrence tokens: 49.55%token frequency: less than 8 occurrences: 23.04%Statistics for this run:0.000 0 3 0 non-token data: bayes db version0.000 0 3890 0 non-token data: nspam0.000 0 14880 0 non-token data: nham0.000 0 132820 0 non-token data: ntokens0.000 0 1462517177 0 non-token data: oldest atime0.000 0 1473531473 0 non-token data: newest atime0.000 0 0 0 non-token data: last journal sync atime0.000 0 1473542242 0 non-token data: last expiry atime0.000 0 11059200 0 non-token data: last expire atime delta0.000 0 645263 0 non-token data: last expire reduction countRun finished Sat 10 Sep 2016 11:17:25 PM CEST </pre> <pre># lltotal 5744-rw-------. 1 root root 2535424 Sep 10 23:17 bayes_seen-rw-------. 1 root root 4837376 Sep 10 23:17 bayes_toks </pre> === Megtanult szabályok mentése és visszatöltése === [[File:ClipCapIt-160910-214715.PNG]]