5W site logo 5W - мой домашний сайт-блог с картинками, кино и плюшками.

iptables-example-home.txt

вариант включения фаервола скриптом с нужными правилами при
поднятии сетевых интерфейсов.
В этом случае, скриптик приведенный ниже, надо положить в
/etc/network/if-pre-up/ Даже видно из названия директории в
которую я его поместил, что он запустится перед поднятием сетевых
интерфейсов. Название дал ему 00-snat, вы можете назвать как
пожелаете. Главное чтобы у него был бит X — тоесть розрешен запуск. Итак, скрипт:

#!/bin/sh
### - Delete All Rules - ###
iptables -F
iptables -F -t nat
### - Rules For IP from INET - ###
iptables -N from_inet
iptables -A from_inet -p tcp -m conntrack --ctstate NEW,INVALID --tcp-flags SYN,ACK SYN,ACK -j REJECT --reject-with tcp-reset
iptables -A from_inet -p tcp -m multiport --dports 22,53,80 -j ACCEPT
iptables -A from_inet -p udp -m multiport --dports 53 -j ACCEPT
iptables -A from_inet -p icmp --icmp-type 8 -j ACCEPT
#iptables -N from_lan
#iptables -A from_lan -p tcp -m multiport --dports 22,53,80,139,445 -j ACCEPT
#iptables -A from_lan -p udp -m multiport --dports 53,137,138 -j ACCEPT
#iptables -A from_lan -p icmp -j ACCEPT
#iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -i lo -j ACCEPT
iptables -A INPUT -i eth0 -j from_inet
### - Rules For IP from LAN - ###
#iptables -A INPUT -i eth1 -j from_lan
iptables -A INPUT -i eth1 -j ACCEPT
### - FWD Rules - ###
iptables -A FORWARD -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD -m mac --mac-source 00:CC:AA:FF:AA:FF -j ACCEPT
iptables -A FORWARD -p tcp -d 192.168.0.3 --dport 4662 -j ACCEPT
### - NAT - ###
iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -o eth0 -j SNAT --to-source 123.123.123.123
### - Default Policies - ###
iptables -P INPUT DROP
iptables -P OUTPUT ACCEPT
iptables -P FORWARD DROP
## - DNAT for AMule - ###
iptables -t nat -A PREROUTING -i eth0 -p tcp --destination-port 4662 -j DNAT --to-destination 192.168.0.3:4662
iptables -t nat -A PREROUTING -i eth0 -p udp --destination-port 4672 -j DNAT --to-destination 192.168.0.3:4672
iptables -t nat -A PREROUTING -i eth0 -p udp --destination-port 4665 -j DNAT --to-destination 192.168.0.3:4665
Даем права на запуск:

# chmod +x /etc/network/if-pre-up/00-snat
Вот такой скрипт Ничего сложного и непонятного тут нету.
Все предельно просто.

Как видите есть даже заготовка для случая с недоверенной локальной
сетью. Если необходимо — просто розкомментируйте все что касается
from_lan и закомментируйте правило:

#iptables -A INPUT -i eth1 -j ACCEPT
В результате все что придет на внутренний интерфейс сервера в
цепочку INPUT будет направляться в цепочку from_lan и
обрабатываться ее правилами, а уж что неполучит ACCEPT в
цепочке from_lan, согласно default police для INPUT, будет молча
игнорироваться — DROP! Тоесть мы получим еще и полный контроль
над траффиком который приходит из внутрисети непосредственно на
внутренний интерфейс сервера

Кроме того, я заморочился, и разрешил forwarding только для
одного mac адреса — конечно, клиентского. Чегото захотелось
выпендриться. Можете смело заменить на правило с ip, а то что с
mac убрать

Тоесть, заменяем вот это правило с mac address:
iptables -A FORWARD -m mac --mac-source 00:CC:AA:FF:AA:FF -j ACCEPT

На правило с конкретным ip (если доступ нужно дать только одному клиенту) :
iptables -A FORWARD -s 192.168.0.3 -j ACCEPT

Или на приавило вида ip/mask (если доступ надо дать целой подсети):
iptables -A FORWARD -s 192.168.0.0/24 -j ACCEPT

Ну вот и все! Скажу лиш напоследок, что данный набор правил р
аботает у меня дома вполне исправно уже несколько месяцев.
К томуже, написан весьма прозрачно для дополнительных правок,
поэтому легко можно модифицировать и под более сложные задачи

Также замечу, что для еще большей безопасности, использую
программку fail2ban которая очень эффективно защищает от атак
называемых bruteforce. После нескольких неверных попыток
авторизации или поиска у нас на сервере чегото непонятно чего
(Error 404 в Apache) клиент блочится фаерволом на определенный
промежуток времени. Все это достаточно тонко настраивается, может
напишу в следующих заметках. Данная утилитка позволяет защищать
сервер от какеров которые пытаются сломать ssh, apache, dovecot,
разные ftp и много всего (правила для срабатывая блокировки
описываются перловыми regexp-ами — это дает нам возможность
защитить что угодно при условии наличия логов).