Различия
Показаны различия между двумя версиями страницы.
| linux:iptables:iptables_tips [2021/03/08 12:45] – создано - внешнее изменение 127.0.0.1 | linux:iptables:iptables_tips [2022/09/17 12:46] (текущий) – dx | ||
|---|---|---|---|
| Строка 1: | Строка 1: | ||
| + | ====== Шпаргалка iptables ====== | ||
| + | ===== Вместо closed показывает filtered ===== | ||
| + | |||
| + | nmap при скане показывает filtered | ||
| + | |||
| + | < | ||
| + | PORT | ||
| + | 21/ | ||
| + | 80/ | ||
| + | 443/ | ||
| + | 3306/tcp filtered mysql | ||
| + | </ | ||
| + | |||
| + | хотя есть правило | ||
| + | |||
| + | < | ||
| + | |||
| + | меняем drop на reject | ||
| + | |||
| + | < | ||
| + | |||
| + | ===== Лог трафика по uid/gid ===== | ||
| + | |||
| + | Отслеживаем исходящий трафик | ||
| + | |||
| + | * Создаём новую цепочку log_tr | ||
| + | * Перенаправляем весь трафика из OUTPUT в log_tr если порт назначения http или https | ||
| + | * Записываем весь трафик в log_tr цепочке включая юзерский uid/gid | ||
| + | |||
| + | < | ||
| + | # iptables -N log_tr | ||
| + | # iptables -I OUTPUT 1 -p tcp -m multiport --dports 80,443 -m state --state NEW -j log_tr | ||
| + | # iptables -A log_tr -j LOG --log-uid --log-prefix | ||
| + | </ | ||
| + | |||
| + | В '' | ||
| + | |||
| + | < | ||
| + | |||
| + | ===== Разрешить DNS ===== | ||
| + | |||
| + | < | ||
| + | iptables -A INPUT -p udp --dport 53 -j ACCEPT | ||
| + | iptables -A OUTPUT -p udp --sport 53 --dport 1024:65535 -j ACCEPT | ||
| + | </ | ||
| + | |||
| + | ===== Can't use -i with OUTPUT ===== | ||
| + | |||
| + | '' | ||
| + | |||
| + | ===== Как заблокировать пустые пакеты length 0 ===== | ||
| + | |||
| + | < | ||
| + | |||
| + | Блокировать без флага | ||
| + | |||
| + | < | ||
| + | |||
| + | ===== Заблокировать доступ к домену на сервере ===== | ||
| + | |||
| + | На сервере расположен сайт foobar.com\\ | ||
| + | Нужно заблокировать к нему доступ | ||
| + | |||
| + | < | ||
| + | iptables -A INPUT -p tcp --dport 80 -m string --string "Host: foobar.com" | ||
| + | iptables -A INPUT -p tcp --dport 80 -m string --string "Host: www.foobar.com" | ||
| + | </ | ||
| + | |||
| + | ===== Как сохранить правила iptables? ===== | ||
| + | |||
| + | https:// | ||
| + | |||
| + | ==== CentOS ==== | ||
| + | |||
| + | FIX | ||
| + | |||
| + | ==== Debian 7 / Wheezy ==== | ||
| + | |||
| + | Устанавливаем пакет iptables-persistent | ||
| + | < | ||
| + | |||
| + | Сохраняем текущие правила iptables | ||
| + | < | ||
| + | |||
| + | Добавляем в автозагрузку | ||
| + | < | ||
| + | |||
| + | ==== Debian 8 / Jessie ==== | ||
| + | |||
| + | Устанавливаем пакет netfilter-persistent | ||
| + | < | ||
| + | |||
| + | Сохраняем текущие правила iptables | ||
| + | < | ||
| + | |||
| + | Добавляем в автозагрузку | ||
| + | < | ||
| + | |||
| + | В некоторых случаях может появиться следующая ошибка при установке пакета netfilter-persistent | ||
| + | |||
| + | < | ||
| + | root@localhost: | ||
| + | Reading package lists... Done | ||
| + | Building dependency tree | ||
| + | Reading state information... Done | ||
| + | The following extra packages will be installed: | ||
| + | netfilter-persistent | ||
| + | The following NEW packages will be installed: | ||
| + | iptables-persistent netfilter-persistent | ||
| + | | ||
| + | ---cut--- | ||
| + | |||
| + | update-rc.d: | ||
| + | A dependency job for netfilter-persistent.service failed. See ' | ||
| + | invoke-rc.d: | ||
| + | dpkg: error processing package netfilter-persistent (--configure): | ||
| + | | ||
| + | dpkg: dependency problems prevent configuration of iptables-persistent: | ||
| + | | ||
| + | Package netfilter-persistent is not configured yet. | ||
| + | |||
| + | dpkg: error processing package iptables-persistent (--configure): | ||
| + | | ||
| + | Processing triggers for systemd (215-17+deb8u3) ... | ||
| + | Errors were encountered while processing: | ||
| + | | ||
| + | | ||
| + | E: Sub-process / | ||
| + | </ | ||
| + | |||
| + | Workaround - закомментировать в **/ | ||
| + | |||
| + | < | ||
| + | root@localhost: | ||
| + | # / | ||
| + | # | ||
| + | # This file contains the names of kernel modules that should be loaded | ||
| + | # at boot time, one per line. Lines beginning with "#" | ||
| + | |||
| + | loop | ||
| + | # acpiphp | ||
| + | </ | ||
| + | |||
| + | < | ||
| + | |||
| + | </ | ||
| + | |||
| + | < | ||
| + | |||
| + | </ | ||
| + | |||
| + | === Warning: weird character in interface `eth0: | ||
| + | |||
| + | < | ||
| + | |||
| + | ===== Port Forwarding RDP / Переадресовываем пакеты ===== | ||
| + | |||
| + | Перенаправление трафика | ||
| + | |||
| + | Клиент - x.x.x.x\\ | ||
| + | RDP сервер на порту 65001 - y.y.y.y\\ | ||
| + | VPS сервер z.z.z.z\\ | ||
| + | |||
| + | Нужно подключаться к RDP серверу через IP адрес VPS. Т.е. осуществлять подключение к RDP не напрямую, | ||
| + | |||
| + | < | ||
| + | net.ipv4.ip_forward = 1 | ||
| + | |||
| + | iptables -t nat -A PREROUTING -d z.z.z.z -p tcp -m tcp --dport 65001 -j DNAT --to-destination y.y.y.y: | ||
| + | iptables -t nat -A POSTROUTING -d y.y.y.y -p tcp -m tcp --dport 65001 -j SNAT --to-source z.z.z.z | ||
| + | iptables -t nat -A OUTPUT -d z.z.z.z -p tcp -m tcp --dport 65001 -j DNAT --to-destination y.y.y.y | ||
| + | </ | ||
| + | |||
| + | ===== Как закрыть 8080 порт? ===== | ||
| + | |||
| + | Пример: | ||
| + | Нужно закрыть извне 8080 порт бэкенда. | ||
| + | |||
| + | http:// | ||
| + | |||
| + | < | ||
| + | iptables -A INPUT -p tcp --dport 8080 -s localhost -j ACCEPT | ||
| + | iptables -A INPUT -p tcp --dport 8080 -j DROP | ||
| + | </ | ||
| + | |||
| + | < | ||
| + | iptables -A INPUT -p tcp -m tcp --dport 80 -j ACCEPT | ||
| + | iptables -A INPUT ! -s 109.68.191.13 -p tcp -m tcp --dport 8080 -j DROP | ||
| + | iptables -A INPUT ! -s 127.0.0.1 -p tcp -m tcp --dport 8080 -j DROP | ||
| + | iptables -I INPUT -i eth0 -s 127.0.0.1 -p tcp --dport 8080 -j ACCEPT | ||
| + | </ | ||
| + | |||
| + | ===== Блокировка трафика из сети TOR ===== | ||
| + | |||
| + | Источник: | ||
| + | |||
| + | Список Tor IP - https:// | ||
| + | |||
| + | ===== Сброс правил iptables ===== | ||
| + | |||
| + | < | ||
| + | |||
| + | <code bash> | ||
| + | #!/bin/bash | ||
| + | echo " | ||
| + | |||
| + | # clear ip4tables rules | ||
| + | |||
| + | iptables -P INPUT ACCEPT | ||
| + | iptables -P FORWARD ACCEPT | ||
| + | iptables -P OUTPUT ACCEPT | ||
| + | iptables -t nat -F | ||
| + | iptables -t mangle -F | ||
| + | iptables -F | ||
| + | iptables -X | ||
| + | |||
| + | # clear ip6tables rules | ||
| + | |||
| + | ip6tables -P INPUT ACCEPT | ||
| + | ip6tables -P FORWARD ACCEPT | ||
| + | ip6tables -P OUTPUT ACCEPT | ||
| + | ip6tables -t nat -F | ||
| + | ip6tables -t mangle -F | ||
| + | ip6tables -F | ||
| + | ip6tables -X | ||
| + | |||
| + | # default policy | ||
| + | iptables -P INPUT ACCEPT | ||
| + | iptables -P OUTPUT ACCEPT | ||
| + | iptables -P FORWARD ACCEPT | ||
| + | </ | ||
| + | |||
| + | ===== Как заблокировать подсеть ===== | ||
| + | |||
| + | http:// | ||
| + | |||
| + | < | ||
| + | iptables -A INPUT -s 91.20.0.0/ | ||
| + | iptables -A OUTPUT -d 91.20.0.0/ | ||
| + | </ | ||
| + | |||
| + | ===== List of Loaded iptables Modules ===== | ||
| + | |||
| + | http:// | ||
| + | |||
| + | < | ||
| + | cat / | ||
| + | </ | ||
| + | |||
| + | ===== Как удалить iptables правило по номеру ===== | ||
| + | |||
| + | http:// | ||
| + | |||
| + | < | ||
| + | iptables -L INPUT --line-numbers | ||
| + | iptables -D INPUT номер | ||
| + | |||
| + | iptables -t nat -L POSTROUTING --line-numbers | ||
| + | iptables -t nat -D POSTROUTING номер | ||
| + | </ | ||
| + | |||
| + | Ошибка | ||
| + | |||
| + | < | ||
| + | |||
| + | Не забываем про < | ||
| + | |||
| + | ===== Настройка iptables для proftpd, | ||
| + | |||
| + | * **[[http:// | ||
| + | * **[[http:// | ||
| + | |||
| + | (необходимо изменить ip 192.168.0.1 на ip вашего сервера) | ||
| + | |||
| + | < | ||
| + | |||
| + | < | ||
| + | iptables -A INPUT -p tcp -s 0/0 --sport 1024:65535 -d 192.168.0.1 --dport 21 -m state --state NEW, | ||
| + | iptables -A OUTPUT -p tcp -s 192.168.0.1 --sport 21 -d 0/0 --dport 1024:65535 -m state --state ESTABLISHED -j ACCEPT | ||
| + | iptables -A INPUT -p tcp -s 0/0 --sport 1024:65535 -d 192.168.0.1 --dport 1024:65535 -m state --state ESTABLISHED, | ||
| + | </ | ||
| + | |||
| + | (необходимо добавить модуль iptables) | ||
| + | |||
| + | < | ||
| + | |||
| + | < | ||
| + | # Load additional iptables modules (nat helpers) | ||
| + | # | ||
| + | # Space separated list of nat helpers (e.g. ' | ||
| + | # are loaded after the firewall rules are applied. Options for the helpers are | ||
| + | # stored in / | ||
| + | IPTABLES_MODULES=" | ||
| + | IPTABLES_MODULES=" | ||
| + | </ | ||
| + | < | ||
| + | |||
| + | |||
| + | данное решение поможет устранить вам ошибку | ||
| + | |||
| + | < | ||
| + | |||
| + | < | ||
| + | iptables -A OUTPUT -p tcp --sport 21 -m state --state ESTABLISHED -j ACCEPT | ||
| + | iptables -A OUTPUT -p tcp --sport 20 -m state --state ESTABLISHED, | ||
| + | iptables -A OUTPUT -p tcp --sport 1024: --dport 1024: -m state --state ESTABLISHED -j ACCEPT | ||
| + | iptables -A INPUT -p tcp --dport 21 -m state --state NEW, | ||
| + | iptables -A INPUT -p tcp --dport 20 -m state --state ESTABLISHED -j ACCEPT | ||
| + | iptables -A INPUT -p tcp --sport 1024: --dport 1024: -m state --state ESTABLISHED, | ||
| + | </ | ||
| + | |||
| + | ===== ip_conntrack: | ||
| + | |||
| + | * http:// | ||
| + | * http:// | ||
| + | |||
| + | < | ||
| + | wmod kernel: ip_conntrack: | ||
| + | wmod kernel: printk: 2449 messages suppressed. | ||
| + | wmod kernel: ip_conntrack: | ||
| + | wmod kernel: printk: 2041 messages suppressed. | ||
| + | </ | ||
| + | |||
| + | Show current value | ||
| + | < | ||
| + | cat / | ||
| + | </ | ||
| + | |||
| + | Set larger value | ||
| + | < | ||
| + | echo 65536 > / | ||
| + | </ | ||
| + | |||
| + | ===== Kernel Packet Traveling Diagram ===== | ||
| + | |||
| + | http:// | ||
| + | |||
| + | < | ||
| + | Network | ||
| + | -----------+----------- | ||
| + | | | ||
| + | +--------------------------+ | ||
| + | +-------+-------+ | ||
| + | | IPCHAINS | ||
| + | | | ||
| + | +-------+-------+ | ||
| + | | | | | ||
| + | | | +-------+-------+ | | ||
| + | | | | mangle | ||
| + | | | +-------+-------+ | | ||
| + | | | | IMQ | | | ||
| + | | | +-------+-------+ | | ||
| + | | | | nat | | <- DEST REWRITE | ||
| + | | | +-------+-------+ | DNAT or REDIRECT or DE-MASQUERADE | ||
| + | | +---------+---------+ | ||
| + | +------------+-------------+ | ||
| + | | | ||
| + | | ||
| + | | ||
| + | | ||
| + | | ||
| + | | | ||
| + | | ||
| + | this machine | | ||
| + | +--------------+ | ||
| + | | | + PDBB | ||
| + | | +---------------+ | ||
| + | +-------+-------+ | ||
| + | | | ||
| + | | | ||
| + | | +-----+-----+ | | | ||
| + | | | | ||
| + | | +-----+-----+ | | | ||
| + | | | | ||
| + | | +-----+-----+ | | | ||
| + | +-------+-------+ | ||
| + | | | ||
| + | +-------+-------+ | ||
| + | | | ||
| + | | Process | ||
| + | +-------+-------+ | ||
| + | | | ||
| + | +-------+-------+ | ||
| + | | OUTPUT | ||
| + | | ROUTING | ||
| + | +-------+-------+ | ||
| + | | | ||
| + | +-------+-------+ | ||
| + | | IPTABLES | ||
| + | | | ||
| + | | +-----------+ | | | ||
| + | | | conntrack | | | | ||
| + | | +-----+-----+ | | | ||
| + | | | | ||
| + | | +-----+-----+ | | | ||
| + | | | nat | | <-DEST REWRITE | ||
| + | | +-----+-----+ | DNAT or REDIRECT | ||
| + | | | | ||
| + | | +-----+-----+ | | | ||
| + | +-------+-------+ | ||
| + | | | | ||
| + | +----------------------+----------------------+ | ||
| + | | | ||
| + | +------------+------------+ | ||
| + | | | | ||
| + | +-------+-------+ | ||
| + | | IPCHAINS | ||
| + | | | ||
| + | +-------+------- | ||
| + | | | | mangle | ||
| + | | | +-------+-------+ | | ||
| + | | | | nat | | <- SOURCE REWRITE | ||
| + | | | +-------+-------+ | SNAT or MASQUERADE | ||
| + | | | | IMQ | | | ||
| + | | | +-------+-------+ | | ||
| + | | | ||
| + | +------------+------------+ | ||
| + | | | ||
| + | +------+------+ | ||
| + | | | ||
| + | | EGRESS | ||
| + | +------+------+ | ||
| + | | | ||
| + | -----------+----------- | ||
| + | Network | ||
| + | </ | ||
| + | |||
| + | ===== iptables mac address filtering ===== | ||
| + | |||
| + | Фильтрация mac адресов будет работать только если пакет проходит одну из следующих цепочек: | ||
| + | |||
| + | * PREROUTING | ||
| + | * FORWARD | ||
| + | * INPUT | ||
| + | |||
| + | Запретить все входящие соединения для mac адреса 00: | ||
| + | |||
| + | <code bash> | ||
| + | |||
| + | Разрешить входящие соединения на 22 порт для mac адреса 00: | ||
| + | |||
| + | <code bash> | ||
| + | |||
| + | ===== Закрыть 81 порт в схеме фронт/ | ||
| + | |||
| + | Вот так | ||
| + | |||
| + | <code bash> | ||
| + | iptables -A INPUT -i lo -j ACCEPT | ||
| + | iptables -A INPUT -p tcp --dport 81 -j DROP | ||
| + | </ | ||
| + | |||
| + | Ранее в ISPmanager 4 Apache слушал внешний интерфейс и в итоге сайт мог быть доступен, | ||
| + | |||
| + | Правило для iptables в этом случае выглядит так | ||
| + | |||
| + | < | ||
| + | -A ISPMGR -s a.b.c.d/32 -p tcp -m tcp --dport 81 -j ACCEPT | ||
| + | -A ISPMGR -p tcp -m tcp --dport 81 -j DROP | ||
| + | </ | ||
| + | |||
| + | ===== Спасти HLDS ===== | ||
| + | |||
| + | [[http:// | ||
| + | |||
| + | <code bash> | ||
| + | -A JOINPGN-INPUT -p tcp -m tcp --dport XXXXXX: | ||
| + | -A JOINPGN-INPUT -p udp -m udp --dport XXXXXX: | ||
| + | -A JOINPGN-INPUT -p tcp -m tcp --dport XXXXXX: | ||
| + | -A JOINPGN-INPUT -p udp -m udp --dport XXXXXX: | ||
| + | -A JOINPGN-INPUT -p tcp -m tcp --dport XXXXXX: | ||
| + | -A JOINPGN-INPUT -p udp -m udp --dport XXXXXX: | ||
| + | </ | ||
| + | |||
| + | {{tag> | ||