Блокировка iptables по странам

linux-notes.org

Как заблокировать IP адрес с помощью iptables на Linux

Я установил и запустил CentOS на моем сервере , и я часто нахожу , что мой сервер подвергается нападению другими компьютерами. Грубая сила SSH атаки, сканирование портов , сканирование вирусов и так далее. В этой теме я расскажу и покажу вам на готовом примере, как можно блокировать IP -адрес на сервере Linux с помощью IPTables .

Во-первых, я буду считать что вы уже используете IPTables . Если вам нужна помощь в настройке, то прочитайте эту статью.

Как заблокировать IP -адрес ?

Пример. Я хочу заблокировать входящий запрос от некоторого IP, предположим 192.168.244.134 , то нужно войти как root и ввести следующую команду:

Где ,
— I: Вставка цепи в верхней части правил .
— s: Матч IP -адрес источника .
— j : Перейти к указанным целевым цепям , если пакету соответствует текущее правило .

Чтобы отбрасывать пакеты , приходящие на интерфейс eth0 с 192.168.244.134 , введите следующую команду:

Иногда, стоит заблокировать IP следующим образом:

  • -A: Добавляет правило в таблицу INPUT(входящие пакеты) для IP указанного ИП и выполнет действие REJECT(полностью отбрасывать пакеты не показывая признаков жизни даже по пингу).
  • — s: Матч IP -адрес источника .
  • — j : Перейти к указанным целевым цепям , если пакету соответствует текущее правило .
Читайте также:  Герои нашей страны сочинение

Как заблокировать подсеть ?

Используйте следующий синтаксис для блокирования 10.0.0.0 /8:

Как сохранить заблокированный IP -адрес ?

Чтобы сохранить заблокированный IP -адрес для Iptables в файл конфигурации , введите следующую команду:

Как разблокировать IP- адрес?

Во-первых, вам нужно отобразить заблокированный IP -адрес вместе с номером строки и прочей информации, для этого введите следующую команду

Чтобы разблокировать 192.168.244.134 необходимо удалить номер строки 1, для этого введите:

Тема «Как заблокировать IP адрес с помощью iptables на Linux» окончена.

11 thoughts on “ Как заблокировать IP адрес с помощью iptables на Linux ”

Разблокировать IP адрес, помогите как!

В чем собственно проблема, тогда смогу помочь?

Коллеги помогите советом, я не большой специалист в iptables поэтому нужна ваша помощь.
Ситуация следующая, есть софт работающий на CentOS 6.6 который периодически отправляет информацию на различные ip компании изготовителя. Адресов много и они периодически меняются, закрыть по ip не вариант. Нужно заткнуть этот фонтан. Но оставить возможность пользователям работать и удаленно подключаться.
Те надо прибить весь трафик с хоста, который инициирован самим хостом. Но разрешить исходящий трафик для пользователей, те типа reflexive acl если пользоваться терминами cisco.

Так закрой все соединения на входящий трафик, только разреши доступ с определенных IP (можно указать маску для IP-шников). И разреши все исходящие соединения. Так же, можно сделать подключения не по логину\паролю, а по ключу. Нужно больше информации о твоей задачи.

Доброго времени суток!
Прошу сильно не пинайте, только начинаю разбираться с iptables…

Но тоже проблема, на Mandriva стоит VBox, на Боксе поднят почтовый сервер на Win2008 сервер H-Mail ip 192.185.0.55

Постоянно пытаются ломать. ( IP разные, уже целый список)
—————————————————————
3949 15:03:16.618245 vnesh_IP 180.166.46.151 SMTP S: 535 Authentication failed. Too many invalid logon attempts.
—————————————————————
делаю так iptables -I INPUT -s 180.166.46.151 -j DROP

IP может меняться и по этому может не блокироваться, можно попробовать вот так сделать (для некоторой подсети):

Но мой совет для этой задачи — это использовать Fail2Ban. Я очень подробно рассказывал что и как в своей статье ( Но это для Unix/Linux ОС):
http://linux-notes.org/ustanovka-fail2ban/

Уверен, что она поможет со взломом почтового сервера и не только…

Понял спасибо.
А если такое правило:

Здравствуйте. Хочу заблокировать ВСЕ айпи Китая. Прямо все, без исключений. Как это можно реализовать?

