RTFM.WIKI

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

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

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


linux:iptables:iptables_tips

Шпаргалка 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?

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

Сброс правил 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

Как удалить 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

(необходимо изменить 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

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

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

Обсуждение

Ваш комментарий. Вики-синтаксис разрешён:
 
linux/iptables/iptables_tips.txt · Последнее изменение: 2022/09/17 12:46 — dx