Задача: в последнее время, что-то зачастил наш внешний IP адрес попадать в блок листы на том основании что наш почтовый сервер является связующим звеном с некоторым ботнетом. Проверив на наличие заражения сам почтовый сервер посредством утилит rkhunter & clamav — проблем не обнаружено

sudo apt-get install clamav clamav-daemon clamav-freshclam clamfs -y

Удаляю все вирусы в почтовых сообщениях на всем сервере у всех:

sudo clamscan /opt/zimbra/store/ --remove -ri --log=/home/aollo/log_scan.txt

sudo dpkg-reconfigure rkhunter

sudo rkhunter --versioncheck

sudo rkhunter --update

sudo rkhunter -c --enable all --disable none

Проверяю, а не занесен ли наш внешний IP адрес в блок листы через ссылку: https://2ip.ru/spam/ и обнаруживаю, что да — spamhaus.org занес его и пока я не удалю его как временная мера в ручном режиме из списков SBL,PBL,XBL почта до некоторых адресатов ходить не будет. Отписка владельцам доменов с просьбой добавить наш адрес в доверенные зоны хоть и может принести положительный эффект не всегда воспринимается системными администраторами как правильная мера учитывая то, что IP адрес значится в распространителях spam‘а, раньше об этом нужно было думать.

А до этого я вроде как нашел скрипт посредством которого можно по многим сервисам в задачи которых входит ведение и определение кто является распространителем spam рассылок проводить проверку. Ниже все действия по скрипту и с чем мне пришлось столкнуться дабы больше с моего внешнего IP адреса через который у меня ходит почта не производилась так называемая SPAM рассылка да и на будущее использование все ниже указанное как нельзя кстати подходит.

Итак в данной заметке участвуют Mikrotik CCR1009-8G-1S-1S+ (все обновления на момент написания данной заметки) и моя рабочая система Ubuntu 12.04.5 Desktop amd64 (Gnome Classic) . Скачиваю RBL список серверов:

ekzorchik@srv-mon:~$ wget http://blog.penumbra.be/files/zabbix/rbl_list.txt

ekzorchik@srv-mon:~$ nano checkhosts

#!/bin/bash

date

# считать содержимое текстового файла

cat /home/ekzorchik/rbl_list.txt | while read output

do

ping -c 1 "$output" > /dev/null

# если $? равен 0 тогда хост доступен в противном случае хост недоступен

if [ $? -eq 0 ]; then

echo "host $output is up"

else

echo "host $output is down"

fi

done

ekzorchik@srv-mon:~$ chmod +x checkhosts

ekzorchik@srv-mon:~$ ./checkhosts

Mon Jun 13 08:33:51 MSK 2016

ping: unknown host b.barracudacentral.org

host b.barracudacentral.org is down

ping: unknown host blackholes.five-ten-sg.com

host blackholes.five-ten-sg.com is down

host blacklist.woody.ch is up

host spamhaus.org is up

ping: unknown host bl.deadbeef.com

host bl.deadbeef.com is down

ping: unknown host bl.emailbasura.org

host bl.emailbasura.org is down

host bl.spamcannibal.org is up

Вот то что мне и нужно было.

ekzorchik@srv-mon:~$ ./checkhosts > hosts.txt

Отсортировать содержимое файла в котором не встречается строки совпадения с шаблоном ‘is down’:

ekzorchik@srv-mon:~$ cat hosts.txt | grep -v 'is down'

Mon Jun 13 09:17:05 MSK 2016

host blacklist.woody.ch is up

host bl.spamcannibal.org is up

host bl.spamcop.net is up

host dnsbl.inps.de is up

host dnsbl.sorbs.net is up

host rbl.interserver.net is up

host rbl.spamlab.com is up

host spamrbl.imp.ch is up

host torserver.tor.dnsbl.sectoor.de is up

host virbl.bit.nl is up

host wormrbl.imp.ch is up

host spamhaus.org is up

Конечная выборка с удаление первой строки (указана текущая дата) и приведение списка только хостов:

ekzorchik@srv-mon:~$ cat hosts.txt | sed -e '1d' | grep -v 'is down' | awk '{print $2}' > rbl_list1.txt

ekzorchik@srv-mon:~$ cat rbl_list1.txt

blacklist.woody.ch

bl.spamcannibal.org

bl.spamcop.net

dnsbl.inps.de

dnsbl.sorbs.net

rbl.interserver.net

rbl.spamlab.com

spamrbl.imp.ch

torserver.tor.dnsbl.sectoor.de

virbl.bit.nl

wormrbl.imp.ch

spamhaus.org

