Как проверить почтовый сервер на open relay

Когда давно тестировал свой почтовик на предмет открытого релая, но потом забыл адрес.
Сегодня наткнулся снова, решил тут сохранить.

Есть довольно неплохой сервис, который тестирует на разного рода виды открытого релея.
Использовать его очень просто - необходимо подключиться telnet-ом (порт 23) с хоста, где запущен почтовый сервер, вот на этот адрес: relay-test.mail-abuse.org

Почти сразу после подключения начнется тестирование почтового сервера. Этот сервис подключится по SMTP обратно на хост, откуда инициировано telnet-подключение и будет пробовать различные варианты тестирования.
Результаты тестов отображаются тут же в telnet сессии.

Примерно так:

# telnet relay-test.mail-abuse.org
Trying 168.61.4.13...
Connected to Cygnus.mail-abuse.org.
Escape character is '^]'.
Connecting to 193.1x.x.x ...
< << 220 server1.host.net ESMTP Exim
>>> HELO cygnus.mail-abuse.org
< << 250 server1.host.net Hello cygnus.mail-abuse.org [168.61.4.13]
:Relay test: #Quote test
>>> mail from: 
< << 250 OK
>>> rcpt to: < "nobody@mail-abuse.org">
< << 501 <"nobody@mail-abuse.org">: recipient address must contain a domain
>>> rset
< << 250 Reset OK
:Relay test: #Test 1
>>> mail from: 
< << 250 OK
>>> rcpt to: 
< << 451 Temporary error, please try again later
>>> rset
< << 250 Reset OK
:Relay test: #Test 2
>>> mail from: 
< << 250 OK
>>> rcpt to: 
< << 451 Temporary error, please try again later
>>> rset
< << 250 Reset OK
:Relay test: #test 3
>>> mail from: 
< << 250 OK
>>> rcpt to: 
< << 451 Temporary error, please try again later
>>> rset
< << 250 Reset OK
:Relay test: #Test 4
>>> mail from: 
< << 501 : sender address must contain a domain
Connecting to 193.1x.x.x ...
< << 220 server1.host.net ESMTP Exim
>>> HELO cygnus.mail-abuse.org
< << 250 server1.host.net Hello cygnus.mail-abuse.org [168.61.4.13]
>>> mail from: 
< << 501 : sender address must contain a domain
>>> rset
< << 250 Reset OK
:Relay test: #Test 5
>>> mail from: <>
< << 250 OK
>>> rcpt to: 
< << 550 Relay not permitted
>>> rset
< << 250 Reset OK
:Relay test: #Test 6
>>> mail from: 
< << 250 OK
>>> rcpt to: 
< << 451 Temporary error, please try again later
>>> rset
< << 250 Reset OK
:Relay test: #Test 7
>>> mail from: 
< << 501 : domain literals not allowed
Connecting to 193.1x.x.x ...
< << 220 server1.host.net ESMTP Exim
>>> HELO cygnus.mail-abuse.org
< << 250 server1.host.net Hello cygnus.mail-abuse.org [168.61.4.13]
>>> mail from: 
< << 501 : domain literals not allowed
>>> rset
< << 250 Reset OK
:Relay test: #Test 8
>>> mail from: 
< << 250 OK
>>> rcpt to: 
< << 550 ERR. not allowed symbols in domain name
>>> rset
< << 250 Reset OK
:Relay test: #Test 9
>>> mail from: 
< << 250 OK
>>> rcpt to: 
< << 501 : domain literals not allowed
>>> rset
< << 250 Reset OK
:Relay test: #Test 10
>>> mail from: 
< << 250 OK
>>> rcpt to: < "nobody@mail-abuse.org">
< << 501 <"nobody@mail-abuse.org">: recipient address must contain a domain
>>> rset
< << 250 Reset OK
:Relay test: #Test 11
>>> mail from: 
< << 250 OK
>>> rcpt to: < "nobody%mail-abuse.org">
< << 501 <"nobody%mail-abuse.org">: recipient address must contain a domain
>>> rset
< << 250 Reset OK
:Relay test: #Test 12
>>> mail from: 
< << 501 : domain literals not allowed
Connecting to 193.1x.x.x ...
< << 220 server1.host.net ESMTP Exim
>>> HELO cygnus.mail-abuse.org
< << 250 server1.fs-host.net Hello cygnus.mail-abuse.org [168.61.4.13]
>>> mail from: 
< << 501 : domain literals not allowed
>>> rset
< << 250 Reset OK
:Relay test: #Test 13
>>> mail from: 
< << 250 OK
>>> rcpt to: < "nobody@mail-abuse.org"@[193.1x.x.x]>
< << 501 <"nobody@mail-abuse.org"@[193.1x.x.x]>: domain literals not allowed
>>> rset
< << 250 Reset OK
:Relay test: #Test 14
>>> mail from: 
< << 250 OK
>>> rcpt to: 
< << 501 : malformed address: @[193.1x.x.x]> may not follow >> rset
< << 250 Reset OK
:Relay test: #Test 15
>>> mail from: 
< << 501 Too many syntax or protocol errors
Connecting to 193.1x.x.x ...
<<< 220 server1.host.net ESMTP Exim
>>> HELO cygnus.mail-abuse.org
< << 250 server1.host.net Hello cygnus.mail-abuse.org [168.61.4.13]
>>> mail from: 
< << 501 : domain literals not allowed
>>> rset
< << 250 Reset OK
:Relay test: #Test 16
>>> mail from: 
< << 250 OK
>>> rcpt to: < @[193.1x.x.x]:nobody@mail-abuse.org>
< << 501 <@[193.1x.x.x]:nobody@mail-abuse.org>: domain literals not allowed
>>> rset
< << 250 Reset OK
:Relay test: #Test 17
>>> mail from: 
< << 501 : domain literals not allowed
Connecting to 193.1x.x.x ...
< << 220 server1.host.net ESMTP Exim
>>> HELO cygnus.mail-abuse.org
< << 250 server1.host.net Hello cygnus.mail-abuse.org [168.61.4.13]
>>> mail from: 
< << 501 : domain literals not allowed
>>> rset
< << 250 Reset OK
:Relay test: #test 18
>>> mail from: 
< << 250 OK
>>> rcpt to: 
< << 501 : domain literals not allowed
>>> rset
< << 250 Reset OK
:Relay test: #test 19
>>> mail from: 
< << 250 OK
>>> rcpt to: 
< << 550 Relay not permitted
>>> rset
< << 250 Reset OK
>>> QUIT
< << 221 server1.host.net closing connection
Tested host banner: 220 server1.host.net ESMTP Exim
System appeared to reject relay attempts
Connection closed by foreign host.

