iptables: Как настроить брандмауэр Linux для защиты вашего сервера

iptables: как настроить брандмауэр Linux

iptables - это брандмауэр используется на Linuxна основе операционных систем. Хотя в последние годы у нас по умолчанию устанавливается nftables, вы все еще можете использовать синтаксис iptables для настройки брандмауэра в нашей операционной системе, такой как Debian, Ubuntu и даже брандмауэр роутера, если он на базе линукса. Знание iptables очень важно для защиты нашей локальной сети от вторжений, потому что iptables даст нам возможность разрешить или запретить трафик, который мы хотим. Сегодня в этой статье мы объясним, как работает iptables, и приведем расширенные примеры использования.

Основные возможности iptables

iptables — это программное обеспечение, которое отвечает за работу в качестве брандмауэра или брандмауэра в нашей сети. Это очень важная часть операционных систем, и она специально разработана для разрешения авторизованного доступа и блокировки несанкционированного доступа. Брандмауэр устанавливает точку контроля как входящих, так и исходящих пакетов. Кроме того, очень важно указать, что брандмауэр защищает от трафика, проходящего через разные сети, но не защищает локальную сеть от атак, происходящих в пределах одной подсети. .

iptables — это брандмауэр, включенный в системы Linux, начиная с версии 2.4, поэтому он встроен по умолчанию в такие системы, как Debian, Ubuntu, Linux Mint и многие другие, хотя в настоящее время nftables используется внутри страны, поскольку iptables считается старым, хотя сегодня iptables по-прежнему широко используется в мире системного администрирования Linux, а также в мире сетевого администрирования.

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

Как только мы узнаем основные характеристики, мы собираемся показать вам работу и архитектуру этого брандмауэра.

Работа и архитектура

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

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

По умолчанию у нас всего четыре таблицы:

  • таблица фильтров : это таблица по умолчанию, если мы не определим таблицу для добавления правила, она всегда будет идти в таблицу фильтров. В этой таблице у нас есть всего три цепочки по умолчанию, в зависимости от того, что нас интересует, мы должны будем использовать ту или иную цепочку: ВХОД (это пакеты в входящем направлении, к самому брандмауэру), ВЫХОД (это исходящие пакеты с сервера) и FORWARD (используется для фильтрации пакетов, идущих от одного сетевого интерфейса к другому).
  • натуральный таблица: эта таблица отвечает за выполнение NAT, преобразование частного IP-адреса в общедоступный и наоборот. Внутри NAT у нас есть три цепочки: PREROUTING (изменение пакетов перед их маршрутизацией, здесь выполняется DNAT или перенаправление портов), POSTROUTING (изменение пакетов после их маршрутизации, здесь выполняется SNAT или MASQUERADE) и OUTPUT (пакеты, генерируемые брандмауэром, который настроен NAT пройдет).
  • Калечить таблица: эта таблица отвечает за изменение пакетов, здесь настраивается QoS для качества обслуживания, изменения заголовков TCP и т. д. В этой таблице у нас есть пять цепочек: PREROUTING, INPUT, FORWARD, OUTPUT, POSTROUTING.
  • сырье таблица — эта таблица используется нечасто, поскольку пакеты перемещаются без состояния соединения. У нас есть цепочка PREROUTING и OUTPUT.

На следующем изображении вы можете увидеть небольшую сводку цепочек, которые у нас есть в разных таблицах:

Операция при добавлении правила выглядит следующим образом:

  • Правила, которые мы добавляем в цепочки, всегда имеют цель (-j в правиле).
  • Когда брандмауэр получает пакет, он проверяет, соответствует ли пакет заданному нами правилу. Если оно совпадает, выполняется целевая команда, в противном случае выполняется переход к следующему правилу до конца цепочки.
  • Правила проверяются в последовательном порядке, от первого правила к последнему. Порядок очень важен, если мы сначала заблокируем все, а потом разрешим что-то более конкретное, мы заблокируем весь трафик и самое конкретное правило не будет проверяться.
  • В случае, если ни одно правило не удовлетворяет пакет, то будет использована политика цепочки, которая у нас есть (глобальное правило).