Смотря для каких целей ( если для web-сервера — можно установить и использовать GeoIP и забанить сразу целую страну). Если просто заблокировать страну с IPtables, то вот список IP адресов и для примера я взял China (ПРИМИТЕ ВО ВНИМАНИЕ, что IPtables тормозит при обработке большого количества правил. Мой совет — использовать IPset, я рассказывал на своем сайте как он работает):

Здравствуйте! Может кто нибудь сможет ответить, как можно разрешить подключение на внешний интерфейс freepbx15 etc1 только с 1 Ip адреса(остальное всё запретить), и разрешить все подключения для внутреннего интерфейса etc0. И как понять, что используется в приоритете, фаерволл freepb или fail2ban, потому что когда запрещаю правила в iptables, то подключения всё равно проходят.

Здравствуйте
можно ли в айпитеблсе ограничить доступ к интернету кроме белого списка айпи?

Добавить комментарий Отменить ответ

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.

Источник

Блокировка доступа к web серверу по странам с помощью iptables

Однажды мне понадобилось ограничить доступ к серверу по ip на основе стран. Я решил это сделать после того, как на этот сайт началось непонятное мне нашествие ботов. Шли они со всего мира и создавали хоть и не существенную, но нагрузку на сервер. Из спортивного интереса хотел их отсечь и искал средства, чтобы сделать это максимально эффективно. Ниже расскажу, как я в итоге настроил ограничение доступа к своему веб серверу на основе списка ip по странам.

Введение

Я заметил подозрительную активность на сайте. Заходили какие-то боты, немного скролили и тыкали по ссылкам. Кто и зачем направил их на мой сайт мне было не понятно. Ничего плохого, по сути, они не делали, просто нарушали подсчет статистики, искажая реальную картину. Я быстро прикинул по статистике сайта, с каких стран в основном ко мне заходят люди. В моем случае это страны СНГ и немного заграницы. Боты же лезли со всего мира. Было принято решение временно закрыть доступ к сайту для всех стран, кроме самых популярных, с которых приходит около 95-98% пользователей. Забегаю вперед скажу, что это дало очень хороший результат, отсеяв почти всех нежелательных посетителей.

Есть разные способы решить данную задачу. Наиболее простой и популярный — воспользоваться модулем для nginx — http_geoip_module. Не стал его реализовывать по 2-м причинам:

  1. По-умолчанию, этот модуль не включен в сборку, необходимо собирать веб сервер заново.
  2. Nginx быстрый сервер, успешно справляется с высокими нагрузками, но все же мне казалось более правильно отсечь все лишнее еще на подходах к серверу.

В итоге решил блокировать ботов с помощью iptables. Если у вас он не настроен, можете воспользоваться моей статьей — настройка iptables. Первое, что пришло в голову, это вручную добавить полный список ip адресов конкретной страны. Эта информация без проблем ищется в интернете, например вот тут — http://ipdeny.com/ipblocks/. Я взял список адресов одной страны и загнал его в свой скрипт для iptables, о котором рассказано в моей статье.

Запуск скрипта с добавленным списком огромного количество ip адресов и диапазонов длился секунд 10. Сейчас уже точно не помню, какую страну взял, если не ошибаюсь, то список был на несколько тысяч строк. Я понял, что так дело не пойдет, но все же решил попробовать добавить еще одну страну. После запуска скрипта сервер просто завис. Перестал отвечать на запросы, по ssh меня отключило. Пошел в консоль и перезагрузил сервер.

Я понял, что просто в лоб нельзя в iptables загнать большие списки. Стал искать другой способ, как реализовать ограничение доступа к серверу на основе большого списка правил. Решение было найдено — ipset. Официальная страница проекта — http://ipset.netfilter.org/. Ipset представляет из себя модуль ядра и утилиту для настройки, поэтому работает все быстро и переваривает огромные списки правил. В iptables при этом добавляется только одно правило.

Дальше я расскажу, как установить и настроить ipset. Работать будем на сервере CentOS 7. В других дистрибутивах никаких отличий не будет, за исключением установки и запуска модуля ядра.

Установка ipset

Для установки ничего особенного не требуется. Устанавливаем ipset стандартным образом через yum.

Этого достаточно, можно приступать к настройке списка блокировки по странам.

Настройка блокировки доступа к сайту по странам

