FreeBSD/Fail2ban/IPFW

Скачать FreeBSD/Fail2ban/IPFW
Недавно искали:

Itnull

Команда форума
Администратор
Регистрация
22.05.13
Сообщения
25.466
Реакции
9.450
Веб-сайт
itnull.me
  • Автор темы
  • Администратор
  • Модер.
  • Команда форума
  • #1
И так, мы начнем с настройки ipfw. Я напишу комментарии к каждому правилу что бы было более понятно. Обычно для этого создается исполняемый скрипт /etc/rc.firewall, по умолчанию этот скрипт присутствует в системе и вы можете много из него подчерпнуть. Но я показываю маленький пример.

Perl:
#!/bin/sh -

# Задаем переменную.
fwcmd="/sbin/ipfw -q"

# Удаляем все правила и счетчики которые были до момента перезапуска.
${fwcmd} -f flush

# Разрешаем все на локальном интерфейсе. Через него работают многие демоны.
${fwcmd} add allow all from any to any via lo0

# Разрешаем подключаться всем, к нам на порт SSH.
${fwcmd} add allow tcp from any to me 22 via eth0

# Разрешаем проходить пакетам с хостов соединение с которыми уже установлено.
${fwcmd} add allow all from any to any established via eth0

# Разрешаем исходящий трафик с сервера. Серверу можно все. ;)
${fwcmd} add allow all from me to any out via eth0

# Запрещаем все остальное.
${fwcmd} add deny all from any to any

С ipfw все, теперь нам необходимо поставить fail2ban. Я все программное обеспечение ставлю из портов, так проще конфигурировать и отключать не нужные мне опции. По этому идем в порты, конфигурируем и ставим.

Код:
# cd /usr/ports/security/py-fail2ban
# make config-recursive
# make install clean

После установки можно переходить к настройке. Как написано в документации необходимо создать свой собственный файл jail.local скопировав его при этом с идущего по умолчанию jail.conf. Я не знаю зачем авторы это делают, наверное для удобства что вы храните ваши правила в отельном файле. Но для меня лишний файл это только путаница. По этому я просто буду расскоментировать то что мне необходимо в самом jail.conf.

Код:
# cd /usr/local/etc/fail2ban/
# nano jail.conf

В качестве примера приведу три ловушки ssh, postfix, nginx. Хочу обратить внимание на то, что в основном файле конфигурации необходимо пройтись по настройкам и закоментировать или наоборот то что вам необходимо. В конец файла дописываем наши ловушки.


Код:
[sshd]

# Включаю агрессивное поведение, то есть любая ошибка авторизации будет считаться за попытку.
# Это полезно когда кто-то пытается просто сканировать ваши порты.
mode = aggressive

# Это пожалуй самое главное, мы используем фильтр ipfw по этому будем пользоваться уже предустановленным скриптом bsd-ipfw,
# далее идет имя таблицы куда будут попадать адреса которые необходимо блокировать.
banaction = bsd-ipfw[table=ssh]

# Объявляем ловушку активной.
enabled  = true

# Указываем какие регулярные выражения нам использовать для определения IP.
filter   = sshd

# Если ваш демон работает в отличном от стандартного порта, укажите его тут.
port    = 2255

# Укажите путь по которому находятся логи ssh, что бы фильтровать их.
logpath = /var/log/auth.log

# Укажите фильтру какая программа используется по умолчанию, обычно этот параметр трогать не надо.
backend = %(sshd_backend)s

# Количество попыток по истечении которых адрес будет заблокирован.
maxretry = 2

# Количество часов, минут, дней на которые адрес будет заблокирован.
bantime = 12h


[postfix]

mode    = aggressive
port    = smtp,465,submission
logpath = %(postfix_log)s
backend = %(postfix_backend)s
banaction = bsd-ipfw[table=postfix]
enabled  = true
maxretry = 2
bantime = 48h

[nginx-http-auth]

port    = http,https
logpath = %(nginx_error_log)s
mode = aggressive
banaction = bsd-ipfw[table=nginx-auth]
enabled  = true
maxretry = 2
bantime = 12h

Собственно на этом все. После всего этого можно запускать fail2ban. Необходимо только добавить его в /etc/rc.conf

