LINUX.ORG.RU
ФорумAdmin

iptables для шлюза


0

2
прошу оценить мою конфигурацию iptables для щлюза (squiid+sams)
ppp0-подключение к нету с динамическим ip
eth0-интерфейс подключённый к локалке (192ю168.3.)

#!/bin/bash
#этот модуль позволяет работать с ftp в пассивном режиме
#modprobe nf_conntrack_ftp
#очистка цепочек
iptables -F INPUT
iptables -F FORWARD
iptables -F OUTPUT
iptables -t nat -F PREROUTING
iptables -t nat -F POSTROUTING
iptables -t mangle -F

#Запрет всего
iptables -P INPUT DROP
iptables -P OUTPUT DROP
iptables -P FORWARD DROP

#включение логов iptables
#префиксы сообщений iptables 
#iptables -A INPUT -p tcp  -j LOG --log-prefix "input tcp"
#iptables -A INPUT -p icmp -j LOG --log-prefix "input icmp"
#логи входящих tcp udp icmp
#iptables -A INPUT -j LOG --log-level 4


#разрешаем все входящие пакеты на интрефейс замыкания на себя иначе ничего не работает 
iptables -A INPUT -i lo -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT 
#РАЗРЕШЕНЫ ТОЛЬКО ВХОДЯЩИЕ СОЗДАННЫЕ НАШИМИ ИСХОДЯЩИМИ
iptables -A INPUT -p TCP -m state --state ESTABLISHED,RELATED -j ACCEPT 
iptables -A INPUT -p UDP -m state --state ESTABLISHED,RELATED -j ACCEPT
#разрешаем любые входящие и исходящие по icmp
iptables -A INPUT -p icmp -j ACCEPT

iptables -A OUTPUT -p icmp -j ACCEPT
#разрешаем подключение по  ssh INPUT разрешаем для того чтобы было можно конектится с любой #тачки посети  
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
iptables -A OUTPUT -p tcp --dport 22 -j ACCEPT
#разрешаем ntpdate-синхронизация времени
iptables -A OUTPUT -p udp --dport 123 -j ACCEPT
#разрешаем ftp без пассивного режима
iptables -A OUTPUT -p tcp --dport 21 -j ACCEPT
iptables -A OUTPUT -p tcp --dport 20 -j ACCEPT
#разрешаем входящие и исходящие на на порт 80 инет и 53 - dns 
iptables -A OUTPUT -p tcp --dport 80 -j ACCEPT
iptables -A OUTPUT -p udp --dport 53 -j ACCEPT
#разрешаем исходящий на локальное зеркало

sysctl net.ipv4.ip_forward = 1 # Разрешаем шлюзу передавать транзитный трафик

iptables -A FORWARD -m conntrack --ctstate NEW -i eth0 -s 192.168.3.0/24 -j ACCEPT # Разрешаем исходящие соединения из локальной сети к интернет-хостам

iptables -t nat -A POSTROUTING -o ppp0 -j MASQUERADE # Маскарадим весь трафик, идущий через eth0

вах. мне нравится. скомуниздю твой скрипт себе на шлюз.

gear ★★★ ()

я бы разрешил весь OUTPUT трафик

iptables -P OUTPUT ACCEPT

и открывал бы порты для входящего трафика на основе интерфейса с которого пришел трафик
iptables -A INPUT -i $lan -p tcp -m multiport --dport $lan_tcp_allowed_ports -j ACCEPT
iptables -A INPUT -i $wan -p tcp -m multiport--dport $wan_tcp_allowed_ports -j ACCEPT

как-то так, надеюсь идея ясна.
Да и комментарии исправьте.


n1 ()
Ответ на: комментарий от gear

А чему тут нравится?
Имхо любой разбирающийся человек скажет что можно сделать все проще.

n1 ()

прошу оценить мою конфигурацию iptables для щлюза (squiid+sams)

Для _шлюза_, да и ещё со squid? o_O

НИОЧЁМ!

Во-первых, убери все эти бессмысленные OUTPUT. Во-вторых, как клиенты будут ходить в интернет, а?

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

я бы разрешил весь OUTPUT трафик, гмм а если у меня в сети какой нить троян? Получится что он сможет отправить

Во-первых, убери все эти бессмысленные OUTPUT. Во-вторых, как клиенты будут ходить в интернет, а?

Ходить будут через браузер (настройки прокси 192.168.3.25 порт 8080 ) почему output бессмысленные ?

drac753 ★★ ()

а через сквид ftp почему не пустить?

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

пока не разобрался как буду логадарен за пример правила

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

>я бы разрешил весь OUTPUT трафик

а мы бы послали нахер в гугл

anonymous ()
Ответ на: комментарий от drac753

Ctrl+F 8080 ничего не вывело, так как будут коннектиться на шлюз?

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

>гмм а если у меня в сети какой нить троян? Получится что он сможет отправить
нет, не получится.

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

пакет из локальной сети пойдет на шлюз, и в любом случае попадет в цепочку INPUT.

