RTFM.WIKI

Ordnung muß sein. Ordnung über alles (18+)

Инструменты пользователя

Инструменты сайта


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.1linux:iptables:iptables_tips [2022/09/17 12:46] (текущий) dx
Строка 1: Строка 1:
 +====== Шпаргалка iptables ======
  
 +===== Вместо closed показывает filtered =====
 +
 +nmap при скане показывает filtered
 +
 +<code>
 +PORT     STATE    SERVICE
 +21/tcp   filtered ftp
 +80/tcp   open     http
 +443/tcp  open     https
 +3306/tcp filtered mysql
 +</code>
 +
 +хотя есть правило
 +
 +<code>iptables -A INPUT -p tcp --dport 3306 -j DROP</code>
 +
 +меняем drop на reject
 +
 +<code>-A INPUT -p tcp -m tcp --dport 3306 -j REJECT --reject-with tcp-reset</code>
 +
 +===== Лог трафика по uid/gid =====
 +
 +Отслеживаем исходящий трафик
 +
 +  * Создаём новую цепочку log_tr
 +  * Перенаправляем весь трафика из OUTPUT в log_tr если порт назначения http или https
 +  * Записываем весь трафик в log_tr цепочке включая юзерский uid/gid
 +
 +<code>
 +# 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: "
 +</code>
 +
 +В ''[r]syslog.conf'' добавляем что-то вроде FIXME
 +
 +<code>:msg, contains, "iptables: -/var/log/iptable_tr.log</code>
 +
 +===== Разрешить DNS =====
 +
 +<code>
 +iptables -A INPUT -p udp --dport 53 -j ACCEPT
 +iptables -A OUTPUT -p udp --sport 53 --dport 1024:65535 -j ACCEPT
 +</code>
 +
 +===== Can't use -i with OUTPUT =====
 +
 +''-i'' опция для указания входящего интерфейса. Поэтому в цепочке OUTPUT это работать не будет. Для этого существует ''-o'' опция.
 +
 +===== Как заблокировать пустые пакеты length 0 =====
 +
 +<code>iptables -A INPUT -p tcp -d 192.168.10.252 -m length --length 0 -j DROP</code>
 +
 +Блокировать без флага
 +
 +<code>iptables -A INPUT -p tcp ! --syn -m conntrack --state NEW -j DROP</code>
 +
 +===== Заблокировать доступ к домену на сервере =====
 +
 +На сервере расположен сайт foobar.com\\
 +Нужно заблокировать к нему доступ
 +
 +<code>
 +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
 +</code>
 +
 +===== Как сохранить правила iptables? =====
 +
 +https://www.thomas-krenn.com/en/wiki/Saving_Iptables_Firewall_Rules_Permanently
 +
 +==== CentOS ====
 +
 +FIX
 +
 +==== Debian 7 / Wheezy ====
 +
 +Устанавливаем пакет iptables-persistent
 +<code># apt-get install iptables-persistent</code>
 +
 +Сохраняем текущие правила iptables
 +<code># /etc/init.d/iptables-persistent save</code>
 +
 +Добавляем в автозагрузку
 +<code># update-rc.d iptables-persistent defaults</code>
 +
 +==== Debian 8 / Jessie ====
 +
 +Устанавливаем пакет netfilter-persistent
 +<code># apt-get install netfilter-persistent iptables-persistent</code>
 +
 +Сохраняем текущие правила iptables
 +<code># netfilter-persistent save</code>
 +
 +Добавляем в автозагрузку
 +<code># systemctl enable netfilter-persisten</code>
 +
 +В некоторых случаях может появиться следующая ошибка при установке пакета netfilter-persistent
 +
 +<code>
 +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)
 +</code>
 +
 +Workaround - закомментировать в **/etc/modules** строку **acpiphp** и перезагрузить машину.
 +
 +<code>
 +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
 +</code>
 +
 +<code>
 +
 +</code>
 +
 +<code>
 +
 +</code>
 +
 +=== Warning: weird character in interface `eth0:1' (No aliases, :, ! or *). ===
 +
 +<del>Busted</del> **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.
 +
 +<code>
 +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
 +</code>
 +
 +===== Как закрыть 8080 порт? =====
 +
 +Пример: ISPmgr, nginx (80) + apache (8080)
 +Нужно закрыть извне 8080 порт бэкенда.
 +
 +http://serveradministrator.ru/apache/close-port-apache-8080/
 +
 +<code>
 +iptables -A INPUT -p tcp --dport 8080 -s localhost -j ACCEPT
 +iptables -A INPUT -p tcp --dport 8080 -j DROP
 +</code>
 +
 +<code>
 +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
 +</code>
 +
 +===== Блокировка трафика из сети TOR =====
 +
 +Источник: http://saytostroy.ru/zashita_servera/blokirovka_trafika_iz_seti_tor/
 +
 +Список Tor IP - https://www.dan.me.uk/tornodes
 +
 +===== Сброс правил iptables =====
 +
 +<code>nano iptables-hello-world.sh</code>
 +
 +<code bash>
 +#!/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
 +</code>
 +
 +===== Как заблокировать подсеть =====
 +
 +http://www.linux.org.ru/forum/admin/6473844#comment-6473941
 +
 +<code>
 +iptables -A INPUT -s 91.20.0.0/16 -j REJECT
 +iptables -A OUTPUT -d 91.20.0.0/16 -j REJECT
 +</code>
 +
 +===== List of Loaded iptables Modules =====
 +
 +http://stackoverflow.com/questions/2023578/list-of-loaded-iptables-modules
 +
 +<code>
 +cat /proc/net/ip_tables_matches
 +</code>
 +
 +===== Как удалить iptables правило по номеру =====
 +
 +http://www.opennet.ru/tips/info/603.shtml
 +
 +<code>
 +iptables -L INPUT --line-numbers
 +iptables -D INPUT номер
 +
 +iptables -t nat -L POSTROUTING --line-numbers
 +iptables -t nat -D POSTROUTING номер
 +</code>
 +
 +Ошибка
 +
 +<code>postrouting iptables: No chain/target/match by that name</code>
 +
 +Не забываем про <code>-t nat</code>
 +
 +===== Настройка 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 вашего сервера)
 +
 +<code>service iptables stop</code>
 +
 +<code>
 +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 
 +</code>
 +
 +(необходимо добавить модуль iptables)
 +
 +<code>vi /etc/sysconfig/iptables-config</code>
 +
 +<code>
 +# 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"
 +</code>
 +<code>service iptables start</code>
 +
 +
 +данное решение поможет устранить вам ошибку
 +
 +<code>notice: user : aborting transfer: Data connection closed</code>
 +
 +<code>
 +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
 +</code>
 +
 +===== ip_conntrack: table full, dropping packet =====
 +
 +  * http://goodhack.net.ua/archives/304
 +  * http://phpsuxx.blogspot.ru/2010/01/nfconntrack-table-full-dropping-packet.html
 +
 +<code>
 +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.
 +</code>
 +
 +Show current value
 +<code>
 +cat /proc/sys/net/ipv4/ip_conntrack_max # 
 +</code>
 +
 +Set larger value
 +<code>
 +echo 65536 > /proc/sys/net/ipv4/ip_conntrack_max
 +</code>
 +
 +===== Kernel Packet Traveling Diagram =====
 +
 +http://www.docum.org/docum.org/kptd/
 +
 +<code>
 +                            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
 +</code>
 +
 +===== iptables mac address filtering =====
 +
 +Фильтрация mac адресов будет работать только если пакет проходит одну из следующих цепочек:
 +
 +  * PREROUTING
 +  * FORWARD
 +  * INPUT
 +
 +Запретить все входящие соединения для mac адреса 00:1F:2B:02:04:08
 +
 +<code bash>iptables -A INPUT -m mac --mac-source 00:1F:2B:02:04:08 -j DROP</code>
 +
 +Разрешить входящие соединения на 22 порт для mac адреса 00:1F:2B:02:04:08
 +
 +<code bash>iptables -A INPUT -p tcp --destination-port 22 -m mac --mac-source 00:1F:2B:02:04:08 -j ACCEPT</code>
 +
 +===== Закрыть 81 порт в схеме фронт/бэк/nginx/apache =====
 +
 +Вот так
 +
 +<code bash>
 +iptables -A INPUT -i lo -j ACCEPT
 +iptables -A INPUT -p tcp --dport 81 -j DROP
 +</code>
 +
 +Ранее в ISPmanager 4 Apache слушал внешний интерфейс и в итоге сайт мог быть доступен, как по 80 так и 81 порту <nowiki>(http:// rtfm.wiki:81)</nowiki>.
 +
 +Правило для iptables в этом случае выглядит так
 +
 +<code>
 +-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 
 +</code>
 +
 +===== Спасти HLDS =====
 +
 +[[http://rodoabad.joinpgn.com/2012/04/13/6-important-iptables-rules-for-your-hlds-server/|6 Important iptables Rules For Your HLDS Server]]
 +
 +<code bash>
 +-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
 +</code>
 +
 +{{tag>netfilter iptables drop}}