Domů » Články

Aktivní obrana SMTP služby Domina na Linuxu Verze pro tisk,Tisknutelna verze dokumentu

Petr Šantrůček (ELAT), 01.04.2010 | Kategorie: Články
Administrátor hájí svůj server jako se hájí pevnost. Obvykle se snaží nepustit nikoho přes hradby. Ale existuje i způsob, jak nikoho nepustit před hradby samotné. A to je po čertech rozdíl.

Každý správce, který provozuje Domino servery přijímající SMTP poštu z veřejného internetu poznal, jaká spousta cizích serverů zkouší posílat spam či zneužívat Domino jako mail relay. V logu Domina se tak objevují hlášky podobné těmto:

29.06.2009 14:39:30 SMTP Server [14335:00015--1714259056] Connection from [77.35.194.181] rejected for policy reasons. IP address of connecting host not found in reverse DNS lookup.

21.12.2009 15:43:14 SMTP Server: Authentication failed for user webmaster ; connecting host 58.63.158.141

21.12.2009 00:30:35 SMTP Server [31779:00084--1727005808] Attempt to relay mail to candy59839@yahoo.com.tw rejected for policy reasons. Relays to recipient's domain denied in your configuration.

21.12.2009 10:44:29 SMTP Server: Relay attempt failed By: 114-45-60-87.dynamic.hinet.net (114.45.60.87) From: <z2007tw@yahoo.com.tw> To: gk49fawn@yahoo.com.tw

Samozřejmě dobře nakonfigurovaný SMTP server Domina bude takové pokusy štítivě odmítat, ale přesto to pro server představuje další zbytečnou režii. Zvláště pokud se na SMTP službu sesypou tisíce požadavků v jeden okamžik, může dojít k enormní zátěži hraničící s DoS útokem. Administrátor Domino serveru na Linuxu má ale k dispozici nástroj, který může samotnému Dominu dost odlehčit a spamerovi či útočníkovi na váš server znepříjemnit situaci tak, že svého počínání s největší pravděpoodbností zanechá (to se týká i automatických útoků z různých botnetů).

Při řešení jiné úlohy se mi dostal do ruky nástroj Fail2Ban, který analyzuje logy na linuxovém systému a při výskytu definovaných událostí provede automaticky akci – „zabanování“ detekované IP adresy škůdce na určený čas. Primárně se Fail2Ban používá pro ochranu SSH, Postfixu a Apache (a dalších služeb generujících textové logy), ale Domino na Linuxu umí generovat výstup z konzole do textového logu také. Při bližším pohledu na typ zpráv od SMTP serveru Domina zjistíte, že stejně jako Fail2Ban dokáže analyzovat logy Postfixu, může se stejným úspěchem zpracovávat log Domina. Namítnete možná, že SMTP Domina bude nekorektní SMTP spojení odmítat tak jako tak.
Vtip je ale v tom, že při detekování např. 3 pokusů o neúspěšné připojení během 5 minut Fail2Ban zareaguje tak, že modifikuje firewall Iptables tak, že tato IP adresa nebude např. dalších 30 minut vůbec schopná SMTP port (TCP/25) otevřít. Z pohledu útočníka SMTP server „zmizí“. Spamer se na další pokusy vykašle, útočník pravděpodobně také. Server tak dynamicky reaguje na případnou hrozbu a automaticky brání dalším pokusům.

Pojďme si ukázat praktické nasazení Fail2Ban pro ochránění Domino serveru. Předpokládám nasazení na systému Red Hat Enterprise Linux, případně CentOS jako kompatibilním s RH EL. Předpokládám, že log z konzole posíláte do souboru /var/log/domino.log.

1. Prvním krokem je instalace fail2ban pomocí standardního nástroje yum
yum install fail2ban

2. Následuje povolení spouštění služby fail2ban
chkconfig fail2ban on

