Все действия выполняются из под суперпользователя. sudo su
Закрываем всё:
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT DROP
Если нужно, чтобы на машину ходили пинги, нужно разрешить icmp-пакеты:
iptables -A INPUT -p icmp -j ACCEPT
iptables -A OUTPUT -p icmp -j ACCEPT
В этом случае пинги будут ходить отовсюду. Чтобы разрешить пинг только с конкретных ip/подсетей, пишем следующее (предыдущее не пишем):
iptables -A INPUT -s 192.168.0.100 -p icmp -j ACCEPT
iptables -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 ACCEPT
iptables -A OUTPUT -d 192.168.0.100 -p tcp --sport 22 -j ACCEPT
Не забываем открыть DNS порты, иначе сами сможем ходить в нет только по айпишникам:
iptables -A INPUT -p udp --sport 53 -j ACCEPT
iptables -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 ACCEPT
iptables -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 destination
ACCEPT icmp -- anywhere anywhere
ACCEPT udp -- anywhere anywhere udp spt:domain
ACCEPT tcp -- 192.168.0.100 anywhere tcp dpt:ssh
ACCEPT tcp -- anywhere anywhere tcp spt:www
ACCEPT tcp -- 192.168.0.100 anywhere tcp dpt:www
Chain FORWARD (policy DROP)
target prot opt source destination
ACCEPT tcp -- 192.168.0.0/24 192.168.0.21 tcp dpt:3389
ACCEPT tcp -- 192.168.0.21 192.168.0.0/24 tcp spt:3389
Chain OUTPUT (policy DROP)
target prot opt source destination
ACCEPT icmp -- anywhere anywhere
ACCEPT udp -- anywhere anywhere udp dpt:domain
ACCEPT tcp -- anywhere 192.168.0.100 tcp spt:ssh
ACCEPT tcp -- anywhere anywhere tcp dpt:www
ACCEPT tcp -- anywhere 192.168.0.100 tcp spt:www
Chain PREROUTING (policy ACCEPT)
target prot opt source destination
DNAT tcp -- anywhere 192.168.0.104 tcp dpt:3389 to:192.168.0.21
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
Chain POSTROUTING (policy ACCEPT)
target prot opt source destination
SNAT 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=2250
UPD: Для совсем начинающих: можете задать вопросы в комментах или в личку. Обязательно отвечу и постараюсь помочь с простыми решениями (в сложных сам не шарю)
UPD2: Недавно здесь выложили ещё один мануал
Комментариев нет:
Отправить комментарий
Примечание. Отправлять комментарии могут только участники этого блога.