LINUX.ORG.RU

Как заблокировать исходящий трафик в Интернет с компьютеров из локальной сети?


2

1

Здравствуйте, господа. Имеется самосборный сетевой шлюз на Debian Wheezy (192.168.0.1). Также имеются ПК пользователей c Windows 7\8.1 (192.168.0.31, 192.168.0.33, 192.168.0.61). На Sidebar винды выведен гаджет Network Meter: давно обратил внимание, что частенько (особенно в Windows 8.1) откуда-то и куда-то идёт трафик (шпионы орудуют, не иначе!). Поскольку я немного страдаю паранойей, то захотелось мне обломать врага, заблокировав исходящий трафик на всех лишних портах. Брандмауэру буржуйской винды я ни разу не доверяю, посему планируется заблокировать исходящий трафик с ПК пользователей средствами Debian Wheezy на сетевом шлюзе. В связи с этим у меня к вам вопрос, уважаемые Знатоки: как сие реализовать?

Совсем вкратце, мой свод правил iptables выглядит так:

#!/bin/bash
iptables -F
iptables -X
iptables -t mangle -F
iptables -t mangle -X
iptables -t nat -F
iptables -t nat -X

iptables -P INPUT DROP
iptables -P FORWARD ACCEPT
iptables -P OUTPUT DROP

for int in lo eth0; do
    iptables -A INPUT -i $int -j ACCEPT
    iptables -A OUTPUT -o $int -j ACCEPT
done

for ext in eth1 br0; do
    iptables -A INPUT -i $ext -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
    iptables -A INPUT -i $ext -s 192.168.0.0/24 -m conntrack --ctstate NEW -j ACCEPT
    iptables -A OUTPUT -o $ext -m conntrack --ctstate NEW,ESTABLISHED,RELATED -j ACCEPT
    iptables -A POSTROUTING -t nat -o $ext -j MASQUERADE
done

, где: eth0 - интерфейс, смотрящий в локальную сеть, eth1 - интерфейс, смотрящий наружу.


Во-первых, начни уже использовать iptables-save вместо скрипта. Но это так, к слову. Во-вторых, вот эти строчки

iptables -P FORWARD ACCEPT
iptables -A POSTROUTING -t nat -o $ext -j MASQUERADE
реализуют крайне небезопасный NAT, с полным доступом к интернету для внутренней сети и зияющей дырой в безопасности — FORWARD во внутреннюю сеть никак не контролируется, любой из подсети шлюза способен гулять по всей твоей внутренней сети.

redgremlin ★★★★★
()

INPUT дропай, если нужен доступ по ssh извне, то разреши только один порт и сделай авторизацию по ключу. Если внутренней сетке от шлюза нужно ещё что-то, кроме интернета (прокси там, кеширующий DNS, NTP etc), то открой только конкретные порты и только для внутренней сети.
FORWARD c внешнего интерфейса закрой для cstate NEW, для внутреннего разреши только для нужных портов.

redgremlin ★★★★★
()
Ответ на: комментарий от redgremlin

Как-то так

iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT ACCEPT

iptables -A INPUT -p TCP --dport 22 -j ACCEPT
iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT

for ext in eth1 br0; do
    iptables -A FORWARD -i $ext -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
    iptables -A FORWARD -o $ext -m conntrack --ctstate NEW,ESTABLISHED,RELATED -j ACCEPT
    iptables -A POSTROUTING -t nat -o $ext -j MASQUERADE
done
redgremlin ★★★★★
()
Ответ на: Как-то так от redgremlin

Изначально была задумка ограничить прохождение трафика через порты для ПК c Windows 7\8.1 в локальной сети (хотел чтоб c них можно было ходить в интернет, пользоваться ICQ, Skype, а остальное всё прикрыть).

Посему переписал так:

iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT ACCEPT

iptables -A INPUT -p TCP --dport 22 -j ACCEPT
iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT

for ext in eth1 br0; do
iptables -A FORWARD -i $ext -p tcp -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD -i $ext -p udp -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD -o $ext -p tcp -m multiport --dports 20,21,80,139,443,445 -m conntrack --ctstate NEW -j ACCEPT
iptables -A FORWARD -o $ext -p udp -m multiport --dports 123,137,138 -m conntrack --ctstate NEW -j ACCEPT
done

В результате меня ждал облом: сайты не грузятся, FTP не открывается...

В чём неправ?

Sferg
() автор топика
Ответ на: комментарий от Sferg
iptables -A FORWARD -o $ext -p tcp -m multiport --dports 20,21,80,139,443,445 -m conntrack --ctstate NEW -j ACCEPT

У тебя все исходящие пакеты NEW? ;) И про DNS не забываем.

iptables -A FORWARD -o $ext -p tcp -m multiport --dports 20,21,80,139,443,445 -m conntrack --ctstate NEW,ESTABLISHED,RELEATED -j ACCEPT
iptables -A FORWARD -i $ext -p udp --sport 53 -j ACCEPT
iptables -A FORWARD -o $ext -p udp --dport 53 -j ACCEPT

redgremlin ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.