Конфиг exim.conf для DirectAdmin

Притомил меня спам от всяких левых и правых серверов.
Решил немного пошаманить над конфигом ексима. Шаманство довело до того, что был полностью переработан штатный конфиг, прикручен небольшой избирательный грейлистинг и dspam-фильтр, а также черные и белые списки.
От spamassasin отказался полностью (в пользу dspam, который будет описан в отдельной статье) ибо памяти кушает не слабо, особенно когда вал входящей почты идет, а эффективность его немного страдает.

После шаманства спам упал практически на 80-90%. Остальное проходит через грейлистинг и потом dspam.

Принцип фильтрации следующий.
На стадии connect дропаются все динамические сети типа *.pool.* *.dsl.* *.dialup.*и т.д. (ну откуда там будет нормальный почтовик ?)
Далее дропаются все хосты с некорректным/непрописанным HELO
В check_recipient дропаются хосты, которые в черном списке. Там же проверка на наличие обратной зоны, прописанного хостнейма и присутствия данного хоста в RBL-списках. Причем почта от таких не дропается, а направляется на грейлист.
В грейлист так же уходят те хосты, которые решили зайди по smtp вместо esmtp.
Решил проблему (вроде бы) c backscatterer.org (что сие есть - см. на их сайте) и спамом  через bounce (отлупы)

Особо расписывать не буду, конфиг приложил. Черный список тоже.

При написании конфига была использована информация с рассылки exim.org.ua, mta.org.ua и lissyara.su

Если кто вдруг наткнется и будет использовать у себя - за последствия я не отвечаю.
Используйте на свой страх и риск.

Однако, я буду рад любым комментариям, дополнениям и изменениям.

Файлы:
exim.conf
blacklist_helo
blacklist_host_name

Exim + Greylist + Directadmin

В предыдущей статье я описывал как ставил грейлист  на тазик с панелью directAdmin на CentOS-е.

Нашел время написать как я ставил greylist  под Debian
Итак, имеем: Debian Lenny, DirectAdmin, exim из комплекта панели. Потребуется установить демон greylistd и после чуть подправить конфиг ексима.
Приступаем:

aptitude update
aptitude install  greylistd

Теперь необходимо поправить конфиг ексима. Ищем первый accept  в acl_smtp_rcpt и добавляем перед ним:
[eng]Now need to change exim.conf. Find first 'accept' in 'acl_smtp_rcpt' and add before:

