Где хранятся правила iptables ubuntu

Обновлено: 05.07.2024

Iptables — это брандмауэр, который играет важную роль в обеспечении сетевой безопасности большинства систем Linux. Хотя многие руководства по работе с Iptables научат вас создавать правила брандмауэра для обеспечения безопасности вашего сервера, в этом руководстве мы будем уделять особое внимание другому аспекту управления брандмауэром: вывод списка и удаление правил.

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

  • Вывод списка правил
  • Очистка счетчиков пакетов и байтов
  • Удаление правил
  • Сброс цепочек (удаление всех правил в цепочке)
  • Сброс всех цепочек и таблиц, удаление всех цепочек и прием любого трафика

Примечание: при работе с брандмауэрами необходимо следить за тем, чтобы не заблокировать собственный доступ к серверу, запретив подключение по SSH (по умолчанию в этих целях используется порт 22). При потере доступа из-за настроек брандмауэра вам может потребоваться подключение к серверу через внеполосную консоль для восстановления доступа.

Предварительные требования

Это учебное руководство предполагает использование сервера Linux с установленной командой iptables и наличие у пользователя привилегий sudo .

Если вам нужна помощь с данной начальной настройкой, воспользуйтесь нашим руководством по начальной настройке сервера Ubuntu 20.04. Вы также можете воспользоваться руководствами для Debian и CentOS

Давайте сначала рассмотрим, как просмотреть существующий список правил. Существует два различных способа просмотра действующих правил Iptables: в форме таблицы или списка спецификаций правил. Оба метода предоставляют приблизительно одну и ту же информацию в разных форматах.

Перечисление правил по спецификации

Чтобы перечислить все действующие правила Iptables, запустите команду iptables с опцией -S :

Как вы видите, вывод выглядит примерно так, как и команды, которые использовались для их создания, но не имеют команды iptables в начале. Также вывод будет напоминать файлы конфигурации правил Iptables, если вы когда-либо использовали iptables-persistent или iptables save .

Перечисление списка правил конкретной цепочки

Если вы хотите ограничить вывод конкретной цепочкой ( INPUT , OUTPUT , TCP и т. д.), вы можете указать название цепочки сразу после опции -S . Например, для отображения всех спецификаций правил в цепочке TCP необходимо запустить следующую команду:

Теперь давайте рассмотрим альтернативный способ просмотра действующих правил Iptables в форме таблицы правил.

Перечисление правил в виде таблицы

Перечисление правил Iptables в виде таблицы может быть полезным при сопоставлении разных правил друг с другом.

Чтобы вывести все действующие правила Iptables в виде таблицы, запустите команду iptables с опцией -L :

Эта команда будет выводить все действующие правила, отсортированные по цепочкам.

Если вы хотите ограничить вывод конкретной цепочкой ( INPUT , OUTPUT , TCP и т. д.), вы можете указать название цепочки сразу после опции -L .

Давайте рассмотрим пример цепочки INPUT:

Первая строка вывода указывает имя цепочки (в данном случае INPUT ), за которым следует используемая по умолчанию политика ( DROP ). Следующая строка состоит из заголовков каждого столбца таблицы, после чего идут правила цепочки. Давайте посмотрим, что означает каждый заголовок:

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

Отображение счетчиков пакетов и общего размера

При выводе списка правил Iptables также можно отобразить количество пакетов и общий размер пакетов (в байтах), которые отвечают каждому конкретному правилу. Это часто может быть полезно, когда вы пытаетесь получить приблизительное представление о том, какие правила используются для различных пакетов. Чтобы сделать это, воспользуйтесь опциями -L и -v в одной команде.

Например, давайте снова рассмотрим цепочку INPUT с опцией -v :

Обратите внимание, что список сейчас содержит два дополнительных столбца, pkts и bytes .

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

Сброс счетчиков пакетов и общего размера

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

Чтобы очистить счетчики для всех цепочек и правил, используйте опцию -Z отдельно:

