The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

форумы  помощь  поиск  регистрация  майллист  вход/выход  слежка  RSS
"Настройка PF + NAT + FTP Passive + Firewall"
Вариант для распечатки  
Пред. тема | След. тема 
Форум Открытые системы на сервере (Firewall, Фильтрация пакетов / FreeBSD)
Изначальное сообщение [ Отслеживать ]

"Настройка PF + NAT + FTP Passive + Firewall"  +/
Сообщение от rafic email(ok) on 24-Дек-12, 23:58 
Это конфиг Packet Filter на FreeBSD 9.

В нем я хочу:
1) Выпускать конкретных юзеров <users> в интернет, при этом он должен пускать на конкретные TCP порты (tcp_services) и UDP порты (udp_services).
2) Выпускать конкретные IP на внешний FTP сервер в пассивном режиме. Сделать хочу через FTP Proxy, чтобы не открывать кучу лишних портов.
3) Банить всяких доссеров на www, ftp & pop3 трафик.
4) Раздавать на 8 клиентов 100-мегабитный канал, по 20 Мбит на каждого.

Код:==========================================================
ext_if = "nfe0"     ## внешний интерфейс
int_if = "rl0"      ## локальный интерфейс
lan="192.168.1.0/24"## локальная подсеть
  
  
## tcp порты использующиеся на сервере
tcp_services="{ 20, 21, 22, 25, 80, 53, 110, 143, 443, 3306, 8080 }"
## udp порты использующиеся на сервере
udp_services="{ 53, 514 }"
  
  
## эти IP выходят в интернет
table <users>   {192.168.1.2}
table <ftpuser> {192.168.1.2}
## сюда пишем доссеров
table <ddos> persist
## сюда пишем ломящихся на почту
table <pop3> persist
  
  
##сбрасываем соединение грубо
set block-policy drop
## полностью пропускаем проверку на петле
set skip on lo0
## полностью пропускаем проверку на интерфейсе
set skip on $int_if
## включаем логирование на интерфейсе
set loginterface $ext_if
## оптимизация
set optimization normal
  
  
## нормализуем все входящие пакеты на всех интерфейсах
scrub in all
#нормализация трафика на
#внешнем интерфейсе, генерируется случайная последовательность в поле
#идентификации IP-пакета, устанавливается величина TTL=128, производится
#"дефрагментация" IP-пакетов, а также нормализация TCP соединений.
scrub on $ext_if all random-id no-df min-ttl 128 fragment reassemble reassemble tcp
  
  
# Очередь на внешнем интерфейсе для Upload
altq on $ext_if cbq bandwidth 40Mb queue {upload}
queue upload bandwidth 4.5Mb priority 2 cbq ( default )
# Очередь на локальном интерфейсе для Download
altq on $int_if cbq bandwidth 90Mb queue {download}
queue download bandwidth 18Mb priority 2 cbq ( default )
  
  
## проброс NAT внутри сеть
nat on $ext_if inet proto tcp from <users> to any port $tcp_services -> ($ext_if)
nat on $ext_if inet proto udp from <users> to any port $udp_services -> ($ext_if)
# icmp разрешим весь
nat on $ext_if inet proto icmp from <users> to any -> ($ext_if)
  
  
rdr-anchor "ftp-proxy/*"
rdr on $int_if proto tcp from <ftpuser> to !(self) port ftp -> 127.0.0.1 port 8021
anchor "ftp-proxy/*"
  
  
## правило для антиспуфинга
antispoof quick for $ext_if
  
  
## политика по умолчанию
block all
## разрешаем петлю
pass quick on lo0 all
## блочим всех кто попался в таблицу ddos
block in quick on $ext_if from <ddos> to any
## блочим всех кто попался в таблицу pop3
block in quick on $ext_if from <pop3> to any
  
## собираем в таблицу доссеров WWW трафика
pass in on $ext_if proto tcp to $ext_if port www flags S/SA keep state \(max-src-conn-rate 5/2, overload <ddos> flush)
## собираем в таблицу доссеров FTP трафика
pass in on $ext_if proto tcp to $ext_if port ftp flags S/SA keep state \( max-src-conn 400, max-src-conn-rate 400/2, overload <ddos> flush)
## собираем в таблицу доссеров POP3 трафика
pass in on $ext_if proto tcp from any to $ext_if port pop3 flags S/SA keep state (max-src-conn-rate 15/60, overload <pop3> flush)
  
## разрешаем внешний трафик на открытые tcp порты
pass in on $ext_if proto tcp from <users> to $ext_if port $tcp_services flags S/SA keep state
## разрешаем внешний трафик на открытые udp порты
pass in on $ext_if proto tcp from <users> to $ext_if port $udp_services keep state
## чистим траф www от SYN flood
pass in on $ext_if proto tcp from <users> to $ext_if port www flags S/SA synproxy state
  
## Применяем к юзерам ограничение скорости
pass in on $int_if from <users> to any queue (upload) modulate state
pass in on $int_if from $int_if:network to $int_if queue (download) modulate state
  
## разрешаем все модуляции для исходящих tcp соединений
pass out on $ext_if proto tcp all modulate state flags S/SA
## разрешаем исходящие протоколы
pass out on $ext_if proto {tcp, udp, icmp } all keep state
=============================================================

1. Мне не удается намертво отключить всех юзеров от внешнего мира, кроме внесенных в <users>.
Клиент имеет IP адрес - 192.168.1.3
Правила разрешают выходить в интернет только IP - 192.168.1.2
После применения правил у клиента (192.168.1.3) работает skype - это tcp и какой-то порт.
А так же обновляется 50\50 страница vk.com и gmail.com. Я подозреваю что эти сайты как-то хитро отдают информацию по разным протоколам.

2. Мне не удалось открыть доступ с клиентской машине на внешний FTP-сервер в пассивном режиме.
Что я делал:
1. в rc.conf
Код:==========================================================
ftpproxy_enable="YES"
ftpproxy_flags="-v -D 7"
=============================================================

2. в pf.conf
Код:==========================================================
rdr-anchor "ftp-proxy/*"
rdr on $int_if proto tcp from <ftpuser> to !(self) port ftp -> 127.0.0.1 port 8021
anchor "ftp-proxy/*"
=============================================================
Теперь ftp-proxy сам должен создавать правила для входящих. В обоих случаях !(self) - на случай ftp на самом шлюзе.

FileZilla в пассивном режиме (проверил в конфиге) пишет такой лог:
Код:==========================================================
Статус:    Соединяюсь с 195.248.235.167:21...
Статус:    Соединение установлено, ожидание приглашения...
Ответ:    220 ProFTPD 1.3.4 Server ready.
Команда:    USER xxxxx@xxxxxxxxxxx.com
Ответ:    331 Password required for xxxxx@xxxxxxxxxxx.com
Команда:    PASS ********
Ответ:    230 User xxxxx@xxxxxxxxxxx.com logged in
Статус:    Server does not support non-ASCII characters.
Статус:    Соединение установлено
Статус:    Получение списка каталогов...
Команда:    PWD
Ответ:    257 "/" is the current directory
Команда:    TYPE I
Ответ:    200 Type set to I
Команда:    PASV
Ответ:    227 Entering Passive Mode (195,248,235,167,139,2).
Команда:    MLSD
Ошибка:    Превышено время ожидания соединения
Ошибка:    Не могу получить список каталогов!
=============================================================
То есть коннект есть, а списка директорий нету, хотя 20-й и 21-й порт проброшен.

Ответить | Правка | Cообщить модератору

Оглавление

Сообщения по теме [Сортировка по времени | RSS]


1. "Настройка PF + NAT + FTP Passive + Firewall"  +/
Сообщение от user (??) on 25-Дек-12, 00:56 
>[оверквотинг удален]
> ## сюда пишем доссеров
> table <ddos> persist
> ## сюда пишем ломящихся на почту
> table <pop3> persist
> ##сбрасываем соединение грубо
> set block-policy drop
> ## полностью пропускаем проверку на петле
> set skip on lo0
> ## полностью пропускаем проверку на интерфейсе
> set skip on $int_if

     Дочитал до сих пор и стало понятно, что далее читать нет смысла. Как вы планируте лимитировать download, если вы полностью исключили внутренний интерфейс? Как вы будете привязывать очередь к нужному вам стейту? Почитайте про altq. Вот статья к размышлению http://www.opennet.me/tips/2680_freebsd_router_pf_altq_traff...

ЗЫ: а топик про грабли и шейпер не ваших рук дело, случаем? :-)

Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

2. "Настройка PF + NAT + FTP Passive + Firewall"  +/
Сообщение от rafic email(ok) on 25-Дек-12, 02:08 
>[оверквотинг удален]
>> ## полностью пропускаем проверку на петле
>> set skip on lo0
>> ## полностью пропускаем проверку на интерфейсе
>> set skip on $int_if
>      Дочитал до сих пор и стало понятно,
> что далее читать нет смысла. Как вы планируте лимитировать download, если
> вы полностью исключили внутренний интерфейс? Как вы будете привязывать очередь к
> нужному вам стейту? Почитайте про altq. Вот статья к размышлению http://www.opennet.me/tips/2680_freebsd_router_pf_altq_traff...
>  ЗЫ: а топик про грабли и шейпер не ваших рук дело,
> случаем? :-)

Вы меня опередили, я как раз уже увидел что все дело именно в том что я исключил из проверки локальный интерфейс. Из-за этого не работал FTP, хотя ALTQ резало нормально, что странно. ну работает и ладно=)

Осталось теперь намертво зарезать всех от интернета, кроме тех кто есть в таблице <users>. Как это реализовать лучше всего, голова уже совсем не варит=((

Кстати, свой конфиг отдаю на растерзание гуру. У кого есть предложения по оптимизации написанного конфига - выкладывайте. Я только 2 дня с PF разбираюсь и вообще с фаэрволом и шейпером и фряхой вообще, так что могут быть нубские решения=)

Ответить | Правка | ^ к родителю #1 | Наверх | Cообщить модератору

Архив | Удалить

Рекомендовать для помещения в FAQ | Индекс форумов | Темы | Пред. тема | След. тема




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2025 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру