Введение
Iptables – это программный брандмауэр для дистрибутивов Linux. Этот шпаргалка-подобный руководство предоставляет быстрый справочник по командам iptables, которые создадут правила брандмауэра, полезные в обычных, повседневных сценариях. Это включает примеры iptables для разрешения и блокировки различных служб по порту, сетевому интерфейсу и IP-адресу источника.
Как использовать это руководство
- Большинство правил, описанных здесь, предполагают, что ваш iptables установлен на DROP входящий трафик, через политику ввода по умолчанию, и вы хотите выборочно разрешить входящий трафик
- Используйте те разделы, которые применимы к тому, что вы пытаетесь достичь. Большинство разделов не зависят от других, поэтому вы можете использовать приведенные ниже примеры независимо
- Используйте меню содержания справа от этой страницы (при широких ширинах страницы) или функцию поиска вашего браузера, чтобы найти нужные разделы
- Скопируйте и вставьте примеры командной строки, приведенные ниже, заменив выделенные значения на свои собственные
Помните, что порядок ваших правил имеет значение. Все эти команды iptables
используют опцию -A
для добавления нового правила в конец цепочки. Если вы хотите поместить его в другое место цепочки, вы можете использовать опцию -I
, которая позволяет указать позицию нового правила (или разместить его в начале цепочки, не указывая номер правила).
Примечание: При работе с брандмауэрами обязательно следите за тем, чтобы не заблокировать себя на своем собственном сервере, блокируя трафик SSH (порт 22 по умолчанию). Если вы потеряете доступ из-за настроек брандмауэра, вам может потребоваться подключиться к нему через веб-консоль, чтобы восстановить свой доступ. Если вы используете DigitalOcean, вы можете прочитать документацию по нашему продукту Recovery Console для получения дополнительной информации. После подключения через консоль вы сможете изменить правила брандмауэра для разрешения доступа по SSH (или разрешить весь трафик). Если ваши сохраненные правила брандмауэра разрешают доступ по SSH, другим методом является перезагрузка сервера.
Помните, что вы можете проверить текущий набор правил iptables с помощью sudo iptables -S
и sudo iptables -L
.
Давайте рассмотрим команды iptables!
Сохранение правил
Правила iptables являются эфемерными, что означает, что для сохранения их после перезагрузки сервера их необходимо сохранить вручную.
На Ubuntu один из способов сохранения правил iptables – использовать пакет iptables-persistent
. Установите его с помощью apt, как показано ниже:
Во время установки вас спросят, хотите ли вы сохранить текущие правила брандмауэра.
Если вы обновили правила брандмауэра и хотите сохранить изменения, выполните эту команду:
Другие дистрибутивы Linux могут иметь альтернативные способы сделать ваши изменения iptables постоянными. Пожалуйста, обратитесь к соответствующей документации для получения дополнительной информации.
Перечисление и удаление правил
Если вы хотите узнать, как перечислить и удалить правила iptables, ознакомьтесь с этим руководством: Как перечислить и удалить правила брандмауэра iptables.
Общие полезные правила
Этот раздел включает различные команды iptables, которые создадут правила, которые обычно полезны на большинстве серверов.
Разрешение соединений к обратной петле
Интерфейс loopback, также известный как lo
, используется компьютером для перенаправления сетевых соединений к самому себе. Например, если вы запустите ping localhost
или ping 127.0.0.1
, ваш сервер выполнит пинг к самому себе, используя loopback. Интерфейс loopback также используется, если вы настраиваете сервер приложений для подключения к серверу базы данных с адресом localhost
. Поэтому вам следует убедиться, что ваш брандмауэр разрешает эти соединения.
Чтобы принять весь трафик на вашем интерфейсе loopback, выполните эти команды:
Разрешение входящих соединений, установленных и связанных
Поскольку сетевой трафик обычно должен быть двусторонним – входящим и исходящим – чтобы работать правильно, обычно создается правило брандмауэра, разрешающее установленный и связанный входящий трафик, чтобы сервер разрешал обратный трафик для исходящих соединений, инициированных самим сервером. Эта команда позволит это:
Разрешение исходящих соединений, установленных
Вам может понадобиться разрешить исходящий трафик всех установленных соединений, которые обычно являются ответом на законные входящие соединения. Эта команда позволит это сделать:
Разрешение внутренней сети на доступ к внешней
Предполагая, что eth0
– это ваша внешняя сеть, а eth1
– ваша внутренняя сеть, это позволит вашей внутренней сети получить доступ к внешней:
Отбрасывание недопустимых пакетов
Некоторые сетевые пакеты помечаются как недопустимые. Иногда может быть полезно вести журнал таких пакетов, но часто их можно безопасно отбросить. Сделайте это с помощью этой команды:
Блокирование IP-адреса
Чтобы заблокировать сетевые соединения, исходящие из определенного IP-адреса, например, 203.0.113.51
, выполните эту команду:
В этом примере -s 203.0.113.51
указывает исходный IP-адрес “203.0.113.51”. Исходный IP-адрес может быть указан в любом правиле брандмауэра, включая правило разрешения.
Если вы хотите отклонить соединение вместо этого, что приведет к ответу на запрос о соединении с ошибкой “соединение отклонено”, замените “DROP” на “REJECT” следующим образом:
Блокировка соединений с сетевым интерфейсом
Чтобы блокировать соединения с определенного IP-адреса, например, 203.0.113.51
, с определенным сетевым интерфейсом, например, eth0
, используйте эту команду:
Это то же самое, что и предыдущий пример, с добавлением -i eth0
. Сетевой интерфейс можно указывать в любом правиле брандмауэра и является отличным способом ограничить правило для конкретной сети.
Сервис: SSH
Если вы используете сервер без локальной консоли, вероятно, вы захотите разрешить входящие соединения SSH (порт 22), чтобы можно было подключиться к серверу и управлять им. В этом разделе рассматривается настройка вашего брандмауэра с различными правилами, связанными с SSH.
Разрешение всех входящих SSH
Для разрешения всех входящих соединений SSH выполните эти команды:
Вторая команда, которая разрешает исходящий трафик установленных SSH-соединений, необходима только в том случае, если политика OUTPUT
не установлена на ACCEPT
.
Разрешение входящих SSH из определенного IP-адреса или подсети
Чтобы разрешить входящие соединения SSH из определенного IP-адреса или подсети, укажите источник. Например, если вы хотите разрешить всю подсеть 203.0.113.0/24
, выполните эти команды:
Вторая команда, которая разрешает исходящий трафик установленных SSH-соединений, необходима только в том случае, если политика OUTPUT
не установлена на ACCEPT
.
Разрешение исходящего SSH
Если ваша политика вывода брандмауэра не установлена на ACCEPT
, и вы хотите разрешить исходящие SSH-соединения — ваш сервер инициирует SSH-соединение с другим сервером — вы можете выполнить эти команды:
Разрешение входящего Rsync с определенного IP-адреса или подсети
Rsync, который работает на порту 873, может использоваться для передачи файлов с одного компьютера на другой.
Чтобы разрешить входящие соединения rsync с определенного IP-адреса или подсети, укажите исходный IP-адрес и порт назначения. Например, если вы хотите разрешить всей подсети 203.0.113.0/24
использовать rsync для передачи файлов на ваш сервер, выполните эти команды:
Вторая команда, которая разрешает исходящий трафик установленных соединений rsync, необходима только в том случае, если политика OUTPUT
не установлена на ACCEPT
.
Сервис: Веб-сервер
Веб-серверы, такие как Apache и Nginx, обычно прослушивают запросы на портах 80 и 443 для HTTP и HTTPS соединений соответственно. Если ваша политика по умолчанию для входящего трафика установлена на отбрасывание или отклонение, вам следует создать правила, которые позволят вашему серверу отвечать на эти запросы.
Разрешение всех входящих HTTP
Для разрешения всех входящих соединений HTTP (порт 80) выполните эти команды:
Вторая команда, которая разрешает исходящий трафик установленных соединений HTTP, необходима только в том случае, если политика OUTPUT
не установлена в ACCEPT
.
Разрешение всех входящих HTTPS
Чтобы разрешить все входящие соединения HTTPS (порт 443), выполните эти команды:
Вторая команда, которая разрешает исходящий трафик установленных соединений HTTP, необходима только в том случае, если политика OUTPUT
не установлена в ACCEPT
.
Разрешение всех входящих HTTP и HTTPS
Если вы хотите разрешить как трафик HTTP, так и HTTPS, вы можете использовать модуль multiport, чтобы создать правило, разрешающее оба порта. Чтобы разрешить все входящие соединения HTTP и HTTPS (порт 443), выполните эти команды:
Вторая команда, которая позволяет исходящему трафику установленных HTTP и HTTPS соединений, необходима только в том случае, если политика OUTPUT
не установлена на ACCEPT
.
Служба: MySQL
MySQL прослушивает клиентские подключения на порту 3306. Если ваш сервер баз данных MySQL используется клиентом на удаленном сервере, вам необходимо убедиться, что этот трафик разрешен.
Разрешение доступа к MySQL из определенного IP-адреса или подсети
Чтобы разрешить входящие подключения MySQL из определенного IP-адреса или подсети, укажите источник. Например, если вы хотите разрешить весь поддиапазон 203.0.113.0/24
, выполните эти команды:
Вторая команда, которая позволяет исходящему трафику установленных соединений MySQL, необходима только в том случае, если политика OUTPUT
не установлена на ACCEPT
.
Разрешение доступа к MySQL через определенный сетевой интерфейс
Для разрешения подключений MySQL к определенному сетевому интерфейсу — скажем, у вас есть частный сетевой интерфейс eth1
, например — используйте эти команды:
Вторая команда, которая разрешает исходящий трафик установленных соединений MySQL, необходима только в том случае, если политика OUTPUT
не установлена на ACCEPT
.
Служба: PostgreSQL
PostgreSQL прослушивает клиентские подключения на порту 5432. Если ваш сервер базы данных PostgreSQL используется клиентом на удаленном сервере, убедитесь, что этот трафик разрешен.
PostgreSQL из конкретного IP-адреса или подсети
Чтобы разрешить входящие подключения PostgreSQL из определенного IP-адреса или подсети, укажите источник. Например, если вы хотите разрешить всю подсеть 203.0.113.0/24
, выполните эти команды:
Вторая команда, которая разрешает исходящий трафик установленных соединений PostgreSQL, необходима только в том случае, если политика OUTPUT
не установлена на ACCEPT
.
Разрешение подключения PostgreSQL к определенному сетевому интерфейсу
Чтобы разрешить подключения PostgreSQL к определенному сетевому интерфейсу – скажем, у вас есть частный сетевой интерфейс eth1
, например, используйте эти команды:
Вторая команда, которая разрешает исходящий трафик установленных соединений PostgreSQL, необходима только в том случае, если политика OUTPUT
не установлена на ACCEPT
.
Сервис: Почта
Почтовые серверы, такие как Sendmail и Postfix, слушают различные порты в зависимости от используемых протоколов для доставки почты. Если вы запускаете почтовый сервер, определите, какие протоколы вы используете, и разрешите соответствующие типы трафика. Мы также покажем вам, как создать правило для блокировки исходящей почты SMTP.
Блокировка исходящей почты SMTP
Если ваш сервер не должен отправлять исходящую почту, вам может потребоваться заблокировать такой вид трафика. Чтобы заблокировать исходящую почту SMTP, использующую порт 25, выполните эту команду:
Это настраивает iptables для отклонения всех исходящих трафиков на порту 25. Если вам нужно отклонить другой сервис по его номеру порта, вместо порта 25, замените этот номер порта на 25
выше.
Разрешение входящего трафика SMTP
Чтобы разрешить вашему серверу отвечать на соединения SMTP на порту 25, выполните эти команды:
Вторая команда, которая разрешает исходящий трафик установленных SMTP-соединений, необходима только в том случае, если политика OUTPUT
не установлена в ACCEPT
.
Разрешение входящего трафика IMAP
Чтобы разрешить вашему серверу отвечать на соединения IMAP, порт 143, выполните эти команды:
Вторая команда, которая разрешает исходящий трафик установленных IMAP-соединений, необходима только в том случае, если политика OUTPUT
не установлена в ACCEPT
.
Разрешение входящего трафика IMAPS
Чтобы разрешить вашему серверу отвечать на IMAPS-подключения, порт 993, выполните эти команды:
Вторая команда, которая разрешает исходящий трафик установленных IMAPS-соединений, необходима только в том случае, если политика OUTPUT
не установлена на ACCEPT
.
Разрешение всех входящих POP3
Чтобы разрешить вашему серверу отвечать на подключения POP3, порт 110, выполните эти команды:
Вторая команда, которая разрешает исходящий трафик установленных POP3-соединений, необходима только в том случае, если политика OUTPUT
не установлена на ACCEPT
.
Разрешение всех входящих POP3S
Чтобы разрешить вашему серверу отвечать на подключения POP3S, порт 995, выполните эти команды:
Вторая команда, которая разрешает исходящий трафик установленных POP3S-соединений, необходима только в том случае, если политика OUTPUT
не установлена на ACCEPT
.
Заключение
Это должно охватить множество команд, которые часто используются при настройке брандмауэра iptables. Конечно, iptables – очень гибкий инструмент, поэтому не стесняйтесь комбинировать команды с различными параметрами, чтобы соответствовать вашим конкретным потребностям, если они здесь не описаны.
Если вам нужна помощь в определении того, как должен быть настроен ваш брандмауэр, ознакомьтесь с этим руководством: Как выбрать эффективную политику брандмауэра для защиты ваших серверов.