postfix incoming and outgoing emails queue limit

vladimir simeonov
11/08/2011

инфо: http://www.policyd.org/

Защитата от спам през graylist, dns, rbl и т.н. е безполезна, когато източника на спам е потребител с валиден акаунт и инфектиран компютър, който изпраща хиляди съобщения през клиентска програма конфигурирана за достъп до пощенския сървър.

след поредната такава атака реших, че е време за крайни мерки, решението на които е policyd.

postfix policyd е perl (разбира се!) демон, който слуша на tcp порт. интегрира се в postfix като policy condition в sender/client/recipient restrictions.

Policyd поддържа и graylisting, но ако се ползва вградения в него graylist, то няма да може да се прилага ограничение на броя писма за потребителите на системата. Защо?

permit_mynetworks,

permit_sasl_authenticated,

check_client_access     mysql:$config_directory/mysql_virtual_client_access.cf,

check_client_access hash:/usr/local/etc/postfix/rbl-whitelist,

reject_unauth_pipelining,

reject_rbl_client zen.spamhaus.org,

        check_policy_service inet:127.0.0.1:10031,

permit

в случая permit_sasl_authenticated ще допусне потребителя да изпрати писмото си. greylist ще сработи само ако sender-a не е потребител.

ако преместим policyd преди permit_sasl_authenticated„ то greylist ще сработва за всички sender-и, което е неприятно за потребителите, които няма да могат да изпращат писмата веднага и ще получават грешки.

инсталацията:

apt-get install postfix-policyd

dbconfig-common

ще се опита да създаде база данни за работа на демона. препоръчително е да го конфигурирате по този начин.

алтернативно (променете текста в болд с друга парола):

1. mysql

create database postfix-policyd;

GRANT ALL ON postfix-policyd.* TO ‘pf-policyd’@’localhost’ IDENTIFIED BY ‘PASSW0rd‘;

flush privileges;

2. editor /etc/postfix-policyd.conf

MYSQLHOST=”localhost”

MYSQLDBASE=”postfix-policyd”

MYSQLUSER=”pf-policyd”

MYSQLPASS=”PASSW0rd

MYSQLOPT=””

FAILSAFE=1

DATABASE_KEEPALIVE=0

DEBUG=0

DAEMON=1

BINDHOST=127.0.0.1

BINDPORT=10031

PIDFILE=/var/run/postfix-policyd.pid

SYSLOG_FACILITY=”LOG_MAIL | LOG_INFO”

CHROOT=/

UID=5000

GID=5000

CONN_ACL=”127.0.0.1″

WHITELISTING=1

WHITELISTNULL=0

WHITELISTSENDER=1

WHITELISTDNSNAME=1

AUTO_WHITE_LISTING=1

AUTO_WHITELIST_NUMBER=500

AUTO_WHITELIST_NETBLOCK=0

AUTO_WHITELIST_EXPIRE=7d

BLACKLISTING=1

BLACKLISTDNSNAME=1

BLACKLIST_TEMP_REJECT=1

BLACKLIST_NETBLOCK=1

BLACKLIST_REJECTION=”Abuse. Go away.”

AUTO_BLACK_LISTING=0

AUTO_BLACKLIST_NUMBER=500

AUTO_BLACKLIST_EXPIRE=7d

BLACKLIST_HELO=1

BLACKLIST_HELO_AUTO_EXPIRE=2d

BLACKLISTSENDER=1

HELO_CHECK=1

HELO_MAX_COUNT=10

HELO_BLACKLIST_AUTO_EXPIRE=14d

HELO_AUTO_EXPIRE=7d

SPAMTRAPPING=1

SPAMTRAP_REJECTION=”Abuse. Go away.”

SPAMTRAP_AUTO_EXPIRE=7d

# we don’t want to use policyd’s greylist

GREYLISTING=0

GREYLIST_REJECTION=”Graylisted. Please try again later”

GREYLIST_X_HEADER=1

GREYLIST_HOSTADDR=3

TRAINING_MODE=0

TRAINING_POLICY_TIMEOUT=1d

TRIPLET_TIME=4m

OPTINOUT=0

OPTINOUTALL=0

TRIPLET_AUTH_TIMEOUT=30d

TRIPLET_UNAUTH_TIMEOUT=2d

SENDERTHROTTLE=1

SENDER_THROTTLE_SASL=0

SENDER_THROTTLE_HOST=1

QUOTA_EXCEEDED_TEMP_REJECT=1

SENDER_QUOTA_REJECTION=”Quota Exceeded.”

SENDER_SIZE_REJECTION=”Message size too big.”

SENDERMSGLIMIT=200

SENDERRCPTLIMIT=200

SENDERQUOTALIMIT=250000000

SENDERTIMELIMIT=1h

SENDERMSGSIZE=50240000

SENDERMSGSIZE_WARN=40

SENDERMSGSIZE_PANIC=190

SENDER_INACTIVE_EXPIRE=10d

RECIPIENTTHROTTLE=1

RECIPIENTMSGLIMIT=640

RECIPIENTTIMELIMIT=5h

RECIPIENT_QUOTA_REJECTION=”Quota Exceeded.”

RECIPIENT_INACTIVE_EXPIRE=31d

променете

SENDERMSGSIZE

SENDERMSGLIMIT

RECIPIENTMSGLIMIT

съответно с желания от вас лимит

3. editor /etc/postfix/main.cf

smtpd_sender_restrictions =
check_policy_service inet:127.0.0.1:10031, 

променете единствено това правило да започва по посоченият начин, т.е. добавете нов празен ред с посоченият текст.

/etc/init.d/postfix-policyd restart

проследте лога дали няма грешки