Почтовый сервер · 3 min read · Oct 23, 2025

Контроль спама для Postfix

Контроль спама для Postfix

Спам — это серьезная проблема для любого, у кого есть почтовый сервер. Часто спам отправляется на несуществующие адреса электронной почты. Но он все равно попадает на ваш сервер, даже если не доставляется. В других случаях почтовый ящик пользователя переполнен надоедливыми сообщениями о Виагре, проститутках, бесплатном программном обеспечении и прочем.

Ниже представлено решение. Это накопление моих усилий по борьбе со спамом наилучшим образом. На данный момент у него 97% уровень успеха с более чем 20,000 обработанными письмами (как спамом, так и легитимными).

Следуйте инструкциям. Я буду обновлять/изменять по мере необходимости, если что-то будет неясно. Не стесняйтесь спрашивать.

1) Установите Postgrey, RRD, парсер логов и инструменты графиков.

apt-get install postgrey rrdtool mailgraph pflogsumm

Postgrey будет иметь задержку в 5 минут по умолчанию для электронной почты, отправляемой в ваш почтовый ящик. Если это слишком долго, отредактируйте файл /etc/default/postgrey, добавив –delay=120, где 120 — это секунды.

2) Перезапустите сервер Postgrey.

  /etc/init.d/postgrey restart

3) Отредактируйте main.cf Postfix.

Мы добавим несколько вещей, включая конфигурацию Postgrey.

# See /usr/share/postfix/main.cf.dist for a commented, more complete version


# Debian specific:  Specifying a file name will cause the first
# line of that file to be used as the name.  The Debian default
# is /etc/mailname.
#myorigin = /etc/mailname

smtpd_banner = $myhostname ESMTP $mail_name (Debian/GNU)
biff = no

# appending .domain is the MUA's job.
append_dot_mydomain = no

# Uncomment the next line to generate "delayed mail" warnings
#delay_warning_time = 4h

readme_directory = /usr/share/doc/postfix

# TLS parameters
smtpd_tls_cert_file = /etc/postfix/smtpd.cert
smtpd_tls_key_file = /etc/postfix/smtpd.key
smtpd_use_tls = yes
smtpd_tls_session_cache_database = btree:${data_directory}/smtpd_scache
smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache

# See /usr/share/doc/postfix/TLS_README.gz in the postfix-doc package for
# information on enabling SSL in the smtp client.

myhostname = my.derekgordon.com
alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases
myorigin = /etc/mailname
mydestination = my.derekgordon.com, localhost, localhost.localdomain
relayhost =
mynetworks = 127.0.0.0/8 [::1]/128 66.118.142.78
mailbox_command = procmail -a "$EXTENSION"
mailbox_size_limit = 0
recipient_delimiter = +
inet_interfaces = all
html_directory = /usr/share/doc/postfix/html
virtual_alias_domains =
virtual_alias_maps = proxy:mysql:/etc/postfix/mysql-virtual_forwardings.cf, mysql:/etc/postfix/mysql-virtual_email2email.cf
virtual_mailbox_domains = proxy:mysql:/etc/postfix/mysql-virtual_domains.cf
virtual_mailbox_maps = proxy:mysql:/etc/postfix/mysql-virtual_mailboxes.cf
virtual_mailbox_base = /var/vmail
virtual_uid_maps = static:5000
virtual_gid_maps = static:5000
smtpd_sasl_auth_enable = yes
broken_sasl_auth_clients = yes
smtpd_sasl_authenticated_header = yes
smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, check_recipient_access mysql:/etc/postfix/mysql-virtual_recipient.cf, reject_unauth_destination, check_policy_service inet:127.0.0.1:60000, reject_rbl_client zen.spamhaus.org, reject_rbl_client smtp.dnsbl.sorbs.net, reject_rbl_client bl.spamcop.net, reject_rbl_client combined.rbl.msrbl.net, reject_rbl_client multihop.dsbl.org, check_recipient_access regexp:/etc/postfix/spamtrap, permit
smtpd_tls_security_level = may
transport_maps = proxy:mysql:/etc/postfix/mysql-virtual_transports.cf
relay_domains = mysql:/etc/postfix/mysql-virtual_relaydomains.cf
relay_recipient_maps = mysql:/etc/postfix/mysql-virtual_relayrecipientmaps.cf
virtual_create_maildirsize = yes
virtual_maildir_extended = yes
virtual_mailbox_limit_maps = proxy:mysql:/etc/postfix/mysql-virtual_mailbox_limit_maps.cf
virtual_mailbox_limit_override = yes
virtual_maildir_limit_message = "Пользователь, которого вы пытаетесь достичь, превышает квоту."
virtual_overquota_bounce = yes
proxy_read_maps = $local_recipient_maps $mydestination $virtual_alias_maps $virtual_alias_domains $virtual_mailbox_maps $virtual_mailbox_domains $relay_recipient_maps $relay_domains $canonical_maps $sender_canonical_maps $recipient_canonical_maps $relocated_maps $transport_maps $mynetworks $virtual_mailbox_limit_maps
smtpd_sender_restrictions = check_sender_access mysql:/etc/postfix/mysql-virtual_sender.cf
smtpd_client_restrictions = check_client_access mysql:/etc/postfix/mysql-virtual_client.cf
maildrop_destination_concurrency_limit = 1
maildrop_destination_recipient_limit = 1
virtual_transport = maildrop
header_checks = regexp:/etc/postfix/header_checks
mime_header_checks = regexp:/etc/postfix/mime_header_checks
nested_header_checks = regexp:/etc/postfix/nested_header_checks
body_checks = regexp:/etc/postfix/body_checks
content_filter = amavis:[127.0.0.1]:10024
receive_override_options = no_address_mappings
message_size_limit = 0

disable_vrfy_command = yes
smtpd_helo_required = yes
smtpd_helo_restrictions = permit_mynetworks, reject_invalid_hostname, permit

Из общего main.cf, найденного в установке Debian Lenny, я добавил/изменил выделенные области.

4) Создайте файл с именем “spamtrap” в директории /etc/postfix/.

Этот файл служит фильтром. Если спам отправляется на этот адрес и другие адреса на вашем компьютере, он будет отбрасывать это письмо, чтобы оно не попало в другие почтовые ящики.

Файл spamtrap выглядит так:

/emailcontrol.*@derekgordon\.com/ DISCARD

Это регулярное выражение, поэтому слэши должны быть использованы. Мой фильтр-адрес электронной почты [email protected], поэтому отредактируйте соответствующим образом и поместите в файл spamtrap!!!

Примечание: Не создавайте этот почтовый ящик с помощью ISPConfig. Нет абсолютно никаких причин, чтобы он существовал на вашем почтовом сервере. Это фальшивый адрес, предназначенный для ловли надоедливого спама.

5) Откройте local.cf для SpamAssassin и добавьте следующий фрагмент.

Это будет дополнительный фильтр, предназначенный для работы с SA больше, чем с общим Postfix.

nano /etc/spamassassin/local.cf

Добавьте следующее в конец:

urirhssub       URIBL_BLACK  multi.uribl.com.        A   2
body            URIBL_BLACK  eval:check_uridnsbl('URIBL_BLACK')
describe        URIBL_BLACK  Содержит URL, указанный в черном списке URIBL
tflags          URIBL_BLACK  net
score           URIBL_BLACK  3.0
Share: X/Twitter LinkedIn

Get new posts in your inbox

No spam. Unsubscribe anytime.