<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ru">
	<id>https://support.qbpro.ru/index.php?action=history&amp;feed=atom&amp;title=%D0%91%D0%BB%D0%BE%D0%BA%D0%B8%D1%80%D0%BE%D0%B2%D0%BA%D0%B0_IP-%D0%B0%D0%B4%D1%80%D0%B5%D1%81%D0%BE%D0%B2_%D0%B2_HAProxy</id>
	<title>Блокировка IP-адресов в HAProxy - История изменений</title>
	<link rel="self" type="application/atom+xml" href="https://support.qbpro.ru/index.php?action=history&amp;feed=atom&amp;title=%D0%91%D0%BB%D0%BE%D0%BA%D0%B8%D1%80%D0%BE%D0%B2%D0%BA%D0%B0_IP-%D0%B0%D0%B4%D1%80%D0%B5%D1%81%D0%BE%D0%B2_%D0%B2_HAProxy"/>
	<link rel="alternate" type="text/html" href="https://support.qbpro.ru/index.php?title=%D0%91%D0%BB%D0%BE%D0%BA%D0%B8%D1%80%D0%BE%D0%B2%D0%BA%D0%B0_IP-%D0%B0%D0%B4%D1%80%D0%B5%D1%81%D0%BE%D0%B2_%D0%B2_HAProxy&amp;action=history"/>
	<updated>2026-05-14T04:23:23Z</updated>
	<subtitle>История изменений этой страницы в вики</subtitle>
	<generator>MediaWiki 1.38.1</generator>
	<entry>
		<id>https://support.qbpro.ru/index.php?title=%D0%91%D0%BB%D0%BE%D0%BA%D0%B8%D1%80%D0%BE%D0%B2%D0%BA%D0%B0_IP-%D0%B0%D0%B4%D1%80%D0%B5%D1%81%D0%BE%D0%B2_%D0%B2_HAProxy&amp;diff=3889&amp;oldid=prev</id>
		<title>Vix: Новая страница: «* Веб-сайт клиента в настоящее время находится под атакой, и меня вызвали, чтобы исправить это.  Огромное количество IP-адресов (легко более 5000) постоянно поражает /login по-видимому, пытаясь обмануть их.  Я изменил сайт, поэтому страница возвращает ошибку 500,...»</title>
		<link rel="alternate" type="text/html" href="https://support.qbpro.ru/index.php?title=%D0%91%D0%BB%D0%BE%D0%BA%D0%B8%D1%80%D0%BE%D0%B2%D0%BA%D0%B0_IP-%D0%B0%D0%B4%D1%80%D0%B5%D1%81%D0%BE%D0%B2_%D0%B2_HAProxy&amp;diff=3889&amp;oldid=prev"/>
		<updated>2023-11-02T14:24:30Z</updated>

		<summary type="html">&lt;p&gt;Новая страница: «* Веб-сайт клиента в настоящее время находится под атакой, и меня вызвали, чтобы исправить это.  Огромное количество IP-адресов (легко более 5000) постоянно поражает /login по-видимому, пытаясь обмануть их.  Я изменил сайт, поэтому страница возвращает ошибку 500,...»&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Новая страница&lt;/b&gt;&lt;/p&gt;&lt;div&gt;* Веб-сайт клиента в настоящее время находится под атакой, и меня вызвали, чтобы исправить это.&lt;br /&gt;
