Q&D SPF мини КАК-ДА
SPF е съкращение от Sender Policy Framework. Идеята е да се създаде механизъм, с който да се проверява дали пощата идваща от даден домейн е наистина е валидна за този домейн или е фалшифицирана. Пример - получаваме поща от tralala@yahoo.com с досаден SPAM а в тялото на писмото се вижда, че то е тръгнало от сървър 183abc.dsl.abv.co.jp с IP адрес(1.2.3.4). Това очевидно не е писмо от яху.
Как работи SPF:
За всеки домейн, за който искаме да декларираме от кои IP адреси излиза неговата поща създаваме DNS запис според съответнят документ (повечето имплементации са по по-старата версия на документа), в който указваме кои са сървърите и каква ни е политиката. По този начин все още не се предпазваме по какъвто и да е начин от СПАМ, а позволяваме на тези, които са имплементирали SPF проверка на входящата си поща да проверяват дали писмата които претендират да излизат от нашия домейн наистина са излезли от него или са фалшифицирани.
Най лесния начин за създаване на DNS записа е използването на този магьосник.
Защитата
За да ползваме SPF за филтриране на входящата поща е необходимо софтуера обслужващ пощата ни да поддържа SPF. Подобна поддръжка съществува за повечето MTA софтуер - sendmail, postfix, ... под една или друга форма. Конкретно при нас използвам sendmail+spfmilter. spfmilter е написан на C milter (mail filter) ползващ libspf2. За да се подкара тази комбинация е нужно да разполагате със изходния код на libspf2, spfmilter и sendmail. Ако sendmail е инсталиран от пакет, а не от изходния код просто инсталирайте и пакета sendmail-devel. Отбелязвам, че spfmilter към момента не поддържа последните версии на libspf2 (на сайта пише коя е последната поддържана) и поради това се знае, че се получава memory leak от около 10 МБ/седмица. Този проблем го решавам, като веднъж в денонощието рестартирам spfmilter. ползването на milter-a е като на всеки друг milter - стартира се като процес със съответните параметри (най-вече къде да си пише сокет-а) а на sendmail му се казва - ползвай този milter:
Стартираме spfmilter така(в друга конфигурация потребителя и пътя може да са други):
/usr/local/sbin/spfmilter -u sendmail unix:/var/run/spfmilter.sock
и добавяме следния ред в sendmail.mc:
INPUT_MAIL_FILTER(`spfmilter',`S=unix:/var/run/spfmilter.sock, T=S:4m;R:4m')
след това генерираме конфигурационния файл на sendmail:
cd /etc/mail
m4 sendmail.mc > sendmail.cf
и рестартираме sendmail.
Ако всичко е наред в логовете ще започнат да се появяват такива редове:
Aug 15 11:47:40 abv sendmail[2538]: j7F8lZjc002538: Milter add: header: Received-SPF: pass (abv: domain of hotmail.com designates 64.4.18.52 as permitted sender) receiver=abv; client-ip=64.4.18.52; helo=hotmail.com; envelope-from=xyz@hotmail.com; x-software=spfmilter 0.93 http://www.acme.com/software/spfmilter/;
Това е пример за адрес, който е валиден за домейн-а и резултата е Received-SPF: pass
spfmilter таг-ва пощата с резултата от проверката, който освен pass може да е none, softfail, hardfail. none означава, че домейна който се проверява не публикува SPF запис. За съжаление болшинството са такива. softfail означава, че изпращача най-вероятно е фалшив, но собственика на проверявания домейн е декларирал soft политика. Тоест - обявил е валидни изпращачи, но е казал "може да има и други". hardfail е ясно - фалшиф, да си ходи.
Leave a comment