# GreyListing
    defer   message    = Sender verification for $sender_host_address in progress. Please try later.
        log_message    = greylisted.
        !senders       = :
        !hosts         = : +relay_hosts : +whitelist_hosts : +whitelist_hosts_ip
        !authenticated = *
        !domains       = : ${if exists {/etc/greylistd/skip-greylist}\
                                 {/etc/greylistd/skip-greylist}{}}
        domains        = +local_domains : +relay_domains
        verify         = recipient/callout=20s,use_sender,defer_ok
        condition      = ${readsocket{/var/run/greylistd/socket}\
                            {--grey \
                                  $sender_host_address \
                                  $sender_address \
                                  @$domain}\
                              {5s}{}{false}}
    deny   message = $sender_host_address is blacklisted
        log_message = blacklisted.
        !senders       = :
        !authenticated = *
        verify         = recipient/callout=20s,use_sender,defer_ok
        condition      = ${readsocket{/var/run/greylistd/socket}\
                                 {--black \
                                  $sender_host_address \
                                  $sender_address \
                                  $local_part@$domain}\
                                 {5s}{}{false}}

Далее, ищем в ACL acl_smtp_data первый accept и вставляем перед ним:
Next, find first 'accept' in ACL acl_smtp_data and add before this code:

     defer
        message        = Sender verification for $sender_host_address in progress. Please try later.
        log_message    = greylisted.
        senders        = :
        !hosts         = : +relay_hosts : +whitelist_hosts : +whitelist_hosts_ip
        !authenticated = *
        condition      = ${readsocket{/var/run/greylistd/socket}\
                                 {--grey \
                                  $sender_host_address \
                                  $recipients}\
                                  {5s}{}{false}}
    deny
        message = $sender_host_address is blacklisted from delivering \
                     mail from <$sender_address> to <$recipients>.
        log_message   = blacklisted.
        !senders       = :
        !authenticated = *
        condition      = ${readsocket{/var/run/greylistd/socket}\
                                 {--black \
                                  $sender_host_address \
                                  $recipients}\
                                  {5s}{}{false}}

В файле /etc/greylistd/skip-greylist можно прописать домены (локальные) для которых не включать грейлистинг. Формат файла простой - один домен на строчку.
Вот собственно все.

In file /etc/greylistd/skip-greylist you can write whitelisted domains. One domain per line.

Если будет свободное время, напишу как прикрутить DSPAM  + Exim + Directadmin

Скрипт автоматической проверки IP адреса по спам базам.

Наткнулся я тут случайно на скрипт автоматической проверки IP адреса по спам базам. Заинтересовался, проверил и решил тут написать.

пример проверки IP адреса по спам-базам:

# spam-check -p 91.124.123.123
Результат       Сервер                             Ответ сервера
--------------------------------------------------------------------------------------91.124.123.123------------
[+++SPAM+++]  - b.barracudacentral.org           - http://www.barracudanetworks.com/reputation/?pr=1&ip=91.124.123.123
[+++SPAM+++]  - cbl.abuseat.org                  - Blocked - see http://cbl.abuseat.org/lookup.cgi?ip=91.124.123.123
[+++SPAM+++]  - xbl.spamhaus.org                 - http://www.spamhaus.org/query/bl?ip=91.124.123.123
[+++SPAM+++]  - zen.spamhaus.org                 - http://www.spamhaus.org/query/bl?ip=91.124.123.123
[+++SPAM+++]  - dnsbl.sorbs.net                  - Dynamic IP Addresses See: http://www.sorbs.net/lookup.shtml?91.124.123.123
[+++SPAM+++]  - dul.dnsbl.sorbs.net              - Dynamic IP Addresses See: http://www.sorbs.net/lookup.shtml?91.124.123.123

Скрипт написан на bash, работает на "ура" 🙂

Сам скрипт можно взять тут или тут

Оригинал - тут

Exim + greylist

I want to share how i reduce spam in my box.

Maybe not perfect solution but  works 🙂
Always make backup and use it at your own risk !

Tested on CentOS 5

Install Greylist:

# rpm -Uvh http://dl.atrpms.net/el5-i386/atrpms/stable/greylistd-0.8.3.2-8.0.el5.noarch.rpm

Now you need to change permissions:

# chown -R mail.mail /etc/greylistd/
# chown -R mail.mail /var/run/greylistd/
# chown -R mail.mail /var/lib/greylistd/
# chown -R mail.mail /usr/sbin/greylist*

start greylistd:

# /usr/bin/su mail -c /usr/sbin/greylistd &

I use original SpamBlocker2 (thanks to Jeff )

######################################################################
# SpamBlocker.exim.conf.2.1.1-release                                #
# 05-Jun-2007                                                        #
# Runtime configuration file for DirectAdmin/Exim 4.24 and above     #
# Requires exim.pl dated 20-Apr-2007 17:09 or later                  #

You will need to edit /etc/exim.conf
Add

acl_smtp_connect = acl_connect
acl_smtp_helo = check_helo

just before:

acl_smtp_rcpt = check_recipient
acl_smtp_data = check_message

Find

######################################################################
# ACLs #
######################################################################
begin acl

add after:

###############################
# ACL connect
###############################
acl_connect:
accept hosts = +whitelist_hosts_ip : +relay_hostsdrop message = Your IP Blacklisted - see http://www.domain.com/
hosts = +bad_sender_hosts_ip

