Iptables как с ним работать
Iptables - это мощный инструмент управления сетью в Linux, который позволяет администраторам управлять входящими и исходящими пакетами данных. Это основной инструмент для настройки межсетевых экранов в системах Linux.
Введение в Iptables
Iptables работает путем проверки пакетов данных на соответствие определенным критериям и выполнения заданных действий, если пакеты соответствуют этим критериям. Эти критерии и действия определяются в таблицах, которые состоят из набора правил.
В Iptables есть четыре основные таблицы:
Filter - это основная таблица, используемая для фильтрации пакетов.
NAT - эта таблица используется для настройки NAT (Network Address Translation).
Mangle - эта таблица используется для специальной обработки пакетов.
Raw - эта таблица используется для обхода системы отслеживания состояний.
Каждая таблица состоит из набора цепочек. Цепочки - это последовательности правил, которые применяются к пакетам. В Iptables есть три встроенные цепочки:
INPUT - эта цепочка применяется к пакетам, которые предназначены для самой системы.
FORWARD - эта цепочка применяется к пакетам, которые проходят через систему.
OUTPUT - эта цепочка применяется к пакетам, которые исходят из системы.
Базовые команды Iptables
Просмотр текущих правил
Чтобы просмотреть текущие правила, используйте команду iptables -L
. Это покажет все правила в таблице filter. Чтобы просмотреть правила в другой таблице, используйте флаг -t
, например, iptables -t nat -L
.
Добавление новых правил
Чтобы добавить новое правило, используйте команду iptables -A
. Например, чтобы заблокировать весь входящий трафик от IP-адреса 192.168.0.100, вы можете использовать следующую команду:
iptables -A INPUT -s 192.168.0.100 -j DROP
В этой команде -A INPUT
добавляет новое правило в цепочку INPUT, -s 192.168.0.100
определяет исходный IP-адрес, а -j DROP
указывает, что все пакеты, соответствующие этому правилу, должны быть отброшены.
Удаление правил
Чтобы удалить правило, вам нужно знать его номер в цепочке. Вы можете узнать номера правил, используя команду iptables -L --line-numbers
. Затем вы можете удалить правило, используя команду iptables -D
и номер правила. Например, чтобы удалить первое правило в цепочке INPUT, вы можете использовать следующую команду:
iptables -D INPUT 1
Изменение дефолтного политики
Вы можете изменить дефолтную политику для цепочки, используя команду iptables -P
. Например, чтобы отклонить все входящие пакеты по умолчанию, вы можете использовать следующую команду:
iptables -P INPUT DROP
Сохранение и восстановление правил
По умолчанию, правила iptables не сохраняются после перезагрузки системы. Чтобы сохранить текущие правила, вы можете использовать команду iptables-save
. Это выведет текущие правила в формате, который можно использовать для восстановления с помощью команды iptables-restore
.
iptables-save > /path/to/iptables/rules
Затем, чтобы восстановить правила, вы можете использовать следующую команду:
iptables-restore < /path/to/iptables/rules
Примеры использования Iptables
Блокировка IP-адреса
Чтобы заблокировать весь трафик от определенного IP-адреса, вы можете использовать следующую команду:
iptables -A INPUT -s 192.168.0.100 -j DROP
Открытие порта для входящего трафика
Чтобы открыть порт для входящего трафика, вы можете использовать следующую команду:
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
В этой команде -p tcp
указывает на протокол (в данном случае TCP), --dport 80
указывает на порт (в данном случае 80), а -j ACCEPT
указывает, что все пакеты, соответствующие этому правилу, должны быть приняты.
Настройка простого межсетевого экрана
Вы можете использовать iptables для настройки простого межсетевого экрана. Например, вы можете разрешить весь исходящий трафик, разрешить входящий трафик только на определенные порты и отклонить все остальные входящие пакеты.
iptables -A OUTPUT -j ACCEPT iptables -A INPUT -p tcp --dport 22 -j ACCEPT iptables -A INPUT -p tcp --dport 80 -j ACCEPT iptables -A INPUT -p tcp --dport 443 -j ACCEPT iptables -P INPUT DROP
В этом примере разрешен весь исходящий трафик, а входящий трафик разрешен только на порты 22 (SSH), 80 (HTTP) и 443 (HTTPS). Все остальные входящие пакеты отклоняются.
Расширенное использование Iptables
Логирование
Iptables предоставляет возможность логирования пакетов, что может быть полезно для отладки и мониторинга. Для включения логирования используйте цель LOG
. Например, чтобы залогировать все отброшенные пакеты, можно использовать следующую команду:
iptables -A INPUT -j LOG --log-prefix "Dropped Packet: " iptables -A INPUT -j DROP
Здесь --log-prefix "Dropped Packet: "
добавляет указанный префикс к каждому лог-сообщению, что упрощает фильтрацию и анализ логов.
Создание пользовательских цепочек
Iptables позволяет создавать пользовательские цепочки для более гибкого управления правилами. Например, вы можете создать цепочку для обработки всего трафика от определенного IP-адреса:
iptables -N MY_CHAIN iptables -A MY_CHAIN -s 192.168.0.100 -j DROP iptables -A INPUT -j MY_CHAIN
В этом примере команда -N MY_CHAIN
создает новую цепочку с именем MY_CHAIN. Затем добавляется правило, которое отбрасывает все пакеты от 192.168.0.100. Наконец, цепочка MY_CHAIN добавляется в цепочку INPUT, что означает, что все входящие пакеты будут также проходить через цепочку MY_CHAIN.
Использование состояний пакетов
Iptables может отслеживать состояние пакетов, что позволяет создавать более сложные правила. Например, вы можете разрешить только входящие пакеты, которые являются частью уже установленного соединения:
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
В этом примере -m state
указывает на использование модуля состояний, а --state ESTABLISHED,RELATED
указывает, что правило применяется только к пакетам, которые являются частью уже установленного или связанного соединения.
Использование Iptables для создания VPN
Iptables также может быть использован для создания VPN (Virtual Private Network). Это может быть полезно для создания безопасного соединения между удаленными системами. Например, вы можете использовать iptables для настройки IPsec VPN, используя модуль "policy" для определения правил обработки трафика.
iptables -A INPUT -m policy --dir in --pol ipsec -j ACCEPT iptables -A OUTPUT -m policy --dir out --pol ipsec -j ACCEPT
В этом примере -m policy
указывает на использование модуля "policy", --dir in
и --dir out
указывают на направление трафика, а --pol ipsec
указывает на использование IPsec политики.
Использование Iptables для ограничения скорости
Iptables также может быть использован для ограничения скорости сетевого трафика, что может быть полезно для управления пропускной способностью. Для этого можно использовать модуль "limit". Например, вы можете ограничить количество новых SSH-соединений до 3 в минуту следующим образом:
iptables -A INPUT -p tcp --dport 22 -m state --state NEW -m limit --limit 3/min -j ACCEPT
В этом примере -m limit --limit 3/min
указывает на ограничение скорости, а остальная часть команды определяет, что она применяется к новым SSH-соединениям.
Использование Iptables для редиректа трафика
Iptables может быть использован для редиректа трафика, что может быть полезно для перенаправления трафика на другой порт или сервер. Например, вы можете перенаправить весь входящий трафик на порт 80 на порт 8080 следующим образом:
iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-port 8080
В этом примере -t nat
указывает на использование таблицы NAT, -A PREROUTING
добавляет правило в цепочку PREROUTING, --dport 80
указывает на исходный порт, а --to-port 8080
указывает на порт назначения.
Iptables - это мощный и гибкий инструмент, который может быть использован для решения множества задач управления сетью. Однако, как и любой мощный инструмент, он требует тщательного понимания и практики для эффективного использования.
Заключение
Iptables является мощным и гибким инструментом для управления сетью в Linux. Он предлагает широкий спектр функций, включая фильтрацию пакетов, NAT, логирование и многое другое. Однако, несмотря на его мощь, iptables может быть сложным для новичков. Надеюсь, эта статья помогла вам разобраться в основах работы с iptables и дала вам основу для дальнейшего изучения этого мощного инструмента.
Комментарии (9)
sergio_deschino
12.07.2023 16:32+1Уже вторая статья про устаревший iptables за неделю… Ладно, тут хотя бы из песочницы, а не в корпоративном блоге. Тут мотив понятен, человек инвайт захотел, но мне не совсем понятно кто и зачем ее заапрувил..
ZakharovAV
12.07.2023 16:32Использование Iptables для создания VPN
Простите, а как вы с помощью iptables создали ipsec? Или хотя бы GRE? Или любой другой VPN? просто, кажется, тема не раскрыта. И где цепочка Security? И где пояснение для сего существуют разные таблицы и разные чайны? И куда поделились на ноль другие встроенные чайны? И про ограничение скорости немножко очень недосказанно...
ZakharovAV
12.07.2023 16:32+1Конечно же, говоря про "цепочку Security" я имел в виду таблицу Security
SamOwaR
iptables хорош, особенно в сочетании с ipset, который почему-то не был упомянут в статье.
Но тем не менее, iptables - это уже устаревшее решение, которое в современных дистрибутивах заменено на nftables.
MrSamovar Автор
Да, но будет полезно
p.s. Какой у Вас интересный ник)
dobry-kot
iptables это не про решение, а больше про синтаксис.
В наше время можете использоват nftables-api и настраивать netfilter через утилиту конвертер nft-iptables или как-то так называется, которая настраивает netfilter по реализации nftables интерфейсов.
Так что синтаксис и логика iptables с нами еще надолго.