ekzorchik@srv-mon:~$ cat rbl_list1.txt > rbl_list.txt

Ну хоть так проверил. Проще всего так как умеешь и видишь, а не как видится кому-то.

ekzorchik@srv-mon:~$ nano black

#!/bin/bash

RBL="`cat rbl_list.txt`"

W=$( echo ${1} | cut -d. -f1 )

X=$( echo ${1} | cut -d. -f2 )

Y=$( echo ${1} | cut -d. -f3 )

Z=$( echo ${1} | cut -d. -f4 )

STATUS=0

for i in $RBL

do

RESULT=$( host -t a $Z.$Y.$X.$W.$i 2>&1 )

if [ $? -eq 0 ]

then

echo “The IP ADDRESS ${1} is listed at $i:\n$RESULT”

let "STATUS += 1"

fi

echo $RESULT

done

if [ $STATUS -lt 1 ]

then

echo 0

else

echo $STATUS

fi

ekzorchik@srv-mon:~$ chmod +x black

Любое значение выше нуля означает что мой IP адрес (почтаря) в списке:

ekzorchik@srv-mon:~$ ./black

host: ‘….blacklist.woody.ch’ is not a legal name (empty label)

host: ‘….bl.spamcannibal.org’ is not a legal name (empty label)

host: ‘….bl.spamcop.net’ is not a legal name (empty label)

host: ‘….dnsbl.inps.de’ is not a legal name (empty label)

host: ‘….dnsbl.sorbs.net’ is not a legal name (empty label)

host: ‘….rbl.interserver.net’ is not a legal name (empty label)

host: ‘….rbl.spamlab.com’ is not a legal name (empty label)

host: ‘….spamrbl.imp.ch’ is not a legal name (empty label)

host: ‘….torserver.tor.dnsbl.sectoor.de’ is not a legal name (empty label)

host: ‘….virbl.bit.nl’ is not a legal name (empty label)

host: ‘….wormrbl.imp.ch’ is not a legal name (empty label)

host: ‘….spamhaus.org’ is not a legal name (empty label)

host: ‘….spamcop.net’ is not a legal name (empty label)

0

ekzorchik@srv-mon:~$ ./black <EXTERNEL_IP_ADDRESS>

Host <EXTERNEL_IP_ADDRESS>.blacklist.woody.ch not found: 3(NXDOMAIN)

Host <EXTERNEL_IP_ADDRESS>.bl.spamcannibal.org not found: 3(NXDOMAIN)

Host <EXTERNEL_IP_ADDRESS>.bl.spamcop.net not found: 3(NXDOMAIN)

Host <EXTERNEL_IP_ADDRESS>.dnsbl.inps.de not found: 3(NXDOMAIN)

Host <EXTERNEL_IP_ADDRESS>.dnsbl.sorbs.net not found: 3(NXDOMAIN)

Host <EXTERNEL_IP_ADDRESS>.rbl.interserver.net not found: 3(NXDOMAIN)

Host <EXTERNEL_IP_ADDRESS>.rbl.spamlab.com not found: 3(NXDOMAIN)

Host <EXTERNEL_IP_ADDRESS>.spamrbl.imp.ch not found: 3(NXDOMAIN)

Host <EXTERNEL_IP_ADDRESS>.torserver.tor.dnsbl.sectoor.de not found: 3(NXDOMAIN)

Host <EXTERNEL_IP_ADDRESS>.virbl.bit.nl not found: 3(NXDOMAIN)

Host <EXTERNEL_IP_ADDRESS>.wormrbl.imp.ch not found: 3(NXDOMAIN)

The IP ADDRESS <EXTERNEL_IP_ADDRESS> is listed at spamhaus.org:n<EXTERNEL_IP_ADDRESS>.spamhaus.org is an alias for blocklist.address.is.wrong.spamhaus.org. blocklist.address.is.wrong.spamhaus.org has address 127.0.0.2”

<EXTERNEL_IP_ADDRESS>.spamhaus.org is an alias for blocklist.address.is.wrong.spamhaus.org. blocklist.address.is.wrong.spamhaus.org has address 127.0.0.2

Host <EXTERNEL_IP_ADDRESS>.spamcop.net not found: 3(NXDOMAIN)

1

, где

  • 127.0.0.1 — это открытые релеи
  • 127.0.0.2 — это источники portscan

якобы я в списке у хоста, проверил по https://www.spamhaus.org/lookup/ да действительно наш внешний адрес почтовика в списке:

Наш IP адрес почтового сервера попал в списки СПАМ'а

