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

12 set 2022 8 min di lettura
Как использовать правила и команды брандмауэра Iptables
Indice dei contenuti

Введение

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

Имейте в виду, что порядок ваших правил важен. Все эти команды iptables используют параметр -A для добавления нового правила в конец цепочки. Если вы хотите поместить его в другое место в цепочке, вы можете использовать параметр -I, который позволяет указать позицию нового правила (или просто поместить его в начало цепочки, не указывая номер правила).

Примечание.

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

Сохранить правила

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

Убунту

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

sudo apt-get update
sudo apt-get install iptables-persistent

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

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

sudo netfilter-persistent save

В версиях Ubuntu до 16.04 вместо этого выполните эту команду:

sudo invoke-rc.d iptables-persistent save

CentOS 8 и более ранние версии

В CentOS 6 и более ранних версиях (в CentOS 7 и более поздних версиях по умолчанию используется FirewallD) вы можете использовать сценарий инициализации iptables для сохранения правил iptables:

sudo service iptables save

Это сохранит ваши текущие правила iptables в /etc/sysconfig/iptables.

Общие полезные правила

Этот раздел включает в себя различные команды iptables, которые создают правила, полезные на большинстве серверов.

Разрешить петлевые соединения

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

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

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

Удалить (DROP) недопустимые пакеты

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

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-адрес " 15.15.15.51 ". Исходный IP-адрес может быть указан в любом правиле межсетевого экрана, в том числе в разрешающем (разрешающем) правиле.

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

sudo iptables -A INPUT -s 15.15.15.51 -j REJECT

Блокировать подключения к сетевому интерфейсу

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

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

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

Сервис: SSH

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

Разрешить входящий SSH

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

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.

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

Чтобы разрешить SSH-соединения с определенного IP-адреса или подсети, укажите источник. Например, если вы хотите разрешить всю подсеть 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.

Разрешить исходящий SSH

Если для политики OUTPUT вашего брандмауэра не установлено значение ACCEPT, и вы хотите разрешить исходящие SSH-соединения, то есть сервер, инициирующий 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 с определенного IP-адреса или подсети

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.

Сервис: Веб-сервер

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

Разрешить входящий трафик HTTP

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

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

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

Разрешить входящий HTTPS

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

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

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

Разрешить входящие HTTP и HTTPS

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

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

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

Сервис: MySQL

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

Разрешить MySQL с определенного IP-адреса или подсети

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

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 используется клиентом на удаленном сервере, вы должны обязательно разрешить этот трафик.

PostgreSQL с определенного IP-адреса или подсети

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

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

Вторая команда, которая разрешает исходящий трафик от установленных соединений 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. Если вам нужно отказаться от службы, отличной от номера порта, а не от порта 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.

Примечание.

Разрешить все входящие 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.

Разрешить все входящие IMAP

Чтобы сервер мог отвечать на подключения 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 — очень гибкий инструмент, так что не стесняйтесь пробовать и комбинировать команды с различными параметрами в соответствии с вашими конкретными потребностями, если они здесь не описаны.

Buy me a coffeeBuy me a coffee

Supportaci se ti piacciono i nostri contenuti. Grazie.

Successivamente, completa il checkout per l'accesso completo a Noviello.it.
Bentornato! Accesso eseguito correttamente.
Ti sei abbonato con successo a Noviello.it.
Successo! Il tuo account è completamente attivato, ora hai accesso a tutti i contenuti.
Operazione riuscita. Le tue informazioni di fatturazione sono state aggiornate.
La tua fatturazione non è stata aggiornata.