Je?li dostajecie mnóstwo maili codziennie, zapewne filtrujecie je w tym czy innym programie pocztowym. Je?li jednak wy??czycie ten program, wszystkie maile trafiaj? do INBOX i tam czekaj? na swój los do czasu uruchomienia programu pocztowego który je odfiltruje. Problem pojawia si? kiedy odbieramy maile na telefonie, lub na innym komputerze. Na innej maszynie mo?na od biedy przenie?? regu?ki filtrowania, ale robi? to przy okazji ka?dego u?ycia nowego komputera albo webmaila nie ma sensu. W przypadku telefonu jest jeszcze gorzej, a ikonka koperty z liczb? 900+ zniech?ca w ogóle do przegl?dania poczty.
Do sprawy podchodzimy oczywi?cie kompleksowo, jako Admini wiemy, ?e trzeba si? tak napracowa? aby si? na d?u?sz? met? nie narobi? :) Dlatego najrozs?dniejszym rozwi?zaniem jest u?ycie imapfilter’a na jakiej? UNIXowej maszynie, która i tak ci?gle mieli powietrze (oczywi?cie w przerwach kiedy co? robi po?ytecznego ;). Je?li jeste?cie adminami w?asnego serwera pocztowego to ju? nie ma lepszego miejsca – ??czenie do localhost jest najszybsze i najbezpieczniejsze bo nie wychodzimy poza maszyn? gdzie mamy poczt?.
Imapfilter korzysta z j?zyka LUA, którego sk?adnia jest do?? prosta a opcje imapfiltra bardzo dobrze opisane w man imapfilter_config.
Mój przyk?adowy konfig wygl?da tak:
options.timeout = 120
options.subscribe = true
account = IMAP {
server = 'localhost',
username = 'login@domena.pl',
password = 'haslo',
}
arpwatch = account.INBOX:contain_from('arpwatch@domena.pl')
account.INBOX:move_messages(account['Raporty.Arpwatch'], arpwatch)
vpnok = account.INBOX:contain_subject('VPN Accepted!')
account.INBOX:move_messages(account['Raporty.VPN.OK'], vpnok)
vpnbad = account.INBOX:contain_subject('VPN Rejected')
account.INBOX:move_messages(account['Raporty.VPN.Rejected'], vpnbad)
eventsentry = account.INBOX:contain_from('eventsentry@domena.pl')
account.INBOX:move_messages(account['Raporty.Event\ Sentry'], eventsentry)
potwierdzenia = account.INBOX:contain_subject('Przeczyt') +
account.INBOX:contain_subject('Potwierdzenie dor?czenia wiadomo?ci') +
account.INBOX:contain_subject('Potwierdzenie dostarczenia wiadomosci') +
account.INBOX:contain_subject('Read:') +
account.INBOX:contain_subject('Potwierdzenie otrzymania:') +
account.INBOX:contain_subject('Potwierdzenie dostarczenia wiadomo?ci') +
account.INBOX:contain_subject('wietlono)')
account.INBOX:move_messages(account['Potwierdzenia'], potwierdzenia)
Na co warto zwróci? uwag?:
+ oznacza OR
* oznacza AND
– oznacza NOT
Je?li podkatalog w Maildirze zawiera spacj?, trzeba j? wyESCkejpowa? – np. Raporty.Event\ Sentry
Ca?y konfig zapisujemy w domy?lnym katalogu dla imapfiltra czyli $HOME/.imapfilter/config.lua i odpalamy na pocz?tek z opcj? -v aby zobaczy? wi?cej komunikatów. Je?li plik z konfiguracj? nazywa si? inaczej lub jest w innym miejscu wywo?ujemy imapfilter -v -c /sciezka/do/konfiga
Je?li nie ma b??dów mo?emy przej?? do dalszej cz??ci.
W zasadzie to jest gotowe rozwi?zanie, je?li jeste?my sami na serwerze. Je?li s? inni u?ytkownicy, którzy dodatkowo posiadaj? prawa root’a albo po prostu nie pasuje nam pozostawiania swojego has?a gdzie? w postaci jawnego tekstu mo?emy zrobi? taki manewr.
W przypadku NetBSD instalujemy paczk?:
wip/ccrypt: Encrypts/decrypts files using Rijndael block cipher
oraz
sysutils/shc: Shell script to C compiler
Piszemy prosty skrypt który b?dzie:
– dekryptowa? nasz konfig
– wykonywa? konfig przy pomocy imapfiltra
– kryptowa? konfig z powrotem
na poczatek kodujemy config:
ccencrypt -e -K supertajnehaslo! config.lua
w wyniku dostajemy plik config.lua.cpt
Teraz skrypt:
#!/bin/sh
ccencrypt -d -K supertajnehaslo! config.lua.cpt
imapfilter -c /sciezka/do/pliku/config.lua
ccencrypt -e -K supertajnehaslo! config.lua
Po wykonaniu tego skryptu je?li ?cie?ki si? w nim zgadzaj? do programów i do konfiga, uprzednio skonfigurowane filtrowanie powinno zadzia?a?.
No dobra, tylko co daje kodowanie pliku je?li has?o podajemy jako parametr? W takim wypadku nic nie daje, ?atwo podejrze? has?o i zdekodowa? plik konfiguracji gdzie jest has?o do naszej poczty.
Nale?y zatem „skompilowa?” skrypt przy pomocy shc.
shc -v -r -T -f skrypt.sh
W wyniku dostaniemy:
skrypt.sh.x – binarka gotowa do odpalenia
skrypt.sh.x.c – kod ?ród?owy wygenerowany z naszego skryptu w takim jakby C.
Sprawdzamy czy uruchomienie ./skrypt.sh.x robi dok?adnie to samo co odpalenie imapfiltra lub skrypt.sh. Je?li tak to pozostaje nam skasowa? skrypt.sh gdzie mamy jawny klucz do zakodowanego pliku z konfigiem do imapfiltra gdzie mamy jawne has?o do naszego konta pocztowego :) oraz kasujemy skrypt.sh.x.c gdzie mamy ?ród?a naszej binarki. Nadajemy prawo x do wykonywanie pliku – chmod 700 skrypt.sh.x
Na koniec dodajemy do crona wywo?ywanie programu co ile? tam minut:
crontab -e
*/1 * * * * /usr/home/cancer/skrypt.sh.x
Od teraz skrypt b?dzie dokonywa? filtrowania co minut? na chwil? dekoduj?c plik z konfiguracj?, po czym b?dzie go kodowa?. Oczywi?cie rozwi?zanie nie jest idealne, co prawda w ps has?o si? nie pojawi, ale mo?na debugowa? jakby si? kto? upar?. Lepsze jednak takie rozwi?zanie ni? ?adne.
© odwiedź stronÄ™ http://maciejewski.org po wiÄ™cej fajnych postów!