Цели различных правил заключаются в следующем:

  • ПРИНЯТЬ: принимает пакет и передает его на следующий уровень, веб-сервер, SSH, FTP и т. д.
  • DROP: блокирует пакет и не передает его на следующий уровень.
  • QUEUE: это специальная цель, которая передает пакет в очередь, предназначенную для обработки пространства пользователя. Это можно использовать для запуска других внешних программ.
  • ВОЗВРАТ: имеет тот же эффект, как если бы мы достигли конца цепочки. Если правило было в одной из цепочек по умолчанию, то выполняется политика цепочки. Выход из правила, находящегося в определенной пользователем цепочке, продолжается по цепочке до перехода сразу после правила, с которым был выполнен переход.

Как только мы узнаем, как он работает и его архитектуру, мы увидим разные команды для выполнения разных действий.

 

Основные команды для использования iptables

Первое, что мы должны учитывать при настройке этого брандмауэра, это то, что нам нужны права суперпользователя для выполнения различных заказов. Им обязательно нужно бежать, иначе ничего не получится. Следующие команды не имеют «sudo», потому что мы предполагаем, что вы уже являетесь суперпользователем (sudo su).

В последних версиях Linux невозможно остановить службу iptables, чтобы разрешить весь сетевой трафик и оставить брандмауэр с параметрами по умолчанию, мы должны выполнить следующие команды:

  • судо iptables-F
  • судо iptables-X
  • sudo iptables -t nat -F
  • sudo iptables -t nat -X
  • sudo iptables -t mangle -F
  • sudo iptables -t mangle -X
  • sudo iptables -P ВВОД ПРИНЯТЬ
  • sudo iptables -P ПЕРЕДАТЬ ПРИНЯТЬ
  • sudo iptables -P ВЫВОД ПРИНЯТЬ

Как только мы это сделаем, у нас будет «сброс» брандмауэра, и все будет разрешено. Теперь, когда мы знаем, как его сбросить, давайте посмотрим на различные команды.

 

Посмотреть текущие таблицы

Если вы хотите увидеть содержимое различных цепочек и правил, которые у нас есть в определенной таблице, вы можете увидеть, как они будут выглядеть:

  • iptables -t фильтр –список
  • iptables -t mangle –список
  • iptables -t nat –список
  • iptables -t необработанный –список

 

Основные аргументы и для чего они нужны

  • -t, --table таблица Выбираем нужную таблицу
  • -A, --append chain rule-specification Добавляем новое правило в определенную цепочку
  • -C, --check chain rule-спецификация Проверяем наличие определенного правила в определенной цепочке
  • -D, --delete chain rule-спецификация Удаляем правило, которое мы поставили в определенную цепочку
  • -D, --delete chain rulenum Удаляем номер правила X в определенной цепочке
  • -I, --insert chain [rulenum] правило-спецификация Вставляем новую цепочку с номером в некую таблицу
  • -R, --replace chain rulenum спецификация правила Заменяет заданную цепочку в таблице, используемую для перемещения числа.
  • -L, --list [цепочка] Показать список правил цепочки
  • -F, --flush [цепочка] Сбросить все правила из заданной цепочки.
  • -Z, –zero [цепочка [руленум]] Устанавливает счетчики данного правила в 0.
  • -N, --new-chain chain Создаем новую цепочку в некоторой таблице
  • -X, --delete-chain [цепочка] Удаляем определенную цепочку (пустую) в определенной таблице
  • -P, --policy chain target Применяем политику по умолчанию, она выполняется, когда не выполняется ни одно правило цепочек.
  • -E, --rename-chain old-chain new-chain Переименовать ранее добавленную цепочку
  • -h, показать помощь
  • -v, –verbose Вывод используется вместе с –L для отображения большего количества информации, чем предоставляет команда –L.
  • -n, –числовые IP-адреса и номера портов будут отображаться как числа. Например, если мы фильтруем порт 80, с типичным –L появится www, а не 80.
  • -x, –exact Показать точное значение счетчика пакетов и байтов вместо использования K, M или G для значений.
  • --line-numbers При отображении списка правил будет показан точный номер правила. Идеально подходит для использования -D и числа (удалить) или -I для введения до или после указанного правила.

 

