Займёмся правильной настройкой фаервола. На самом деле пакетный фильтр в 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