Как мне настроить спам-ловушки с Postfix, чтобы клиенты, отправляющие на перехваченные адреса, не могли отправлять мне еще один спам?
Байесовские фильтры, сопоставление с образцом и RBL - все это часть борьбы со спамом. Эта установка предназначена для их дополнения, а не для их замены.
Обратите внимание, что я НЕ занесен в серый список. Серый список хорош в теории, но на практике он очень раздражает ваших пользователей. Некоторым это удается. Я не из таких людей.
Я установил несколько адресов электронной почты (у меня их около 10 000, но вы можете обойтись парой сотен), которые будут служить ловушками для спама. Списки этих адресов дискретно связаны с различными сайтами с высоким трафиком, где боты их найдут, а люди - нет. Эти адреса собираются, продаются спамерам, и теперь я знаю, куда войдет спам.
Postfix настроен для перенаправления сообщений на любой из этих адресов в мой сценарий spamtrap, который добавляет их в таблицу в PF, так что все дальнейшие сообщения от этого клиента попадают в мой tarpit.
Преимущества:
Недостатки:
Ваш почтовый сервер должен иметь возможность запускать PF и spamd. Насколько мне известно, это означает OpenBSD или FreeBSD. Я уверен, что эти инструкции можно адаптировать к разновидностям Linux и их брандмауэрам, но это выходит за рамки моего ответа.
Я написал это для FreeBSD. Пользователи OpenBSD должны иметь возможность адаптировать эти шаги, в основном, путем изменения путей.
Наконец, это все для Postfix 2.5+
table <spamd> persist table <local-whitelist> persist file "/usr/local/etc/spamd/local-whitelist.txt"
127.0.0.1 10.0.0.0/8 # amazon 207.171.168.0/24 207.171.180.0/24 207.171.187.0/24 207.171.188.0/24 207.171.190.0/24 # AOL 64.12.137.0/24 64.12.138.0/24 152.163.225.0/24 205.188.139.0/24 205.188.144.0/24 205.188.156.66 205.188.157.0/24 205.188.159.7 # apple 17.254.6.0/24 # ebay 66.135.197.0/24 66.135.209.0/24 # gmail 64.68.80.0/21 64.233.160.0/19 64.233.162.192/28 64.233.170.192/28 64.233.182.192/28 64.233.184.192/28 66.249.82.192/28 66.249.92.192/28 66.249.64.0/19 66.102.0.0/20 70.89.39.152/29 70.90.219.48/29 70.90.219.72/29 72.14.192.0/18 74.125.0.0/16 209.85.128.0/17 216.239.32.0/19 216.239.56.240/28 # postini 63.146.199.13/32 63.146.199.14/32 63.71.11.123/32 63.71.11.124/32 64.18.0.0/20 67.114.133.222/32 68.123.185.46/32 74.125.148.0/22 204.14.232.0/22 207.126.144.0/20 208.111.151.5/32 208.74.204.5/32 # skynet.be 195.238.2.0/24 195.238.3.0/24 # yahoo 64.94.237.0/24 66.163.160.0/19 66.196.64.0/18 66.218.64.0/19 66.218.66.0/24 66.218.67.0/24 66.218.69.0/24 69.147.92.0/24 73.30.0.0/16 74.6.0.0/16 206.190.32.0/19 216.34.77.0/25 216.136.226.0/24
Перезагрузить PF
Создайте / usr / local / scripts / get-spamtrapped:
#!/bin/sh
/usr/local/sbin/spamdb | grep TRAPPED | cut -d '|' -f 2
all:uatraps:override:nixspam:override:spamtrapped:override: # University of Alberta greytrap hits. # Addresses stay in it for 24 hours from time they misbehave. uatraps:\ :black:\ :msg="Your address %A has sent mail to a ualberta.ca spamtrap\n\ within the last 24 hours":\ :method=http:\ :file=www.openbsd.org/spamd/traplist.gz: # Nixspam recent sources list. # Mirrored from http://www.heise.de/ix/nixspam nixspam:\ :black:\ :msg="Your address %A is in the nixspam list\n\ See http://www.heise.de/ix/nixspam/dnsbl_en/ for details":\ :method=http:\ :file=www.openbsd.org/spamd/nixspam.gz: # Trapped IPs - so we can block them without using greylisting spamtrapped:\ :black:\ :msg="Your address %A has sent mail to spamtrap on this server\n\ within the last 24 hours":\ :method=exec:\ :file=/usr/local/scripts/get-spamtrapped: override:\ :white:\ :method=file:\ :file=/usr/local/etc/spamd/local-whitelist.txt:
obspamd_enable="YES" obspamd_flags="-5"
Запустить spamd: /usr/local/etc/rc.d/obspamd start
Cronjob запускает spamd-setup в режиме только черного списка один раз в час. В режиме черного списка обновляется таблица <spamd> pf, а не внутренние таблицы spamd. Поскольку spamd просто задерживает и хранит данные, все остальное должно быть в PF. (замените XX на любую минуту часа, в которой вы хотите, чтобы он работал)
# spamd-setup XX * * * * root /usr/local/sbin/spamd-setup -b
$ sudo pw useradd spamtrap -s /sbin/lologin -d /home/spamtrap -m -c "Spam Collector"
#!/usr/local/bin/bash
# rudimentary checking - more complex checking will be done by
# the pfctl and spamdb commands
ADDRESS=${1%%[!0-9.]*}
if [[ ! ${#ADDRESS} = ${#1} ]]
then
echo "Invalid characters in IP address"
exit 1
fi
if [ ! ${ADDRESS} ]
then
echo "Usage: $0 <address>"
exit 1
fi
/usr/local/sbin/spamdb -t -a ${ADDRESS}
if [ "$?" -ne 0 ]
then
echo "Failed to add ${ADDRESS} to spamdb"
exit 1
fi
/sbin/pfctl -qt spamd -T add ${ADDRESS}
if [ "$?" -ne 0 ]
then
echo "Failed to add ${ADDRESS} to pf"
exit 1
fi
/usr/bin/logger -t spamtrap "Spamtrap caught ${ADDRESS}"
# Spamtrap spamtrapper unix - n n - - pipe flags=X user=nobody argv=/usr/local/bin/sudo /usr/local/scripts/spamtrap ${client_address}
nobody ALL= NOPASSWD: /usr/local/scripts/spamtrap
spamtrap@localhost spamtrapper
$ echo "Test" | mail spamtrap@localhost $ spamdb | grep 127.0.0.1 TRAPPED|127.0.0.1|1253655172 $ sudo pfctl -qt spamd -T show 127.0.0.1 $
С каждым из ваших адресов электронной почты, перехватывающих спам, должны произойти две вещи. Во-первых, он должен преобразоваться в реальный почтовый ящик, чтобы он не отклонялся во время диалога SMTP. Я использовал виртуальных пользователей с псевдонимом spamtrap @ localhost. Во-вторых, он должен соответствовать правилу check_recipient_access в Postfix и перенаправляться на spamtrap @ localhost, чтобы легальные пользователи, включенные в список получателей, никогда не увидели его. Как я сделал эту часть:
virtual_maps = hash:/usr/local/etc/postfix/spamtrap_maps smtpd_recipient_restrictions = check_recipient_access hash:/usr/local/etc/postfix/spamtrap_recipients
spamtrappedaddress@domain.tld spamtrap
spamtrappedaddress@domain.tld REDIRECT spamtrap@localhost
На этом этапе все клиенты, отправляющие почту на ваши адреса спам-ловушки, должны быть добавлены в spamdb и <spamd>. Пока ничего не отправляется в спам. Чтобы задействовать весь механизм блокировки, добавьте в /etc/pf.conf и перезагрузите pf:
no rdr proto tcp from <local-whitelist> to port 25 rdr pass proto tcp from <spamd> to port 25 -> 127.0.0.1 port 8025
И это все.
Было бы тривиально изменить сценарий спам-ловушки, чтобы сохранить копию сообщения в корпусе байесовского спама.
Если вы подписались на какие-либо службы RBL rsync, легко избавиться от возврата этих сообщений в spamd.
Ну ладно, похоже, вы закончили со своим собственным ответом. Только не вините postfix-policyd, он намного более гибкий, чем вы думаете, поскольку он предоставляет несколько механизмов для вашей борьбы со спамом:
Policyd - это плагин для защиты от спама для Postfix (на основе MySQL), который выполняет регулировку на основе серых списков, отправителя (конверт или SASL) (для сообщений и / или тома за определенную единицу времени), мониторинг / занесение в черный список спам-ловушек и автоматическое занесение в черный список HELO.
Вам не нужно использовать все эти вапоны, и вы, вероятно, будете иметь дополнительные правила в вашем smtpd_recipient_restrictions
.
В любом случае, попробуйте (и прочтите документацию) или создайте собственное решение - решать вам.
В решение, представленное OP довольно сложно. Я использовал более простой подход:
/etc/postfix/spamtraps
Это просто простой «список совпадений»: регулярное выражение (для спам-ловушки) с действием, которое применяется при встрече:
/spam(master|trap)?\@.*/i DISCARD triggers spamtrap /funkyspammer\@.*/i DISCARD triggers spamtrap
Скорректируйте свои адреса.
/etc/postfix/main.cf
Ищите smtpd_recipient_restrictions
блокировать, и поставить соответствующее правило перед ваша сеть проверяет (меньше нагрузка), но после аутентифицированные пользователи. Например.:
smtpd_recipient_restrictions = permit_sasl_authenticated permit_mynetworks check_recipient_access regexp:/etc/postfix/spamtraps …
Конечно, сейчас вам нужно перезагрузить postfix, чтобы изменения вступили в силу. В зависимости от вашего дистрибутива это выполняется либо service postfix reload
, /etc/init.d/postfix reload
или аналогичная команда.
Это необязательный шаг, который вы, возможно, захотите рассмотреть: Используйте Fail2ban, и пусть он следит за вашим почтовым журналом. Как только кто-то обращается к спам-ловушке, заблокируйте этот IP-адрес (например, на 30 минут или, может быть, на 1 час - не делайте это слишком долго, поскольку спамер может использовать динамический IP-адрес, который вскоре станет «невиновным»).
просто быстрый совет: используйте postfix-policyd, примеры включены в config ...
настроить его как службу политики в вашем smtpd_recipient_restrictions
в вашем main.cf, то есть:
## call policyd
check_policy_service inet:127.0.0.1:10031,
работает как чудо-спамтрап вместе с включенными серыми списками. Удачи!
если кому-то нужен образец сценария для шага 4, мы идем ...
grep 'your_spamtrapaddress1@domain.com' /var/log/maillog >/tmp/badips_raw
grep 'your_spamtrapaddress2@domain.com' /var/log/maillog >>/tmp/badips_raw
egrep -o -e "[0-9]{2,3}\.[0-9]{2,3}\.[0-9]{2,3}\.[0-9]{2,3}" /tmp/badips_raw >> /tmp/badips_nu
sort -u /tmp/badips_nu > /tmp/badips
rm -rf /tmp/badips_raw
rm -rf /tmp/badips_nu
while read ip
do
fail2ban-client set postfix-sasl banip $ip
done < /tmp/badips
rm -rf /tmp/badips