# We do not receive mails from orange, hinet... etc
drop message = Sender Blacklisted - http://www.yourdomain.tld/blocked.html?$sender_host_name
condition = ${if match{$sender_host_name} \
{hinet-ip|hinet|orange|asianet.co.th} \
{yes}{no}}

# Delay. (Spammers doesn&#039;t like to wait while connecting
# Better do not use on high load servers because it will hold too many open connection
# to 587 port accept connection without delay
accept condition = ${if eq {$interface_port}{587}{yes}{no}}

accept
logwrite = Delay 10s for $sender_host_address ($sender_host_name)
delay = 10s

###############################
# ACL HELO/EHLO
###############################
check_helo:

accept condition = ${if eq {$interface_port}{587}{yes}{no}}
accept hosts = +whitelist_hosts: +whitelist_hosts_ip : +relay_hosts

# for some cases this rule may need to comment
deny message = rejected due to forged HELO name - $sender_helo_name
condition = ${if match {$sender_helo_name} \
{\N^[^.].*\.[^.]+$\N} \
{no}{yes}}
!hosts = +whitelist_hosts: +whitelist_hosts_ip : +relay_hosts

drop message = HELO/EHLO cannot be numbers only
condition = ${if match{$sender_helo_name}{\N^\d+$\N}{yes}{no}}

# If remote host greets with an IP address, reject connection:
drop message = IP address not allowed in HELO/EHLO
condition = ${if isip {$sender_helo_name}{true}{false}}

drop message = This is my IP. Go away
condition = ${if eq{$sender_helo_name}{$interface_address} {yes}{no}}

deny message = HELO/EHLO required by SMTP RFC.
condition = ${if eq{$sender_helo_name}{}{yes}{no}}

accept

Find:

#require verify = sender

Add after:

drop message = Use your provider SMTP. Email blocked
condition = ${if match{$sender_host_name} \
{adsl|dialup|pool|peer|dhcp|dsl|broadband|ppp|dynamic|cable} \
{yes}{no}}
hosts = !+relay_hosts
domains = +use_rbl_domains
!authenticated = *

find:

# accept if address is in a local domain as long as recipient can be verified
accept domains = +local_domains
endpass
message = "Unknown User"

Add before:

# Perform greylisting.
defer message = $sender_host_address is greylisted. Please try again later.
log_message = greylisted.
domains = +relay_domains : +local_domains
!senders = : postmaster@*
!hosts = : +relay_hosts : \
${if exists {/etc/greylistd/whitelist-hosts}\
{/etc/greylistd/whitelist-hosts}{}} : \
${if exists {/etc/virtual/whitelist-hosts}\
{/etc/virtual/whitelist-hosts}{}}verify = recipient/callout=5s,use_sender,defer_ok
condition = ${readsocket{/var/run/greylistd/socket}\
{--grey $sender_host_address $sender_address $local_part@$domain}{5s}{}{false}}

Save exim.conf and restart exim:
# service exim restart

That's All.
Now you can check maillog and see something like below :

2008-03-17 09:20:03 H=(pentium) [84.21.226.22] rejected EHLO or HELO pentium: rejected due to forged HELO name - pentium
2008-03-17 12:22:28 Delay 10s for 59.93.211.220 ()
2008-03-17 12:22:35 H=(59.94.122.15) [59.94.122.15] rejected EHLO or HELO 59.94.122.15: IP address not allowed in HELO/EHLO
2008-03-17 12:22:52 H=cpc1-neww3-0-0-cust845.cdif.cable.ntl.com (home-ad73427dc5) [82.11.227.78] F= rejected RCPT : Use your provider SMTP. Email blocked
2008-03-17 12:28:23 H=n4a.bullet.mail.ac4.yahoo.com [76.13.13.67] rejected connection in "connect" ACL: Sender Blacklisted
2008-03-17 13:05:17 H=hore.iptelecom.net.ua [212.xx.224.8] F=<ins> temporarily rejected RCPT : greylisted.<code>2008-03-17 13:09:48 H=ppp85-140-xx-38.pppoe.mtu-net.ru (mtu-net.ru) [85.140.xx.38] F= rejected RCPT : Use your provider SMTP. Email blocked

Also you can check greylisting stats:

# greylist stats
Statistics since Sun Mar 16 23:18:21 2008 (14 hours and 53 minutes ago)
-----------------------------------------------------------------------
146 items, matching 171 requests, are currently whitelisted
0 items, matching 0 requests, are currently blacklisted
155 items, matching 156 requests, are currently greylistedOf 146 items that were initially greylisted:
- 146 (100.0%) became whitelisted
- 0 ( 0.0%) expired from the greylist
-----------------------------------------------------------------------

I hope this small How-To will help you to reduce incoming spam.