&lt;br /&gt;
Огромное количество IP-адресов (легко более 5000) постоянно поражает /login по-видимому, пытаясь обмануть их.&lt;br /&gt;
&lt;br /&gt;
Я изменил сайт, поэтому страница возвращает ошибку 500, но они не сдаются. Очевидно, что это не годится для реальных пользователей, которые теперь не могут войти.&lt;br /&gt;
&lt;br /&gt;
Балансировка нагрузки осуществляется через HAProxy, о котором я очень мало знаю (хотя у меня намного больше, чем несколько часов назад). Я перепробовал много полезных вещей, которые нашел в Интернете, но ни одна из них не помогла, возможно, потому, что такой большой блок IP-адресов выполняет атаку.&lt;br /&gt;
&lt;br /&gt;
Тогда на вопрос: как я могу отклонить IP, если он попадет /login более X раз за Y секунд?&lt;br /&gt;
&lt;br /&gt;
И, подпункт - как я могу увидеть журнал отклонений, чтобы я знал, что это на самом деле работает?&lt;br /&gt;
&lt;br /&gt;
Вот пример haproxy.log:&lt;br /&gt;
&lt;br /&gt;
 Jun  3 14:24:50 hap-server haproxy[11831]: 46.161.62.79:15290 [03/Jun/2017:14:24:49.505] www-https-test~ www-backend/www-03 &lt;br /&gt;
 751/0/202/38/991 500 220 - - ---- 428/428/120/38/0 0/0 &amp;quot;GET /login HTTP/1.1&amp;quot;&lt;br /&gt;
 Jun  3 14:24:50 hap-server haproxy[11831]: 46.161.63.132:47804 [03/Jun/2017:14:24:49.505] www-https-test~ www-backend/www-04 &lt;br /&gt;
 751/0/202/38/991 500 220 - - ---- 428/428/119/42/0 0/0 &amp;quot;GET /login HTTP/1.1&amp;quot;&lt;br /&gt;
 Jun  3 14:24:50 hap-server haproxy[11831]: 46.161.62.43:53176 [03/Jun/2017:14:24:49.505] www-https&lt;br /&gt;
&lt;br /&gt;
&amp;lt;hr&amp;gt; &lt;br /&gt;
1. Благодаря комментарию EEAA я смог решить эту проблему с помощью fail2ban.&lt;br /&gt;
&lt;br /&gt;
Однако есть очень мало документации о том, как использовать fail2ban с HAProxy - настолько мало, что эта страница уже приближается к началу поиска Google по &amp;quot;haproxy fail2ban&amp;quot;, поэтому я подробно опишу, как я это сделал.&lt;br /&gt;
&lt;br /&gt;
Прежде всего, установите fail2ban. Если вы не можете сделать это, вы, вероятно, не должны продолжать без дополнительной помощи.&lt;br /&gt;
&lt;br /&gt;
fail2ban работает, сканируя ваши журналы доступа, ища шаблон, который вы создали. Если он найдет этот шаблон X раз за Y секунд, он автоматически забанит этот IP на Z секунд.&lt;br /&gt;
&lt;br /&gt;
Ваш журнал HAProxy должен быть на /var/log/haproxy.log, Если вы находитесь под большой нагрузкой, он может быть слишком большим, чтобы открываться с помощью Vim или Nano, поэтому просто посмотрите на последние несколько строк, используя tail: tail -n50 /var/log/haproxy.log&lt;br /&gt;
&lt;br /&gt;
Пример &amp;quot;плохой&amp;quot; записи в моем журнале выглядел так:&lt;br /&gt;
&lt;br /&gt;
 Jun  3 16:48:03 hap-server haproxy[21751]: 178.159.100.29:48806 [03/Jun/2017:16:48:03.735] www-https-test~ www-backend/www-04 &lt;br /&gt;
 172/0/2/3/177 200 339 - - ---- 36/36/0/0/0 0/0 &amp;quot;GET /login HTTP/1.1&amp;quot;&lt;br /&gt;