Дальше можно пойти двумя путями:

  1. Блокировать доступ определенным странам.
  2. Разрешить доступ списку стран, а от остальных закрыться.

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

Итак, у нас есть список ip адресов и подсетей, разделенных по странам. Списки очень большие, руками их обрабатывать не получится. Мы это дело автоматизируем, а пока пройдемся по теории. Разберемся с управлением списками в ipset. Для начала создадим список и назовем его — blacklist.

Этой командой я создал список blacklist типа nethash. Строго говоря, я создаю не список, а набор данных типа nethash. В данном случае это набор данных адресов подсетей. Именно в виде набора подсетей выглядят списки доступа стран по ip. Если у вас есть список ip адресов, то тип данных будет iphash. Более подробно о типах данных можно посмотреть в документации.

Добавим в наш список несколько подсетей.

Посмотрим содержимое списка blacklist.

Обращаю внимание на выделенные строки. Когда я создавал список стран для блокировки, он получился очень большой и не помещался весь в объект с дефолтными настройками. Их можно изменить таким образом:

Обратите внимание на занимаемую память. На маленьком VPS это может стать проблемой. В том числе из этих соображений я решил перейти к белому списку. Он существенно меньше, соответственно, меньше ресурсов тратится на его обработку.

Список мы создали, теперь его надо подключить в iptables. Для этого добавляем правило блокировки.

Смотрим, что получилось в правилах:

Все в порядке, правило добавили. Следите, чтобы запрещающее правило было первым и лишние подключения отваливались сразу. Давайте теперь на примере посмотрим, как организовать белый список. Создаем сам список.

Добавляем в него подсети.

Создаем правило в iptables, по которому к нашему серверу будут иметь доступ только адреса из списка. Сначала у меня стояли вот эти два правила, которые разрешают доступ к веб серверу всем.

Я их изменил на следующие.

Принцип работы ipset рассмотрели. Теперь автоматизируем все и создадим полный список ip адресов по странам, которым будет разрешен доступ к сайту. Я для этого написал простенький скрипт. Привожу его с комментариями.

Запускаете скрипт, он скачивает и объединяет списки нужных вам стран, затем добавляет их в ipnet и в конце делает экспорт в файл. Посмотрите на этот файл. Список в нем должен совпадать с исходным списком, плюс несколько информационных строк в самом начале. На этом все. Если вы добавили правила в iptables, ограничение доступа по ip уже начало работать.

Заключение

Я проверил на своем сайте. Способ простой и очень эффективный. Все лишние боты отваливаются на моменте подключения к серверу. Не нагружают сервер и не портят статистику. Если кто-то знает еще эффективные способы борьбы с нежелательными посетителями, прошу поделиться в комментариях. Когда нашествие ботов прекратилось, запреты убрал.

Этот способ хорош только как временная мера. Постоянно его нельзя использовать, так как часть пользователей все же не сможет попасть к вам на сайт. Но если у вас какой-то специфичный сервис, к которому точно не нужен доступ, к примеру, из Китая, можете воспользоваться описанным мной методом.

Полезную информацию по защите сайта от ботов можно посмотреть в моих статьях на тему настройки fail2ban:

Онлайн курс «DevOps практики и инструменты»

Помогла статья? Подписывайся на telegram канал автора

Автор Zerox

13 комментариев

Подскажите очень жду

iptables -A INPUT -m set —match-set blacklist src -j DROP
iptables v1.8.2 (nf_tables): Set blacklist doesn’t exist.

