flip:linux:ipatables
Различия
Показаны различия между двумя версиями страницы.
Следующая версия | Предыдущая версия | ||
flip:linux:ipatables [2024/12/02 21:51] – создано flip | flip:linux:ipatables [2024/12/02 22:44] (текущий) – flip | ||
---|---|---|---|
Строка 1: | Строка 1: | ||
- | FIXME | ||
- | |||
====== IPTABLES ====== | ====== IPTABLES ====== | ||
- | |||
Утилита командной строки для настройки встроенного в ядро Linux межсетевого экрана, | Утилита командной строки для настройки встроенного в ядро Linux межсетевого экрана, | ||
- | IPTABLES справочник и заметки, | ||
- | Таблицы ipatables | ||
- | raw - предназначена для обработки пакетов прежде, | ||
- | mangle - используется для модификации некоторых заголовков (TTL, TOS) и маркировке пакетов и соединений, | ||
- | nat - предназначен для преобразования адресов и портов источника и назначения пакетов, | ||
- | filter - применяется, | ||
- | security - используется для работы совместно с системами принудительного контроля доступа, | ||
- | Внутренние цепочки | + | ==== Таблицы |
- | PREROUTING - используется для всего входящего трафика до принятия первого решения о маршрутизации | + | |
- | INPUT - применяется для входящего трафика текущего узла | + | |
- | FORWARD - через нее проходит транзитный трафик узла | + | |
- | OUTPUT - применятся для исходящего трафика текущего узла | + | |
- | POSTROUTING - используется для всего исходящего трафика после принятия всех решений о маршрутизации | + | |
- | Действия | + | **raw** |
- | ACCEPT | + | **mangle** - используется для модификации некоторых заголовков (TTL, TOS) и маркировке пакетов и соединений, содержит цепочки PREROUTING, INPUT, FORWARD, OUTPUT и POSTROUTING. \\ |
- | DROP - удалить пакет; | + | **nat** - предназначен для преобразования адресов и портов источника и назначения |
- | REJECT - отклонить пакет, отправителю будет отправлено сообщение, что пакет | + | **filter** |
- | LOG - сделать запись о пакете в лог файл; | + | **security** - используется для работы совместно с системами принудительного |
- | QUEUE - отправить пакет пользовательскому приложению. | + | |
- | Основные действия | + | |
- | -A - добавить правило в цепочку; | + | ==== Внутренние цепочки ==== |
- | -С - проверить все правила; | + | |
- | -D - удалить правило; | + | **PREROUTING** - используется для всего входящего трафика до принятия первого решения о маршрутизации \\ |
- | -I - вставить правило с нужным номером; | + | **INPUT** - применяется для входящего трафика текущего узла \\ |
- | -L - вывести все правила в текущей цепочке; | + | **FORWARD** - через нее проходит транзитный трафик узла \\ |
- | -S - вывести все правила; | + | **OUTPUT** - применятся для исходящего трафика текущего узла \\ |
- | -F - очистить все правила; | + | **POSTROUTING** - используется для всего исходящего трафика после принятия всех решений о маршрутизации |
- | -N - создать цепочку; | + | |
- | -X - удалить цепочку; | + | |
+ | ==== Действия ==== | ||
+ | |||
+ | **ACCEPT** - разрешить прохождение пакета дальше по цепочке правил; | ||
+ | **DROP** - удалить пакет; \\ | ||
+ | **REJECT** - отклонить пакет, отправителю будет отправлено сообщение, | ||
+ | **LOG** - сделать запись о пакете в лог файл; \\ | ||
+ | **QUEUE** - отправить пакет пользовательскому приложению. | ||
+ | |||
+ | |||
+ | ==== Основные действия | ||
+ | |||
+ | -A - добавить правило в цепочку; | ||
+ | -С - проверить все правила; | ||
+ | -D - удалить правило; | ||
+ | -I - вставить правило с нужным номером; | ||
+ | -L - вывести все правила в текущей цепочке; | ||
+ | -S - вывести все правила; | ||
+ | -F - очистить все правила; | ||
+ | -N - создать цепочку; | ||
+ | -X - удалить цепочку; | ||
-P - установить действие по умолчанию. | -P - установить действие по умолчанию. | ||
- | Дополнительные опции правил | + | |
+ | ==== Дополнительные опции правил | ||
-p - указать протокол, | -p - указать протокол, | ||
- | mh; | + | mh; \\ |
- | -s - указать ip адрес устройства-отправителя пакета; | + | -s - указать ip адрес устройства-отправителя пакета; |
- | -d - указать ip адрес получателя; | + | -d - указать ip адрес получателя; |
- | -i - входной сетевой интерфейс; | + | -i - входной сетевой интерфейс; |
- | -o - исходящий сетевой интерфейс; | + | -o - исходящий сетевой интерфейс; |
-j - выбрать действие, | -j - выбрать действие, | ||
- | Статусы соединений | ||
- | NEW — установка нового соединения, | ||
- | RELATED — соединение, | ||
- | ESTABLISHED — установленное сетевое соединение. | ||
- | INVALID — пакет не может быть идентифицирован как принадлежащий какому-то соединению. | ||
- | UNTRACKED — пакеты, | ||
- | Примечание | + | ==== Статусы соединений ==== |
+ | |||
+ | **NEW** — установка нового соединения, | ||
+ | **RELATED** — соединение, | ||
+ | **ESTABLISHED** — установленное сетевое соединение. \\ | ||
+ | **INVALID** — пакет не может быть идентифицирован как принадлежащий какому-то соединению. \\ | ||
+ | **UNTRACKED** — пакеты, | ||
+ | |||
+ | |||
+ | ==== Примечание | ||
Команда iptables имеет такой общий вид: | Команда iptables имеет такой общий вид: | ||
- | # iptables -t таблица действие цепочка дополнительные_параметры | + | < |
- | Команды и примеры | + | iptables -t таблица действие цепочка дополнительные_параметры |
- | Установка iptables | + | </ |
- | # apt-get install iptables | + | |
- | Список правил | + | |
- | # iptables -L | + | ===== Команды и примеры |
+ | |||
+ | ==== Установка iptables | ||
+ | |||
+ | < | ||
+ | apt-get install iptables | ||
+ | </ | ||
+ | |||
+ | ==== Список правил | ||
+ | |||
+ | < | ||
+ | iptables -L | ||
+ | </ | ||
Подробный список | Подробный список | ||
- | # iptables -nvL | + | < |
- | Сброс всех правил | + | iptables -nvL |
- | # iptables -F | + | </ |
- | # iptables -X | + | |
- | # iptables -t nat -F | + | ==== Сброс всех правил |
- | # iptables -t nat -X | + | |
- | # iptables -t mangle -F | + | < |
- | # iptables -t mangle -X | + | iptables -F |
- | # iptables -t raw -F | + | iptables -X |
- | # iptables -t raw -X | + | iptables -t nat -F |
- | # iptables -t security -F | + | iptables -t nat -X |
- | # iptables -t security -X | + | iptables -t mangle -F |
- | # iptables -P INPUT ACCEPT | + | iptables -t mangle -X |
- | # iptables -P FORWARD ACCEPT | + | iptables -t raw -F |
- | # iptables -P OUTPUT ACCEPT | + | iptables -t raw -X |
- | Cохранить все правила iptables | + | iptables -t security -F |
- | # / | + | iptables -t security -X |
- | Добавляем автоматическую загрузку правил iptables | + | iptables -P INPUT ACCEPT |
+ | iptables -P FORWARD ACCEPT | ||
+ | iptables -P OUTPUT ACCEPT | ||
+ | </ | ||
+ | |||
+ | ==== Cохранить все правила iptables | ||
+ | |||
+ | < | ||
+ | / | ||
+ | </ | ||
+ | |||
+ | ==== Добавляем автоматическую загрузку правил iptables | ||
Устанавливаем: | Устанавливаем: | ||
- | # apt-get install netfilter-persistent iptables-persistent | + | < |
- | Правила хранятся в следующих файлах и применяются при загрузке операционной системы. | + | apt-get install netfilter-persistent iptables-persistent |
+ | </ | ||
+ | |||
+ | Правила хранятся в следующих файлах и применяются при загрузке операционной системы. | ||
Для IPv4 используется файл: | Для IPv4 используется файл: | ||
- | / | + | |
+ | > / | ||
Для IPv6 используется файл: | Для IPv6 используется файл: | ||
- | / | + | |
+ | > / | ||
Варианты использования: | Варианты использования: | ||
- | service netfilter-persistent {flush, force-reload, | + | service netfilter-persistent {flush, force-reload, |
- | flush - очистить правила | + | flush - очистить правила |
- | reload - загрузить из файлов | + | reload - загрузить из файлов |
save - сохранить в файлы | save - сохранить в файлы | ||
- | Шлюз | + | |
+ | ==== Шлюз | ||
Редактируем файл / | Редактируем файл / | ||
- | # nano / | + | < |
+ | nano / | ||
+ | </ | ||
Нужно раскомментировать строку | Нужно раскомментировать строку | ||
- | net.ipv4.ip_forward=1 | + | > net.ipv4.ip_forward=1 |
Применить настройки без перезагрузки (или перезагрузить) | Применить настройки без перезагрузки (или перезагрузить) | ||
- | # sysctl -p | + | < |
+ | sysctl -p | ||
+ | </ | ||
- | Настраиваем iptables: | + | Настраиваем iptables: |
- | eth0 — Интерфейс который смотрит в интернет | + | eth0 — Интерфейс который смотрит в интернет |
eth1 — Локальная сеть | eth1 — Локальная сеть | ||
- | # iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE | + | < |
- | # iptables -A FORWARD -i eth1 -o eth0 -j ACCEPT | + | iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE |
+ | iptables -A FORWARD -i eth1 -o eth0 -j ACCEPT | ||
+ | </ | ||
Конфигурация будет работать до перезагрузки, | Конфигурация будет работать до перезагрузки, | ||
- | Заблокировать IP-адрес в iptables | + | |
- | # iptables -A INPUT -s 192.168.100.1 -j DROP | + | ==== Заблокировать IP-адрес в iptables |
- | Разрешить IP-адрес в iptables | + | |
- | # iptables -A INPUT -s 192.168.100.1 -j ACCEPT | + | < |
- | Открыть порт в iptables | + | iptables -A INPUT -s 192.168.100.1 -j DROP |
- | # iptables -A INPUT -p tcp -m multiport --dports 22,80,443 -j ACCEPT | + | </ |
+ | |||
+ | |||
+ | ==== Разрешить IP-адрес в iptables | ||
+ | |||
+ | < | ||
+ | iptables -A INPUT -s 192.168.100.1 -j ACCEPT | ||
+ | </ | ||
+ | |||
+ | |||
+ | ==== Открыть порт в iptables | ||
+ | |||
+ | < | ||
+ | iptables -A INPUT -p tcp -m multiport --dports 22,80,443 -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 22 -j ACCEPT |
- | # iptables -A INPUT -p tcp --dport 443 -j ACCEPT | + | iptables -A INPUT -p tcp --dport 80 -j ACCEPT |
- | Закрыть порт в iptables | + | iptables -A INPUT -p tcp --dport 443 -j ACCEPT |
- | # iptables -A INPUT -p tcp --dport 21 -j DROP | + | </ |
- | Запретить ICMP ping трафик | + | |
- | # iptables -A INPUT -p icmp --icmp-type 8 -j DROP | + | |
- | Переадресация порта — redirect | + | ==== Закрыть порт в iptables |
+ | |||
+ | < | ||
+ | iptables -A INPUT -p tcp --dport 21 -j DROP | ||
+ | </ | ||
+ | |||
+ | |||
+ | ==== Запретить ICMP ping трафик | ||
+ | |||
+ | < | ||
+ | iptables -A INPUT -p icmp --icmp-type 8 -j DROP | ||
+ | </ | ||
+ | |||
+ | |||
+ | ==== Переадресация порта — redirect | ||
Например с 8080 на 80 | Например с 8080 на 80 | ||
- | # iptables -A INPUT -p tcp --dport 8080 -j ACCEPT | + | < |
- | # iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-ports 8080 | + | iptables -A INPUT -p tcp --dport 8080 -j ACCEPT |
- | Разрешить соединения по SSH | + | iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-ports 8080 |
- | # iptables -t filter -A INPUT -p tcp -m tcp --dport 22 -j ACCEPT | + | </ |
- | Пример фильтров для FTP | + | |
+ | |||
+ | ==== Разрешить соединения по SSH ==== | ||
+ | |||
+ | < | ||
+ | iptables -t filter -A INPUT -p tcp -m tcp --dport 22 -j ACCEPT | ||
+ | </ | ||
+ | |||
+ | |||
+ | ==== Пример фильтров для FTP ==== | ||
Очень простой пример — работа с FTP-сервером. Мы подключаемся к порту 21/tcp, в момент подключения соединение получается статус NEW, а затем ESTABLISHED. Управляющие команды идут через порт 21/tcp, но при работе для передачи файлов необходимо открыть еще и 20/tcp. И соединение на порт 20/tcp получает статус RELATED. Таким образом, | Очень простой пример — работа с FTP-сервером. Мы подключаемся к порту 21/tcp, в момент подключения соединение получается статус NEW, а затем ESTABLISHED. Управляющие команды идут через порт 21/tcp, но при работе для передачи файлов необходимо открыть еще и 20/tcp. И соединение на порт 20/tcp получает статус RELATED. Таким образом, | ||
- | # iptables -t filter -A INPUT -p tcp -m tcp --dport 20 -m state --state RELATED, | + | < |
- | # iptables -t filter -A INPUT -p tcp -m tcp --dport 21 -m state --state NEW, | + | iptables -t filter -A INPUT -p tcp -m tcp --dport 20 -m state --state RELATED, |
+ | iptables -t filter -A INPUT -p tcp -m tcp --dport 21 -m state --state NEW, | ||
+ | </ | ||
В этом случае без установки подключения на порт 21 мы не получим доступ к порту 20. | В этом случае без установки подключения на порт 21 мы не получим доступ к порту 20. | ||
- | Маскарадинг (или маскирование) | ||
- | Правило для адресной трансляции: | ||
- | # iptables -t nat -A POSTROUTING -s 192.168.0.0/ | + | ==== Маскарадинг (или маскирование) |
- | Это правило после обработки пакетов осуществит маскирование, если пакеты из внутренней сети направлены куда-то в другую подсеть. Если нам нужно | + | |
- | # iptables -t nat -A POSTROUTING -s 192.168.2.0/ | + | Правило для адресной трансляции: |
- | Источники | + | |
- | https:// | + | |
- | https://losst.ru/nastrojka-iptables-dlya-chajnikov | + | < |
+ | iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -d ! 192.168.0.0/24 -j MASQUERADE | ||
+ | </ | ||
+ | |||
+ | Это правило после обработки пакетов осуществит маскирование, | ||
- | https://wiki.archlinux.org/title/Iptables_(%D0%A0%D1%83%D1%81%D1%81%D0%BA%D0%B8%D0%B9) | + | < |
+ | iptables -t nat -A POSTROUTING -s 192.168.2.0/24 -d 192.168.0.0/24 -j MASQUERADE | ||
+ | </code> | ||
- | https:// | + | ===== Источники ===== |
- | https:// | + | * [[https:// |
+ | * [[https:// | ||
+ | * [[https:// | ||
+ | * [[https:// | ||
+ | * [[https:// | ||
+ | * [[https:// | ||
- | https:// |
flip/linux/ipatables.1733176275.txt.gz · Последнее изменение: 2024/12/02 21:51 — flip