Linux Server. 2 Настройка iptables

Posted by map[name:devi1 uri:https://www.blogger.com/profile/05777499482649623616] on Thursday, August 25, 2011

Займёмся правильной настройкой фаервола. На самом деле пакетный фильтр в Linux носит имя netfilter. А iptables - утилита для его настройки. Правильная настройка любого фаервола ведется по правилу: “Что не разрешено - то запрещено”. То есть сначала нужно закрыть всё.Все действия выполняются из под суперпользователя. sudo suЗакрываем всё:iptables -P INPUT DROPiptables -P FORWARD DROPiptables -P OUTPUT DROPЕсли нужно, чтобы на машину ходили пинги, нужно разрешить icmp-пакеты:iptables -A INPUT -p icmp -j ACCEPTiptables -A OUTPUT -p icmp -j ACCEPTВ этом случае пинги будут ходить отовсюду. Чтобы разрешить пинг только с конкретных ip/подсетей, пишем следующее (предыдущее не пишем):iptables -A INPUT -s 192.168.0.100 -p icmp -j ACCEPTiptables -A OUTPUT -d 192.168.0.100 -p icmp -j ACCEPTВ этом случае 192.168.0.100 - ip машины, с которой можно пинговать. Чтобы задать подсеть, достаточно написать 192.168.0.0/24, где 24 - маска подсети (можно писать 255.255.255.0).Открытие портов производим по такому же принципу. Если конкретный адрес/подсеть не указаны, порты откроются для всех. Не забываем, что если в цепочке INPUT указывается s (source), то в OUTPUT - d (destination), и наоборот. Откроем 22 порт для 192.168.0.100:iptables -A INPUT -s 192.168.0.100 -p tcp –dport 22 -j ACCEPTiptables -A OUTPUT -d 192.168.0.100 -p tcp –sport 22 -j ACCEPTНе забываем открыть DNS порты, иначе сами сможем ходить в нет только по айпишникам:iptables -A INPUT -p udp –sport 53 -j ACCEPTiptables -A OUTPUT -p udp –dport 53 -j ACCEPTПроброс портов:Задача:при попытке соединения с сервером (192.168.0.104) из локальной сети  (c IP 192.168.0.100) на порт RDP (3389) - соединять клиента с Windows-сервером (192.168.0.21).Тут нужен NAT. Сначала нужно включить его поддержкуecho net.ipv4.ip_forward=1 > /etc/sysctl.confПерезагружаемся.Теперь пишем правила:iptables -t nat -A PREROUTING –dst 192.168.0.104 -p tcp –dport 3389 -j DNAT –to-destination 192.168.0.21Этой командой мы говорим фаерволу, чтобы он добавил в таблицу nat в цепочку PREROUTING правило, которое в пакетах, идущих к машине с фаерволом (192.168.0.104) на порт 3389, заменял адрес назначения пакетов с 192.168.0.104 на 192.168.0.21.iptables -t nat -A POSTROUTING -p tcp –dst 192.168.0.21 –dport 3389 -j SNAT –to-source 192.168.0.104Это пишем уже в цепочку POSTROUTING (т.е. после принятия решения о маршрутизации) таблицы nat, в котором говорим, что пакеты, идущие от нас (192.168.0.104) к 192.168.0.21 меняли адрес отправителя на наш (192.168.0.104). Так как сейчас у них адрес отправителя (192.168.0.100 или адрес той машины, с которой мы хотим подключиться к RDP).Ещё два правила в таблицу filter:iptables -A FORWARD –dst 192.168.0.21 –src 192.168.0.0/24 -p tcp –dport 3389  -j ACCEPTiptables -A FORWARD –src 192.168.0.0/24 –dst 192.168.0.21 -p tcp –dport 3389  -j ACCEPTЭти правила разрешают прохождение пакетов из локалки 192.168.0.0/24 на Windows-сервер (192.168.0.21) на порт 3389 и обратно.Пока что у меня в фаерволе следующие правила:Chain INPUT (policy DROP)target     prot opt source               destinationACCEPT     icmp –  anywhere               anywhereACCEPT     udp  –  anywhere               anywhere            udp spt:domainACCEPT     tcp  –  192.168.0.100        anywhere            tcp dpt:sshACCEPT     tcp  –  anywhere                anywhere            tcp spt:wwwACCEPT     tcp  –  192.168.0.100        anywhere            tcp dpt:wwwChain FORWARD (policy DROP)target     prot opt source               destinationACCEPT     tcp  –  192.168.0.0/24       192.168.0.21        tcp dpt:3389ACCEPT     tcp  –  192.168.0.21         192.168.0.0/24      tcp spt:3389Chain OUTPUT (policy DROP)target     prot opt source               destinationACCEPT     icmp –  anywhere             anywhereACCEPT     udp  –  anywhere             anywhere              udp dpt:domainACCEPT     tcp  –  anywhere             192.168.0.100       tcp spt:sshACCEPT     tcp  –  anywhere             anywhere               tcp dpt:wwwACCEPT     tcp  –  anywhere             192.168.0.100       tcp spt:wwwChain PREROUTING (policy ACCEPT)target     prot opt source               destinationDNAT       tcp  –  anywhere             192.168.0.104       tcp dpt:3389 to:192.168.0.21Chain OUTPUT (policy ACCEPT)target     prot opt source               destinationChain POSTROUTING (policy ACCEPT)target     prot opt source               destinationSNAT       tcp  –  anywhere             192.168.0.21        tcp dpt:3389 to:192.168.0.104Мануалы:http://easylinux.ru/node/190/http://www.opennet.ru/docs/RUS/iptables/http://www.it-simple.ru/?p=2250UPD: Для совсем начинающих: можете задать вопросы в комментах или в личку. Обязательно отвечу и постараюсь помочь с простыми решениями (в сложных сам не шарю)UPD2: Недавно здесь выложили ещё один мануал


comments powered by Disqus