TL;DR
Как обмануть свой sendmail, заставив его думать, что письмо приходит с определенного IP-адреса, и отклонить сообщение из-за совпадения DNSBL?
Подробности:
У меня есть собственный почтовый сервер, и большая часть спама блокируется черными списками DNS (DNSBL), которые я добавил в /etc/mail/sendmail.mc следующим образом:
dnl FEATURE(`dnsbl',`dnsbl.sorbs.net',`"554 Rejected " $&{client_addr} " found in dnsbl.sorbs.net"')dnl
dnl FEATURE(`dnsbl',`b.barracudacentral.org',`"554 Rejected " $&{client_addr} " found in b.barracudacentral.org"')dnl
Сегодня пришел спам (прошедший все тесты), и после проверкиMX-панель инструментовиИнформация DNSBLможно было бы увидеть, что добавление одного из нескольких DNSBL заблокировало бы этот конкретный спам.
Итак, я добавил еще один DNSBL и теперь хочу протестировать его, повторно отправив это письмо в Sendmail, но в этом и заключается проблема: оно не будет приходить с нужного IP-адреса, и DNSBL не посчитает его плохим.
Вот команда, которую я обычно использую:
formail -s /usr/sbin/sendmail -oi -t < testmail.mbox
Прежде чем изобретать велосипед, я подумал, что сначала спрошу здесь. Возможные идеи:
- Есть ли опция CLI в sendmail для подделки исходного IP-адреса?
- Может быть, создать файл с сообщением в очереди и поместить его непосредственно в очередь?
- Может быть, настроить еще один IP-адрес на моем компьютере и отправлять сообщения самому себе?
- Будет ли OpenVPN или SSH-туннель быстрым решением?
- Возможно, можно загрузить общую библиотеку для перехвата системных вызовов, напримерLibFakeTime?
- Dtrace выглядит мощным, может ли он изменить вызовы getsockopt(2) таким образом?
Спасибо!
решение1
После того, как я поспала, решение оказалось тривиальным:
ssh my-mail-server
# Add 1.2.3.4 as an alias (eth1:0) to interface eth1:
sudo ifconfig eth1:0 1.2.3.4 netmask 255.255.255.255
# Use 1.2.3.4 as the source ip, connect to port 25 on the local host:
nc -s 1.2.3.4 0.0.0.0 25
HELO 1.2.3.4
MAIL FROM: [email protected]
RCPT TO: [email protected]
DATA
Subject: is this really from 1.2.3.4?
Test from 1.2.3.4
.
QUIT
^C
# Deleting 1.2.3.4 from eth1:
sudo ifconfig eth1:0 0.0.0.0
Вуаля, получившийся заголовок:
Return-Path: <[email protected]>
Received: from 1.2.3.4 ([1.2.3.4] (may be forged))
by earth.com (8.15.2/8.15.2) with SMTP id 1731SlYY013775
for <[email protected]>; Mon, 2 Aug 2021 18:29:14 -0700
Authentication-Results:the-force.com; dkim=permerror (bad message/signature format)
Date: Mon, 2 Aug 2021 18:28:47 -0700
From: <[email protected]>
Message-Id: <[email protected]>
Subject: Test subject
Также выяснилось, что IP-адрес не блокируется (DNSBL не работает?), так что в этом смысле тест прошел успешно. :-/
Обновление: Ого! Строки в sendmail.mc должны быть такими:
FEATURE(`dnsbl',`dnsbl.sorbs.net',`"554 Rejected " $&{client_addr} " found in dnsbl.sorbs.net"')dnl
FEATURE(`dnsbl',`b.barracudacentral.org',`"554 Rejected " $&{client_addr} " found in b.barracudacentral.org"')dnl
Другими словами, «dnl» в начале комментировал все строки DNSBL. :-(
ИииииэтотВот почему мы проводим тестирование, дамы и господа.