Чтобы очистить счетчики для всех правил конкретной цепочки, используйте опцию -Z и укажите название цепочки. Например, для очистки счетчиков цепочки INPUT воспользуйтесь следующей командой:

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

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

Удаление правил по спецификации

Одним из способов удаления правил Iptables является удаление правила по спецификации. Для этого вам нужно запустить команду iptables с опцией -D , указав далее спецификацию правила. Если вы хотите удалить правила с помощью этого метода, вы можете использовать команду для вывода списка правил iptables -S в качестве источника полезной информации.

Например, если вы хотите удалить правило, которое отклоняет недействительные входящие пакеты ( -A INPUT -m conntrack --ctstate INVALID -j DROP ), запустите следующую команду:

Обратите внимание, что опция -A , используемая для обозначения положения правила в момент его создания, здесь не применяется.

Удаление правил по цепочке и номеру

Другой способ удаления правил Iptables состоит в использовании цепочки и номера строки. Чтобы определить номер строки правила, выведите список правил в формате таблицы и добавьте опцию --line-numbers :

Эта команда добавляет номер строки для каждой строки таблицы правил в столбце с заголовком num .

Когда вы знаете, какое правило нужно удалить, запомните цепочку и номер строки правила. Затем запустите команду iptables -D , указав далее цепочку и номер правила.

Например, если мы хотим удалить правило для входящего трафика, которое отклоняет недействительные пакеты, мы видим, что это правило с номером 3 в цепочке INPUT . Поэтому нам нужно запустить следующую команду:

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

Сброс цепочек

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

Примечание: будьте осторожны, чтобы не заблокировать собственный доступ к серверу через SSH в результате сброса цепочки с используемой по умолчанию политикой drop или deny . В этом случае вам может потребоваться подключение через консоль для восстановления доступа.

Сброс отдельной цепочки

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

Например, для удаления всех правил в цепочке INPUT запустите следующую команду:

Сброс всех цепочек

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

Сброс всех правил, удаление всех цепочек и разрешение любого трафика

Из этого раздела вы узнаете, как выполнить сброс всех правил брандмауэра, таблиц и цепочек, чтобы разрешить прием любого сетевого трафика.

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

Сначала задайте ACCEPT в качестве используемой по умолчанию политики для каждой встроенной цепочки. Главная причина этого шага состоит в том, чтобы гарантировать, что вы не заблокируете собственный доступ к вашему серверу через SSH:

Затем выполните сброс таблиц nat и mangle , сбросьте все цепочки ( -F ) и удалите все цепочки, не используемые по умолчанию ( -X ):

Теперь ваш брандмауэр будет принимать любой сетевой трафик. Если вы сейчас попробуете вывести список ваших правил, то увидите, что он пуст, и остались только три используемые по умолчанию цепочки ( INPUT , FORWARD и OUTPUT ).

Заключение

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

Не забывайте, что любые изменения, вносимые с помощью команды iptables , если их не сохранить, исчезнут после перезагрузки сервера. Данная информация описана в разделе «Сохранение правил» руководства «Распространенные правила и команды брандмауэра».

Рабочую копию правил Netfilter хранит в пространстве ядра linux. Ядро по умолчанию разрешает все подключения, что мы видим при выполнении команды iptables с опцией -L При этом все изменения правил, сделанные нами во время работы операционной системы, автоматически обычно никуда не сохраняются при выключении компьютера. Поэтому после очередного включения вы обнаруживаете, что настроенных правил опять нет и везде установлены политики по умолчанию - ACCEPT.

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

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

  • С помощью утилиты iptables-save и загружать их с помощью iptables-restore;
  • С помощью утилиты iptables-persistent (данный вариант возможен в операционных системах Debian и Ubuntu).

Сохранить правила можно в любую доступную директорию, но лучше, конечно, использовать для этого системную директорию, например, директорию для конфигурационных файлов /etc/ или под-папку в ней, например, /etc/iptables-conf/

Как сохранить правила iptables