n1 ()

iptables -A FORWARD -m conntrack --ctstate NEW -i eth0 -s 192.168.3.0/24 -j ACCEPT

Ну и? А SYN-ACK?

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

Вот с так называемым «транзитным трафиком» у меня полная жопа.
Потому что я привык к простоте pf там нет ничего подобного.
Пусть либо убирают цепочку FORWARD , либо делают FORWARD_INPUT и FORWARD_OUTPUT.

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

иначе мне не понятно как фильтровать трафик в цепочке FORWARD в зависимости от направления.

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

Трафик, генерируемый хостами локальной сети, либо предназначеный им.

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

Простите, а трафик от eth0 к eth1 который попадает в FORWARD, он по вашему должен попадать в FORWARD_INPUT или FORWARD_OUTPUT? Ну просто интересно.

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

Да нет же! Сначала в _INPUT, затем в _OUTPUT :)

1. iptables -N FORWARD_INPUT
2. iptables -N FORWARD_OUTPUT
3. iptables -A FORWARD -j FORWARD_INPUT
4. iptables -A FORWARD -j FORWARD_OUTPUT
5. ???
6. PROFIT

NightSpamer ()
Ответ на: комментарий от ventilator

Входит в FORWARD_INPUT для интерфейса eth0
выходит из FORWARD_OUTPUT для интерфейса eth1

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

Ок. Чуть исправлю.

3. iptables -A FORWARD -i eth0 -j FORWARD_INPUT 
4. iptables -A FORWARD -o eth1 -j FORWARD_OUTPUT 
Так пойдёт?

NightSpamer ()
Ответ на: комментарий от n1

А трафик eth1->eth0 будет снова идти FORWARD_INPUT и потом в FORWARD_OUTPUT? Какой смысл вообще в таком поведении? NightSpamer правильно показал решение для вас

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

>Какой смысл вообще в таком поведении? такой же как и для трафика приходящего в INPUT и уходящего через OUTPUT

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

Однозначно можно сказать пакет идет к машине или от нее, только когда машина эта известна. А когда трафик транзитный, свойства"входящий/исходящий" у него нет.

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

В pf например, равно как и в аксес листах (access-lists) cisco нет понятия «транзитный трафик».
С точки зрения отдельно взятого сетевого интерфейса трафик может либо входить в роутер (inbound) через этот интерфейс, либо выходить из роутера (outbound). Но даже если этот трафик транзитный и имеет место роутинг, то это НЕ ПОВОД ДЛЯ ОТДЕЛЬНОЙ КЛАССИФИКАЦИИ трафика.

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

незнаю как в pf, а в циско аксес листы вешаются на интерфейсы, для фильтрации. netfilter на интерфейсы не вешается, но для определения направления есть -i и -o опции

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

новая версия сразу говорю автор не я взял с опен нета и подогнал под себя

ppp0-нет
eth0- локалка
Прокси 192.168.3.25 порт 8080 

#!/bin/bash 
#этот модуль позволяет работать с ftp в пассивном режиме 
modprobe nf_conntrack_ftp 

#очищаем цепочки
iptables -F INPUT 
iptables -F FORWARD 
iptables -F OUTPUT 
iptables -t nat -F PREROUTING 
iptables -t nat -F POSTROUTING 
iptables -t mangle -F 

# Задаем политики по умолчанию
iptables -t filter -P INPUT DROP
iptables -t filter -P FORWARD DROP
iptables -t filter -P OUTPUT DROP

# Создаем пользовательские цепочки.
iptables -N ppp0-eth0
iptables -N eth0-ppp0
iptables -N eth0-out
iptables -N ppp0-out
iptables -N eth0-in
iptables -N ppp0-in
iptables -N icmp_packets

# Направляем все входящие пакеты в соответствующие цепочки.
iptables -A INPUT -d ppp0 -j ppp0-in
iptables -A INPUT -d 192.168.3.25 -j eth0-in

# Направляем все исходящие пакеты в соответствующие цепочки.
iptables -A OUTPUT -s ppp0 -j ppp0-out
iptables -A OUTPUT -s 192.168.3.25 -j eth0-out

# Разрешаем весь трафик с петлевого интерфейса.
iptables -A INPUT -i lo -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT

# Разрешаем следующие типы icmp пакетов.
iptables -A icmp_packets -p icmp --icmp-type 0 -j ACCEPT
iptables -A icmp_packets -p icmp --icmp-type 3 -j ACCEPT
iptables -A icmp_packets -p icmp --icmp-type 8 -j ACCEPT
iptables -A icmp_packets -p icmp --icmp-type 11 -j ACCEPT

# Для удобства фильтрации, направляем все транзитные пакеты,
# в соответствующие цепочки.
# ppp0-eth0 мир -> локальная сеть
# eth0-ppp0 локальная сеть -> мир
iptables -A FORWARD -i ppp0 -o eth0 -j ppp0-eth0
iptables -A FORWARD -i eth0 -o ppp0 -j eth0-ppp0