Основные условия

  • -p , – протокол протокола. Фильтровать пакет по протоколу, указанный протокол может быть: tcp, udp, Idplite, icmp, esp, ah, sctp.
  • -s , --source address[/mask][,…] Исходный IP-адрес пакета. У нас может быть IP или подсеть (с указанием маски в формате CIDR). Мы также можем указать имена хостов (домены, веб-сайты и т. д.), но это плохая идея, потому что это неэффективно. Можно указать несколько исходных адресов (192.168.1.1,192.168.1.2), но для их удовлетворения будут созданы разные правила.
  • -d , --destination address[/mask][,…] IP-адрес назначения пакета. Он ведет себя точно так же, как -s.
  • -m , – спичка спичка. Указывает, хотим ли мы вызывать расширенные модули iptables для выполнения определенных действий, таких как:
    • Поместите несколько портов источника и назначения (многопортовый модуль).
    • Соединения управления (модуль conntrack).
    • Избегайте грубой силы (последний модуль, идеально подходящий для SSH).
    • Ограничьте количество подключений (по модулю limit и connlimit).
    • Диапазон IP-адресов (iprange).
  • -j , – цель для прыжка. Указывает цель правила, если мы хотим принять, отклонить и даже переслать пакет в другую цепочку для дальнейшей обработки. Всегда в любом правиле у нас будет -j, чтобы сказать ему, что мы хотим сделать. Если мы не добавим -j, правило будет добавлено и будет считать пакеты, но ничего не сделает. Если мы используем -j для переадресации в другую цепочку, как только другая цепочка завершится, она вернется к исходной.
  • -g , --goto цепочка. Он используется для перенаправления трафика в другую цепочку, но, в отличие от прыжка, он не вернется в исходную цепочку, откуда пришел.
  • -i , – имя в интерфейсе. Имя интерфейса, через который принимается пакет. Он работает только для входных строк, таких как INPUT, FORWARD и PREROUTING. Если ставим значит все кроме этого интерфейса. Если мы поставим + в конце имени, любой интерфейс с началом имени возьмет его для проверки. Давайте представим eth0, eth1 и eth2. Если мы хотим поставить все три, достаточно просто поставить eth+.
  • -o , – имя внешнего интерфейса. Имя интерфейса, через который уходит пакет. Это допустимо только для выходных строк, таких как OUTPUT, FORWARD и POSTROUTING.

 

Условия только если вы используете TCP или UDP

Если вы используете протокол TCP или UDP, вы можете захотеть отфильтровать по номеру порта источника и/или назначения, тогда у вас есть два аргумента, которые вы можете использовать:

  • –спорт –порт-источник. Выберите исходные порты, чтобы разрешить или запретить. Если мы используем ! исключает.
  • –dport –порт-назначения. Выберите порты назначения, чтобы разрешить или запретить. Если мы используем ! исключает.

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

 

Установить политику по умолчанию

Политики используются таким образом, что если правило не найдено в цепочке, выполняется политика по умолчанию. Политика по умолчанию для всех цепочек — ACCEPT, но есть два варианта: ACCEPT или DROP.

-P, – цель цепочки политик

Примеры:

  • iptables -P ПАДЕНИЕ ВВОДА
  • iptables -P УДАЛЕНИЕ ВПЕРЕД
  • iptables -P ВЫХОДНОЕ УДАЛЕНИЕ

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

Ниже вы можете увидеть все политики, которые у нас есть в разных таблицах:

  • iptables -t filter -P (ВВОД | ВЫВОД | ВПЕРЕД) (ПРИНЯТЬ | УДАЛИТЬ)
  • iptables -P (ВВОД | ВЫВОД | ВПЕРЕД) (ПРИНЯТЬ | УДАЛИТЬ)
  • iptables -t mangle -P (ВВОД | ВЫВОД | ВПЕРЕД | ПРЕДВАРИТЕЛЬНАЯ МАРШРУТИЗАЦИЯ | ОТПРАВКА) (ПРИНЯТЬ | УДАЛИТЬ)

 

