Этот материал готовился когда то давно в рамках одной из лаб в универе. Лаба называлась «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.
Полезная статья? Их будет больше, если вы поддержите меня!