Содержание
Шпаргалка 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
добавляем что-то вроде
: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
Источник: 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
(необходимо изменить 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
Обсуждение