Как создать правила брандмауэра с помощью утилиты iptables

Обновлено: 21.11.2024

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

Команды Iptables

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

О чем нужно помнить

Прежде чем читать дальше, обратите внимание на следующие моменты:

  • Порядок правил в iptables важен.
  • Чтобы добавить новое правило в конец цепочки, ваша команда iptables должна будет использовать ключ ​-A.
  • Если вы хотите добавить правило в другое место, используйте параметр -I. Этот параметр позволяет указать точное местоположение правила. Если вы хотите разместить правило в начале цепочки, просто не указывайте номер правила.
  • Чтобы обеспечить постоянный доступ к серверу, по умолчанию заблокируйте трафик SSH через порт 22.
  • Если вы не сделаете этого и потеряете доступ к своему серверу, вы можете повторно подключиться с помощью консоли. Разрешить SSH-трафику изменять настройки брандмауэра.
  • Если вы когда-нибудь захотите просмотреть текущий набор правил, используйте команды sudo iptables -S ​ и ​ ​ sudo iptables -L.

Кроме того, у нас есть подробное руководство по составлению списка и удалению правил брандмауэра iptables, которое поможет вам максимально эффективно использовать брандмауэр iptables.

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

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

Мы начнем с определения того, как вы можете сохранить свои правила. Важно отметить, что правила iptables эфемерны. Это означает, что они будут потеряны после перезагрузки системы, если вы их не сохраните. Вот как вы можете вручную сохранить новые правила на серверах Ubuntu и CentOS соответственно:

Убунту

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

Первым шагом для сохранения новых правил iptables является установка пакета iptables-persistent​с помощью apt-get. Вот как это сделать:

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

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

Примечание. В этом руководстве рассматривается безопасность IPv4. В Linux безопасность IPv6 поддерживается отдельно от IPv4. Например, «iptables» поддерживает правила брандмауэра только для адресов IPv4, но у него есть аналог IPv6, называемый «ip6tables», который можно использовать для поддержки правил брандмауэра для сетевых адресов IPv6.

Если ваш VPS настроен для IPv6, не забудьте защитить сетевые интерфейсы IPv4 и IPv6 с помощью соответствующих инструментов. Дополнительные сведения об инструментах IPv6 см. в этом руководстве: Как настроить инструменты для использования IPv6 на Linux VPS

Предпосылки

Прежде чем вы начнете использовать это руководство, на вашем сервере должна быть настроена отдельная учетная запись суперпользователя без полномочий root — пользователь с правами sudo. Если вам нужно настроить это, следуйте этому руководству: Initial Server Setup with Ubuntu 14.04.

Основные команды iptables

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

Во-первых, вы должны знать, что команды iptables должны выполняться с привилегиями root. Это означает, что вам нужно войти в систему как root, использовать su или sudo -i для получения корневой оболочки или предварять все команды sudo . В этом руководстве мы будем использовать sudo, так как это предпочтительный метод в системе Ubuntu.

Хорошей отправной точкой является список текущих правил, настроенных для iptables.Вы можете сделать это с помощью флага -L:

Как видите, у нас есть три цепочки по умолчанию (INPUT, OUTPUT и FORWARD). Мы также можем видеть политику по умолчанию каждой цепочки (каждая цепочка имеет ACCEPT в качестве политики по умолчанию). Мы также видим некоторые заголовки столбцов, но не видим никаких реальных правил. Это связано с тем, что Ubuntu не поставляется с набором правил по умолчанию.

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

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

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

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

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

Составьте свое первое правило

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

Полное правило, которое нам нужно, таково:

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

-A INPUT: флаг -A добавляет правило в конец цепочки. Это часть команды, которая сообщает iptables, что мы хотим добавить новое правило, что мы хотим, чтобы это правило было добавлено в конец цепочки, и что цепочка, с которой мы хотим работать, является цепочкой INPUT.

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

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

–ctstate: это одна из команд, доступных при вызове модуля conntrack. Эта команда позволяет нам сопоставлять пакеты на основе того, как они связаны с пакетами, которые мы видели ранее.

Мы передаем ему значение ESTABLISHED, чтобы разрешить пакеты, являющиеся частью существующего соединения. Мы передаем ему значение RELATED, чтобы разрешить пакеты, связанные с установленным соединением. Это часть правила, которая соответствует нашему текущему сеансу SSH.

-j ACCEPT: указывает цель сопоставления пакетов. Здесь мы сообщаем iptables, что пакеты, соответствующие предыдущим критериям, должны быть приняты и пропущены.

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

Мы можем увидеть изменения, если перечислим правила:

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

Принять другие необходимые соединения

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

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

  • -p tcp: Этот параметр сопоставляет пакеты, если используется протокол TCP. Это протокол на основе соединения, который будет использоваться большинством приложений, поскольку он обеспечивает надежную связь.
  • –dport: этот параметр доступен, если указан флаг TCP -p. Это дает дополнительное требование соответствия порта назначения для соответствующего пакета. Первое правило соответствует TCP-пакетам, предназначенным для порта 22, а второе правило соответствует TCP-трафику, направленному на порт 80.

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

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

Нам нужно добавить следующее правило:

Это выглядит немного иначе, чем другие наши команды. Давайте посмотрим, что он делает:

-I INPUT 1: Флаг -I указывает iptables вставить правило. Это отличается от флага -A, который добавляет правило в конец. Флаг -I принимает цепочку и позицию правила, в которую вы хотите вставить новое правило.

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

-i lo: этот компонент правила соответствует, если интерфейс, который использует пакет, является интерфейсом «lo». Интерфейс «lo» — это другое название петлевого устройства. Это означает, что любой пакет, использующий этот интерфейс для связи (пакеты, сгенерированные на нашем сервере, для нашего сервера), должен быть принят.

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

Реализация правила удаления

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

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

Есть два разных способа сделать это с некоторыми довольно важными отличиями.

Первый способ сделать это — изменить политику по умолчанию для нашей цепочки INPUT. Мы можем сделать это, набрав:

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

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

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

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

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

Теперь вы можете добавить правило в конец цепочки, которое будет отбрасывать все оставшиеся пакеты:

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

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

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

Или вы можете вставить нужные вам правила в конце цепочки (но до перетаскивания), указав номер строки. Чтобы вставить правило в строку номер 4, вы можете ввести:

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

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

Список и удаление правил Iptables

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

Сохранение конфигурации Iptables

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

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

Есть несколько способов сделать это, но проще всего использовать пакет iptables-persistent. Вы можете скачать это из стандартных репозиториев Ubuntu:

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

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

После завершения установки у вас появится новая служба iptables-persistent, настроенная на запуск при загрузке. Эта служба загрузит ваши правила и применит их при запуске сервера.

Сохранение обновлений

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

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

Заключение

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

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

Хотите узнать больше? Присоединяйтесь к сообществу DigitalOcean!

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

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

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

По умолчанию Iptables имеет 3 правила (но можно добавить больше)

  • INPUT — эта цепочка используется для входящих пакетов на ваш сервер. Используйте это, чтобы открыть или закрыть входящие порты (например, 80, 25 и 110 и т. д.) и IP-адреса/подсети (например, 50.32.1.0/24).
  • OUTPUT — эта цепочка используется, когда пакеты генерируются вашим сервером. Используйте это открытие или закрытие исходящих портов и IP-адресов/подсетей.
  • FORWARD — эта цепочка используется, когда пакеты отправляются через другой интерфейс. Обычно используется при настройке Linux в качестве маршрутизатора. Например, eth0 подключен к ADSL/кабельному модему, а eth1 подключен к локальной сети. Используйте цепочку FORWARD для отправки и получения трафика из локальной сети в Интернет.

Сейчас мы будем работать только с цепочками INPUT и OUTPUT, поскольку, скорее всего, вы здесь для изучения основ.

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

ПРИМЕЧАНИЕ: правила читаются сверху вниз, поэтому, если правило совпадает и сверху, и снизу, то правило, которое оно выберет, будет ближайшим к началу.

Как видно из цепочки INPUT, действие по умолчанию — ПРИНЯТЬ весь трафик. Теперь, например, я хочу принимать соединения, поступающие на порт 22 (обычно это SSH), поэтому, чтобы открыть этот порт и закрыть другие, мы можем сделать следующее:

Первая команда:

  • iptables: вызвать двоичный файл iptables
  • -I: добавить правило вверху
  • ВХОД: цепочка, в которой будет применяться правило.
  • -p tcp: протокол пакета
  • –dport 22 – порт назначения, в данном случае – 22.
  • -j ПРИНЯТЬ: действие, которое нужно выполнить, это может быть ПРИНЯТЬ, ОТМЕНИТЬ или ОТКЛОНИТЬ

Вторая команда:

  • iptables: вызвать двоичный файл iptables
  • -A: добавить правило внизу
  • ВХОД: цепочка, в которой будет применяться правило.
  • -j DROP: действие, которое нужно выполнить

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

Чтобы решить эту проблему, нам просто нужно добавить простое правило

$ iptables -I INPUT 2 -m conntrack --ctstate СВЯЗАННО,УСТАНОВЛЕНО -j ПРИНЯТЬ

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

  • iptables: вызвать двоичный файл iptables
  • -I INPUT 2 :Добавьте правило во ВТОРОЕ ПРАВИЛО ниже
  • -m conntrack : использовать модуль conntrack (отслеживание соединения)
  • –ctstate RELATED,ESTABLISHED: соответствует состоянию соединения, в данном случае это установленные соединения вашего сервера или связанные с ним
  • -j ПРИНЯТЬ: действие, которое нужно выполнить

Теперь вы сможете отправлять и получать пакеты, которые отправляются с вашего сервера.

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

Для веб-серверов:

$ iptables -A INPUT -p tcp --dport 80 -j ПРИНЯТЬ
$ iptables -A INPUT -p tcp --dport 443 -j ПРИНЯТЬ

$ iptables -A INPUT -p tcp --dport 21 -j ПРИНЯТЬ

$ iptables -A INPUT -p tcp --dport 25 -j ПРИНЯТЬ

Теперь у вас может быть много правил, и вам может быть интересно, как удалить правило, которое вам больше не нужно.

Теперь правило номер 2 больше не действует.

Чтобы удалить ВСЕ правила во ВСЕХ цепочках, iptables дает нам великолепную команду (отлично подходит для экстремальных ситуаций), но вы должны использовать ее осторожно.

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

Мы в ClickIT являемся экспертами, предоставляющими управляемые услуги с помощью решений DevOps, таких как Ansible, Chef и AWS Opswork. В нашу Agile-команду также входят ведущие ИТ-специалисты по переносу приложений в облако, веб-безопасности, веб-разработке, автоматизации ИТ, кластеризации, масштабируемости и ближней поддержке. Свяжитесь с нами сейчас!»

Все современные операционные системы оснащены брандмауэром – программным приложением, которое регулирует сетевой трафик, поступающий на компьютер. Брандмауэры создают барьер между надежной сетью (например, офисной сетью) и ненадежной (например, Интернетом). Брандмауэры работают, определяя правила, определяющие, какой трафик разрешен, а какой заблокирован. Утилита брандмауэра, разработанная для систем Linux, называется iptables.

Из этого руководства вы узнаете, как установить, настроить и использовать iptables в Linux.

  • Учетная запись пользователя с правами sudo
  • Доступ к окну терминала/командной строке (Ctrl-Alt-T, Ctrl-Alt-F2)

Как работает iptables

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

Iptables фильтрует пакеты на основе:

  • Таблицы. Таблицы – это файлы, объединяющие похожие действия. Таблица состоит из нескольких цепочек.
  • Цепи. Цепочка – это набор правил. Когда пакет получен, iptables находит соответствующую таблицу, а затем прогоняет ее по цепочке правил, пока не найдет соответствие.
  • Правила. Правило — это инструкция, которая сообщает системе, что делать с пакетом. Правила могут блокировать один тип пакета или пересылать другой тип пакета. Результат, в который отправляется пакет, называется целью.
  • Цели. Цель – это решение о том, что делать с пакетом. Как правило, это означает принять его, удалить или отклонить (что возвращает отправителю сообщение об ошибке).

Таблицы и цепочки

В iptables брандмауэра Linux есть четыре таблицы по умолчанию. Мы перечислим все четыре вместе с цепочками, которые содержит каждая таблица.

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

  • Вход — правила в этой цепочке контролируют пакеты, полученные сервером.
  • Выход – эта цепочка управляет пакетами для исходящего трафика.
  • Пересылка — этот набор правил управляет пакетами, которые направляются через сервер.
<р>2. Преобразование сетевых адресов (NAT)

Эта таблица содержит правила NAT (трансляции сетевых адресов) для маршрутизации пакетов в сети, к которым нет прямого доступа. Когда необходимо изменить пункт назначения или источник пакета, используется таблица NAT.Он включает в себя следующие цепочки:

  • Предварительная маршрутизация — эта цепочка назначает пакеты, как только сервер их получает.
  • Вывод — работает так же, как цепочка вывода, описанная в таблице фильтров.
  • Отправка – правила в этой цепочке позволяют вносить изменения в пакеты после того, как они покидают выходную цепочку.

Таблица Mangle корректирует свойства IP-заголовков пакетов. В таблице есть все следующие цепочки, которые мы описали выше:

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

<р>5. Безопасность (необязательно)

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

Цели

Цель — это то, что происходит после того, как пакет соответствует критериям правила. Незавершающие цели продолжают сопоставлять пакеты с правилами в цепочке, даже если пакет соответствует правилу.

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

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

Установка Iptables Ubuntu

Iptables устанавливаются по умолчанию в большинстве систем Linux. Чтобы убедиться, что iptables установлен, используйте следующую команду:

Пример вывода в Ubuntu подтверждает, что последняя версия iptables уже установлена:

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

Установка Iptables CentOS

В CentOS 7 iptables был заменен на firewalld.

Чтобы установить iptables, сначала необходимо остановить firewalld. Введите следующие команды:

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

Далее установите и включите iptables. Сначала установите пакет служб iptables с помощью следующей команды:

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

Введите следующие команды, чтобы включить и запустить iptables в CentOS 7:

Команда status подтверждает статус приложения:

Примечание. Существует две разные версии iptables для IPv4 и IPv6. Правила, которые мы рассматриваем в этом руководстве по iptables для Linux, предназначены для IPv4.

Чтобы настроить iptables для IPv6, необходимо использовать утилиту iptables6. Эти два разных протокола не работают вместе и должны настраиваться независимо.

Основной синтаксис команд и параметров iptables

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

Вот список некоторых распространенных параметров iptables:

  • -A --append — добавить правило в цепочку (в конец).
  • -C --check — поиск правила, соответствующего требованиям цепочки.
  • -D --delete — удалить указанные правила из цепочки.
  • -F --flush — удалить все правила.
  • -I --insert — добавить правило в цепочку в заданной позиции.
  • -L --list — показать все правила в цепочке.
  • -N -new-chain — создать новую цепочку.
  • -v --verbose — Показать дополнительную информацию при использовании параметра списка.
  • -X --delete-chain — удалить указанную цепочку.

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

Настройка iptables в Linux

По умолчанию эти команды влияют на таблицу фильтров. Если вам нужно указать другую таблицу, используйте параметр –t, за которым следует имя таблицы.

Проверить текущий статус iptables

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

Система отображает статус ваших цепочек. На выходе будут перечислены три цепочки:

Включить петлевой трафик

Разрешить трафик из вашей собственной системы (локального хоста) безопасно. Добавьте цепочку Input, введя следующее:

Эта команда настраивает брандмауэр на прием трафика для интерфейса localhost ( lo ) ( -i ). Теперь все, что исходит из вашей системы, будет проходить через ваш брандмауэр. Вам нужно установить это правило, чтобы разрешить приложениям общаться с локальным интерфейсом.

Разрешить трафик через определенные порты

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

Чтобы разрешить только входящий трафик SSH (Secure Shell), введите следующее:

Эти параметры работают следующим образом:

  • -p — проверить указанный протокол (tcp).
  • --dport — укажите порт назначения.
  • -j jump — выполнить указанное действие.

Управление трафиком по IP-адресу

Используйте следующую команду, чтобы ПРИНЯТЬ трафик с определенного IP-адреса.

Замените IP-адрес в команде IP-адресом, который вы хотите разрешить.

Вы также можете УДАЛИТЬ трафик с IP-адреса:

Вы можете ОТКЛОНИТЬ трафик с диапазона IP-адресов, но команда будет более сложной:

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

  • -m — соответствует указанному параметру.
  • -iprange — указывает системе ожидать диапазон IP-адресов вместо одного.
  • --src-range — определяет диапазон IP-адресов.

Отключение нежелательного трафика

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

Опция -A добавляет в цепочку новое правило. Если какое-либо соединение осуществляется через порты, отличные от указанных вами, оно будет разорвано.

Удалить правило

Вы можете использовать параметр -F, чтобы очистить все правила брандмауэра iptables. Более точный метод — удалить номер строки правила.

Сначала перечислите все правила, введя следующее:

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

Замените номер> фактическим номером строки правила, который вы хотите удалить.

Сохранить изменения

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

Чтобы сохранить правила в системах на базе Debian, введите:

Чтобы сохранить правила в системах на основе Red Hat, введите:

При следующем запуске системы iptables автоматически перезагрузит правила брандмауэра.

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

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

Вы ищете полное руководство по iptables? Оставайся на месте. В этой статье мы покажем вам, как установить и использовать iptables в системе Ubuntu. Узнав об этом инструменте брандмауэра Linux, вы сможете защитить свой Linux VPS с помощью интерфейса командной строки.

Что такое Iptables и как он работает?

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

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

  • ПРИНЯТЬ — разрешает прохождение пакета.
  • DROP — не пропустит пакет.
  • RETURN – останавливает передачу пакета по цепочке и указывает ему вернуться к предыдущей цепочке.

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

  • INPUT — контролирует входящие пакеты на сервер.
  • FORWARD – фильтрует входящие пакеты, которые будут переадресованы в другое место.
  • OUTPUT – фильтрация пакетов, исходящих с вашего сервера.

Прежде чем мы начнем это руководство, убедитесь, что у вас есть доступ SSH root или sudo к вашему компьютеру, работающему под управлением Ubuntu 16.04 или более поздней версии. Вы можете установить соединение через PuTTY (Windows) или терминальную оболочку (Linux, macOS). Если вы являетесь владельцем Hostinger VPS, вы можете получить данные для входа по SSH на вкладке «Серверы» в hPanel.

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

Как установить и использовать брандмауэр Iptables Linux

Мы разделим это руководство по iptables на три этапа. Во-первых, вы узнаете, как установить инструмент на Ubuntu. Во-вторых, мы собираемся показать вам, как определить правила. Наконец, мы поможем вам внести постоянные изменения в iptables.

Шаг 1 — Установка Iptables

Iptables предустановлен в большинстве дистрибутивов Linux. Однако, если он не установлен в системе Ubuntu/Debian по умолчанию, выполните следующие действия:

  1. Подключитесь к серверу через SSH. Если вы не знаете, вы можете прочитать наше руководство по SSH.
  2. Выполните следующие команды одну за другой:
  3. Проверьте состояние текущей конфигурации iptables, выполнив:

Здесь опция -L используется для отображения всех правил, а -v — для отображения информации в более подробном формате. Ниже приведен пример вывода:

Теперь у вас установлен брандмауэр Linux. На этом этапе вы можете заметить, что все цепочки настроены на ACCEPT и не имеют правил. Это небезопасно, так как любой пакет может пройти без фильтрации.

Не волнуйтесь. Мы расскажем вам, как определить правила, на следующем этапе нашего руководства по iptables.

Шаг 2. Определение правил цепочки

Определение правила означает добавление его в цепочку. Для этого вам нужно вставить опцию -A (Добавить) сразу после команды iptables, например:

Это предупредит iptables, что вы добавляете новые правила в цепочку. Затем вы можете комбинировать команду с другими параметрами, такими как:

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

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

Включение трафика на локальном хосте

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

В этом руководстве по iptables мы используем интерфейс lo или loopback. Он используется для всех коммуникаций на локальном хосте. Приведенная выше команда обеспечит правильную работу соединений между базой данных и веб-приложением на одном компьютере.

Пришло время проверить, добавлены ли правила в iptables:

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

Фильтрация пакетов по источнику

Iptables позволяет фильтровать пакеты на основе IP-адреса или диапазона IP-адресов. Вам нужно указать его после опции -s. Например, чтобы принимать пакеты от 192.168.1.3, команда будет выглядеть так:

Вы также можете отклонять пакеты с определенного IP-адреса, заменив цель ACCEPT на DROP.

Если вы хотите отбрасывать пакеты с диапазона IP-адресов, вы должны использовать параметр -m и модуль iprange. Затем укажите диапазон IP-адресов с помощью –src-range. Помните, что дефис должен отделять диапазон IP-адресов без пробела, например:

Отбрасывание всего остального трафика

Очень важно использовать цель DROP для всего остального трафика после определения правил –dport. Это предотвратит несанкционированный доступ к серверу через другие открытые порты. Для этого просто введите:

Теперь соединение за пределами указанного порта будет разорвано.

Удаление правил

Если вы хотите удалить все правила и начать с чистого листа, вы можете использовать параметр -F (сбросить):

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

Вы получите список правил с номерами:

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

Шаг 3. Сохранение изменений

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

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

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

Вы увидите следующие результаты:

Заключение

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

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

Пришло время проверить это на себе и удачи!

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

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