Просмотр состояния брандмауэра

Параметр -L показывает правила, которые мы настроили. V позволяет вам получить больше информации о соединениях, а N возвращает IP-адреса и соответствующие им порты, не проходя через DNS сервера.

  • iptables -L -n -v

Это одна из самых важных команд для просмотра состояния брандмауэра.

 

Модули (-m совпадение) iptables

 

многопортовый

Это расширение iptables, которое дает нам возможность группировать похожие правила с разными портами TCP и UDP в одно. Мультипорт позволяет поставить несколько портов пропускаемыми, а также несколько портов подряд, максимум 15 аргументов портов. Пример:

  • iptables –A INPUT –p tcp –m multiport –dports 80,81,1000:1200 –j ACCEPT

Благодаря этому модулю у нас есть возможность использовать несколько портов в одном правиле.

 

iprange

iprange позволяет нам сразу указать несколько IP-адресов источника или получателя без необходимости устанавливать десятки правил. Это также позволяет вам указать IP-адрес источника и получателя, синтаксис выглядит следующим образом:

  • [!]–src-диапазон ip-ip
  • [!]–dst-диапазон ip-ip

Действие этого правила довольно простое, мы просто ставим начальный IP и конечный IP.

 

Ограничивать

Модуль connlimit отвечает за ограничение количества одновременных подключений по IP-адресу, он идеально подходит для ограничения количества подключений во избежание DoS.

  • –connlimit-до n . Мы проверяем, равно ли количество соединений N или меньше (тогда мы можем разрешить или запретить).
  • –connlimit-выше n . Мы проверяем, больше ли количество подключений, чем N (тогда мы можем разрешить или запретить).
  • –connlimit-mask длина_префикса . Отмечаем по диапазону подсети (это то же самое, что хост делает 2 соединения, два хоста в одной подсети делают по 1 соединению каждый).
  • –connlimit-saddr . Примените ограничение к исходной группе, это значение по умолчанию, если ничего не указано.
  • --connlimit-daddr . Применяет ограничение к целевой группе.

Например, предположим, что мы хотим разрешить только два соединения SSH для каждого клиента:

  • iptables -A INPUT -p tcp –dport 22 -m connlimit –connlimit-выше 2 -j DROP

Однако мы можем сделать дополнительное правило, поставив принимать до 2 соединений.

 

трассировщика

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

  • INVALID: полученный пакет недействителен и не принадлежит ни одному соединению.
  • NEW: новые соединения, которые установлены или связаны с соединением, которое еще не является двунаправленным.
  • УСТАНОВЛЕНО: Установленные соединения, сначала они проходят через НОВОЕ, так как получили ответ
  • СВЯЗАННЫЙ: Пакет, который связан с существующим соединением, но не является его частью, например, пассивный FTP.

Давайте представим, что мы хотим получить доступ к какому-либо сайту, однако мы не хотим, чтобы абсолютно никто не заходил к нам.

  • iptables –P ВХОД DROP
  • iptables -A INPUT -m conntrack –ctstate ESTABLISHED, RELATED -j ACCEPT

 

Ограничивать

Модуль limit позволяет нам ограничить как трафик, так и количество журналов для записи в системный журнал при попытках подключения. У него есть два основных аргумента:

  • – предел Н. Этот аргумент указывает максимально допустимое среднее количество совпадений в секунду (N/s), минуту (N/m), час (N/h) или день (N/d). N указывает число
  • – лимит-всплеск N . Указывает самый длинный пакет, который может произойти до проверки лимита –limit.

Значение по умолчанию, если ничего не указано, составляет 3 совпадения в час, пакетами по 5. Представьте себе следующее правило: «iptables -A INPUT -m limit -j LOG», операция выглядит следующим образом:

  • При первом срабатывании этого правила регистрируются первые пять пакетов.
  • После этого пройдет двадцать минут, прежде чем пакет будет перерегистрирован с этим правилом (3 совпадения между 60 минутами равны 20 минутам, поскольку это СРЕДНЕЕ значение).
  • Кроме того, каждые двадцать минут, в течение которых пакет не достигает правила, пакет извлекает пакет.
  • Если в течение 100 минут ничего не происходит, заряд перезарядится полностью; затем вернуться к исходной ситуации.

 

