Защита проброшенного RDP порта на шлюзе

Защита проброшенного RDP порта.


Для начала заставим IPTABLES писать логи в свой отдельный файл, а не в syslog.

nano /etc/rsyslog.d/10-iptables.conf

:msg,contains,"Iptables: " -/var/log/iptables.log
& ~
systemctl restart syslog

Теперь перейдем к настройке fail2ban

nano /etc/fail2ban/jail.local

 

[rdp-bruteforce3388]

enabled = true

filter = rdp-bruteforce3388

action = iptables-nat[name=rdp-bruteforce3388, protocol=tcp]

logpath = /var/log/iptables.log

maxretry = 17

bantime = 600

findtime = 600

[rdp-bruteforce4875]

enabled = true

filter = rdp-bruteforce4875

action = iptables-nat[name=rdp-bruteforce4875, protocol=tcp]

logpath = /var/log/iptables.log

maxretry = 17

bantime = 600

findtime = 600

[rdp-forever]

enabled = true

filter = rdp-num-ban

action = rdp-ban[name=rdp-forever, protocol=tcp]

logpath = /var/log/fail2ban.log

maxretry = 3

bantime = -1 ; Бан вечно

findtime = 604800

[rdp-brut-ban-day]

enabled = true

filter = rdp-bruteforce

action = iptables-nat[name=rdp-bruteforce, protocol=tcp]

logpath = /var/log/iptables.log

maxretry = 96

bantime = 86400

findtime = 86400

Поясним:

filter = rdp-bruteforce - это словосочетание по которому будем искать событие в логе

action = rdp-ban[name=rdp-bruteforce, protocol=tcp] - событие которое бедет запущено для создания правила в Iptables для блокировки нашего обнаглевшего бота.

maxretry =  17 - это количество совпадений в логе

bantime = - время на которое будет забанен

findtime =  - время на протяжении которого должны быть записаны 17 совпадений

Первые две секции одинаковы, они мониторят два разных порта и банят на 10 минут если в течении 10 минут было 17 событий,  в четвертой - ищю особо осторожных ботов и одновременно на двух портах, она банит на сутки если было 96 событий на протяжении суток . В третьей - особо осторожных и умных кидаю в бан на вечно, срабатывает если трижды ip был забанен на сутки.

Теперь настроим фильтры:

nano /etc/fail2ban/filter.d/rdp-bruteforce.conf

[Definition]

failregex = hashlimit.* SRC=<HOST>

ignoreregex =

nano /etc/fail2ban/filter.d/rdp-bruteforce3388.conf

[Definition]

failregex = hashlimit3388: .* SRC=<HOST>

ignoreregex =

nano /etc/fail2ban/filter.d/rdp-bruteforce4875.conf

[Definition]

failregex = hashlimit4875: .* SRC=<HOST>

ignoreregex =

nano /etc/fail2ban/filter.d/rdp-num-ban.conf

 

[Definition]

failregex = .*rdp-brut-ban-day.* Unban <HOST>

ignoreregex =

nano /etc/fail2ban/action.d/iptables-nat.conf

 

[INCLUDES]

before = iptables-common.conf

[Definition]

actionstart = <iptables> -t nat -N f2b-<name>

<iptables> -t nat -A f2b-<name> -j <returntype>

<iptables> -t nat -I PREROUTING -p <protocol> -j f2b-<name>

actionstop = <iptables> -t nat -D PREROUTING -p <protocol> -j f2b-<name>

<iptables> -t nat -F f2b-<name>

<iptables> -t nat -X f2b-<name>

actioncheck = <iptables> -n -L PREROUTING -t nat | grep -q 'f2b-<name>[ \t]'

actionban = <iptables> -t nat -I f2b-<name> 1 -s <ip> -j DNAT --to <ip>

<iptables> -I FORWARD -s <ip> -d <ip> -j ACCEPT

actionunban = <iptables> -t nat -D f2b-<name> -s <ip> -j DNAT --to <ip>

<iptables> -D FORWARD -s <ip> -d <ip> -j ACCEPT

[Init]

 

nano /etc/fail2ban/action.d/rdp-ban.conf

 

[INCLUDES]

before = iptables-common.conf

[Definition]

actionstart = iptables -t nat -N f2b-<name>

iptables -t nat -A f2b-<name> -j <returntype>

iptables -t nat -I PREROUTING -p <protocol> -j f2b-<name>

actionstop = iptables -t nat -D PREROUTING -p <protocol> -j f2b-<name>

iptables -t nat -F f2b-<name>

iptables -t nat -X f2b-<name>

actioncheck = iptables -n -L PREROUTING -t nat | grep -q 'f2b-<name>[ \t]'

actionban = iptables -t nat -I f2b-<name> 1 -s <ip> -j DNAT --to <ip>

iptables -I FORWARD -s <ip> -d <ip> -j ACCEPT

actionunban = iptables -t nat -D f2b-<name> -s <ip> -j DNAT --to <ip>
iptables -D FORWARD -s <ip> -d <ip> -j ACCEPT

[Init]

 

Добавим правила в iptables которые будут писать лог

iptables -t nat -A PREROUTING -p tcp --tcp-flags SYN,RST,ACK SYN -m tcp --dport 3388 -d 188.190.223.336 -j LOG --log-prefix "Iptables: hashlimit3388: "

iptables -t nat -A PREROUTING -p tcp --tcp-flags SYN,RST,ACK SYN -m tcp --dport 4875 -d 188.190.223.336 -j LOG --log-prefix "Iptables: hashlimit4875: "

Если есть скрипт с правилами для iptables, в конец добавим строку

/etc/init.d/fail2ban restart

для восстановления правил fail2ban после очистки цепочек.