Я пытаюсь настроить почтовый сервер с помощью OpenBSD, OpenSMTPD, spamd
, и pf
. Первая проблема, с которой я столкнулся, заключается в том, что многие крупные поставщики веб-почты, такие как Gmail, будут повторять попытку доставки с другого сервера с другим IP-адресом, что затрудняет им перенос серого списка в белый список. Я написал сценарий, который, как я думал, может помочь, выполнив запрос PTR на IP-адресе СЕРЫХ кортежей и сравнив полученный домен с вручную поддерживаемым списком доменов, которым я доверяю.
spamdb
после того, как я внес их в белый список через spamdb -a X.X.X.X
а потом они появляются как БЕЛАЯ запись? После того, как они внесены в белый список, это должно быть для всего IP, и я полагаю, что СЕРЫЙ кортеж к этому моменту устарел. Каков типичный жизненный цикл этих spamdb
кортежи? Я видел, как некоторые исчезали, некоторые дублировались (СЕРЫЙ, затем БЕЛЫЙ) и т. Д.pf
таблица, которая передает соединения из этих доверенных доменов напрямую в smtpd
? Другими словами, вместо того, чтобы spamd
и занести эти IP-адреса в белый список spamdb -a
которые затем добавляются к <spamd-white>
pf table, я должен просто обойти spamdb
, оставляя их в сером списке и переходя непосредственно к какой-либо таблице белого списка pf. Вот черновик сценария, который я написал для периодического запуска, чтобы автоматически заносить в белый список доверенные домены, которые были обнаружены и занесены в серый список:
#!/bin/sh
set -A whitelist \
amazon.com \
google.com
spamdb | while read line
do
IFS="|"
set -A fields $line
status=${fields[0]}
if [[ $status = "GREY" ]]
then
ip=${fields[1]}
ptr=`host ${ip}`
IFS="."
set -A tokens $ptr
size=${#tokens[*]}
domain="${tokens[size-2]}.${tokens[size-1]}"
found=false
IFS=" "
for whitelisted in ${whitelist[@]}
do
if [[ $domain = $whitelisted ]]
then
found=true
fi
done
if (($found))
then
echo "+ $ip ($domain) has been whitelisted"
spamdb -a "$ip"
else
echo "- $ip ($domain) is unrecognized"
fi
fi
done
exit 0
Зависит ™:
PTR
записи могут быть ложными - просто потому, что вы получаете .google.com
как часть PTR
, не означает, что это Google контролирует рассматриваемый IP-адрес. Конечно, вы также можете захотеть выполнить прямое разрешение перед тем, как предпринимать какие-либо действия (хотя, честно говоря, влияние в случае серых списков будет очень ограниченным, так как любой, кто может изменить PTR
скорее всего, также сможет успешно обойти ваши серые списки).sh
может быть не лучшим подходом.Не стесняйтесь взглянуть на http://BXR.SU/OpenBSD/usr.sbin/spamdb/spamdb.c#dbupdate. Однако код не выглядел слишком читабельным.
Я думаю, что любой подход подойдет. Вероятно, будет проще использовать spamdb
чтобы поддерживать этот автоматический белый список, так как он позаботится об обслуживании, истечении срока действия и небольшой статистике. Однако, если вы ведете свой собственный список, у вас есть дополнительное преимущество в виде внесения в белый список для всей сети.
Кроме того, если вы хотите, чтобы это ограничивалось только Google, Amazon и другими поставщиками, которые хранят правильные записи SPF, учтите, что вы можете пойти прямо вперед, получив все их IP-адреса сразу, даже с помощью автоматических средств ( с помощью SPF, например). Видеть https://support.google.com/a/answer/60764. Скорее всего, вы даже можете использовать существующую библиотеку SPF, чтобы получить список всех этих IP-адресов.