Проект переехал на новый домен!  [[ перейти ]]

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
----------------------------------------------------------------------------------------------------

# Логика скрипта проста: Чистим тех, кто входил один раз.

----------------
&lt; -> <
----------------

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