Введение
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. Вот как вы можете его получить:
|
1 |
sudo apt-get install iptables-persistent |

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

Приведенная выше команда обычно работает для версий Ubuntu после 16.04. Если вы используете более раннюю версию, используйте вместо нее эту команду:
|
1 |
sudo invoke-rc.d iptables-persistent save |
-
CentOS
Вы можете настроить брандмауэр с помощью iptables на CentOS 6 или более старых версиях. CentOS 7 вместо этого использует FirewallD. Следуйте этому руководству, чтобы узнать, как настроить FirewallD на CentOS 7.
Вы можете сохранить свои новые правила в CentOS с помощью инициализационного скрипта iptables. См. следующую команду:
|
1 |
sudo service iptables save |
Эта команда сохранит ваши новые правила для брандмауэра iptables. Текущие активные правила iptables можно найти в файле /etc/sysconfig/iptables .
Полезные команды Iptables
Теперь давайте перейдем к некоторым очень полезным командам брандмауэра iptables, которые могут вам понадобиться на вашем сервере.
-
Локальные соединения (Loopback)
Сначала мы рассмотрим, как можно разрешить локальные соединения (loopback). Ваша система использует локальный интерфейс для отправки соединений самой себе. Например, представьте, что вы запустили эту команду: ping localhost или ping 127.0.0.1. Ваш сервер будет использовать интерфейс обратной связи (loopback), или lo, чтобы, по сути, пинговать самого себя. В других случаях сервер может использовать его, если ваш сервер приложений настроен на подключение к адресу «localhost».
Независимо от ситуации, вам необходимо убедиться, что ваш брандмауэр iptables не блокирует эти соединения. Поэтому вам придется разрешить loopback-соединения, чтобы эти функции могли выполняться.
Вот команды, которые вы запустите, чтобы разрешить весь трафик, поступающий на интерфейс loopback:
|
1 2 |
sudo iptables -A INPUT -i lo -j ACCEPT sudo iptables -A OUTPUT -o lo -j ACCEPT |

-
Установленные и связанные входящие соединения
Еще один тип соединений, который вам может понадобиться разрешить, — это исходящие соединения. Чтобы убедиться, что ваш сервер принимает и отправляет как входящий, так и исходящий трафик соответственно, вам необходимо разрешить установленные и связанные входящие соединения. Это позволяет серверу отправлять обратный трафик для исходящих соединений. Используйте эту команду, чтобы разрешить установленные, а также связанные входящие соединения:
|
1 |
sudo iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT |
![]()
-
Установленные исходящие соединения
Сервер обычно отправляет ответы на входящие соединения в виде исходящего трафика установленных соединений. Чтобы разрешить их, используйте следующую команду:
|
1 |
sudo iptables -A OUTPUT -m conntrack --ctstate ESTABLISHED -j ACCEPT |
![]()
-
Из внутренней сети во внешнюю
Иногда вам может даже потребоваться настроить брандмауэр, чтобы предоставить внутренней сети доступ к внешней. По умолчанию вашей внешней сетью должна быть eth0 и eth1 должна быть вашей внутренней сетью. Если это так, используйте эту команду для включения доступа:
|
1 |
sudo iptables -A FORWARD -i eth1 -o eth0 -j ACCEPT |