3. Je třeba zajistit, že fail2ban dokáže rozpoznat datum a čas použitý v logu. Pokud jde o tvar 21.12.2009 00:30:35, musíte modifikovat soubor datedetector.py. Přidejte následující řádky:
# Domino format [21.01.2006 09:22:55]
template = DateStrptime()
template.setName("Day.Month.Year Hour:Minute:Second")
template.setRegex("\d{2}.\d{2}.\d{4} \d{2}:\d{2}:\d{2}")
template.setPattern("%d.%m.%Y %H:%M:%S")
self.__templates.append(template)

4. Potom přidejte do /etc/fail2ban/filter.d soubor s obsahem:
# Fail2Ban configuration file
#
# Author: Petr Santrucek
#
# $Revision: 001 $
#

[Definition]

# Option: failregex
# Notes.: regex to match the password failure messages in the logfile. The
# host must be matched by a group named "host". The tag "<HOST>" can
# be used for standard IP/hostname matching and is only an alias for
# (?:::f{4,6}:)?(?P\S+)
# Values: TEXT
#
# Sample log entry
# 01/23/2009 19:54:51 SMTP Server: Authentication failed for user bd ; connecting hos
#
failregex = .* SMTP Server .* Connection from rejected for policy reasons.
.* SMTP Server: Relay attempt failed By:.*(<HOST>).*$
.* SMTP Server: Authentication failed for user .* connecting host <HOST>.
.* SMTP Server: .*(<HOST>) disconnected. 0 message[s] received$

# Option: ignoreregex
# Notes.: r egex to ignore. If this regex matches, the line is ignored.
# Values: TEXT
#

5. Nakonec upravte soubor /etc/fail2ban/jail.conf:
[domino-smtp]