# ppp0-eth0. В данную цепочку попадают все транзитные пакеты,
# направленные из мира в локальную сеть.
iptables -A ppp0-eth0 -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A ppp0-eth0 -j DROP

# eth0-ppp0. В данную цепочку попадают все транзитные пакеты,
# направленные из локальной сети в мир.
iptables -A eth0-ppp0 -p icmp -j icmp_packets
iptables -A eth0-ppp0 -m state --state NEW,RELATED,ESTABLISHED -j ACCEPT
iptables -A eth0-ppp0 -j DROP

# eth0-in. В данной цепочке открываем порты тех служб, которые
# должны быть доступны на сервере из локальной сети.
iptables -A eth0-in -p icmp -j icmp_packets
iptables -A eth0-in -p udp --dport 53 -j ACCEPT #DNS
iptables -A eth0-in -p tcp --dport 80 -j ACCEPT #http
iptables -A eth0-in -p tcp --dport 8080 -j ACCEPT #SQUID
iptables -A eth0-in -j DROP

# ppp0-in. В данной цепочке открываем порты тех служб, которые
# должны быть доступны на сервере из мира. Например www, smtp, ftp
iptables -A ppp0-in -p icmp -j icmp_packets
iptables -A ppp0-in -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A ppp0-in -j DROP

# eth0-out.  
iptables -A eth0-out -p icmp -j icmp_packets
iptables -A eth0-out -p udp --dport 53 -j ACCEPT
iptables -A eth0-out -p tcp -m multiport --dport 22,80,443 -j ACCEPT
iptables -A eth0-out -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A eth0-out -j DROP

# ppp0-out.
iptables -A ppp0-out -p icmp -j icmp_packets
iptables -A ppp0-out -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A ppp-out -j DROP

# Маскарадимся 

iptables -t nat -A POSTROUTING  -o ppp0 -j MASQUERADE

# "Заварачиваем" весь http трафик на squid.
iptables -t nat -A PREROUTING -s 192.168.3.0/24 -i eth0 -p tcp -m multiport --dport 80,8080 -j REDIRECT --to-ports 8080
drac753 ★★ ()

Не одобряю копипастинг конфигураций iptables.

Если есть четкое понимание логики iptables + основ TCP/IP, вопроса «хороший ли конфиг» не будет. Тем более, что там не так уж и много сущностей. По крайней мере, надо понимать, в каком порядке проходятся цепочки, в зависимости от того откуда и куда направляется пакет (по крайней мере, не путать INPUT/OUTPUT с FORWARD). Если понимания нет - надо, чтобы появилось.

Я считаю, что администрирование сети (в том числе и домашней сети из двух компьютеров) - это не то, что можно делать методом тыка. Если не хочется разбираться, поставьте себе какой-нибудь дешевый роутер и настраивайте через web-интерфейс.

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

iptables v1.4.8: host/network `ppp0' not foundTry `iptables -h' or 'iptables --help' for more information ppp0 действительно там нет , делаю ifconfig показывает eth0,l0,ppp0 подскажите как одолеть

drac753 ★★ ()
Ответ на: комментарий от drac753
> В /etc/networl/interfaces нет ни слова про ppp0. 

Так можешь сам добавить. Как-то так:

auto ppp0
iface ppp0 inet ppp
    provider abyrwalg
    post-up route add default gw 87.224.188.198


Где abyrwalg - файл с настройками ppp из /etc/ppp/peers/
drac753 ★★ ()
Ответ на: комментарий от drac753

подскажите как выгледят настройки ppp для мегафона (3g модем )

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

гмм и правда так должно быть ? iptables -A OUTPUT -i ppp0 -j ppp0-out

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

имеешь в виду что нужно разрешить все исходящие?

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

Ходить будут через браузер (настройки прокси 192.168.3.25 порт 8080 ) почему output бессмысленные ?

Это на каждой машине бегать и выставлять_в_каждом_браузере настройки прокси ? Хорошо если машин 10-20, а если сеть предприятия на 100 и более машин? Прощe на самом шлюзе заворачивать исходящий траффик c 80 порта на порт шлюза 3128. У меня так реализовано:

$IPTABLES -t nat -A PREROUTING -i eth1 -s 192.168.0.0/24 -p tcp -d 0.0.0.0/0 --dport 80 -j REDIRECT --to-port 3128 
Ну и поправить под свою сеть и интерфейсы.

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

ну в вообще кроме всего прочего я еще в эту связку dnsmasq добавил , он будет заниматься forwarding'гом днс запросов внет и в локалку

iptables v1.4.8: host/network `ppp0' not foundTry `iptables -h' or 'iptables --help' for more information ppp0 действительно там нет , делаю ifconfig показывает eth0,l0,ppp0 подскажите как одолеть
с этим разобрался , касяк был в том что я использовал неправильные ключи в цепочках OUTPUT , видать мозг был в режиме сна причём два дня подряд :)

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