недавний

Недавний модуль используется для ограничения количества подключений в секунду на уровне IP, это идеально подходит для защиты от атак на SSH-порт, поскольку злоумышленник попытается ввести несколько паролей. Например, если мы хотим защитить наш SSH, мы можем запустить следующее правило:

  • iptables -A INPUT -p tcp –dport 22 -m conntrack –ctstate NEW -m недавние –set –name ssh –rsource
  • iptables -A INPUT -p tcp –dport 22 -m state –state NEW -m недавние –rcheck –seconds 60 –hitcount 4 –name ssh –rsource -j DROP

Это правило допускает только четыре попытки подключения в течение 60 секунд, это «скользящее» окно.

 

NAT

Этот брандмауэр также отвечает за преобразование NAT в наше соединение. Чтобы сделать NAT нашего общедоступного IP (или интерфейса, который имеет этот общедоступный IP), мы должны поставить:

  • Статический SNAT: iptables -t nat -A POSTROUTING -s 192.168.1.0/24 –o eth1 -j SNAT –to IP_eth1
  • Динамический SNAT: iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o eth1 -j MASQUERADE

Обычным делом является использование MASQUERADE для выполнения NAT независимо от IP-адреса физического или логического интерфейса.

Чтобы открыть порты, мы должны добавить правило в цепочку PREROUTING таблицы NAT.

  • iptables -t nat -A PREROUTING -i eth1 -p tcp –dport 22 -j DNAT –назначение 192.168.1.1

Таблица PREROUTING также позволяет нам изменять порты на лету, так что если мы получаем пакеты на порт 2121, мы можем преобразовать его в 21.

  • iptables -t nat -A PREROUTING -i eth1 -p tcp –dport 2121 -j DNAT –назначение 192.168.1.1:21

Как только мы подробно узнаем об этом брандмауэре, мы увидим основные примеры использования, а также самые продвинутые.

 

Основные примеры использования

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

Заблокируйте IP-адрес 192.168.1.10 от любой связи с нашим сервером:

  • iptables -A INPUT –s 192.168.1.10 –j DROP

Заблокировать IP-адреса 192.168.1.20, 192.168.1.30, 192.168.1.40, 192.168.1.50 от любого соединения с нашим сервером:

  • iptables -A INPUT –s 192.168.1.20,192.168.1.30,192.168.1.40,192.168.1.50 –j DROP

Заблокируйте всю подсеть 192.168.2.0/24 от любого соединения с нашим сервером, за исключением IP-адреса 192.168.2.20, который будет разрешен:

  • iptables –A ВВОД –s 192.168.2.20 –j ПРИНЯТЬ
  • iptables –A INPUT –s 192.168.2.0/24 –j DROP

Заблокируйте IP-адрес 192.168.4.50, чтобы мы не могли общаться:

  • iptables –A ВЫВОД –d 192.168.4.50 –j DROP

Заблокируйте IP-адреса 192.168.4.51 и 192.168.4.52, чтобы мы не могли общаться:

  • iptables –A ВЫВОД –d 192.168.4.51,192.168.4.52 –j DROP

Заблокируйте доступ к www.google.es из iptables:

  • iptables –A ВЫВОД –d www.google.es –j DROP

Хотим запретить доступ к нашему серверу с MAC 00:01:02:03:04:05, а остальным разрешить всё:

  • iptables -A INPUT -m mac –mac-источник 00:01:02:03:04:05 -j DROP

Мы хотим разрешить доступ к нашему серверу с MAC-адресом MAC 00:01:02:03:04:06, а остальные все запрещают:

  • iptables -A INPUT -m mac –mac-source 00:01:02:03:04:05 -j ПРИНЯТЬ
    iptables -A ВВОД -j DROP