Код:
# echo 'fail2ban_enable="YES"' >> /etc/rc.conf
# service fail2ban start

После чего, можно проверить статус сервера и запущенные ловушки. В моем случае их больше чем указано в данной статье. У вас будет то количество, которое вы активируете.

Код:
# fail2ban-client status
Status
|- Number of jail:    6
`- Jail list:    nginx-http-auth, postfix, postfix-rbl, postfix-sasl, roundcube, sshd

Далее можно посмотреть правила ipfw, они покажут сколько пакетов было заблокировано и можно посмотреть каждую таблицу отельно.

Код:
# ipfw show

00100  281951  70046972 allow ip from any to any via lo0
00111       0         0 unreach port ip from table(ssh) to me 2255
00112       0         0 unreach port ip from table(nginx-auth) to me 80,443
00113     124      7292 unreach port ip from table(postfix) to me 25,465,587
00114       0         0 unreach port ip from table(postfix-rbl) to me 25,465,587
00115       0         0 unreach port ip from table(postfix-sasl) to me 25,465,587,143,993,110,995
00116       0         0 unreach port ip from table(roundcube) to me 80,443

# ipfw table postfix list

60.167.82.42/32 0
121.66.35.37/32 0
121.229.45.222/32 0
162.142.125.221/32 0
164.52.6.242/32 0
167.248.133.46/32 0
202.202.217.76/32 0
222.205.127.251/32 0

# fail2ban-client status postfix

Status for the jail: postfix
|- Filter
|  |- Currently failed:    1
|  |- Total failed:    70
|  `- File list:    /var/log/maillog
`- Actions
   |- Currently banned:    8
   |- Total banned:    19
   `- Banned IP list:    60.167.82.42 162.142.125.221 121.229.45.222
 121.66.35.37 167.248.133.46 164.52.6.242
 202.202.217.76 222.205.127.251

Как видим все ловушки у нас есть и активны, теперь при достижении лимита попыток адрес «хакера» попадает в бан, на то время, которое вы указали. Напоминаю так же, что в документации по fail2ban есть все необходимые ключи для работы, в том числе и директива добавления своих адресов в белый список, что бы вы «не выстрелили себе в ногу».

Но что делать если нужной программы нет в списке ловушек fail2ban, все фильтры которыми располагает программа находятся в папке /usr/local/etc/fail2ban/filter.d/, если вам необходимо внести какие-то изменения в существующий фильтр или написать новый. Например меня часто напрягало что сканируют почтовый сервер. По этому я внес изменения в фильтр postfix просто дописав туда необходимое регулярное выражение.

Код:
# nano /usr/local/etc/fail2ban/filter.d/postfix.conf

# Fail2Ban filter for selected Postfix SMTP rejections
#
#

[INCLUDES]

# Read common prefixes. If any customizations available -- read them from
# common.local
before = common.conf

[Definition]

_daemon = postfix(-\w+)?/\w+(?:/smtp[ds])?
_port = (?::\d+)?

prefregex = ^%(__prefix_line)s<mdpr-<mode>> <F-CONTENT>.+</F-CONTENT>$

mdpr-normal = (?:\w+: reject:|(?:improper command pipelining|too many errors) after \S+)
mdre-normal=^RCPT from [^[]*\[<HOST>\]%(_port)s: 55[04] 5\.7\.1\s
            ^RCPT from [^[]*\[<HOST>\]%(_port)s: 450 4\.7\.\d+ (<[^>]*>)?: Helo command rejected: Host not found\b
            ^EHLO from [^[]*\[<HOST>\]%(_port)s: 504 5\.5\.\d+ (<[^>]*>)?: Helo command rejected: need fully-qualified hostname\b
            ^(RCPT|VRFY) from [^[]*\[<HOST>\]%(_port)s: 550 5\.1\.1\s
            ^RCPT from [^[]*\[<HOST>\]%(_port)s: 450 4\.1\.\d+ (<[^>]*>)?: Sender address rejected: Domain not found\b
            ^from [^[]*\[<HOST>\]%(_port)s:?

            # Добавил правила для сканнера.
            ^scanner [^[]*\[<HOST>\]%(_port)s:?
 
Назад
Сверху Снизу