Небольшой FAQ по iptables

Разрешаем производить только 4 коннекта к 22 порту в течении 60 секунд:

iptables -I INPUT -p tcp --dport 22 -i eth0 -m state --state NEW -m recent --set
iptables -I INPUT -p tcp --dport 22 -i eth0 -m state --state NEW -m recent --update --seconds 60 --hitcount 4 -j DROP


Как удалить iptables правило по номеру

iptables -L INPUT --line-numbers
iptables -D INPUT номер
iptables -t nat -L POSTROUTING --line-numbers
iptables -t nat -D POSTROUTING номер


Как ограничить пропускную полосу для пакетов помеченных меткой через MARK

Сделать MARK, и загнать все такие трансферы в какой-либо класс шейпера. Т.е. если например помеченные пакеты — все их отнести к классу 1:51 где скорость ограничена от 32К до 64К:

tc filter add dev eth1 parent 1:0 protocol ip prio 100 handle 51 fw classid 1:51
tc class add dev eth1 parent 1:2 classid 1:51 htb rate 32Kbit ceil 64Kbit
tc qdisc add dev eth1 parent 1:51 handle 51 sfq perturb 10


Как запретить пользователям качать большие файлы
— Собираем поддержку connbytes в patch-o-matic.
— Добавляем правило в firewall, например:

iptables -A FORWARD --connbytes 100000 -j REJECT

— теперь все TCP сессии более 100 Кбайт будут «обрезаны», необходимо добавить исключения для протоколов типа ssh, обычные «долгоживущие» чаты и т.п.

Борьба с Kazaa и прочим вредным трафиком путем вырезания пакетов по маске

— собираем поддержку «string» в patch-o-matic.
— смотрим на протокол Kazaa, в заголовках содержится:

HTTP/1.0 503 Service Unavailable.Retry-After: 3..X-Kazaa-Username: BlazeTre

— добавляем в firewall строчку — iptables -A FORWARD -m string —string «X-Kazaa-» -j REJECT

Как в Linux перебросить соединение через NAT во внутреннюю сеть (1)

Первый путь — пробрасывание только порта:

1) iptables -t nat -A PREROUTING -p tcp -d EXT_R_IP --dport 10000 -j DNAT --to-destination LOCAL_IP:80
2) iptables -A FORWARD -i eth0 -d LOCAL_IP -p tcp --dport 22 -j ACCEPT

Второй вариант — выброс всей машины наружу (если есть свободные адреса):

1) ifconfig eth0:0 NEW_IP netmask NETMASK broadcast BROADCAST
2) route add NEW_IP gw GW netmask 0.0.0.0 metric 1 dev eth0:0
3) iptables -t nat -A PREROUTING -p tcp -d NEW_IP -j DNAT --to-destination LOCAL_IP
4) iptables -A FORWARD -i eth0 -d LOCAL_IP -j ACCEPT

Обозначения: EXT_R_IP — внешний IP роутера, LOCAL_IP — внутренний IP машины, которую хочешь выбросить NEW_IP — новый IP на который хочешь посадить машину, которая имеет локальный LOCAL_IP NETMASK, BROADCAST, GW — внешние netmask, broadcast и gateway


Пример настройки NAT с привязкой к IP под Linux

iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -d 0/0 -o eth0 -j SNAT --to-source 212.23.98.45

или (без привязки к IP)

ipchains -A forward -j MASQ -s 192.168.0.0/16 -d 0.0.0.0/0

или (через iproute2)

ip rule add from 10.0.1.0/24 nat 254.147.38.14

Другой способ трансляции адресов:<

iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -d 0/0 -j MASQUERADE


Как ограничить через iptables максимальное число одновременных соединений с одного IP.

# Максимум 10 одновременных соединений к 80 порту с одного IP
iptables -A INPUT-p tcp --dport 80 -m iplimit --iplimit-above 10 -j REJECT
# Блокируем на стадии SYN
iptables -I INPUT -p tcp --syn --dport 80 -j DROP -m iplimit --iplimit-above 10
# 20 соединений на сеть класса С
iptables -p tcp --dport 80 -m iplimit --iplimit-above 20 --iplimit-mask 24 -j REJECT


Как посмотреть статистику по PREROUTING цепочкам в iptables.
> Делаю: >

iptables -t nat -A PREROUTING -p tcp --dport 80 -j DNAT --to 192.168.22.33:3128 &gt;

По iptables -L ничего не показывается.
Используйте:

iptables -t nat -L


Как настроить пакетный фильтр для фильтрации по содержимому пакетов
Следующие правила блокируют прохождение пакетов, данные в которых содержат подстроку virus.exe и ведут лог пакетов с строкой secret внутри:

iptables -A INPUT -m string --string "secret" -j LOG --log-level info --log-prefix "SECRET"
iptables -I INPUT -j DROP -p tcp -s 0.0.0.0/0 -m string --string "virus.exe"
# Block Code Red
iptables -I INPUT -j DROP -p tcp -m string --string "cmd.exe"
# Block Nimda
iptables -I INPUT -j DROP -p tcp -m string --string "root.exe"
iptables -I INPUT -j DROP -p tcp -m string --string "default.ida"


Как настроить NAT (транслятор адресов) для нормальной работы с FTP и ICQ в Linux
iptables:

modprobe iptable_nat
modprobe ip_conntrack_ftp
modprobe ip_nat_ftp
modprobe ip_nat_irc

ipchains:

modprobe ip_masq_ftp
modprobe ip_masq_raudio
modprobe ip_masq_irc
modprobe ip_masq_icq


Можно ли отфильтровывать пакеты (вести лог) в зависимости от UID пользователя ?>
Для FreeBSD:

ipfw add count tcp from any to not 192.168.1.0/24 uid 231

uid user (или gid group) — под правило попадают все TCP или UDP пакеты посланный или принятые пользователем user (группой group).
В Linux в ядрах 2.4.x в iptables можно использовать модуль owner.

Ограничение трафика через iptables (1)

iptables --new-chain car
iptables --insert OUTPUT 1 -p tcp --destination-port 25 -o eth1 --jump car
iptables --append car -m limit --limit 20/sec --jump RETURN
iptables --append car --jump DROP

Источник