Использование Nginx honeypot и использование черного списка, блокировка межсетевого экрана ip или fail2ban - PullRequest
0 голосов
/ 09 января 2020

Использование Nginx honeypot и использование черного списка, блокировка межсетевого экрана ip или fail2ban

Таким образом, у нас есть этот сервер, и мы видим тысячи зондов каждый день. Забавно, что все они «пробуют» хотя бы одинаковые базовые c uri, такие как \admin и \wp-admin и \control и \mysqladmin .... наши люди и пользователи никогда не будут вводить эти команды.

В прошлом мы отправляли deny all на эти совпадения местоположений URI, и наш блок выглядит следующим образом

location ~* ^/(admin|wp-admin|control)/?$
    deny all;
}

Но для некоторых запросов URI мы на 100% уверены, что это зонд / хакер веб-сайта сканер сканирует несуществующие чрезмерно логические небезопасные uri ... и вместо использования deny all; я хотел бы заблокировать IP-адрес ... навсегда или как минимум на 24 часа

вопрос : Как я могу сопоставить запросы как honeypot, а затем заблокировать этот IP с помощью нашего брандмауэра через nginx conf?

В результате вы получите что-то вроде

location ~* ^/(admin|wp-admin|control)/?$
    ban the ip permanently;
    or
    ban the ip 24hours;
}

спасибо!

1 Ответ

1 голос
/ 12 января 2020

Если deny all создает запись об ошибке в вашем error.log, вы можете использовать fail2ban jail с именем nginx -http-auth, поэтому добавьте это в ваш /etc/fail2ban/jail.local:

[nginx-http-auth]
enabled = true

перезапустите fail2ban (или fail2ban-client reload для fail2ban v.0.10 или новее), и они будут забанены. Если у вас есть только записи в access.log или вы хотите попробовать лучший сценарий, вы можете попробовать это:

создать новый формат журнала доступа (nginx по умолчанию немного хуже) в http разделе nginx config:

log_format badlogfmt '$time_local : $remote_addr : $status : $body_bytes_sent : $request_method : $remote_user : '
                     '"$request" "$http_referer" "$http_user_agent"';

, а затем написать новую запись, которая будет регистрировать все «плохие» запросы в отдельном файле журнала:

map $status $loggable {
    404     0; # ignore page not found (404).
    499     0; # ignore canceled/closed requests.
    ~^[45]  1; # all other requests with status starting with 4 or 5.
    default 0;
}

# log the bad requests: 
access_log /var/log/nginx/access_bad.log badlogfmt if=$loggable;
# all other requests:
access_log /var/log/nginx/access.log combined;

, это приведет к тому, что все «плохие» запросы переходя к другому журналу, который выглядит следующим образом:

11/Jan/2020:06:27:59 +0100 : 192.0.2.1 : 403 : 154 : GET : - : "GET /admin/ HTTP/1.1" ...
11/Jan/2020:06:28:00 +0100 : 192.0.2.2 : 400 : 166 : - : - : "145.ll|'|'|SGFjS2...

ваша тюрьма может быть похожа на эту:

[nginx-ban-bots]
port    = http,https
logpath = /var/log/nginx/access_bad.log
backend = auto
filter =
# ban all but ignore 401 Unauthorized for empty user (: - :) and 404 (and 499 cancel request)...
failregex = ^\s*: <HOST> :(?: (?!40[14]|499)[45]\d{2} :| 401 : \d+ : \S* (?!: - :))
enabled = true

перезагрузите fail2ban и все боты исчезнут.

Подробнее о fail2ban / wiki / Best-Practice # Reduce-Parasiti c -log-traffi c.

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

Чтобы вы могли оставить комментарий или удалить директиву 404 в map $status ..., а также удалить 4 из [14] из файла fai lregex, и, возможно, увеличьте maxretryfindtime), чтобы избежать ложных срабатываний.

При этой стратегии вам не нужно будет создавать все местоположения nginx для любых искусственных URL, чтобы соответствовать каждому попытки ботов (и это будет работать завтра, если список выгодных URL-адресов изменится) ... Вы также можете попробовать нашу новейшую версию fail2ban (0.11) с добавочным запретом, затем вы можете включить bantime.increment и установить начальное значение bantime на более низкое значение, например 30s (для возможных ложных срабатываний), но все запреты известны как " плохие злоумышленники будут дольше с каждым следующим баном (после повторных попыток).

...