Для сохранения правил межсетевого экрана Netfilter в linux можно использовать пакет iptables-save. Данный пакет записывает текущую конфигурацию в файл с указанным именем. Существуют две версии данного пакета:

  • iptables-save для протокола IPv4;
  • ip6tables-save для протокола IPv6.

Синтаксис команд одинаковый, поэтому мы рассмотрим вариант ipv4.

iptables-save [ -m modprobe ] [ -c ] [ -t таблица ] [ -f имя файла ]

  • -m modprobe: Указывает путь к программе modprobe. По умолчанию iptables-save проверяет /proc/sys/kernel/modprobe для определения пути к исполняемому файлу. modprobe - утилита управления модулями ядра. Существует несколько вариантов данной утилиты. Данный параметр можно проигнорировать;
  • -c: включает в поток вывода программы все счетчики количества переданных байтов и пакетов;
  • -t таблица: выводит в поток вывода только одну таблицу, которая была явно указана. При отсутствии флага выводит все таблицы настроек firewall;
  • -f имя файла: Указывает имя файла записи настроек. Если файл не указан, то вывод происходит в поток вывода на экран STDOUT.

В самом простом варианте команда будет выглядеть, например, следующим образом:

sudo iptables-save -f /etc/iptables-conf/iptables_rules.ipv4

Вы можете использовать свою папку, имя файла и расширение. Возможно использование другого синтаксиса данной команды:

sudo iptables-save > /etc/iptables-conf/iptables_rules2.ipv4

В данном варианте команды iptables-save выводит оформленные правила в поток вывода на экран STDOUT, который мы перенаправляем в указанный нами файл. Предварительно необходимо создать директорию /etc/iptables-conf/:

sudo mkdir /etc/iptables-conf/

Просмотреть содержимое каталога можно с помощью команды:

ls -la /etc/iptables-conf/


Как загрузить правила iptables

iptables-restore [ -chntvV ] [ -w секунды ] [ -W миллисекунды ] [ -M modprobe ] [ -T таблица ] [ имя файла ]

  • -c: восстанавливает значения всех счетчиков пакетов и байтов;
  • -n: позволяет не сбрасывать содержимое правил обновляемой таблицы правил iptables. Если не указан - все текущие правила обновляемой таблицы сбрасываются. Получается, что правила из файла дописываются в конец таблиц рабочей конфигурации, если указан этот параметр;
  • -t: происходит только сборка и тестирование набора правил из файла, без обновление рабочей таблицы правил iptables;
  • -v: выводит дополнительную отладочную информацию в течении восстановления набора правил;
  • -V: выводит номер версии программы;
  • -w секунды: дождаться монопольной блокировки фильтра пакетов ядра linux xtables. Применяется, чтобы предотвратить одновременное выполнение нескольких экземпляров утилиты. Опция заставляет ждать программу в течении некоторого времени возможности монопольной блокировки xtables;
  • -W миллисекунды: интервал ожидания для каждой попытки запуска пакета в монопольном режиме. Часто многие приложения системы критичны к времени запуска и выполнения, поэтому длительное ожидания для монопольной блокировки xtables часто является неприемлемым. Данный параметр в миллисекундах задает максимальное время такого ожидания. По умолчанию равно 1 секунде. Применяется только совместно с ключом -w;
  • -M modprobe: Указывает путь к программе modprobe. По умолчанию iptables-restore проверяет /proc/sys/kernel/modprobe для определения пути к исполняемому файлу. modprobe - утилита управления модулями ядра. Существует несколько вариантов данной утилиты. Данный параметр можно проигнорировать;
  • -T таблица: Восстанавливает только таблицу правил с указанным именем, даже если поток данных содержит другие таблицы;
  • имя файла: путь до файла с восстанавливаемыми таблицами правил в файловой системе

sudo iptables-restore -vV /etc/iptables-conf/iptables_rules.ipv4

Или вариант восстановления правил из файла без сброса содержимого текущих таблиц Netfilter:

sudo iptables-restore -nvV /etc/iptables-conf/iptables_rules.ipv4


Автозагрузка правил iptables

1. Загрузка правил с помощью скрипта

Сохраненные правила с помощью утилиты iptables-save можно восстанавливать с помощью скрипта, запускаемого при каждом запуске операционной системы. Для этого необходимо выполнить следующие действия:


Сохранить набор правил межсетевого экрана с помощью команды:

sudo iptables-save -f /etc/iptables-conf/iptables_rules.ipv4

Для запуска набора правил при старте операционной системы перед включением сетевого интерфейса мы создаем новый файл с помощью команды:

sudo vi /etc/network/if-pre-up.d/iptables

Заметим - в сети есть много вариантов места размещения скрипта на локальной машине, но я считаю именно размещение в папке if-pre-up.d наиболее верным, так как при этом скрипт будет выполнятся перед включением сетевого интерфейса. Добавляем в данный файл следующий скрипт:


Сохраняем файл iptables Ctrl+O. Выходим из editor Ctrl+X. Устанавливаем необходимые права для созданного файла:

sudo chmod +x /etc/network/if-pre-up.d/iptables

Перезагружаем компьютер и проверяем результат для таблицы filter с помощью команды:

sudo -t filter iptables -L

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

2. Автозагрузка правил iptables-persistent

По умолчанию данный пакет не установлен в операционной системе. Данный вариант реализации автозапуска конфигурации возможен в операционных системах Debian, Ubuntu. Для установки пакета требуется выполнить команду:

sudo apt-get install iptables-persistent

Этот пакет впервые стал доступен в Debian (Squeeze) и Ubuntu (Lucid). Используемые этим пакетом правила iptables хранятся в следующих директориях:

  • /etc/iptables/rules.v4 для набора правил протокола IPv4;
  • /etc/iptables/rules.v6 для набора правил протокола IPv6.

Но они должны быть сохранены в понятном утилите iptables-persistent виде.




sudo dpkg-reconfigure iptables-persistent

Или можно использовать iptables-save и ip6tables-save:

sudo iptables-save > /etc/iptables/rules.v4

sudo ip6tables-save > /etc/iptables/rules.v6


Утилита netfilter-persistent тоже позволяет управлять автозагрузкой правил. Вот её синтаксис:

sudo netfilter-persistent [ действие ]

Где [действие] может принимать следующие значения:

  • start - вызывает все плагины с параметром start, для загрузки правил в netfilter;
  • stop - если настроена конфигурация сброса настроек Netfilter при остановке плагина, сбрасывает все настройки firewall на значения по умолчанию. Иначе просто выдает предупреждение;
  • flush - плагины вызываются с параметром flush, что приводит к сбросу правил межсетевого экрана на значения по умолчанию;
  • save - вызывает плагины с параметром save, позволяя сохранить значения правил брандмауэра в файлы на диске;
  • reload - не задокументированный параметр, возникали случаи когда параметр start не срабатывал, помогал вызов этого параметра для загрузки правил из файла на диске;

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

sudo netfilter-persistent save

Для загрузки же сохраненных правил мы можем использовать команду:

sudo netfilter-persistent start

Замечание: После установки netfilter-persistent система при использовании iptables и формата хранения файлов, связанного с ним, начинает при работе выдавать предупреждение

Это связано с наличием новой утилиты настройки и редактирования правил Netfilter - nftables, для миграцию на эту утилиту старых правил iptables можно использовать автоматический транслятор правил iptables-translate. Но это уже тема для отдельной статьи.


Выводы

Итак, в этой статье мы рассмотрели где хранятся правила iptables а также как сохранить правила iptables после перезагрузки, разобрались с настройкой скрипта автозагрузки и пакета iptables-persistent.

Нет похожих записей


Статья распространяется под лицензией Creative Commons ShareAlike 4.0 при копировании материала ссылка на источник обязательна.

Iptables – это брандмауэр, который включен в большинство дистрибутивов Linux по умолчанию. Данное руководство представляет собой шпаргалку по Iptables. Здесь вы найдёте основные правила брандмауэра, которые используются в большинстве сценариев: открытие и блокирование сервисов и портов, сетевых интерфейсов и IP-адресов.

Как пользоваться этим руководством

Для начала нужно установить iptables на свой сервер.

Большинство описанных в руководстве правил сбрасывают входящий трафик согласно политике по умолчанию (DROP). Вы можете выборочно разблокировать входящий трафик самостоятельно.

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

При необходимости вы можете просто скопировать и вставить предложенные здесь примеры правил, предварительно откорректировав их.

Запомните: порядок правил в файле имеет огромное значение! Каждая команда iptables использует флаг –A, чтобы вставить правило в конец цепочки. Если вы хотите выбрать место, которое будет занимать правило в цепочке, используйте флаг –I. Чтобы поместить правило в начало цепочки, просто не указывайте в команде его номер.

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

Чтобы проверить текущий набор правил iptables, используйте команды:

sudo iptables -S
sudo iptables -L

Сохранение правил

Правила Iptables сбрасываются после перезагрузки сервера. Чтобы они использовались на постоянной основе, их нужно сохранить вручную.

Сохранение правил в Ubuntu

В Ubuntu правила сохраняются с помощью пакета iptables-persistent. Установите этот пакет:

sudo apt-get install iptables-persistent

Во время установки будет предложено сохранить текущий набор правил.

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

sudo invoke-rc.d iptables-persistent save

Сохранение правил в CentOS 6 и более старых версиях

Примечание: CentOS 7 по умолчанию использует FirewallD.

В CentOS 6 и более старых версиях можно использовать скрипт инициализации iptables, чтобы сохранить файл:

sudo service iptables save

Текущий набор правил iptables будет сохранён в /etc/sysconfig/iptables.

Просмотр и удаление правил

Эта тема подробно рассмотрена в руководстве Вывод и удаление правил IPTables.

Общие правила IPTables

В данном разделе вы найдёте самые распространённые правила и команды IPTables.

Поддержка интерфейса обратной петли

Интерфейс обратной петли (также называется lo)- это интерфейс, который компьютер использует для сетевых подключений к самому себе.

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

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

sudo iptables -A INPUT -i lo -j ACCEPT
sudo iptables -A OUTPUT -o lo -j ACCEPT

Разрешение существующих и связанных с ними входящих подключений

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

sudo iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT

Разрешение существующих исходящих соединений

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

sudo iptables -A OUTPUT -m conntrack --ctstate ESTABLISHED -j ACCEPT

Внешняя и внутренняя сеть

Учитывая, что eth0 – внешняя сеть, а eth1 – внутренняя сеть, следующее правило настроит их взаимодействие:

sudo iptables -A FORWARD -i eth1 -o eth0 -j ACCEPT

Сброс недействительных пакетов

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

sudo iptables -A INPUT -m conntrack --ctstate INVALID -j DROP

Блокировка IP-адреса

Чтобы заблокировать все сетевые соединения, исходящие от конкретного IP-адреса (например, 15.15.15.51), запустите:

sudo iptables -A INPUT -s 15.15.15.51 -j DROP

В данной команде -s 15.15.15.51 указывает источник соединений, который нужно заблокировать.

Примечание: Указать IP источника можно в любом правиле брандмауэра, включая allow.

Чтобы отклонить соединения, поступающие от этого адреса (при этом он получит ошибку Connection refused), замените DROP на REJECT:

sudo iptables -A INPUT -s 15.15.15.51 -j REJECT

Ограничение соединений по интерфейсу

Брандмауэр может заблокировать соединения, поступающие от IP (к примеру, 15.15.15.51) на определённый интерфейс (например, eth0).

iptables -A INPUT -i eth0 -s 15.15.15.51 -j DROP

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

Сервис SSH

Чтобы работать с облачным сервером, нужно разрешить входящие соединения SSH (порт 22).

Разрешение всего входящего трафика

Для этого используйте команды:

sudo iptables -A INPUT -p tcp --dport 22 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
sudo iptables -A OUTPUT -p tcp --sport 22 -m conntrack --ctstate ESTABLISHED -j ACCEPT

Вторая команда, которая разрешает исходящий трафик существующих SSH-соединений, нужна только в том случае, если политика OUTPUT – не ACCEPT.

Белый список IP-адресов

Вы можете разрешить входящие соединения SSH от заведомо безопасных адресов или подсети. К примеру, чтобы разрешить соединение от подсети 15.15.15.0/24, выполните следующие команды:

sudo iptables -A INPUT -p tcp -s 15.15.15.0/24 --dport 22 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
sudo iptables -A OUTPUT -p tcp --sport 22 -m conntrack --ctstate ESTABLISHED -j ACCEPT

Вторая команда, которая разрешает исходящий трафик существующих SSH-соединений, нужна только в том случае, если политика OUTPUT – не ACCEPT.

Разрешение исходящего трафика

Если политика OUTPUT – не ACCEPT, но вам нужно разрешить исходящие SSH-соединения, используйте:

sudo iptables -A OUTPUT -p tcp --dport 22 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
sudo iptables -A INPUT -p tcp --sport 22 -m conntrack --ctstate ESTABLISHED -j ACCEPT

Rsync использует порт 873 и позволяет передавать файлы с одного компьютера на другой.

Чтобы разрешить входящие соединения rsync, поступающие от определённых IP-адресов или подсети, укажите исходный IP и целевой порт. К примеру, чтобы разрешить соединения от подсети 15.15.15.0/24, нужно использовать:

sudo iptables -A INPUT -p tcp -s 15.15.15.0/24 --dport 873 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
sudo iptables -A OUTPUT -p tcp --sport 873 -m conntrack --ctstate ESTABLISHED -j ACCEPT

Вторая команда, которая разрешает исходящий трафик существующих соединений rsync, нужна только в том случае, если политика OUTPUT – не ACCEPT.

Веб-серверы

sudo iptables -A INPUT -p tcp --dport 80 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
sudo iptables -A OUTPUT -p tcp --sport 80 -m conntrack --ctstate ESTABLISHED -j ACCEPT

sudo iptables -A INPUT -p tcp --dport 443 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
sudo iptables -A OUTPUT -p tcp --sport 443 -m conntrack --ctstate ESTABLISHED -j ACCEPT

sudo iptables -A INPUT -p tcp -m multiport --dports 80,443 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
sudo iptables -A OUTPUT -p tcp -m multiport --dports 80,443 -m conntrack --ctstate ESTABLISHED -j ACCEPT

Система управления базами данных MySQL

MySQL прослушивает клиентские соединения на порте 3306. Если сервер базы данных MySQL используется клиентом на удаленном сервере, вы должны обязательно разрешить этот трафик.

Белый список IP-адресов для MySQL

Чтобы разрешить доступ к MySQL для определённых IP-адресов или подсетей, используйте такие команды:

sudo iptables -A INPUT -p tcp -s 15.15.15.0/24 --dport 3306 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
sudo iptables -A OUTPUT -p tcp --sport 3306 -m conntrack --ctstate ESTABLISHED -j ACCEPT

Вторая команда, которая разрешает исходящий трафик существующих соединений MySQL, нужна только в том случае, если политика OUTPUT – не ACCEPT.

Сетевые интерфейсы MySQL

Чтобы разрешить доступ к MySQL с помощью определённого сетевого интерфейса (например, eth1), используйте следующие команды:

sudo iptables -A INPUT -i eth1 -p tcp --dport 3306 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
sudo iptables -A OUTPUT -o eth1 -p tcp --sport 3306 -m conntrack --ctstate ESTABLISHED -j ACCEPT

Вторая команда, которая разрешает исходящий трафик существующих соединений MySQL, нужна только в том случае, если политика OUTPUT – не ACCEPT.

Система управления базами данных PostgreSQL

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

Белый список IP-адресов для PostgreSQL

Чтобы разрешить доступ к PostgreSQL для определённых IP-адресов или подсетей, используйте такие команды:

sudo iptables -A INPUT -p tcp -s 15.15.15.0/24 --dport 5432 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
sudo iptables -A OUTPUT -p tcp --sport 5432 -m conntrack --ctstate ESTABLISHED -j ACCEPT

где 15.15.15.0/24 – подсеть, которая сможет получить доступ к PostgreSQL.

Вторая команда, которая разрешает исходящий трафик существующих соединений PostgreSQL, нужна только в том случае, если политика OUTPUT – не ACCEPT.

Сетевые интерфейсы PostgreSQL

Чтобы разрешить доступ к PostgreSQL с помощью определённого сетевого интерфейса (например, eth1), используйте следующие команды:

sudo iptables -A INPUT -i eth1 -p tcp --dport 5432 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
sudo iptables -A OUTPUT -o eth1 -p tcp --sport 5432 -m conntrack --ctstate ESTABLISHED -j ACCEPT

Вторая команда, которая разрешает исходящий трафик существующих соединений PostgreSQL, нужна только в том случае, если политика OUTPUT – не ACCEPT.

Почтовые сервисы

Почтовые серверы (Sendmail или Postfix) прослушивают множество портов в зависимости от используемого протокола, с помощью которого обрабатывается электронная почта. Если вы используете почтовый сервер, определите, какие протоколы он использует, и откройте соответствующие порты. Также рекомендуется заблокировать исходящую SMTP почту.

Блокирование исходящей почты SMTP

Если сервер не должен отправлять исходящую почту, вы можете заблокировать этот вид трафика. SMTP использует порт 25. Чтобы заблокировать исходящий трафик, выполните следующую команду:

sudo iptables -A OUTPUT -p tcp --dport 25 -j REJECT

Теперь iptables будет отклонять весь исходящий трафик на порт 25. Чтобы сбросить трафик другого порта, просто укажите в команде его номер.

Разрешение трафика SMTP

Чтобы открыть весь SMTP-трафик на порт 25, запустите:

sudo iptables -A INPUT -p tcp --dport 25 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
sudo iptables -A OUTPUT -p tcp --sport 25 -m conntrack --ctstate ESTABLISHED -j ACCEPT

Вторая команда, которая разрешает исходящий трафик существующих соединений SMTP, нужна только в том случае, если политика OUTPUT – не ACCEPT.

Примечание: Обычно SMTP-серверы используют порт 587 для исходящей почты.

Разрешение входящего трафика IMAP

Чтобы сервер мог отвечать на IMAP-соединения на порте 143, запустите:

sudo iptables -A INPUT -p tcp --dport 143 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
sudo iptables -A OUTPUT -p tcp --sport 143 -m conntrack --ctstate ESTABLISHED -j ACCEPT

Вторая команда, которая разрешает исходящий трафик существующих соединений IMAP, нужна только в том случае, если политика OUTPUT – не ACCEPT.

Разрешение входящего трафика IMAPS

Чтобы сервер мог отвечать на IMAPS -соединения на порте 993, запустите команды:

sudo iptables -A INPUT -p tcp --dport 993 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
sudo iptables -A OUTPUT -p tcp --sport 993 -m conntrack --ctstate ESTABLISHED -j ACCEPT

Вторая команда, которая разрешает исходящий трафик существующих соединений IMAPS, нужна только в том случае, если политика OUTPUT – не ACCEPT.

Разрешение входящего трафика POP3

Чтобы сервер мог отвечать на POP3-соединения на порте 110, введите такие команды:

sudo iptables -A INPUT -p tcp --dport 110 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
sudo iptables -A OUTPUT -p tcp --sport 110 -m conntrack --ctstate ESTABLISHED -j ACCEPT

Вторая команда, которая разрешает исходящий трафик существующих соединений POP3, нужна только в том случае, если политика OUTPUT – не ACCEPT.

Разрешение входящего трафика POP3S

Чтобы сервер мог отвечать на POP3S -соединения на порте 995, введите:

sudo iptables -A INPUT -p tcp --dport 995 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
sudo iptables -A OUTPUT -p tcp --sport 995 -m conntrack --ctstate ESTABLISHED -j ACCEPT

Вторая команда, которая разрешает исходящий трафик существующих соединений POP3S, нужна только в том случае, если политика OUTPUT – не ACCEPT.

Заключение

Данное руководство охватывает большинство самых распространённых команд и правил брандмауэра iptables. Конечно, iptables очень гибкий инструмент; чтобы подобрать наиболее оптимальные правила, поэкспериментируйте с настройками брандмауэра самостоятельно.

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

Если вы хотите разобраться с утилитой более подробно, тогда стоит открыть статью в wikibooks и хорошенько запастись энтузиазмом и терпением, а в этой статье будут следующие, довольно простые, но в тоже время важные темы (кликабельно):

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

Если ввести команду с sudo не предоставляется возможности, тогда нужно ввести просто su , но для этого потребуется ввести пароль от root.

Установка iptables

Для начала убедимся, что утилита iptables установлена. Для этого введем команду iptables -h и если вывод будет command not found , значит утилиту требуется установить.

Установка iptables очень простая, для этого достаточно ввести:

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

Основные настройки iptables для десктопа

Чтобы защитить наш десктоп огненной стеной и не бояться, что к нам подключатся извне посторонние, технически подкованные персоны, следует прописать базовые правила в фаервол. Это не даст 100% гарантии безопасности вашего ПК (что в принципе невозможно), но существенно усложнит жизнь незваным гостям, которые скорее всего выберут цель полегче.

И так, если вы уже авторизованы под root в вашем домашней ОС и готовы забаррикадироваться от недоброжелателей, то стоит начать с правил по-умолчанию. Они будут срабатывать, если для соединения не нашлось других правил.

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

Просмотр правил iptables

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

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

Как открыть порт в iptables

Чтобы разрешить подключаться к нашей ОС по SSH, нам потребуется разрешить подключение через порт 22, прописав правило в iptables:

Далее проверим все наши правила с помощью команды iptables -L

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

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

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

Как сохранить правила iptables

Одной из особенностей утилиты iptables является то, что прописанные правила полностью сбрасываются после перезагрузки системы. Самый простым способом сохранить настройки iptables будет поставить утилиту iptables-persistent . В debian и ubuntu это делается так, если вы по прежнему авторизованы под root:

Во время установки будет вопрос, сохранить ли текущие настройки iptables, пока выберем не сохранять, то есть No , потому что для начала нужно сохранить их в отдельный текстовый файл. В противном случае iptables-persistent ничего не сохранит.

После установки сохраним текущие настройки iptables в отдельный файл, который будет располагаться в папке утилиты:

А затем перезапустим службу iptables-persistent

То попробуйте перезапустить службу с другим названием:

В debian и ubuntu должен работать второй вариант.

Все, теперь можно смело перезагружать компьютер или сервер, все настройки iptables при это сохранятся.

Как откатить сохраненные правила iptables

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

Как удалить правило в iptables

Чтобы удалить одно конкретное правило из iptables, для начала нужно выяснить его номер и цепочку. Для этого нужно получить список всех правил с опцией --line-numbers :

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

В данном примере мы будем удалять правило под номером 1, который запрещает все входящие соединения с IP адреса 192.168.122.122 :

Уникальный номер правила мы знаем, теперь смотрим название его цепочки:

Теперь выведем весь список и проверим удалилось ли правило:

Как мы видим, правило успешно удалилось.

Как сбросить все правила iptables

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

Теперь выведем список правил и проверим сбросились ли они:

Основные настройки iptables для веб-сервера

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

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

Теперь разрешим внутренние соединения с 127.0.0.1 (localhost), а также установленные соединения для приложений и пинга.

Добавим несколько дополнительных фильтров:

Далее откроем порт 22, чтобы была возможность подключаться к серверу по SSH:

Открываем порты для базовых сервисов веб-сервера:

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

Затем проверим все настройки командой iptables -L

И наконец стоит сохранить наши правила, чтобы они не испарились после перезагрузки сервера. Как это сделать, уже рассказано в разделе выше.

Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.

Читайте также: