postfix incoming and outgoing emails queue limit
инфо: 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
проследте лога дали няма грешки