URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID1
Нить номер: 93752
[ Назад ]

Исходное сообщение
"ipfw и прозрачный прокси"

Отправлено _John_ , 31-Авг-12 09:56 
Здравствуйте,

помогите разобраться с ipfw и nat.

Есть скрипт ipfw:

#!/bin/sh
ipfw="/sbin/ipfw"
local_net="172.25.37.0/24"
local_interface="rl0"
inter_net="192.168.101.0/24"
inter_interface="vr0"


${ipfw} nat 1 config log if ${inter_interface} reset same_ports deny_in

# Прозрачный сквид==============================================================================
# Заворот в сквид
${ipfw} add fwd 127.0.0.1,3128 tcp from ${local_net} not dst-port 465,993,143,110,25,995 to any out via ${inter_interface}

# Разрешаем сквиду ходить в интернет
${ipfw} add allow tcp from me to any out via ${inter_interface} uid squid # keep-state uid squid
${ipfw} add allow tcp from any to me via ${inter_interface} established   # keep-state uid squid
#=======================================================================================

${ipfw} add nat 1 ip from any to any via ${inter_interface}

# Тут разрешаем то, что можно===========================================================
#https
${ipfw} add allow all from any to any 443
#почта
${ipfw} add allow all from ${local_net} to any 465
${ipfw} add allow all from any 465 to ${local_net} established

${ipfw} add allow all from ${local_net} to any 993
${ipfw} add allow all from any 993 to ${local_net} established

${ipfw} add allow all from ${local_net} to any 143
${ipfw} add allow all from any 143 to ${local_net} established

${ipfw} add allow all from ${local_net} to any 110
${ipfw} add allow all from any 110 to ${local_net} established

${ipfw} add allow all from ${local_net} to any 25
${ipfw} add allow all from any 25 to ${local_net} established

${ipfw} add allow all from ${local_net} to any 995
${ipfw} add allow all from any 995 to ${local_net} established
#======================================================================================


# Разрешаем локалхост
${ipfw} add allow all from any to any via lo0
# Разрешаем внутренний интерфейс
${ipfw} add allow all from ${local_net} to me via ${local_interface}
# Разрешаем DNS
${ipfw} add allow udp from any 53 to any
${ipfw} add allow udp from any to any dst-port 53

${ipfw} add allow all from any to any

Если убрать форвард на сквид, то почта начинает работать, я добавил в форвард not для портов почты, но результата нет.
Как правильно будет разрешить доступ к этим портам?

И еще вопрос, ipfw пока открыт, последним правилом, как корректно будет разрешить ходить в интернет только сквиду, а не всем?

P.S
FreeBsd 8.3, nat в ядре, форвардинг включен в ядре.
Почта дает ошибку (The Bat) - !31.08.2012, 09:00:24: IMAP  - Ошибка протокола TLS: Не ожидаемый пакет (ошибка протокола?) SessionUnknownContentType ct (72).


Содержание

Сообщения в этом обсуждении
"ipfw и прозрачный прокси"
Отправлено михалыч , 31-Авг-12 15:17 
> # Заворот в сквид
> ${ipfw} add fwd 127.0.0.1,3128 tcp from ${local_net} not dst-port 65,993,143,110,25,995 to any out via ${inter_interface}

Зачем всё-то заворачивать?
Этим правилом вы весь трафик завернули на сквид, кроме портов 65,993,143,110,25,995
а вам нужно только http
Если уж так хочется использовать в правиле конструкцию с not
то попробуйте так
${ipfw} add fwd 127.0.0.1,3128 tcp from ${local_net} to not me 80,443 in recv ${local_interface}

ну а "классический" заворот выглядит так
fwd 127.0.0.1,3128 tcp from ${local_net} to any 80


"ipfw и прозрачный прокси"
Отправлено _John_ , 31-Авг-12 19:26 
>[оверквотинг удален]
>> ${ipfw} add fwd 127.0.0.1,3128 tcp from ${local_net} not dst-port 65,993,143,110,25,995 to any out via ${inter_interface}
> Зачем всё-то заворачивать?
> Этим правилом вы весь трафик завернули на сквид, кроме портов 65,993,143,110,25,995
> а вам нужно только http
> Если уж так хочется использовать в правиле конструкцию с not
> то попробуйте так
> ${ipfw} add fwd 127.0.0.1,3128 tcp from ${local_net} to not me 80,443 in
> recv ${local_interface}
> ну а "классический" заворот выглядит так
> fwd 127.0.0.1,3128 tcp from ${local_net} to any 80

