Iptables — защита локальной сети

Этот материал готовился когда то давно в рамках одной из лаб в универе. Лаба называлась «iptables – защита локальной сети». Необходимо было настроить iptables на компе, который служил шлюзом и «раздавал» интернет в локальную сеть. Для этого я соорудил подобие такой схемы дома – комп-шлюз и «локальный» комп. На обеих машинах стоял Mandriva Linux.

В локальной машине использовались следующие настройки сети:

IP-адрес – 192.168.3.2
Маска – 255.255.255.252
Шлюз – 192.168.3.1
DNS-сервер – 192.168.3.1

Настройки шлюза для eth1:

IP-адрес – 192.168.3.1
Маска – 255.255.255.252

Настройки шлюза для eth0:

IP-адрес – 192.168.1.2
Маска – 255.255.255.0
Шлюз – 192.168.1.1

Примечание: интернет на eth0 подавался через маршрутизатор, подключенный к сети.

Скрипт настроек с комментариями получился следующим:

#./bin/sh
#настройки для защиты локальной сети
#объявление переменных
IPT=/sbin/iptables
WAN_IF=eth0 #смотрит в интернет
LAN_IF=eth1 #смотрит в локальную сеть
# Ports
SSH="22"
HTTP="80"
DNS="53"
SMTP="25"
POP3="110"
FTP="20:21"

#разрешаем forwarding пакетов, записывая 1 в файл. (сбрасывается на 0 при перезагрузке)
echo "1" > /proc/sys/net/ipv4/ip_forward

# На всякий случай правим настройки
echo 0 > /proc/sys/net/ipv4/conf/all/accept_source_route
echo 1 > /proc/sys/net/ipv4/tcp_syncookies
echo 0 > /proc/sys/net/ipv4/conf/all/accept_redirects
echo 0 > /proc/sys/net/ipv4/conf/all/send_redirects
echo 1 > /proc/sys/net/ipv4/conf/all/rp_filter
echo 1 > /proc/sys/net/ipv4/conf/all/log_martians

#удаляем содержимое всех таблиц и цепочек
$IPT -F
$IPT -X
$IPT -Z

for table in filter nat mangle
do
$IPT -t $table -F # flush
$IPT -t $table -X # delete
$IPT -t $table -Z # zero
done

$IPT -P INPUT   DROP
$IPT -P OUTPUT  ACCEPT

#подмена IP-адресов на адрес шлюза
$IPT -t nat -A POSTROUTING -o eth0 -j SNAT --to-source 192.168.1.2

#разрешаем выход по нужным протоколам
#$IPT -A OUTPUT -p tcp --dport $HTTP -j ACCEPT
#$IPT -A OUTPUT -i $WAN_IF -o $LAN_IF -m state --state ESTABLISHED,RELATED -j ACCEPT

#запрещаем по умолчанию
$IPT -P FORWARD DROP
#разрешаем forwarding только для определенных портов
$IPT -A FORWARD -p tcp --dport $HTTP -j ACCEPT
$IPT -A FORWARD -p tcp --dport $POP3 -j ACCEPT
$IPT -A FORWARD -p tcp --dport $FTP -j ACCEPT

#проброс ICMP-запросов через шлюз: ping и trace
$IPT -A FORWARD -p ICMP -s 0/0 --icmp-type 8 -j ACCEPT
$IPT -A FORWARD -p ICMP -s 0/0 --icmp-type 11 -j ACCEPT

# Разрешим форвард пакетов пришедших из интернета и просятся в локальную сеть. Но только для тех компьютеров и портов, соединение с которыми было ранее установленным (пакетами ушедшими в интернет из локальной сети)
$IPT -A FORWARD -i $WAN_IF -o $LAN_IF -m state --state ESTABLISHED,RELATED -j ACCEPT

# Разрешим нас пинговать
$IPT -A INPUT -i $WAN_IF -p icmp -m icmp -j ACCEPT
#$IPT -A INPUT -i $WAN_IF -p icmp --icmp-type 8 -j ACCEPT

# Разрешим на входе все пакеты, для которых соединение установлено ранее (соединение установили вышедшие пакеты)
$IPT -A INPUT -i $WAN_IF -m state --state ESTABLISHED,RELATED -j ACCEPT

# Разрешаем пинговать нас из локальной сети; а также trace
$IPT -A INPUT -i $LAN_IF -p icmp --icmp-type 8 -j ACCEPT
$IPT -A INPUT -i $LAN_IF -p icmp --icmp-type 11 -j ACCEPT

# Разрешаем кольцевой буфер
$IPT -A INPUT -i lo -j ACCEPT

Следует не забыть на клиентской машине в файле /etc/resolv.conf вписать строчку вида «nameserver 192.168.3.1», где 192.168.3.1 — адрес настроенного сервера, раздающего интернет. т. к. этот файл перетирается при каждой перезагрузке, то лучше всего прописать DNS-сервер в настройках интерфейса в графическом режиме. Также можно в ручную поправить конфигурационный файл /etc/sysconfig/network-scripts/ifcfg-ethX, дописав туда адрес DNS.

В Windows для этого нужно прописать «предпочитаемый DNS-сервер» в настройках соединения по аналогичному принципу.

Помимо этого нужно установить и запустить пакет dnsmasq. Все настройки Dnsmasq производятся в файле /etc/dnsmasq.conf. В нем необходимо снять знак комментария со строки:

listen-address=127.0.0.1

Определив подходящие в вашей ситуации сетевые фильтры, можно сохранить настройки, чтобы они были восстановлены после перезагрузки. Для iptables следует выполнить следующую команду:

/sbin/service iptables save

При этом настройки сохранятся в файле /etc/sysconfig/iptables и будут восстановлены при перезагрузке.

P.S: Более подробно об iptables можно почитать в Интернете. В той же Википедии все расписано довольно неплохо.  Ну и не грех будет заглянуть в руководство по iptables.

Полезная статья? Их будет больше, если вы поддержите меня!

https://money.yandex.ru/embed/small.xml?account=410011399843532&quickpay=small&yamoney-payment-type=on&button-text=06&button-size=l&button-color=orange&targets=%D0%9F%D0%BE%D0%B4%D0%B4%D0%B5%D1%80%D0%B6%D0%B8%D0%B2%D0%B0%D1%8E+%D0%BF%D1%80%D0%BE%D0%B5%D0%BA%D1%82+lexpenz.com&default-sum=50&successURL=