Try `iptables -h’ or ‘iptables —help’ for more information.

Разобрался будет так
———————————
ipset create blacklist hash:ip

ipset add blacklist 223.0.0.0/8
ipset add blacklist 222.0.0.0/8
ipset add blacklist 221.0.0.0/8
ipset add blacklist 220.0.0.0/8
ipset add blacklist 219.0.0.0/8
ipset add blacklist 218.0.0.0/8
ipset add blacklist 212.129.50.0/24
ipset add blacklist 211.0.0.0/8
ipset add blacklist 210.0.0.0/8
ipset add blacklist 209.126.96.0/24
ipset add blacklist 203.0.0.0/8
ipset add blacklist 202.0.0.0/8
ipset add blacklist 201.0.0.0/8
ipset add blacklist 200.0.0.0/8
ipset add blacklist 198.0.0.0/8
ipset add blacklist 197.0.0.0/8
ipset add blacklist 196.0.0.0/8
ipset add blacklist 195.158.128.0/24
ipset add blacklist 195.154.146.0/24
ipset add blacklist 195.154.214.0/24
ipset add blacklist 192.228.100.0/24
ipset add blacklist 191.0.0.0/8
ipset add blacklist 190.0.0.0/8
ipset add blacklist 189.0.0.0/8
ipset add blacklist 188.227.170.0/24
ipset add blacklist 188.214.128.0/24
ipset add blacklist 187.0.0.0/8
ipset add blacklist 186.0.0.0/8
ipset add blacklist 185.107.94.0/24
ipset add blacklist 185.53.88.0/24
ipset add blacklist 183.0.0.0/8
ipset add blacklist 182.0.0.0/8
ipset add blacklist 181.0.0.0/8
ipset add blacklist 180.0.0.0/8
ipset add blacklist 179.0.0.0/8
ipset add blacklist 177.0.0.0/8
ipset add blacklist 175.0.0.0/8
ipset add blacklist 171.0.0.0/8
ipset add blacklist 163.0.0.0/8
ipset add blacklist 162.144.83.0/24
ipset add blacklist 156.96.150.0/24
ipset add blacklist 154.0.0.0/8
ipset add blacklist 153.0.0.0/8
ipset add blacklist 150.0.0.0/8
ipset add blacklist 133.0.0.0/8
ipset add blacklist 126.0.0.0/8
ipset add blacklist 125.0.0.0/8
ipset add blacklist 124.0.0.0/8
ipset add blacklist 123.0.0.0/8
ipset add blacklist 122.0.0.0/8
ipset add blacklist 121.0.0.0/8
ipset add blacklist 120.0.0.0/8
ipset add blacklist 119.0.0.0/8
ipset add blacklist 118.0.0.0/8
ipset add blacklist 117.0.0.0/8
ipset add blacklist 116.0.0.0/8
ipset add blacklist 115.0.0.0/8
ipset add blacklist 114.0.0.0/8
ipset add blacklist 113.0.0.0/8
ipset add blacklist 112.0.0.0/8
ipset add blacklist 111.0.0.0/8
ipset add blacklist 110.0.0.0/8
ipset add blacklist 107.150.32.0/24
ipset add blacklist 106.0.0.0/8
ipset add blacklist 105.0.0.0/8
ipset add blacklist 103.0.0.0/8
ipset add blacklist 102.0.0.0/8
ipset add blacklist 101.0.0.0/8
ipset add blacklist 94.26.121.0/24
ipset add blacklist 89.163.224.0/24
ipset add blacklist 88.150.253.0/24
ipset add blacklist 85.25.235.245
ipset add blacklist 85.25.220.0/24
ipset add blacklist 85.25.216.0/24
ipset add blacklist 85.25.213.0/24
ipset add blacklist 85.25.214.0/24
ipset add blacklist 80.84.55.0/24
ipset add blacklist 77.247.109.0/24
ipset add blacklist 77.247.110.0/24
ipset add blacklist 74.208.101.0/24
ipset add blacklist 74.208.0.0/16
ipset add blacklist 63.141.248.0/24
ipset add blacklist 62.210.0.0/16
ipset add blacklist 54.38.152.0/24
ipset add blacklist 49.0.0.0/8
ipset add blacklist 46.166.142.0/24
ipset add blacklist 46.166.187.0/24
ipset add blacklist 45.143.220.0/24
ipset add blacklist 45.0.0.0/8
ipset add blacklist 37.75.208.0/24
ipset add blacklist 37.49.231.0/24
ipset add blacklist 37.49.230.0/24
ipset add blacklist 37.49.229.0/24
ipset add blacklist 37.49.0.0/16
ipset add blacklist 37.8.13.0/24
ipset add blacklist 35.0.0.0/8
ipset add blacklist 34.0.0.0/8
ipset add blacklist 33.0.0.0/8
ipset add blacklist 30.0.0.0/8
ipset add blacklist 23.0.0.0/8
ipset add blacklist 12.0.0.0/8
ipset add blacklist 1.0.0.0/8

iptables -I INPUT -m set —match-set blacklist src -j DROP

Источник

Оцените статью