Заблокируйте IP-адрес 192.168.1.10 для проверки связи с нашего нашего сервера:

  • iptables -A INPUT -s 192.168.1.10 -p icmp -j DROP

Заблокировать IP-адреса 192.168.1.20, 192.168.1.30, 192.168.1.40, 192.168.1.50 от проверки связи с нашим сервером (в одном правиле):

  • iptables -A INPUT -s 192.168.1.20,192.168.1.30,192.168.1.40,192.168.1.50 -p icmp -j DROP

Заблокируйте всю подсеть 192.168.2.0/24, чтобы они не пинговали наш сервер, кроме IP-адреса 192.168.2.20, который был бы разрешен:

  • iptables -A INPUT -s 192.168.2.20 -p icmp -j ПРИНЯТЬ
    iptables -A INPUT -s 192.168.2.0/24 -p icmp -j DROP

Заблокируйте IP-адрес 192.168.4.50, чтобы мы не могли его пропинговать.

  • iptables -A ВЫВОД -d 192.168.4.50 -p icmp -j DROP

Заблокируйте IP-адреса 192.168.4.51 и 192.168.4.52, чтобы мы не могли их пропинговать.

  • iptables -A ВЫВОД -d 192.168.4.51,192.168.4.52 -p icmp -j DROP

Заблокировать доступ к www.google.es из iptables.

  • iptables -A ВЫВОД -d www.google.es -p icmp -j DROP

Как видите, операция довольно проста с правилами, основанными на IP-адресе с отправной точкой и пунктом назначения. Мы также можем использовать модуль iprange для настройки диапазона IP-адресов:

Заблокируйте диапазон IP-адресов от 192.168.5.1 до 192.168.5.50, чтобы они не могли пинговаться с нашего сервера.

  • iptables -A ВЫВОД -m iprange –dst-range 192.168.5.1-192.168.5.50 -p icmp -j DROP

Мы также можем фильтровать протокол ICMP более продвинутым способом. Давайте представим, что у нас есть пользователь, который хочет иметь возможность пинговать любой хост, но не хочет, чтобы НИКТО не мог пинговать его. Как мы можем сделать это с iptables, если сам PING имеет двунаправленную связь?

  • iptables -A INPUT -s IP -p icmp –icmp-type эхо-запрос -j DROP

Заблокировать любой входящий доступ через интерфейс eth0 (только), тем самым разрешив доступ eth1.

  • iptables -A ВВОД -i eth0 -j DROP
  • iptables -A ВВОД -i eth1 -j ПРИНЯТЬ

Заблокировать исходящий трафик на интерфейсе eth0 (только), тем самым разрешив доступ к eth1.

  • iptables -A ВЫВОД -o eth0 -j DROP
  • iptables -A ВЫВОД -o eth1 -j ПРИНЯТЬ

Разрешить любой входящий и исходящий трафик на eth0 и запретить любой входящий или исходящий трафик на eth1.

  • iptables -A ВВОД -i eth0 -j ПРИНЯТЬ
  • iptables -A ВЫВОД -o eth0 -j ПРИНЯТЬ
  • iptables -A ВВОД -i eth1 -j DROP
  • iptables -A ВЫВОД -o eth1 -j DROP

Если вы хотите увидеть, как работают протоколы TCP и UDP, вот несколько примеров:

Заблокируйте веб-доступ к www.google.es и разрешите все остальное (например, ping).

  • iptables -A ВЫВОД -d www.google.es -p tcp –dport 80 -j DROP

Заблокируйте FTP-доступ к любому IP-адресу или домену и разрешите все остальное.

  • iptables -A ВЫВОД -p tcp –dport 21 -j DROP

Заблокируйте SSH-доступ к IP 192.168.1.50 и разрешите все остальное.

  • iptables -A ВЫВОД -d 192.168.1.50 -p tcp –dport 22 -j DROP

Заблокируйте доступ Telnet к подсети 192.168.2.0 и разрешите все остальное.

  • iptables -A ВЫВОД -d 192.168.2.0/24 -p tcp –dport 23 -j DROP

Заблокируйте 192.168.1.50 доступ к нашему веб-серверу.

  • iptables -A INPUT -s 192.168.1.50 -p tcp –dport 80 -j DROP

Заблокируйте 192.168.1.150 и 192.168.1.151 доступ к нашему SSH-серверу.

  • iptables -A INPUT -s 192.168.1.150,192.168.1.151 -p tcp –dport 22 -j DROP

Заблокировать доступ всей подсети 192.168.2.0/24 к нашему телнет-сервису

  • iptables -A INPUT -s 192.168.2.0/24 -p tcp –dport 23 -j DROP

Заблокируйте всем доступ к серверу OpenVPN, кроме разрешенного IP-адреса 77.77.77.77.

  • iptables -A INPUT -s 77.77.77.77 -p tcp –dport 1194 -j ПРИНЯТЬ
  • iptables -A INPUT -p tcp –dport 1194 -j DROP

Заблокируйте доступ DNS к 8.8.8.8 и разрешите все остальное (например, ping).

  • iptables -A ВЫВОД -d 8.8.8.8 -p tcp –dport 53 -j DROP
  • iptables -A ВЫВОД -d 8.8.8.8 -p udp –dport 53 -j DROP

Заблокируйте доступ к порту 1194 для любого IP или домена и разрешите все остальное.

  • iptables -A INPUT -p udp –dport 1194 -j DROP

У нас есть DNS-сервер на нашем сервере. Мы хотим, чтобы только компьютеры в подсети 192.168.1.0/24 могли взаимодействовать с ней, и блокировать любой другой доступ.

  • iptables -A INPUT -s 192.168.1.0/24 -p tcp –dport 53 -j ПРИНЯТЬ
  • iptables -A INPUT -s 192.168.1.0/24 -p udp –dport 53 -j ПРИНЯТЬ
  • iptables -A INPUT -p tcp –dport 53 -j DROP
  • iptables -A INPUT -p udp –dport 53 -j DROP

Заблокировать доступ к нашему веб-серверу из диапазона IP-адресов 192.168.100.0/24, исходящий с интерфейса eth0.

  • iptables -A INPUT -s 192.168.100.0/24 -i eth0 -p tcp –dport 80 -j DROP

Заблокируем доступ к нашему ssh серверу, из диапазона IP 192.168.100.0/24, идущих с интерфейса eth1.

  • iptables -A INPUT -s 192.168.100.0/24 -i eth1 -p tcp –dport 22 -j DROP

 

Расширенные примеры использования

Если вы хотите узнать больше об iptables, вот несколько примеров, где мы используем модуль connlimit.

Разрешить только 10 подключений Telnet для каждого клиента.

  • iptables -A INPUT -p tcp –dport 23 -m connlimit –connlimit-выше 10 –connlimit-mask 32 -j DROP

Запретить подключение до номера 5 в сети, сделанное клиентом (это не имеет особого смысла, но это пример).

  • iptables -A INPUT -p tcp –dport 80 -m connlimit –connlimit-upto 5 –connlimit-mask 32 -j DROP

Разрешить только 10 подключений Telnet на клиента (сделайте это иначе, чем указано выше).

  • iptables -A INPUT -p tcp –dport 23 -m connlimit –connlimit-upto 10 –connlimit-mask 32 -j ПРИНЯТЬ
  • iptables -A INPUT -p tcp –dport 23 -j DROP

Разрешить только 10 веб-соединений в диапазоне IP-адресов 10.0.0.0/8 и запретить, если оно превышает это число.

  • iptables -A INPUT -s 10.0.0.0/8 -p tcp –dport 80 -m connlimit –connlimit-выше 10 –connlimit-mask 8 -j DROP

Разрешить только 20 HTTP-соединений для каждого клиента, как только это превышено, мы отправляем сброс TCP.

  • iptables -A INPUT -p tcp –dport 80 -m connlimit –connlimit-выше 20 –connlimit-mask 32 -j REJECT –reject-with-tcp-reset

Или так:

  • iptables -A INPUT -p tcp –syn –dport 80 -m connlimit –connlimit-выше 20 –connlimit-mask 32 -j REJECT –reject-with tcp-reset

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