Greylisting for Postfix
http://ru.wikipedia.org/wiki/Серый_список
http://greylisting.org/
http://www.gasmi.net/gld.html
http://www.gasmi.net/down/gld-readme
http://www.wyae.de/docs/greylisting/
sh# cd /usr/ports
sh# make search name=gld
------------------------------------
Port: gld-1.7
Path: /usr/ports/mail/gld
Info: Greylisting daemon for Postfix
Maint: ports@FreeBSD.org
B-deps: mysql-client-5.0.81
R-deps: mysql-client-5.0.81
WWW: http://www.gasmi.net/gld.html
------------------------------------
sh# cd /usr/ports/mail/gld
sh# make install
------
+MYSQL
------
sh# cd work/gld-1.8
sh# ls -l
# ls -l | grep sql
-----------------------------------------------------------------
-rw-r--r-- 1 root wheel 159 Oct 12 2004 README-pgsql
-rw-r--r-- 1 root wheel 3138 Sep 10 2005 sql.c
-rw-r--r-- 1 root wheel 2352 Aug 12 09:47 sql.o
-rw-r--r-- 1 root wheel 10173 Sep 16 2005 table-whitelist.sql
-rw-r--r-- 1 root wheel 469 Sep 1 2004 tables.mysql
-rw-r--r-- 1 root wheel 697 Oct 12 2004 tables.pgsql
-----------------------------------------------------------------
# Смотрим в tables.mysql
# и модернизировав немного tables.mysql получил файл gld-db.sql
sh# cat gld-db.sql
------------------------------------------------------------------------------------
DROP DATABASE IF EXISTS dbgreylist;
CREATE DATABASE dbgreylist;
USE dbgreylist;
CREATE TABLE greylist (
ip char(16) NOT NULL default '',
sender char(242) NOT NULL default '',
recipient char(242) NOT NULL default '',
first int(11) NOT NULL default '0',
last int(11) NOT NULL default '0',
n int(11) NOT NULL default '0',
PRIMARY KEY (ip,sender,recipient)
) TYPE=MyISAM COMMENT='greylist';
CREATE TABLE whitelist (
mail char(242) NOT NULL default '',
comment char(242) NOT NULL default '',
PRIMARY KEY (mail)
) TYPE=MyISAM;
CREATE USER greylist@localhost IDENTIFIED BY 'tsilyerg';
GRANT ALL PRIVILEGES ON dbgreylist.* TO greylist@localhost IDENTIFIED BY 'tsilyerg';
FLUSH PRIVILEGES;
------------------------------------------------------------------------------------
# Заливаем его в mysql и рихтуем наш конфиг gld
sh# echo 'gld_enable="YES"' >> /etc/rc.conf
# Если нужен дебаг то можно добавить ещё:
sh# echo 'gld_flags="-d"' >> /etc/rc.conf
sh# cat /conf/gld.conf
-----------------------------------------------
PORT=2525 # слушать 2525
LOOPBACKONLY=1 # только на внутренней петле
USER=nobody # от какого юзера будем работать
GROUP=nobody # от какой группы будем работать
MAXCON=100 # 100 соединений
MINTIME=600 # время до 2-ого письма 10 минут!
LIGHTGREY=0 # отключить lightgrey
MXGREY=0 # отключить mxgrey
WHITELIST=1 # врубить белые листы
ERRACCEPT=1 # разрешать error
SYSLOG=1 # ложиться в syslog
FACILITY=mail # с пометкой mail
# Мессага для ответа письмам
MESSAGE=Greylisting in action, please try later
### SQLConnect ###
SQLHOST=localhost
SQLUSER=greylist
SQLPASSWD=tsilyerg
SQLDB=dbgreylist
-----------------------------------------------
sh# /rc.d/gld start
sh# sockstat | grep gld
-------------------------------------------------------------
nobody gld 83694 3 tcp4 127.0.0.1:2525 *:*
-------------------------------------------------------------
# Не забываем добавить в постфикс строку в раздел:
sh# ee /conf/postfix/main.cf
----------------------------------------------------------------------------
smtpd_recipient_restrictions = hash:/usr/local/etc/postfix/recipient
check_helo_access mysql:/conf/postfix/sql/access_helo.cf
check_sender_access mysql:/conf/postfix/sql/access_sender.cf
check_recipient_access mysql:/conf/postfix/sql/access_recipient.cf
permit_sasl_authenticated
reject_unauth_destination
reject_non_fqdn_recipient
reject_unknown_recipient_domain
reject_unverified_recipient
reject_unknown_hostname
reject_invalid_hostname
reject_rbl_client list.dsbl.org
reject_rbl_client dynablock.wirehub.net
reject_rbl_client blackholes.wirehub.net
reject_rbl_client dnsbl.njabl.org
reject_rbl_client cbl.abuseat.org
reject_rbl_client dul.ru
reject_rbl_client dnsbl.sorbs.net
reject_rbl_client dnsbl.void.ru
reject_rbl_client opm.blitzed.org
reject_rbl_client dev.null.dk
######## Добавляем эту строчку #########
check_policy_service inet:127.0.0.1:2525
#^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
----------------------------------------------------------------------------
sh# postfix reload
# Идём в мускул и наслаждаемся отчётностью. К тому же желательно время от времени
# подчищать спамеров из нашей базы. Это можно сделать так (крон + моск ж;) ):
# Два раза в месяц 15 и 30 числа в 0:0 будет скрипт для чистки наше БД.
---------------------------------------------------------------------------------------------------
#minute hour mday month wday who command
0 0 15,30 * * root /usr/local/bin/php -f /home/f2/clean_db_greylist.php
----------------------------------------------------------------------------------------------------
# Логика скрипта проста: Чистим тех, кто входил один раз.
----------------
< -> <
----------------
sh# cat clean_db_greylist.php
-------------------------------------------------------------
<?php
$host = "localhost";
$user = "greylist";
$pass = "tsilyerg";
mysql_connect($host,$user,$pass);
mysql_query("DELETE FROM dbgreylist.greylist WHERE n = '1'");
?>
-------------------------------------------------------------
В whitelist заносим ручками то, что случайно не вошло в наши критерии. И
грейлист решил отсеять. Это может быть mail.ru с кучей ip адрессов. Или
кривой почтовик который не умеет передоставлять доставлять почту через
определённый интервал времени...
Хотя добавлять в белые листы можно и запросом...
А можно и написать маленький скрипт чтобы пользователи могли сами добавлять.
http://freebsd-r16.narod.ru/scripts/greylist_web.html