-
Сброс недействительных пакетов
Иногда некоторые пакеты сетевого трафика помечаются как недействительные. В большинстве случаев вы можете просто сбросить эти недействительные пакеты. Для этого используйте следующую команду:
|
1 |
sudo iptables -A INPUT -m conntrack --ctstate INVALID -j DROP |
Правила для блокировки IP-адресов
Далее мы рассмотрим несколько команд, которые можно использовать для блокировки соединений, исходящих с определенных IP-адресов. Чтобы упростить задачу, мы будем использовать IP-адрес 15.15.15.51 в качестве примера в наших командах. Вы можете заменить это значение вашим конкретным IP-адресом.
|
1 |
sudo iptables -A INPUT -s 15.15.15.51 -j DROP |
В -s 15.15.15.51, символ -s означает источник (source). Таким образом, команда указывает исходный IP-адрес «15.15.15.51». Аналогично вы можете указать исходный IP-адрес в любом правиле брандмауэра. Это относится как к разрешающим, так и к отклоняющим правилам.
Если вы хотите отклонить соединение, вы будете использовать REJECT вместо DROP в команде следующим образом:
|
1 |
sudo iptables -A INPUT -s 15.15.15.51 -j REJECT |
В результате ваш сервер будет выдавать ошибку «connection refused» (соединение отклонено) всякий раз, когда этот конкретный IP-адрес отправляет запрос на соединение.
-
Блокировка соединений с определенным интерфейсом
Вы можете заблокировать все запросы на соединение, поступающие с определенного IP-адреса на определенный сетевой интерфейс. В нашем примере IP-адрес — 15.15.15.51, а сетевой интерфейс — eth0. Используйте эту команду для блокировки соединений:
|
1 |
iptables -A INPUT -i eth0 -s 15.15.15.51 -j DROP |
Отличная новость заключается в том, что вы можете указать сетевой интерфейс в любом правиле. Это означает, что любое правило может быть применено и ограничено только конкретной сетью.
Правила для службы: SSH
SSH становится актуальным, если вы используете облачный сервер. В этом случае вам необходимо разрешить входящие SSH-соединения на порту 22. Включение этих соединений позволяет вам подключаться к вашему серверу и управлять им. Здесь мы обсудим ряд общих правил, относящихся к SSH.
-
Разрешение всех входящих SSH-соединений
Следующие команды разрешают все входящие SSH-соединения:
|
1 2 |
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 |
В приведенном выше наборе вам нужно использовать вторую команду только в том случае, если политика OUTPUT не установлена в ACCEPT. Она разрешает исходящий трафик установленных SSH-соединений.
-
Разрешение входящих SSH-соединений из подсети
Предыдущая команда разрешает все входящие соединения. Вы можете использовать следующие команды, чтобы разрешить входящие соединения только с определенного IP-адреса или из подсети. Допустим, вы хотите разрешить входящие соединения только из подсети 15.15.15.0/24 :
|
1 2 |
sudo iptables -A INPUT -p tcp -s 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 |
Как и прежде, вам нужно использовать вторую команду только в том случае, если политика OUTPUT не установлена в ACCEPT. Она разрешает исходящий трафик установленных SSH-соединений.
-
Разрешение исходящих SSH-соединений
Используйте эти команды, если политика OUTPUT брандмауэра не установлена в ACCEPT и вы хотите разрешить SSH-соединения. Это позволит вашему серверу инициировать SSH-соединения с другими серверами:
|
1 2 |
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 |
Для получения дополнительной информации об использовании SSH на ваших облачных серверах ознакомьтесь с нашими руководствами по использованию SSH для подключения к удаленному серверу в Ubuntu и настройке аутентификации на основе ключей SSH на сервере Linux.
-
Разрешение входящих соединений Rsync из подсети
Rsync — это функция, которую можно использовать для передачи файлов с одной системы на другую. Она работает на порту 873. Поэтому, если вы хотите разрешить входящие соединения Rsync на порту 873 с определенного IP-адреса или из подсети, используйте следующие команды:
|
1 2 |
sudo iptables -A INPUT -p tcp -s 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 |
Как видите, мы указали исходный IP-адрес вместе с портом назначения. Вы будете использовать вторую команду только в том случае, если политика OUTPUT брандмауэра не установлена в ACCEPT. Она разрешает исходящий трафик установленных соединений Rsync. Кроме того, вы можете ознакомиться с нашим руководством по использованию Rsync для синхронизации локальных и удаленных каталогов на VPS.
Правила для службы: веб-сервер
HTTP-соединения обычно принимаются на порту 80. Аналогично, HTTPS обычно использует порт 443. Веб-серверы, такие как Apache и Nginx прослушивают эти порты для приема запросов на подключение. Иногда настройки по умолчанию могут приводить к тому, что ваш сервер отклоняет или сбрасывает эти входящие запросы. Вот почему вам нужно будет настроить новые правила, чтобы разрешить этот трафик.
-
Разрешение всех входящих HTTP-соединений
Вы можете разрешить все входящие HTTP-соединения на порту 80 с помощью следующих команд:
|
1 2 |
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 |
Вы будете использовать вторую команду только в том случае, если политика OUTPUT брандмауэра не установлена в ACCEPT. Она разрешает исходящий трафик установленных HTTP-соединений.
-
Разрешение всех входящих HTTPS-соединений
Используйте эти команды, чтобы разрешить все входящие запросы на подключение по HTTPS через порт 443:
|
1 2 |
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 |
Вы будете использовать вторую команду только в том случае, если политика брандмауэра iptables OUTPUT не установлена в ACCEPT. Она разрешает исходящий трафик установленных HTTP-соединений.
-
Разрешение всех входящих соединений по HTTP и HTTPS
Вы можете использовать модуль multiport, если хотите разрешить трафик как для HTTP, так и для HTTPS портов. В таком случае используйте следующие команды:
|
1 2 |
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 |
Вы будете использовать вторую команду только в том случае, если политика брандмауэра OUTPUT не установлена в ACCEPT. Она разрешает исходящий трафик установленных HTTP- и HTTPS-соединений.
Правила для службы: MySQL
Иногда клиент может использовать удаленный сервер для доступа к вашему серверу баз данных MySQL. В этом случае вам необходимо вручную разрешить входящий трафик с соответствующего порта. MySQL ожидает запросы на подключение на порту 3306.
-
Разрешение входящих подключений MySQL из подсети
Вам придется указать источник, если вы хотите разрешить подключения к MySQL из определенной подсети. В нашем примере мы разрешим входящий трафик из подсети 15.15.15.0/24 с помощью следующих команд:
|
1 2 |
sudo iptables -A INPUT -p tcp -s 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 |
Вы будете использовать вторую команду только в том случае, если политика брандмауэра OUTPUT не установлена в ACCEPT. Она разрешает исходящий трафик установленных соединений MySQL.
-
Разрешение подключений MySQL к интерфейсу
Если вы также хотите указать, какой сетевой интерфейс должен принимать подключения MySQL, вы можете использовать следующие команды:
|
1 2 |
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 |
В этом случае мы разрешаем подключения к частному сетевому интерфейсу с именем eth1.
Вы будете использовать вторую команду только в том случае, если политика брандмауэра OUTPUT не установлена в ACCEPT. Она разрешает исходящий трафик установленных соединений MySQL.
Вы можете воспользоваться нашим руководством по простой настройке MySQL на вашем сервере.
Правила для службы: PostgreSQL
Ваш клиент может использовать удаленный сервер для доступа к вашему серверу баз данных PostgreSQL. В этом случае вам необходимо разрешить эти входящие подключения. Эти подключения будут проходить через порт 5432.
-
Разрешение входящих подключений PostgreSQL из подсети
Вы можете использовать следующие команды, чтобы разрешить входящие подключения PostgreSQL из определенной подсети или IP-адреса. Как видите, мы указали источник — 15.15.15.0/24 подсеть.
|
1 2 |
sudo iptables -A INPUT -p tcp -s 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 |
Вы будете использовать вторую команду только в том случае, если политика брандмауэра OUTPUT не установлена в ACCEPT. Он разрешает исходящий трафик установленных соединений PostgreSQL.
-
Разрешение подключений PostgreSQL к определенному интерфейсу
Если вы хотите разрешить подключения к PostgreSQL только для определенного сетевого интерфейса, используйте следующие команды:
|
1 2 |
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 |
В данном случае мы разрешаем подключения к частному сетевому интерфейсу под названием eth1. Вторую команду нужно использовать только в том случае, если политика брандмауэра OUTPUT не установлена в значение ACCEPT. Она разрешает исходящий трафик установленных соединений PostgreSQL.
Следуйте этому руководству по установке PostgreSQL на сервер Ubuntu.
Правила для службы: Почта
Вам также может потребоваться настроить брандмауэр в соответствии с используемым почтовым сервером. Например, Sendmail и Postfix могут принимать подключения на различные порты. Это зависит от протокола, который вы используете для доставки почты. Чтобы блокировать и разрешать определенные почтовые подключения, вам необходимо знать, какой протокол вы используете.
-
Разрешение входящих SMTP-подключений
SMTP-подключения обычно поступают на порт 25. Хотя SMTP также часто использует порт 587 для исходящей почты. Чтобы разрешить вашему серверу отвечать на эти подключения, используйте следующие команды:
|
1 2 |
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 |
Вторую команду нужно использовать только в том случае, если политика брандмауэра OUTPUT не установлена в значение ACCEPT. Она разрешает исходящий трафик установленных SMTP-соединений.
-
Разрешение всех входящих IMAP
Чтобы разрешить вашему серверу отвечать на все входящие IMAP-подключения на порту 143, просто введите и выполните следующее:
|
1 2 |
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 |
Вторую команду нужно использовать только в том случае, если политика брандмауэра OUTPUT не установлена в значение ACCEPT. Она разрешает исходящий трафик установленных IMAP-соединений.
-
Разрешение всех входящих IMAPS
Используйте эти команды, чтобы разрешить вашему серверу отвечать на IMAPS-подключения на порту 993:
|
1 2 |
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 |
Вторую команду нужно использовать только в том случае, если политика брандмауэра OUTPUT не установлена в значение ACCEPT. Она разрешает исходящий трафик установленных IMAPS-соединений.
-
Разрешение всех входящих POP3
Эти подключения будут поступать на порт 993. Если вы хотите, чтобы ваш сервер отвечал на запросы подключения IMAPS, используйте следующие команды:
|
1 2 |
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 |
Вторую команду нужно использовать только в том случае, если политика брандмауэра OUTPUT не установлена в значение ACCEPT. Она разрешает исходящий трафик установленных POP3-соединений.
-
Разрешение всех входящих POP3S
Используйте эти команды, чтобы разрешить вашему серверу устанавливать соединения по запросам POP3S, поступающим на порт 995:
|
1 2 |
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 |
Вы будете использовать вторую команду только в том случае, если для брандмауэра OUTPUT политика не установлена в ACCEPT. Она разрешает исходящий трафик установленных соединений POP3S.
-
Как заблокировать исходящую почту SMTP
Вместо того чтобы разрешать входящие соединения и обеспечивать ответ сервера, вы можете полностью заблокировать исходящую почту. Вы можете заблокировать всю исходящую почту SMTP на порту 25 с помощью этой команды:
|
1 |
sudo iptables -A OUTPUT -p tcp --dport 25 -j REJECT |
В результате весь исходящий трафик на порту 25 будет отклоняться брандмауэром iptables. Вы можете использовать ту же структуру команд, если хотите отклонить любую другую службу. Все, что вам нужно сделать, это заменить порт 25 на соответствующий номер порта.
Заключение
В этом руководстве описаны основные команды брандмауэра iptables. Оно предоставляет вам необходимые инструменты для эффективной настройки брандмауэра iptables. Имейте в виду, что универсального решения не существует. Эти команды чрезвычайно гибки. Это означает, что вы можете использовать их любым удобным для вас способом, наилучшим образом соответствующим вашим требованиям.
Приятной работы!

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