enabled = true
port = smtp,465
protocol = tcp
filter = domino-smtp
action = iptables[name=Domino, port=25, protocol=tcp]
sendmail-whois[name=Virgo SMTP, dest=administrator@scotia.cz, sender=fail2
logpath = /var/log/domino.log
maxretry = 1
bantime = 600

Nakonec ještě vysvětlení toho, co se bude dít. Při 1 detekovaném (maxretry) pokusu o nekorektní SMTP připojení spustí fail2ban skript, který modifikuje firewall Iptables, resp. jeho chain INPUT a vloží příkaz blokující na portu TCP/25 spojení z IP adresy útočníka a zároveň pošle administrátorovi mail (parametr action). Po 600 sekundách (10 minut) blokování fail2ban zase odstraní (řádek bantime). Logpath určuje, který log se bude zpracovávat

Přikládám výstup příkazu iptables –L, který ukazuje, jak je modifikován firewall při zabanování konkrétní IP:

Chain INPUT (policy ACCEPT)
target prot opt source destination
fail2ban-Domino tcp -- anywhere anywhere tcp dpt:smtp
fail2ban-SSH tcp -- anywhere anywhere tcp dpt:ssh
RH-Firewall-1-INPUT all -- anywhere anywhere

Chain FORWARD (policy ACCEPT)
target prot opt source destination
RH-Firewall-1-INPUT all -- anywhere anywhere

Chain OUTPUT (policy ACCEPT)
target prot opt source destination

Chain RH-Firewall-1-INPUT (2 references)
target prot opt source destination
ACCEPT all -- anywhere anywhere
ACCEPT icmp -- anywhere anywhere icmp any
ACCEPT esp -- anywhere anywhere
ACCEPT ah -- anywhere anywhere
ACCEPT udp -- anywhere 224.0.0.251 udp dpt:mdns
ACCEPT udp -- anywhere anywhere udp dpt:ipp
ACCEPT tcp -- anywhere anywhere tcp dpt:ipp
ACCEPT all -- anywhere anywhere state RELATED,ESTABLISHED
ACCEPT tcp -- anywhere anywhere state NEW tcp dpt:imap
ACCEPT tcp -- anywhere anywhere state NEW tcp dpt:lotusnote
ACCEPT tcp -- anywhere anywhere state NEW tcp dpt:imaps
ACCEPT tcp -- anywhere anywhere state NEW tcp dpt:ssh
ACCEPT tcp -- anywhere anywhere state NEW tcp dpt:smtp
ACCEPT tcp -- anywhere anywhere state NEW tcp dpt:http
ACCEPT tcp -- anywhere anywhere state NEW tcp dpt:https
REJECT all -- anywhere anywhere reject-with icmp-host-prohibited

Chain fail2ban-Domino (1 references)
target prot opt source destination
DROP all -- 118.98.163.188 anywhere
RETURN all -- anywhere anywhere

Chain fail2ban-SSH (1 references)
target prot opt source destination
RETURN all -- anywhere anywhere

Ke kontrole běhu fail2ban použijte log ve /var/log/fail2ban.log, do kterého se zaznamenává činnost služby. Úroveň logování se nastavuje v souboru /etc/fail2ban/fail2ban.conf parametrem loglevel, který nabývá následujících hodnot:
1 – ERROR
2 – WARN
3 – INFO (default)
4 – DEBUG

Zaslaný informační mail obsahuje i identifikaci IP adresy (lze-li ji zjistit) pomocí služby WHOIS:

Hi,

The IP 201.206.2.98 has just been banned by Fail2Ban after
1 attempts against SMTP.


Here are more information about 201.206.2.98:

[Querying whois.lacnic.net]
[whois.lacnic.net]

% Joint Whois - whois.lacnic.net
% This server accepts single ASN, IPv4 or IPv6 queries

% LACNIC resource: whois.lacnic.net


% Copyright LACNIC lacnic.net
% The data below is provided for information purposes
% and to assist persons in obtaining information about or
% related to AS and IP numbers registrations
% By submitting a whois query, you agree to use this data
% only for lawful purposes.
% 2009-12-31 22:31:13 (BRST -02:00)

inetnum: 201.206.0/19
status: reallocated
owner: CARTAGO
ownerid: CR-CART-LACNIC
responsible: DESARROLLO DE LA RED. ICE
address: 10032, 1, 1
address: 1 - CARTAGO -
country: CR
phone: +506 22207465 []
owner-c: REJ
tech-c: REJ
abuse-c: REJ
created: 20080903
changed: 20080903
inetnum-up: 201.192/12

nic-hdl: REJ
person: Ronald Esquivel Jiménez
e-mail: gspam@ICE.GO.CR
address: 10032-1000 San José, Costa Rica, 10032, San José
address: 10032-100 - San José - cr
country: CR
phone: +506 22426064 []
created: 20041004
changed: 20090729

% whois.lacnic.net accepts only direct match queries.
% Types of queries are: POCs, ownerid, CIDR blocks, IP
% and AS numbers.


Regards,

Fail2Ban

Jak jsem uvedl výše, fail2ban jsem původně implementoval pro ochranu jiných služeb, ale napadlo mě jej použít pro Domino. Na internetu jsem našel popis Chrise Brandlehnera, který sice obsahuje několik chyb a nedodělků, ale navedl mě správným směrem.

Pozn.: V konfiguráku /etc/fail2ban/filter.d jsem musel vyhodit zpětná lomítka před znaky ( ) <>, protože redakční systém si s nimi neporadil a rozhodilo se celé formátování článku. Zájemci si mohou pro originální konfigurák napsat na můj mail.

Související články

Fix Pack 6 pro Lotus Notes/Domino 8.0.2   27.07.2010, Radim Navrátil (YOUR SYSTEM)
Interní Fix 1 na Fix Pack 3 pro Lotus Domino 8.5.1 k dispozici   17.06.2010, Radim Navrátil (YOUR SYSTEM)
Fix Pack 3 pro Lotus Notes/Domino 8.5.1 k dispozici   01.06.2010, Aleš Lichtenberg (KAISER DATA)
Lotus Notes Traveler - správa zařízení   09.04.2010, Aleš Lichtenberg (KAISER DATA)

Seznam komentářů (3)

Od Téma Datum
Luboš ČernýNástřel doporučené SMTP konfigurace ?05.01.2010 09:15
Luboš ČernýZabezpečení SMTP05.01.2010 09:17
Petr ŠantrůčekMateriály o SMTP na Dominu05.01.2010 18:27
Vypsat označené   Vypsat všechny   Přidat komentář