Важные биты, которые мы хотим получить от fail2ban - это IP-адрес атакующего и страница, на которую он попадает.&lt;br /&gt;
&lt;br /&gt;
Чтобы сказать fail2ban, как это сделать, сначала мы хотим создать фильтр. Создать файл в папке /etc/fail2ban/filter.d, Я назвал мой applogin.conf но вы можете называть это, как вам нравится, если это заканчивается .conf,&lt;br /&gt;
&lt;br /&gt;
Содержание было следующим:&lt;br /&gt;
&lt;br /&gt;
[Definition]&lt;br /&gt;
&lt;br /&gt;
failregex = ^.*haproxy\[[0-9]+\]: &amp;lt;HOST&amp;gt;:.* &amp;quot;(GET |POST )/login HTTP/1.1&amp;quot;$&lt;br /&gt;
ignoreregex =&lt;br /&gt;
&amp;lt;HOST&amp;gt; точка в строке из вашего журнала, где появляется IP-адрес. Если вы хотите использовать то же регулярное выражение, что и я, замените /login с адресом, который атакуют на вашем сервере.&lt;br /&gt;
&lt;br /&gt;
Теперь вы должны сказать fail2ban, что хотите, чтобы он искал этот фильтр. Сделать копию /etc/fail2ban/jail.conf (в случае, если вы запутались и нужно начать заново), затем откройте jail.conf и добавьте следующие строки внизу.&lt;br /&gt;
&lt;br /&gt;
 [app-login]&lt;br /&gt;
 enabled  = true&lt;br /&gt;
 bantime  = 1200&lt;br /&gt;
 findtime = 120&lt;br /&gt;
 maxretry = 6&lt;br /&gt;
 filter   = applogin&lt;br /&gt;
 logpath  = /var/log/haproxy.log&lt;br /&gt;
 port     = http,https&lt;br /&gt;
Часть в квадратных скобках - это просто имя - используйте то, что вам нравится.bantime количество секунд, на которые пользователь забанен maxretry количество раз, когда пользователь может перейти на страницу в findtime секунд. Так что, в моем примере, если кто-то попытается попасть на www.mydomain.com/login более шести раз (или, может быть, ровно шесть раз, я не уверен) за 2 минуты, тогда они будут забанены на 20 минут.filter это имя файла, который вы создали в /etc/fail2ban/filter.d (но без .conf).logpath путь к файлу журнала, в котором вы хотите его найти.&lt;br /&gt;
&lt;br /&gt;
Сохраните этот файл, затем перезапустите fail2ban: service fail2ban restartХвост файла журнала fail2ban: tail -f /var/log/fail2ban.log и, надеюсь, через минуту или две, вы начнете видеть что-то вроде&lt;br /&gt;
&lt;br /&gt;
 2017-06-03 17:04:32,040 fail2ban.actions: WARNING [app-login] Ban 146.185.200.122&lt;br /&gt;
Это оно! Вы в безопасности от злодеев (те, которые пытаются попасть на эту конкретную страницу, в любом случае).&lt;br /&gt;
&lt;br /&gt;
Примечание. В журнале fail2ban вы также можете увидеть некоторые запреты SSH. Он автоматически создает некоторые правила для SSH, так что не паникуйте.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;hr&amp;gt;&lt;br /&gt;
2. Вы можете сделать то же самое в вашей конфигурации HAProxy: вы можете использовать acl с src_http_req_rate() или даже src_http_err_rate(злоупотребление): я использовал их в некоторых примерах конфигов haproxy для смягчения DDOS [https://www.loadbalancer.org/blog/simple-denial-of-service-dos-attack-mitigation-using-haproxy-2 здесь].&lt;br /&gt;
&lt;br /&gt;
В долгосрочной перспективе: похоже, вы захотите внедрить двойной вход для этой страницы, если пользователи примут это, вы можете просто добавить дополнительный пароль htaccess со страницы входа в систему, чтобы им приходилось разделять входы (довольно сложно). взломать скриптом). Или вы можете использовать mod_security, чтобы сделать то же самое или какую-то [https://www.trustwave.com/Resources/SpiderLabs-Blog/Setting-HoneyTraps-with-ModSecurity--Adding-Fake-Hidden-Form-Fields/ медовую ловушку].&lt;br /&gt;
&lt;br /&gt;
* [https://faultserver.ru/questions/639552/blokirovka-ip-adresov-v-haproxy Источник]&lt;/div&gt;</summary>
		<author><name>Vix</name></author>
	</entry>
</feed>