Назад в блог

Настройка брандмауэра Iptables: базовые правила и команды

Настройка брандмауэра Iptables: базовые правила и команды

Введение

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

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

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

Iptables Firewall 1

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

Iptables Firewall 2

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

  • CentOS

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

Вы можете сохранить свои новые правила в CentOS с помощью инициализационного скрипта ​iptables. См. следующую команду:

Эта команда сохранит ваши новые правила для брандмауэра iptables. Текущие активные правила iptables можно найти в файле /etc/sysconfig/iptables​ .

Полезные команды Iptables

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

  • Локальные соединения (Loopback)

Сначала мы рассмотрим, как можно разрешить локальные соединения (loopback). Ваша система использует локальный интерфейс для отправки соединений самой себе. Например, представьте, что вы запустили эту команду: ​ping localhost​ или ​ping 127.0.0.1​. Ваш сервер будет использовать интерфейс обратной связи (loopback), или lo​, чтобы, по сути, пинговать самого себя. В других случаях сервер может использовать его, если ваш сервер приложений настроен на подключение к адресу «localhost».

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

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

Iptables Firewall 3

  • Установленные и связанные входящие соединения

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

Established and Related Incoming Connections

  • Установленные исходящие соединения

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

Established Outgoing Connections

  • Из внутренней сети во внешнюю

Иногда вам может даже потребоваться настроить брандмауэр, чтобы предоставить внутренней сети доступ к внешней. По умолчанию вашей внешней сетью должна быть ​eth0​ и ​eth1 должна быть вашей внутренней сетью. Если это так, используйте эту команду для включения доступа:

Internal to External

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

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

Dropping Invalid Packets

Правила для блокировки IP-адресов

Далее мы рассмотрим несколько команд, которые можно использовать для блокировки соединений, исходящих с определенных IP-адресов. Чтобы упростить задачу, мы будем использовать IP-адрес ​15.15.15.51 в качестве примера в наших командах. Вы можете заменить это значение вашим конкретным IP-адресом.

В ​-s 15.15.15.51, ​​символ ​-s​ означает источник (source). Таким образом, команда указывает исходный IP-адрес «15.15.15.51». Аналогично вы можете указать исходный IP-адрес в любом правиле брандмауэра. Это относится как к разрешающим, так и к отклоняющим правилам.

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

В результате ваш сервер будет выдавать ошибку «connection refused» (соединение отклонено) всякий раз, когда этот конкретный IP-адрес отправляет запрос на соединение.

  • Блокировка соединений с определенным интерфейсом

Вы можете заблокировать все запросы на соединение, поступающие с определенного IP-адреса на определенный сетевой интерфейс. В нашем примере IP-адрес — 15.15.15.51​, а сетевой интерфейс — ​eth0​. Используйте эту команду для блокировки соединений:

Отличная новость заключается в том, что вы можете указать сетевой интерфейс в любом правиле. Это означает, что любое правило может быть применено и ограничено только конкретной сетью.

Правила для службы: SSH

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

  • Разрешение всех входящих SSH-соединений

Следующие команды разрешают все входящие SSH-соединения:

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

  • Разрешение входящих SSH-соединений из подсети

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

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

  • Разрешение исходящих SSH-соединений

Используйте эти команды, если политика ​OUTPUT​ брандмауэра не установлена в ​ACCEPT​ и вы хотите разрешить SSH-соединения. Это позволит вашему серверу инициировать SSH-соединения с другими серверами:

Для получения дополнительной информации об использовании SSH на ваших облачных серверах ознакомьтесь с нашими руководствами по ​ использованию SSH для подключения к удаленному серверу в Ubuntu ​и настройке аутентификации на основе ключей SSH на сервере Linux​.

  • Разрешение входящих соединений Rsync из подсети

Rsync​ — это функция, которую можно использовать для передачи файлов с одной системы на другую. Она работает на порту 873. Поэтому, если вы хотите разрешить входящие соединения Rsync на порту 873 с определенного IP-адреса или из подсети, используйте следующие команды:

Как видите, мы указали исходный IP-адрес вместе с портом назначения. Вы будете использовать вторую команду только в том случае, если политика ​OUTPUT​ брандмауэра не установлена в ​ACCEPT​. Она разрешает исходящий трафик установленных соединений Rsync. Кроме того, вы можете ознакомиться с нашим ​руководством по использованию Rsync для синхронизации локальных и удаленных каталогов на VPS​.

Правила для службы: веб-сервер

HTTP-соединения обычно принимаются на порту 80. Аналогично, HTTPS обычно использует порт 443. Веб-серверы, такие как ​Apache​ и ​Nginx​ прослушивают эти порты для приема запросов на подключение. Иногда настройки по умолчанию могут приводить к тому, что ваш сервер отклоняет или сбрасывает эти входящие запросы. Вот почему вам нужно будет настроить новые правила, чтобы разрешить этот трафик.

  • Разрешение всех входящих HTTP-соединений

Вы можете разрешить все входящие HTTP-соединения на порту 80 с помощью следующих команд:

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

  • Разрешение всех входящих HTTPS-соединений

Используйте эти команды, чтобы разрешить все входящие запросы на подключение по HTTPS через порт 443:

Вы будете использовать вторую команду только в том случае, если политика брандмауэра iptables ​OUTPUT​ не установлена в ACCEPT​. Она разрешает исходящий трафик установленных HTTP-соединений.

  • Разрешение всех входящих соединений по HTTP и HTTPS

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

Вы будете использовать вторую команду только в том случае, если политика брандмауэра ​OUTPUT​ не установлена в ACCEPT​. Она разрешает исходящий трафик установленных HTTP- и HTTPS-соединений.

Правила для службы: MySQL

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

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

Вам придется указать источник, если вы хотите разрешить подключения к MySQL из определенной подсети. В нашем примере мы разрешим входящий трафик из подсети 15.15.15.0/24​ с помощью следующих команд:

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

  • Разрешение подключений MySQL к интерфейсу

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

В этом случае мы разрешаем подключения к частному сетевому интерфейсу с именем eth1​.

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

Вы можете воспользоваться нашим ​руководством по простой настройке MySQL на вашем сервере​.

Правила для службы: PostgreSQL

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

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

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

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

  • Разрешение подключений PostgreSQL к определенному интерфейсу

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

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

Следуйте этому ​руководству по установке PostgreSQL на сервер Ubuntu​.

Правила для службы: Почта

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

  • Разрешение входящих SMTP-подключений

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

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

  • Разрешение всех входящих IMAP

Чтобы разрешить вашему серверу отвечать на все входящие IMAP-подключения на порту 143, просто введите и выполните следующее:​

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

  • Разрешение всех входящих IMAPS

Используйте эти команды, чтобы разрешить вашему серверу отвечать на IMAPS-подключения на порту 993:

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

  • Разрешение всех входящих POP3

Эти подключения будут поступать на порт 993. Если вы хотите, чтобы ваш сервер отвечал на запросы подключения IMAPS, используйте следующие команды:

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

  • Разрешение всех входящих POP3S

Используйте эти команды, чтобы разрешить вашему серверу устанавливать соединения по запросам POP3S, поступающим на порт 995:

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

  • Как заблокировать исходящую почту SMTP

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

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

Заключение

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

Приятной работы!

author

Manpreet Singh

Автор · CloudSigma

Preslav Dobrev — креативный дизайнер в CloudSigma, сосредоточенный на формировании последовательного корпоративного образа с помощью традиционных и инновационных маркетинговых каналов. Он умело сочетает художественное видение со стратегическим маркетингом, создавая убедительные истории бренда.

Комментарии

Комментариев пока нет. Будьте первым.