Fun

    One line to know where your users are on vacation :) (if they use company mail on vacation)

    Assuming You use dovecot 2.x and stores logs in /var/log/maillog:

    cat /var/log/maillog | grep Login: | awk '{print $10}' | sed 's/rip=//g' | sed 's/,//g' >> /tmp/1.txt && sh -c 'for line in `cat /tmp/1.txt`; do geoiplookup $line; done' | sort | uniq | awk '{print $4 $5}'

    gives You unique locations of every user login. You can also grep for specific login instead of all of them :)

    If You are not rotating Your logs it will take some time to return results.

    © odwiedź stronę http://maciejewski.org po więcej fajnych postów!

    Internet

    Już nie taki brzydki hack na hylafax i png

    W poprzednim wpisie – http://maciejewski.org/2012/05/16/hack-na-hylafax-i-faksy-w-png-lub-innym/ opisałem jak przerabiać tiffy generowane przez hylafax na png i wysyłać je ludziom na mail.

    Skrypt w FaxDispatch co prawda działał bardzo dobrze ale był dość brzydki i toporny (tworzenie headerów przez echo >> do plików itp).

    Pozatym okazało się że miał jedną zasadniczą wadę. Nie dało się przekazać wiadomości z załącznikami inline. Po naciśnięciu FORWARD wiadomość wyglądała mniej więcej tak:

     

     

     

     

     

     

     

     

     

     

     

     

     

     

    Dlatego zrezygnowałem z sendmaila i uuencode na rzecz mime-construct

    Poprzedni skrypt wygląda teraz tak:

    convert /var/spool/hylafax/`cat /tmp/FILE` /tmp/fax/fax.png
    for D in /tmp/fax/*png
    do
    echo -n "--file-attach " >> /tmp/fax/faxy
    echo $D >> /tmp/fax/faxy
    done
    mime-construct --header 'From: Serwer faxów ' --to fax@***.pl --subject "Odebrano fax od $SENDER" `cat /tmp/fax/faxy`
    rm -rf /tmp/fax/*

    Teraz pętla for tworzy listę plików które mime-construct ma załączyć do wiadomości.

    Po zmianie skryptu dostarczanie faksów działa jak dotychczas, natomiast po przekazaniu mamy eleganckie załączniki tam gdzie powinny być :)

     

    Job / Praca

    Hack na hylafax i faksy w png (lub innym formacie graficznym)

    Na początku była euforia. Będziemy mieli firmowy wirtualny faks z pięcioma numerami! Notabene „paczkę” dziesięciu kolejnych numerów od Netii dostaliśmy za darmo, a myślałem, że za darmo nikt już nic nie daje. Zatem, serwer faksów stanął na nogi dość szybko i co również ważne, pierwszy numer udało się uruchomić bez większych problemów. Serwer to hylafax 4.4.7.

    $ faxstat
    HylaFAX scheduler on nidhog.***.pl: Running
    Modem tty00 (+48616******): Running and idle

    Po początkowym (moim) zachwycie jak to dobrze działa i jak stabilnie, zaczęły napływać pytania i prośby o zmianę formatu dostarczania faksów. Tutaj małe wtrącenie jak wygląda u nas dostarczanie faksów. Na jeden numer do księgowości kontrahenci wysyłają faks, który następnie jest dystrybuowany do wszystkich osób którym może być to przydatne. Te kilkadziesiąt osób patrzy sobie w swoje Thunderbirdy a niektóre wybitnie oporne jednostki w Outlooki i im szybciej po łypnięciu okiem można stwierdzić, że ten faks jest potrzebny lub nie tym lepiej.

    I tu właśnie zaczynają się schody bowiem hylafax po odebraniu faksu umie go dostarczyć jako postscript (domyślnie) lub wielostronicowy tiff lub pdf. Niby mamy wszystko co potrzeba, oryginał, obrazek, pdf. Niestety problem tkwi poniekąd w klientach pocztowych, które bez zagłębiania się w szczegóły nie mogą wyświetlić podglądu załącznika w pdf lub tiff.

    Domyślnie hylafax nie ma także opcji dla png, jpg czy gif ponieważ w/g twórców hylafax’a formaty te nie nadają się do odwzorowywania czarno-białych faksów oraz mają problem z wielostronicowymi faksami.

    Po kilkudniowych (naprawdę) poszukiwaniach jakichś pluginów i patchy okazało się, że są co prawda jakieś patche na /var/spool/hylafax/bin/faxrcvd , który jest odpowiedzialny za przyjmowanie faksów istnieją na forum hylafax ale posty są datowane między 1999 a 2004 i teraz ten plik wygląda zupełnie inaczej. Oczywiście przy każdym poście akademicka dyskusja dlaczego nie używać png czy jpg…

    Jak już pisałem, w modelu odbioru faksów, który u nas z powodzeniem funkcjonuje liczy się szybkość – dostajemy kilkanaście/kilkadziesiąt faksów dziennie, który to faks może dotyczyć jednej lub kilku osób z kiludziesięciu. Musi być obrazek dostępny w podglądzie dla programów pocztowych, koniec, kropka.

    Zamiast próbować zaimplementować obsługę png do faxrcvd, który dla mnie jest zbyt pokręcony, poszedłem inną drogą. Hylafax używa pliku /var/spool/hylafax/etc/FaxDispatch do dostosowywania dostarczania faksów. Można tam oprócz predefiniowanych pól dokonywać modyfikacji np przy pomocy CASE (gdy numer taki, dostarcz gdzieś) itp. Mi natomiast rzucił się w oczy przedostatni przykład z jakiegoś FaxDispatcha w cvsie hylafaxa:

    ## To make each received fax saved outside hylafax
    ## ( Don't forget to chown uucp /some/place )

    /bin/cp $FILE /some/place

    Czysty skrypt shellowy w pliku konfiguracyjnym :)

    Po kilkunastu wysłanych faksach testowych i poprawieniu kilku błędów oraz praw urodziło się coś takiego:

    FILETYPE=pdf;
    SENDTO=fax@***.pl;
    TEMPLATE=pl;

    convert $FILE /tmp/fax/fax.png
    echo "To: fax@***.pl" > /tmp/fax/mail_fax
    echo "From: Serwer faxĂłw *** Sp. z o.o. " >> /tmp/fax/mail_fax
    echo "Subject: Odebrano fax od $SENDER" >> /tmp/fax/mail_fax
    echo "MIME-Version: 1.0" >> /tmp/fax/mail_fax
    echo "Content-Type: text" >> /tmp/fax/mail_fax
    echo "Content-Disposition: inline" >> /tmp/fax/mail_fax
    for D in /tmp/fax/*png
    do
    uuencode $D $D >> /tmp/zalaczniki
    done
    cat /tmp/zalaczniki >> /tmp/fax/mail_fax
    sendmail "fax@***.pl" < /tmp/fax/mail_fax rm -rf /tmp/fax/* rm -rf /tmp/zalaczniki

    Do działania potrzebny jest ImageMagic.

    Krótkie objaśnienie

    - pierwsze trzy linijki to najbardziej podstawowa konfiguracja, odbiorca, format i szablon wiadomości. Zostawiłem podczas testowania jak przychodził faks aby przez wadliwy skrypt poniżej nie zostać pozbawionym faksów :)

    - następnie konwertujemy plik tiff który tworzy hylafax w /var/spool/hylafax/recvq na png. Konkretny plik hylafax przechowuje w zmiennej $FILE więc nie musimy nawet szukać tego o którego nam chodzi. Wielostronicowy tiff konwertowany jest na wiele plików png w/g schematu - jeśli dajemy nazwę fax.png jako pliku wyjściowego dostajemy fax-1.png, fax-2.png itd.

    - kolejne 6 linijek tworzy nagłówek maila, bez tego też zadziała, ale odbiorca dostanie fax bez tematu od UNIX-to-UNIX Copy (uucp@domena), założę się, że to się nie spodoba ludziom z poza IT :) Mamy zatem ładnie od kogo dla kogo, z numerem telefonu który do nas wysyłał w temacie.

    - następne 4 linijki to pętla działająca na katalogu gdzie są nasze skonwertowane pliki png. Każdy plik png trzeba zakodować do ascii i dokleić do wcześniej stworzonego pliku z nagłówkiem.

    - ostatecznie wysyłamy mail sendmailem dołączając nagłówki i załączniki z pliku.

    - ostatnie dwie linijki - sprzątamy oczekując następnego faksu :)

    Trzeba pamiętać, aby wszystkie polecenia i katalogi użyte w tym skrypcie mogły być wykonane przez użytkownika uucp.

    Jeśli wszystko gra, adresat maila powinien otrzymać mniej więcej taką wiadomość:

    Job / Praca

    Bezpieczne filtrowanie poczty przy pomocy imapfilter

    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!

    Internet

    Automatyczne wysyłanie smsa na mail.

    Dla użytkowników mobilnych, ciągle w drodze, najwygodniejszym sposobem zamawiania określonej ilości różnych rzeczy jest jednak sms. Natomiast po drugiej stronie barykady, magazynier jednak woli dostawać zamówienia mailem. Jak to połączyć? Oczywiście najprościej wysyłać maila z telefonu, ale nie każdy może, nie każdy umie. Dlatego postanowiłem załatwić to kompleksowo czyli dla każdej ze stron odpowiedni sposób komunikacji. Odpowiedniego oprogramowania lub usługi szukałem dość długo i po zniechęceniu się do gnokii i zapoznaniu się z ofertą komercyjnych serwisów zagranicznych bądź też rodzimych w końcu znalazłem idealny program do tego typu zadania. SMS2Email Lite w wersji Lite jest darmowy i ma podstawową funkcjonalność jaką jest przekazywanie smsa na adres email. Konfiguracja jest trywialna, wpisujemy tylko na jaki e-mail mają być smsy dostarczone i włączamy forward. Wszystko. Ważniejsza jest konfiguracja konta pocztowego w telefonie, bo to właśnie poprzez nie aplikacja wysyła e-maile. Ja wykorzystałem do tego telefon Nokia E51 ponieważ to obecnie najtańszy telefon z Symbianem w wersji 3 oraz z obsługą Wifi (można także wysyłać za pomocą GPRS/EDGE ale Wifi obniża koszty). E51 ma całkiem niezłego klienta email. Konfigurujemy go w taki sposób aby móc wysyłać maile (właściwy serwer, użytkownik i hasło) oraz zmieniamy z domyslnego „Zawsze pytaj” na odpowiedni SID od Wifi wcześniej uwierzytelniony kluczem WPA/WEP bądź też wybieramy domyślne połączenie Interentowe na zasadzie GSM. Od teraz kiedy tylko aplikacja SMS2Email będzie włączona powinniśmy z automatu dostawać smsy na podany adres email :)

    Konfiguracja klienta email w telefonie:

    Zmieniamy z Zawsze pytaj ......
    Zmieniamy z Zawsze pytaj ......
    ... na domyślny punkt dostępu ....
    ... na domyślny punkt dostępu ....
    ... i zostawiamy na stałe.
    ... i zostawiamy na stałe.
    Tak sms wygląda w thunderbirdzie.
    Tak sms wygląda w thunderbirdzie.
    Firmowe centrum wysyłania spamu ;)
    Firmowe centrum wysyłania spamu ;)




    Related Posts with Thumbnails

    © odwiedź stronę http://maciejewski.org po więcej fajnych postów!

    Add your widget here