Спасибо за ваш ответ, обязательно попробую.

Возникла еще одна проблема, для подключения к провайдеру использую ppp (pppoe), в нем есть свой нат, поэтому после установки соединения интернета нет, пока не отключу в правилах ipfw ядерный нат, пробовал в конфиге ppp сделать enable_nat=no, не помогло.
При удалении ната из правил ipfw интернет работает, но перестает работать форвард на сквид (там кстати в правиле ошибку допустил, dst-port не нужно указывать) в правило форвардинга не забегает ни одного пакета.

Получается два вопроса, почему форвардинг не срабатывает, и как отключить нат в ppp?



"ipfw и прозрачный прокси"
Отправлено михалыч , 31-Авг-12 20:44 
> При удалении ната из правил ipfw интернет работает, но перестает работать форвард
> на сквид (там кстати в правиле ошибку допустил, dst-port не нужно
> указывать) в правило форвардинга не забегает ни одного пакета.

forward не должен зависеть от nat
выполнить ipfw (-de) show до и после поднятия pppoe и сравнить вывод

> Получается два вопроса, почему форвардинг не срабатывает, и как отключить нат в ppp?

использовать для поднятия pppoe mpd и up / down скрипты в его конфиге ?


"ipfw и прозрачный прокси"
Отправлено _John_ , 31-Авг-12 21:41 
>> При удалении ната из правил ipfw интернет работает, но перестает работать форвард
>> на сквид (там кстати в правиле ошибку допустил, dst-port не нужно
>> указывать) в правило форвардинга не забегает ни одного пакета.
> forward не должен зависеть от nat
> выполнить ipfw (-de) show до и после поднятия pppoe и сравнить вывод
>> Получается два вопроса, почему форвардинг не срабатывает, и как отключить нат в ppp?
> использовать для поднятия pppoe mpd и up / down скрипты в его
> конфиге ?

Спасибо вам Михалыч за подсказки, в понедельник попробую.
И да, давно спросить хотел, опция в правилах keep-state работает без проблем?
Я имею ввиду, что она создает правила для каждого соединения, и если их много проблем не будет?


"ipfw и прозрачный прокси"
Отправлено user , 01-Сен-12 08:42 
>[оверквотинг удален]
>>> указывать) в правило форвардинга не забегает ни одного пакета.
>> forward не должен зависеть от nat
>> выполнить ipfw (-de) show до и после поднятия pppoe и сравнить вывод
>>> Получается два вопроса, почему форвардинг не срабатывает, и как отключить нат в ppp?
>> использовать для поднятия pppoe mpd и up / down скрипты в его
>> конфиге ?
> Спасибо вам Михалыч за подсказки, в понедельник попробую.
> И да, давно спросить хотел, опция в правилах keep-state работает без проблем?
> Я имею ввиду, что она создает правила для каждого соединения, и если
> их много проблем не будет?

Вообще keep-state в ipfw доволно примитивен. В sysctl можно ограничить кол-во созданых стейтов (точнее правил). Дефаулт - 8192.
Я бы вам не рекомендовал на нагруженом сервере использовать keep-state.


"ipfw и прозрачный прокси"
Отправлено _John_ , 03-Сен-12 12:34 
В результате получилось такое:

#!/bin/sh
ipfw="/sbin/ipfw"
local_net="172.25.37.0/24"
local_interface="rl0"
inter_net="192.168.1.0/24"
inter_interface="vr0"


#lo0
${ipfw} add allow all from any to any via lo0

#Локальной сети можно
${ipfw} add allow ip from any to any via ${local_interface}

#Нат
${ipfw} nat 1 config log if ${inter_interface} reset same_ports deny_in

#Transparent squid forward
${ipfw} add fwd 172.25.37.1,3128 tcp from ${local_net} to any 80 via ${inter_interface}

#заварачиваем в нат
${ipfw} add nat 1 ip from any to any via ${inter_interface}

Так работает, ограничение хождения в интернет на уровне прокси.

Есть еще вопросик, как разрешить именно сквиду ходить в интернет, пробовал

${ipfw} add nat 1 all from ${local_net} to any uid squid keep-state
и так
${ipfw} add all from ${local_net} to any uid squid keep-state
и так
${ipfw} add all from me 3128 to any keep-state

не работают правила, в них пакеты не попадают (keep-state для простоты, потом поменял-бы).


1Help          2Save          3Mark           4Replac         5Copy           6Move          7Search         8Delete         9PullDn        10Quit