Ранее я не сталкивался со spamhaus, а тут немного копнув по найденной информации составил для себя небольшое объяснение. SpamHaus — это в первую очередь некоммерческая организация, которая занимается борьбой со спамом и фишингом. SpamHaus строится на следующих базах данных таких как SBL, XBL, PBL. Содержимое этих баз представляет из себя информацию об IP адресах, доменном имени, задействованных подсетях и email адресах с которых идет спам-рассылка или же была ранее.

  • SBL (The Spamhaus Block List) – включает в себя список спамеров и их сервисов. В основе базы лежат IP адреса серверов известных спамеров.
  • XBL (The Exploits Block List) – содержит список анонимных прокси-серверов, вирусов, червей, используемых в спам-рассылках и других средств, которые спамеры могут использовать в своих целях.
  • PBL (The Policy Block List) – список динамических IP адресов, которым не позволено делать отправку писем напрямую.

Судя по описанию когда вытаскивал свой почтовый сервер из блокировки

мы засветились 13.06.2016 в 08.00 GMT (+/- 30 минут)

This was detected by a TCP/IP connection from <EXTERNEL_IP_ADDRESS> on port 44628 going to IP address 192.42.116.41 (the sinkhole) on port 80.

Получается, что с моего почтового сервера (да и внешнего IP адреса) идет подключение к удаленному хосту образующему botnet сеть.

Начав проверку подконтрольной инфраструктуры ничего примечательно я не нашел, а потому дабы не повторялось последующее приключение в вызволении своего IP адреса из SPAM базы решил на самом Mikrotik сделать правило блокирующее любой контакт с удаленным IP адресом вызывающим подозрительность на хостах следящих за нежелательным/паразитирующим трафиком в интернете.

На Mikrotik — создал правило и пододвинул его в самый верх правил:

winbox — Mikrotik (IP&MAC) — login&pass — IP — Firewall — Add

General:

Chain: forward

Advanced:

Src. Address List: BOTNET

Action:

Action: drop

, где BOTNET это просто будет список всех адресов во вне которые нужно будет блокировать:

winbox — Mkrotik (IP&MAC) — login&pass — IP — Firewall — Address Lists — Add

Добавляю в список BOTNET нежелательный IP адрес

по такому принципу добавляем и последующие IP адреса, подсети которые нужно блокировать:

[admin@Router] >> ip firewall filter print

2 ;;; Drop all botnet ip address incoming

chain=forward action=drop src-address-list=BOTNET log=no log-prefix=””

Теперь никакие запросы от нас не пройдут до этого адреса:

aollo@mail:~$ 240 → это у меня настроенный алиас на подключение к почтовому серверу по коротком имени.

Проверяю с почтового сервера возможность достучаться до ресурса обнаруженного в отчете почему меня заблокировали в SPAMHAUS

aollo@mail:~$ ping 192.42.116.41

PING 192.42.116.41 (192.42.116.41) 56(84) bytes of data.

^C

— 192.42.116.41 ping statistics —

14 packets transmitted, 0 received, 100% packet loss, time 13102ms

aollo@mail:~$ telnet 192.42.116.41 80

Trying 192.42.116.41…

Connected to 192.42.116.41.

Escape character is ‘^]’.

]

Connection closed by foreign host.

Из вывода понятно, что пакеты не проходят это мне и нужно было. Теперь если вдруг какой-либо IP адрес засветиться, как ресурс пытающихся блокировать мою работу он попадет в список BOTNET да и все исходящие соединение не пройдут на этот адрес. Вот так вот, начиная казалось бы с одной задачи по отслеживанию наличия себя в SPAM-базах, а в итоге на основе отчета сделал обычное правило для блокировки нежелательного подключения. Что мне и требовалось. На этом я прощаюсь и до новых заметок, с уважением автор блога — ekzorchik.

От ekzorchik

Всем хорошего дня, меня зовут Александр. Я под ником - ekzorchik, являюсь автором всех написанных, разобранных заметок. Большинство вещей с которыми мне приходиться разбираться, как на работе, так и дома выложены на моем блоге в виде пошаговых инструкции. По сути блог - это шпаргалка онлайн. Каждая новая работа где мне случалось работать вносила новые знания и нюансы работы и соответственно я расписываю как сделать/решить ту или иную задачу. Это очень помогает. Когда сам разбираешь задачу, стараешься ее приподнести в виде структурированной заметки чтобы было все наглядно и просто, то процесс усвоения идет в гору. Также прошу на https://win.ekzorchik.ru https://lin.ekzorchik.ru https://net.ekzorchik.ru https://voip.ekzorchik.ru https;//home.ekzorchik.ru