====== Шпаргалка iptables ====== ===== Вместо closed показывает filtered ===== nmap при скане показывает filtered PORT STATE SERVICE 21/tcp filtered ftp 80/tcp open http 443/tcp open https 3306/tcp filtered mysql хотя есть правило iptables -A INPUT -p tcp --dport 3306 -j DROP меняем drop на reject -A INPUT -p tcp -m tcp --dport 3306 -j REJECT --reject-with tcp-reset ===== Лог трафика по 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 "iptables: " В ''[r]syslog.conf'' добавляем что-то вроде FIXME :msg, contains, "iptables: " -/var/log/iptable_tr.log ===== Разрешить 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 ===== ''-i'' опция для указания входящего интерфейса. Поэтому в цепочке OUTPUT это работать не будет. Для этого существует ''-o'' опция. ===== Как заблокировать пустые пакеты length 0 ===== iptables -A INPUT -p tcp -d 192.168.10.252 -m length --length 0 -j DROP Блокировать без флага iptables -A INPUT -p tcp ! --syn -m conntrack --state NEW -j DROP ===== Заблокировать доступ к домену на сервере ===== На сервере расположен сайт foobar.com\\ Нужно заблокировать к нему доступ iptables -A INPUT -p tcp --dport 80 -m string --string "Host: foobar.com" -j DROP iptables -A INPUT -p tcp --dport 80 -m string --string "Host: www.foobar.com" -j DROP ===== Как сохранить правила iptables? ===== https://www.thomas-krenn.com/en/wiki/Saving_Iptables_Firewall_Rules_Permanently ==== CentOS ==== FIX ==== Debian 7 / Wheezy ==== Устанавливаем пакет iptables-persistent # apt-get install iptables-persistent Сохраняем текущие правила iptables # /etc/init.d/iptables-persistent save Добавляем в автозагрузку # update-rc.d iptables-persistent defaults ==== Debian 8 / Jessie ==== Устанавливаем пакет netfilter-persistent # apt-get install netfilter-persistent iptables-persistent Сохраняем текущие правила iptables # netfilter-persistent save Добавляем в автозагрузку # systemctl enable netfilter-persisten В некоторых случаях может появиться следующая ошибка при установке пакета netfilter-persistent root@localhost:~# apt-get install iptables-persistent 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: warning: start and stop actions are no longer supported; falling back to defaults A dependency job for netfilter-persistent.service failed. See 'journalctl -xn' for details. invoke-rc.d: initscript netfilter-persistent, action "start" failed. dpkg: error processing package netfilter-persistent (--configure): subprocess installed post-installation script returned error exit status 1 dpkg: dependency problems prevent configuration of iptables-persistent: iptables-persistent depends on netfilter-persistent (= 1.0.3); however: Package netfilter-persistent is not configured yet. dpkg: error processing package iptables-persistent (--configure): dependency problems - leaving unconfigured Processing triggers for systemd (215-17+deb8u3) ... Errors were encountered while processing: netfilter-persistent iptables-persistent E: Sub-process /usr/bin/dpkg returned an error code (1) Workaround - закомментировать в **/etc/modules** строку **acpiphp** и перезагрузить машину. root@localhost:~# cat /etc/modules # /etc/modules: kernel modules to load at boot time. # # This file contains the names of kernel modules that should be loaded # at boot time, one per line. Lines beginning with "#" are ignored. loop # acpiphp === Warning: weird character in interface `eth0:1' (No aliases, :, ! or *). === Busted **Deprecated!** Не используйте алиасы. И ifconfig тоже. ===== Port Forwarding RDP / Переадресовываем пакеты ===== Перенаправление трафика Клиент - x.x.x.x\\ RDP сервер на порту 65001 - y.y.y.y\\ VPS сервер z.z.z.z\\ Нужно подключаться к RDP серверу через IP адрес VPS. Т.е. осуществлять подключение к RDP не напрямую, а с адреса VPS. 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:65001 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 порт? ===== Пример: ISPmgr, nginx (80) + apache (8080) Нужно закрыть извне 8080 порт бэкенда. http://serveradministrator.ru/apache/close-port-apache-8080/ 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 ===== Источник: http://saytostroy.ru/zashita_servera/blokirovka_trafika_iz_seti_tor/ Список Tor IP - https://www.dan.me.uk/tornodes ===== Сброс правил iptables ===== nano iptables-hello-world.sh #!/bin/bash echo "Stopping iptables service" # 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://www.linux.org.ru/forum/admin/6473844#comment-6473941 iptables -A INPUT -s 91.20.0.0/16 -j REJECT iptables -A OUTPUT -d 91.20.0.0/16 -j REJECT ===== List of Loaded iptables Modules ===== http://stackoverflow.com/questions/2023578/list-of-loaded-iptables-modules cat /proc/net/ip_tables_matches ===== Как удалить iptables правило по номеру ===== http://www.opennet.ru/tips/info/603.shtml iptables -L INPUT --line-numbers iptables -D INPUT номер iptables -t nat -L POSTROUTING --line-numbers iptables -t nat -D POSTROUTING номер Ошибка postrouting iptables: No chain/target/match by that name Не забываем про -t nat ===== Настройка iptables для proftpd,vsftpd ===== * **[[http://www.linux.org.ru/forum/admin/6948939|[iptables] DROP vs. REJECT]]** * **[[http://phpsuxx.blogspot.com/2010/01/nfconntrack-table-full-dropping-packet.html|nf_conntrack: table full, dropping packet в dmesg]]** (необходимо изменить ip 192.168.0.1 на ip вашего сервера) service iptables stop iptables -A INPUT -p tcp -s 0/0 --sport 1024:65535 -d 192.168.0.1 --dport 21 -m state --state NEW,ESTABLISHED -j ACCEPT 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,RELATED -j ACCEPT iptables -A OUTPUT -p tcp -s 192.168.0.1 --sport 1024:65535 -d 0/0 --dport 1024:65535 -m state --state ESTABLISHED -j ACCEPT iptables -A OUTPUT -p tcp -s 192.168.0.1 --sport 20 -d 0/0 --dport 1024:65535 -m state --state ESTABLISHED,RELATED -j ACCEPT iptables -A INPUT -p tcp -s 0/0 --sport 1024:65535 -d 192.168.0.1 --dport 20 -m state --state ESTABLISHED -j ACCEPT (необходимо добавить модуль iptables) vi /etc/sysconfig/iptables-config # Load additional iptables modules (nat helpers) # Default: -none- # Space separated list of nat helpers (e.g. 'ip_nat_ftp ip_nat_irc'), which # are loaded after the firewall rules are applied. Options for the helpers are # stored in /etc/modprobe.conf. IPTABLES_MODULES="ip_conntrack_netbios_ns" IPTABLES_MODULES="ip_conntrack_ftp" service iptables start данное решение поможет устранить вам ошибку notice: user : aborting transfer: Data connection closed iptables -A OUTPUT -p tcp --sport 21 -m state --state ESTABLISHED -j ACCEPT iptables -A OUTPUT -p tcp --sport 20 -m state --state ESTABLISHED,RELATED -j ACCEPT 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,ESTABLISHED -j ACCEPT 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,RELATED,NEW -j ACCEPT ===== ip_conntrack: table full, dropping packet ===== * http://goodhack.net.ua/archives/304 * http://phpsuxx.blogspot.ru/2010/01/nfconntrack-table-full-dropping-packet.html wmod kernel: ip_conntrack: table full, dropping packet. wmod kernel: printk: 2449 messages suppressed. wmod kernel: ip_conntrack: table full, dropping packet. wmod kernel: printk: 2041 messages suppressed. Show current value cat /proc/sys/net/ipv4/ip_conntrack_max # Set larger value echo 65536 > /proc/sys/net/ipv4/ip_conntrack_max ===== Kernel Packet Traveling Diagram ===== http://www.docum.org/docum.org/kptd/ Network -----------+----------- | +--------------------------+ +-------+-------+ +---------+---------+ | IPCHAINS | | IPTABLES | | INPUT | | PREROUTING | +-------+-------+ | +-------+-------+ | | | | conntrack | | | | +-------+-------+ | | | | mangle | | <- MARK WRITE | | +-------+-------+ | | | | IMQ | | | | +-------+-------+ | | | | nat | | <- DEST REWRITE | | +-------+-------+ | DNAT or REDIRECT or DE-MASQUERADE | +---------+---------+ +------------+-------------+ | +-------+-------+ | QOS | | INGRESS | +-------+-------+ | packet is for +-------+-------+ packet is for this machine | INPUT | another address +--------------+ ROUTING +--------------+ | | + PDBB | | | +---------------+ | +-------+-------+ | | IPTABLES | | | INPUT | | | +-----+-----+ | | | | mangle | | | | +-----+-----+ | | | | filter | | | | +-----+-----+ | | +-------+-------+ | | +---------------------------+ +-------+-------+ | | | Local | +-------+-------+ +-------+-------+ | Process | | IPCHAINS | | IPTABLES | +-------+-------+ | FORWARD | | FORWARD | | +-------+-------+ | +-----+-----+ | +-------+-------+ | | | mangle | | <- MARK WRITE | OUTPUT | | | +-----+-----+ | | ROUTING | | | | filter | | +-------+-------+ | | +-----+-----+ | | | +-------+-------+ +-------+-------+ | | | IPTABLES | +---------------------------+ | OUTPUT | | | +-----------+ | | | | conntrack | | | | +-----+-----+ | | | | mangle | | <- MARK WRITE | | +-----+-----+ | | | | nat | | <-DEST REWRITE | | +-----+-----+ | DNAT or REDIRECT | | | filter | | | | +-----+-----+ | | +-------+-------+ | | | +----------------------+----------------------+ | +------------+------------+ | | +-------+-------+ +---------+---------+ | IPCHAINS | | IPTABLES | | OUTPUT | | POSTROUTING | +-------+------- | +-------+-------+ | | | | mangle | | <- MARK WRITE | | +-------+-------+ | | | | nat | | <- SOURCE REWRITE | | +-------+-------+ | SNAT or MASQUERADE | | | IMQ | | | | +-------+-------+ | | +---------+---------+ +------------+------------+ | +------+------+ | QOS | | EGRESS | +------+------+ | -----------+----------- Network ===== iptables mac address filtering ===== Фильтрация mac адресов будет работать только если пакет проходит одну из следующих цепочек: * PREROUTING * FORWARD * INPUT Запретить все входящие соединения для mac адреса 00:1F:2B:02:04:08 iptables -A INPUT -m mac --mac-source 00:1F:2B:02:04:08 -j DROP Разрешить входящие соединения на 22 порт для mac адреса 00:1F:2B:02:04:08 iptables -A INPUT -p tcp --destination-port 22 -m mac --mac-source 00:1F:2B:02:04:08 -j ACCEPT ===== Закрыть 81 порт в схеме фронт/бэк/nginx/apache ===== Вот так iptables -A INPUT -i lo -j ACCEPT iptables -A INPUT -p tcp --dport 81 -j DROP Ранее в ISPmanager 4 Apache слушал внешний интерфейс и в итоге сайт мог быть доступен, как по 80 так и 81 порту (http:// rtfm.wiki:81). Правило для 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://rodoabad.joinpgn.com/2012/04/13/6-important-iptables-rules-for-your-hlds-server/|6 Important iptables Rules For Your HLDS Server]] -A JOINPGN-INPUT -p tcp -m tcp --dport XXXXXX:XXXXXX-m length --length 0:32 -j DROP -A JOINPGN-INPUT -p udp -m udp --dport XXXXXX:XXXXXX -m length --length 0:32 -j DROP -A JOINPGN-INPUT -p tcp -m tcp --dport XXXXXX:XXXXXX -m length --length 222 -j DROP -A JOINPGN-INPUT -p udp -m udp --dport XXXXXX:XXXXXX -m length --length 222 -j DROP -A JOINPGN-INPUT -p tcp -m tcp --dport XXXXXX:XXXXXX -m length --length 222 -m string --hex-string "|a090909090909090901809a5000000000000000000000000000000000000000000000000|" --algo bm --to 65535 -j DROP -A JOINPGN-INPUT -p udp -m udp --dport XXXXXX:XXXXXX -m length --length 222 -m string --hex-string "|a090909090909090901809a5000000000000000000000000000000000000000000000000|" --algo bm --to 65535 -j DROP {{tag>netfilter iptables drop}}