|
Маршрутизатор на базе FreeBSD с приоритизация трафика средствами PF и ALTQ |
Автор: artemrts
[комментарии]
|
| Проблема приоритизации трафика, на мой взгляд, весьма актуальна. Интернет-канала много не бывает и на всех пользователей и сервисов локальной зачастую не хватает. Поэтому для нормальной работы Интернета требуется грамотное распределения полосы с учетом потребностей каждого из участников. Единственный раз, когда мне не понадобился QoS - это гарантированный провайдером канал в 20 Мбит/с в мир и 100Мбит/с - национальный. Но такое удовольствие не из дешевых, поэтому зачастую народ довольствуется ADSL-каналом с заявленной скоростью к клиенту до 5-10 Мбит/с.
... [Слишком большой объем текста. Скрыт. Для просмотра см. продолжение]
|
|
|
|
|
Блокирование Skype по IP-адресам во FreeBSD |
Автор: Тикунов Максим
[комментарии]
|
| Раздумывая на досуге о наболевшем вопросе как заблокировать Skype, пришла идея, может она здесь уже описывалась, но всё таки решил поделиться личным опытом, может кому и пригодится.
... [Слишком большой объем текста. Скрыт. Для просмотра см. продолжение]
|
|
|
|
|
Проброс IPTV-трафика в локальную сеть при помощи OpenBSD и пакетного фильтра PF (доп. ссылка 1) |
[комментарии]
|
| Возникла необходимость обеспечения возможности просмотра IPTV сразу на нескольких устройствах в домашней сети. Реализации данной схемы мешало то, что полученный от провайдера модем имел два раздельных порта для данных и для IPTV. Простейшим решением было бы закорачивание IPTV-порта в домашний коммутатор, но такая схема нарушает принципы построения безопасных систем и сулит появление паразитного трафика. В связи с этим было решено организовать перенаправление IPTV-трафика через локальный шлюз, на котором используется пакетный фильтр PF и IGMP-прокси.
... [Слишком большой объем текста. Скрыт. Для просмотра см. продолжение]
|
|
|
|
|
Трансляция PPTP (GRE) на шлюзе с PF (доп. ссылка 1) |
Автор: Князь
[комментарии]
|
| Как известно, межсетевой экран PF, портированный в FreeBSD из OpenBSD, не может корректно транслировать (NAT) GRE-протокол и, к примеру, из локальной сети невозможно создать несколько одновременных соединений к внешнему серверу VPN PPTP.
... [Слишком большой объем текста. Скрыт. Для просмотра см. продолжение]
|
|
|
|
|
Распределение трафика между двумя каналами во FreeBSD (доп. ссылка 1) |
Автор: pehlle
[комментарии]
|
| Во FreeBSD 7 появилась возможность задания множественных таблиц маршрутизаций. В ядре отвечает за это опция:
... [Слишком большой объем текста. Скрыт. Для просмотра см. продолжение]
|
|
|
|
|
Борьба с перебором паролей на FTP сервере при помощи пакетного фильтра PF (доп. ссылка 1) |
[комментарии]
|
| Для предотвращения bruteforce-атак по подбору паролей во FreeBSD или OpenBSD можно использовать
возможность пакетного фильтра PF по лимитированию числа соединений за единицу времени в сочетании с блокировкой по таблицам.
... [Слишком большой объем текста. Скрыт. Для просмотра см. продолжение]
|
|
|
|
|
Проброс сети во FreeBSD Jail через NAT и PF (доп. ссылка 1) |
[комментарии]
|
| Сервер работает под управлением FreeBSD 7 и имеет два сетевых интерфейса:
один для интранет сети, другой для связи с внешними миром.
Задача: обеспечить доступность изолированного Jail для обоих сетей, несмотря на ограничение jail
по поддержке только одного интерфейса и одного IP.
Решение: через NAT организовать отправку всех запросов к адресам интранет сети 10.0.0.0/8.
В /etc/pf.conf на сервере прописываем:
an_if="em0" # интерфейс интранет подсети
lan_if_subnet="10.0.0.0/8"
lan_if_ip="10.28.11.10" # IP на интранет интерфейсе em0
jail_vps_server_ip="202.54.2.3" # Реальный IP, выделенный для Jail
nat on $lan_if inet proto { tcp, udp, icmp } from $jail_vps_server_ip to $lan_if_subnet -> $lan_if_ip
Перезапускаем PF через /etc/rc.d/pf reload
|
|
|
|
|
Трансляция адресов во FreeBSD средствами ng_nat (доп. ссылка 1) |
Автор: Folio
[комментарии]
|
| Для работы этого примера необходимо иметь подгруженный ng_ipfw.ko
... [Слишком большой объем текста. Скрыт. Для просмотра см. продолжение]
|
|
|
|
|
Интернет-шлюз с использованием PF |
Автор: vitalic
[комментарии]
|
| O пакетном фильтре (PF) написано довольно много статей. Вот и я хочу предложить свою реализацию Интернет-шлюза с
использованием PF. Раздача Интернета для локальной сети происходит через NAT и основана на Packet Tagging. Плюсом этого
метода является то что упрощается настройка правил для FTP (ftp-proxy не используется), как для клиентов за шлюзом, так и для
возможной публикации "внутреннего" ftp-сервера в мир.
... [Слишком большой объем текста. Скрыт. Для просмотра см. продолжение]
|
|
|
|
|
Экспорт Netflow средствами netgraph во FreeBSD |
Автор: VS
[комментарии]
|
| При сборке ядра указываем:
... [Слишком большой объем текста. Скрыт. Для просмотра см. продолжение]
|
|
|
|
|
|
Использование таблиц для блокирования большого числа IP в pf или ipfw (доп. ссылка 1) |
[комментарии]
|
| Список IP адресов или подсетей находится в файле /etc/block1.txt
Например:
... [Слишком большой объем текста. Скрыт. Для просмотра см. продолжение]
|
|
|
|
|
ipfw nat во FreeBSD 7 |
Автор: Pikador
[комментарии]
|
| В конфигурацию ядра добавляем: ... [Слишком большой объем текста. Скрыт. Для просмотра см. продолжение]
|
|
|
|
|
Автоматическая синхронизация таблиц ipfw |
Автор: freeseacher
[комментарии]
|
| Вот таким скриптом можно периодически синхронизировать на всех сереверах таблицы ipfw
... [Слишком большой объем текста. Скрыт. Для просмотра см. продолжение]
|
|
|
|
|
Пример использования таблиц блокировки в ipfw |
[комментарии]
|
| Блокировка производится командой:
ipfw add deny ip from "table(1)" to any via em0
/etc/load_table.sh:
#!/bin/sh
ipfw table 1 flush
cat /etc/block.txt | while read cnt ip; do
ipfw table 1 add $ip
done
формат /etc/block.txt: "cnt ip"
получем, например, из tcpdump лога атаки:
tcpdump -n -i em0 udp and port 80 > ./tcpdump.log
cat ./tcpdump.log |cut -d' ' -f3|cut -d'.' -f1,2,3,4|sort|uniq -c |sort -r -n > /etc/block.txt
|
|
|
|
|
Пример структурирования правил ipfw (доп. ссылка 1) |
Автор: Vadim Guchenko
[комментарии]
|
| Пример структурирования правил фильтра пакетов ipfw во FreeBSD
с целью упрощения их восприятия и уменьшения вероятности допущения ошибок.
... [Слишком большой объем текста. Скрыт. Для просмотра см. продолжение]
|
|
|
|
|
Порядок прохождения пакетов в пакетных фильтрах FreeBSD (доп. ссылка 1) |
Автор: butcher
[комментарии]
|
| Порядок прохождения пакетов при одновременном использовании ipfilter, pf и ipfw:
При загрузке фильтров модулями, порядок будет определяться порядком загрузки модулей.
Причина здесь в том, что пакетные фильтры регистрируют себя в pfil(9).
При включении всех фильтров в ядро порядок будет определять SYSINIT.
Чтобы определить порядок, нужно открыть файл sys/kernel.h.
В нём определён порядок инициализации определённых подсистем. Теперь, простейшее:
# grep DECLARE_MODULE netinet/ip_fw_pfil.c
DECLARE_MODULE(ipfw, ipfwmod, SI_SUB_PROTO_IFATTACHDOMAIN, SI_ORDER_ANY);
# grep DECLARE_MODULE contrib/pf/net/pf_ioctl.c
DECLARE_MODULE(pf, pf_mod, SI_SUB_PROTO_IFATTACHDOMAIN, SI_ORDER_FIRST);
# grep DECLARE_MODULE contrib/ipfilter/netinet/mlfk_ipl.c
DECLARE_MODULE(ipfilter, ipfiltermod, SI_SUB_PROTO_DOMAIN, SI_ORDER_ANY);
От сюда следует: первым будет ipfilter, затем pf, затем ipfw.
|
|
|
|
|
|
Расчет размера очереди для pipe с заданной пропускной способностью (доп. ссылка 1) |
[комментарии]
|
| > Работает шейпер на dummynet, наблюдается некотороая потеря
> траффика. Hавскидку проблема в дефолтных значениях размера очереди (50 пакетов)
> для pipe'ов от 32 до 512 Кбит\с. Скорее всего, поток не влезает в очередь и
> часть пакетов отбрасывается. Как правильно рассчитать размер очереди для
> каждого pipe в отдельности?
... [Слишком большой объем текста. Скрыт. Для просмотра см. продолжение]
|
|
|
|
|
Как увеличить размер таблицы состояний активных соединений в pf (доп. ссылка 1) |
[обсудить]
|
| Проверяем число соединений в таблице и сравнимаем с текущим лимитом:
# pfctl -s state | wc -l
10000
# pfctl -s memory | grep states
states hard limit 10000
Таблица переполнена, поднимает лимит до 20000:
set limit states 20000
Перечитываем конфигурацию pf:
pfctl -O -f /etc/pf.conf
|
|
|
|
|
Прозрачный переброс SMTP трафика к spamd, используя pf (доп. ссылка 1) |
Автор: undeadly.org
[комментарии]
|
| Ниже описано как в разрыв между внешним миром и локальной сетью поставить машину на базе OpenBSD,
на которой будет в прозрачном режиме отсеиваться спам через spamd.
... [Слишком большой объем текста. Скрыт. Для просмотра см. продолжение]
|
|
|
|
|
Как избавится от роста висящих FIN_WAIT_2 соединений под FreeBSD |
[комментарии]
|
| Если используется ipfw2 и keep-state правила, то от непрерывного роста
соединений со статусом FIN_WAIT_2 помогает:
sysctl -w net.inet.ip.fw.dyn_keepalive=0
|
|
|
|
|
|
Безопасное редактирование правил ipfw FreeBSD |
Автор: 135all
[обсудить]
|
| Для безопасного редактирование правил ipfw рекомендую обратить внимание на скрипт change_rules.sh,
находящийся в /usr/share/examples/ipfw. В случае неправильных действий он
вернёт старый набор правил,
а также сообщит администратору об изменениях в файрволе по почте.
|
|
|
|
|
В двух словах про включение NAT и Firewall в ОС FreeBSD (доп. ссылка 1) |
Автор: hub.ru
[комментарии]
|
| Что бы поднять NAT и Firewall на FreeBSD надо:
... [Слишком большой объем текста. Скрыт. Для просмотра см. продолжение]
|
|
|
|
|
pf и трансляция адресов на двух интерфейсах |
Автор: DelGod
[комментарии]
|
| Решение оптимизировано для шлюза на флешке (не используется perl и другие "тяжелые" решения)
... [Слишком большой объем текста. Скрыт. Для просмотра см. продолжение]
|
|
|
|
|
FreeBSD 5.3 ipfw правило по умолчанию |
Автор: else
[комментарии]
|
| В прежних версиях FreeBSD изменить правило по умолчанию
65535 deny ip from any to any на
allow ip from any to any
можно было включением в ядро опции
IPFIREWALL_DEFAULT_TO_ACCEPT.
В версии 5.3 это не работает. Даже собрав ядро с этой опцией, получаем правило по умолчанию
deny ip from any to any.
Если сборка производится удаленно - сюрприз может оказаться довольно неприятным.
|
|
|
|
|
Проброс портов с двух различных gateway на внутренний сервер через IPNAT |
Автор: Жека
[комментарии]
|
| Иногда необходимо пробросить порты с двух различных gateway GW1 и GW2 на один внутренний сервер,
у которого в качестве default GW указан GW1.
Прямой проброс и NAT невозможен, т.к. пакеты пришедшие из GW2 попытаются
вернуться по маршруту через GW1.
Есть следующий выход, это двойной NAT на GW2, при котором запрос приходит не
снаружи, а с внутреннего IP.
ed0 - внешний интерфейс
lnc0 - интерфейс смотрящий внутрь.
в ipnat.rules нужно прописать следующее:
map ed0 10.6.10.0/24 -> 0.0.0.0/32 мапим локалку наружу
map lnc0 0.0.0.0/0 -> 0.0.0.0/32 ремап внешних ip в локальные
rdr ed0 0.0.0.0/0 port 80 -> 10.6.10.2 port 80 tcp форвард на внутренний сервер
|
|
|
|
|
Как с помощью ipfw отрезать баннеры в ICQ |
Автор: orm_vartis
[комментарии]
|
| Мысль простая:
Аська сообщениями по 5190 и другим портам обменивается, а баннеры только с определенных
IP с 80го порта качает по HTTP ... Когда я на это наткнулся, написал скрипт такого содержания:
... [Слишком большой объем текста. Скрыт. Для просмотра см. продолжение]
|
|
|
|
|
Как разделить канал между пользователями используя ipfw. (доп. ссылка 1) |
Автор: mgear
[обсудить]
|
| /sbin/ipfw pipe 1 config bw 7000Kbit/s
/sbin/ipfw queue 1 config pipe 1 weight 75 mask dst-ip 0x00000000
/sbin/ipfw queue 2 config pipe 1 weight 50 mask dst-ip 0x00000000
/sbin/ipfw queue 3 config pipe 1 weight 50 mask dst-ip 0x00000000
/sbin/ipfw queue 4 config pipe 1 weight 50 mask dst-ip 0x00000000
/sbin/ipfw add queue 1 ip from any to 192.168.0.0/24
/sbin/ipfw add queue 2 ip from any to 192.168.1.0/24
/sbin/ipfw add queue 3 ip from any to 192.168.2.0/24
/sbin/ipfw add queue 4 ip from any to 192.168.3.0/24
Итого имеем: одну толстую трубу на 7К и 4 очереди в нее.
У первой приоритет 75% канала. У остальных - по 50%
|
|
|
|
|
Установка IPFW2 на FreeBSD |
Автор: Tigran Parsadanian
[комментарии]
|
| Собираем библиотеки и сам IPFW:
cd /usr/src/lib/libalias
make -DIPFW2 && make install
cd /usr/src/sbin/ipfw
make -DIPFW2 && make install
Пересобираем ядро с "options IPFW2" и опциями по вкусу:
options IPFIREWALL #firewall
options IPFIREWALL_VERBOSE #enable logging to syslogd(8)
options IPFIREWALL_FORWARD #enable transparent proxy support
options IPFIREWALL_VERBOSE_LIMIT=100 #limit verbosity
options IPFIREWALL_DEFAULT_TO_ACCEPT #allow everything by default
options DUMMYNET
options IPFW2
Делаем reboot и проверяем например командой "ipfw show"
|
|
|
|
|
Как в FreeBSD перебросить соединение через NAT во внутреннюю сеть (доп. ссылка 1) |
Автор: spanka
[комментарии]
|
| Вот реализация для ipfw:
if1IP="ип_смотрящий_в_инет", if1="интерфейс_смотрящий_в_инет"
ifLIP="ип_на_который хотим делать редирект"
ipfw add divert natd tcp from any to ${if1IP} 80 via ${if1}
ipfw add divert natd ip from any to ${ifLIP} to any via ${if1}
ipfw add allow tcp from any to ${if1IP} 80 via any
natd -n ${if1} -redirect_port tcp ${ifLIP}:80 80
Решение от miaso <torov@wipline.ru>:
tproxy -s 80 -r nobody -l /var/log/transparent_proxy.log [int_ip] 80
|
|
|
|
|
Как разрешить или запретить выполнение следующих ipfw правил после встречи dummynet pipe |
[комментарии]
|
| Завершить выполнение цепочки ipfw правил после попадания в pipe:
sysctl -w net.inet.ip.fw.one_pass=1
Продолжить выполнение следующих ipfw правил после попадания в pipe:
sysctl -w net.inet.ip.fw.one_pass=0
|
|
|
|
|
Как правильно зафильтровать ICMP через FreeBSD ipfw (доп. ссылка 1) |
Автор: Nikola_SPb
[комментарии]
|
| Расшифровка кодов ICMP сообщений:
echo reply (0), destination unreachable (3), source quench (4), redirect (5),
echo request (8), router adver-tisement (9),
router solicitation(10), time-to-live exceeded (11), IP header bad (12),
timestamp request (13), timestamp reply (14),
information request (15), information reply (16), address mask request (17) and
address mask reply (18).
${fwcmd} add 00300 allow icmp from any to внешний_IP in via внешний_интерфейс icmptype 0,3,4,11,12
${fwcmd} add 00301 allow icmp from внешний_IP to any out via внешний_интерфейс icmptype 3,8,12
${fwcmd} add 00304 allow icmp from внешний_IP to any out via внешний_интерфейс frag
${fwcmd} add 00305 deny log icmp from any to any in via внешний_интерфейс
|
|
|
|
|
Как организовать редирект порта на внутреннюю машину через ipnat в FreeBSD. |
[комментарии]
|
| man 5 ipnat в /etc/ipnat.conf:
rdr fxp0 205.15.63.3/32 port 80 -> 192.168.1.1 port 80 tcp
# Базансировка нагрузки между 2 IP:
rdr le0 203.1.2.3/32 port 80 -> 203.1.2.3,203.1.2.4 port 80 tcp round-robin
|
|
|
|
|
|
Как в ipfw если выполнилось условие, пропустить следующие N правил. |
[обсудить]
|
| ipfw add 50 skipto 100 tcp from any to 1.2.3.4
ipfw add 60 .....
ipfw add 100 .....
|
|
|
|
|
Пример ограничения полосы пропускания трафика в FreeBSD |
[комментарии]
|
| Собираем ядро с опциями:
options DUMMYNET
options IPFIREWALL
Ограничиваем трафик для сеток 1.1.1.0/24 и 3.3.3.0/24 на 14000 кбит/с:
ipfw add pipe 50 tcp from any to 1.1.1.0/24 via fxp0
ipfw add pipe 50 tcp from any to 3.3.3.0/24 via fxp0
ipfw pipe 50 config bw 14Kbit/s
Для внесения задержки на N ms, используйте delay N после config.
Для установки веса данного пайпа по отношению к другим пайпам используйте weight вес.
Для WF2Q ограничения трафика используйте ipfw queue
(queue N config [pipe pipe_nr] [weight weight] [queue {slots | size})
PS (комментарий от gara@mail.ru):
Если возникает необходимость организовать "канал" для каждого пользователя из данной сети то пишем:
ipfw pipe 10 config mask dst-ip 0x000000ff bw 1024bit/s queue
ipfw add pipe 10 tcp from any to 1.1.1.0/24 via fxp0
Теперь каждый хост из сети 1.1.1.0/24 имеет свой канал 1024bit/s
|
|
|
|
|
Можно ли отфильтровывать пакеты (вести лог) в зависимости от UID пользователя ? |
[обсудить]
|
| Для FreeBSD:
ipfw add count tcp from any to not 192.168.1.0/24 uid 231
uid user (или gid group) - под правило попадают все TCP или UDP пакеты посланный
или принятые пользователем user (группой group).
В Linux в ядрах 2.4.x в iptables можно использовать модуль owner.
|
|
|
|
|
Как запретить открывать более 30 соединений с одного IP |
[комментарии]
|
| Запретим более 30 коннектов для 80 порта сервера 1.2.3.4.
ipfw add allow tcp from any to 1.2.3.4 80 limit src-addr 30
ipfw add allow tcp from any to 1.2.3.4 80 via fxp0 setup limit src-addr 10
Вместо src-addr можно использовать src-port, dst-addr, dst-port
Конструкция работает в последних версиях FreeBSD 4.x ветки.
|
|
|
|
|
Как обеспечить работу active FTP режима в FreeBSD NAT |
[обсудить]
|
| В ipnat воспользуйтесь модулем ftp proxy:
map fxp0 0/0 -> 0/32 proxy port ftp ftp/tcp
map rl0 172.16.33.0/24 -> 212.46.231.50/32 proxy port ftp ftp/tcp
не забудьте поместить правило трансляции ftp перед общим правилом трансляции,
порядок следования правил важен.
|
|
|
|
|
Как запустить трансляцию адресов (NAT) под FreeBSD |
[комментарии]
|
| В /etc/rc.conf:
... [Слишком большой объем текста. Скрыт. Для просмотра см. продолжение]
|
|
|
|
|
Как организовать Policy Routing на FreeBSD |
[комментарии]
|
| ipfw add 100 fwd 10.0.0.2 ip from 10.0.2.0/24 to any
Если нужно использовать 2 шлюза, то можно воспользоваться:
ipfw add fwd $ext_gw_ip ip from $ext_net to any out xmit $ext_int
|
|
|
|
|
Автоматическая нумерация правил ipfw в FreeBSD (доп. ссылка 1) |
Автор: Дмитрий Новиков
[комментарии]
|
| Для автоматической нумерации правил ipfw мы применяем следующий
несложный прием:
C=300 # начальное значение
STEP=100 # Шаг увеличения
ipfw add $C $(C=$(($C+$STEP))) allow ip from 10.128.0.0/16 to 10.128.0.0/16
ipfw add $C $(C=$(($C+$STEP))) allow ip from 195.131.31.0/24 to 195.131.31.0/24
|
|
|
|