Stylesheet conf/userstyle.css not found, please contact the developer of "dokuwiki_2024" template.
linux:iptables:iptables_tips
Различия
Показаны различия между двумя версиями страницы.
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> |