Несколько приёмов работы с IPFW.

Обсуждаем сайт и форум.

Модератор: f0s

Аватара пользователя
dikens3
подполковник
Сообщения: 4856
Зарегистрирован: 2006-09-06 16:24:08
Откуда: Нижний Новгород
Контактная информация:

Несколько приёмов работы с IPFW.

Непрочитанное сообщение dikens3 » 2007-02-01 19:20:32

Хотел написать статью, но какая-то пурга получилась.
Не буду выкладывать, закину на форум, может кому пригодится.

Статья является дополнением статьи написанной автором сайта. Возможно, что со временем буду добавлять в статью ещё что-нибудь интересное.
Правило 1:
Каждый транзитный пакет входит на определённый интерфейс и выходит с определённого интерфейса.

Демонстрация:
Есть шлюз на FreeBSD и на нём прописан gateway_enable="YES" в rc.conf
Или через sysctl: net.inet.ip.forwarding=1
fxp0 – Внутренний интерфейс, смотрит в локальную сеть.
rl0 – Внешний, смотрит в инет.
Наш внутренний IP-Адрес 192.168.2.4
Наш внешний IP-Адрес 82.208.77.66

Воспользуемся очень полезной возможностью – записью пакетов в лог.
Добавляем первой строкой фиксирование всех ICMP пакетов:
ipfw add 1 count log icmp from any to any
Действие count не принимает и не отбрасывает, а только увеличивает счётчик. Count log ещё и записывает все пакеты в /var/log/security
и выполняем с нашего компьютера, находящего в сети (192.168.2.4) команду:

Код: Выделить всё

ping www.rambler.ru и смотрим записи в /var/log/security
Feb 1 12:07:52 ns kernel: ipfw: 1 Count ICMP:8.0 192.168.2.4 81.19.70.1 in via fxp0
Feb 1 12:07:52 ns kernel: ipfw: 1 Count ICMP:8.0 192.168.2.4 81.19.70.1 out via rl0
Feb 1 12:07:52 ns kernel: ipfw: 1 Count ICMP:0.0 81.19.70.1 82.208.77.66 in via rl0
Feb 1 12:07:52 ns kernel: ipfw: 1 Count ICMP:0.0 81.19.70.1 192.168.2.4 out via fxp0
Feb 1 12:07:53 ns kernel: ipfw: 1 Count ICMP:8.0 192.168.2.4 81.19.70.1 in via fxp0
Feb 1 12:07:53 ns kernel: ipfw: 1 Count ICMP:8.0 192.168.2.4 81.19.70.1 out via rl0
Feb 1 12:07:53 ns kernel: ipfw: 1 Count ICMP:0.0 81.19.70.1 82.208.77.66 in via rl0
Feb 1 12:07:53 ns kernel: ipfw: 1 Count ICMP:0.0 81.19.70.1 192.168.2.4 out via fxp0
Feb 1 12:07:54 ns kernel: ipfw: 1 Count ICMP:8.0 192.168.2.4 81.19.70.1 in via fxp0
Feb 1 12:07:54 ns kernel: ipfw: 1 Count ICMP:8.0 192.168.2.4 81.19.70.1 out via rl0
Feb 1 12:07:54 ns kernel: ipfw: 1 Count ICMP:0.0 81.19.70.1 82.208.77.66 in via rl0
Feb 1 12:07:54 ns kernel: ipfw: 1 Count ICMP:0.0 81.19.70.1 192.168.2.4 out via fxp0
Feb 1 12:07:55 ns kernel: ipfw: 1 Count ICMP:8.0 192.168.2.4 81.19.70.1 in via fxp0
Feb 1 12:07:55 ns kernel: ipfw: 1 Count ICMP:8.0 192.168.2.4 81.19.70.1 out via rl0
Feb 1 12:07:55 ns kernel: ipfw: 1 Count ICMP:0.0 81.19.70.1 82.208.77.66 in via rl0
Feb 1 12:07:55 ns kernel: ipfw: 1 Count ICMP:0.0 81.19.70.1 192.168.2.4 out via fxp0
Посмотрим, что же происходит:
Feb 1 12:07:52 ns kernel: ipfw: 1 Count ICMP:8.0 192.168.2.4 81.19.70.1 in via fxp0
Был посчитан и записан в файл /var/log/security пакет ICMP. С помощью таблицы ТИПОВ-ICMP понимаем, что
ICMP:8.0 это нужный нам тип и код ICMP. А значит, мы отправили Echo request (Эхо-запрос), который был принят на внутреннем интерфейсе fxp0.

Следующая строка говорит нам, что пакет выходит через внешний интерфейс.
Feb 1 12:07:52 ns kernel: ipfw: 1 Count ICMP:8.0 192.168.2.4 81.19.70.1 out via rl0
Тут есть поправка. Адрес отправителя 192.168.2.4 ещё не подвергся обработке NAT (Строка то у нас ПЕРВАЯ. :-) ), позже он преобразовывается и выходит в инет уже нормальный.
Feb 1 12:07:52 ns kernel: ipfw: 1 Count ICMP:0.0 81.19.70.1 82.208.77.66 in via rl0
Feb 1 12:07:52 ns kernel: ipfw: 1 Count ICMP:0.0 81.19.70.1 192.168.2.4 out via fxp0
Аналогично, только приходит Echo-Reply (Ответ) от Рамблера.
Короче, логи рулят.:-) Как всегда.
Если вы не можете понять, что пришло, что ушло, что-то не работает, включайте log или пользуйтесь TCPDUMP’ом. Возможно, что файрвол где-то убивает входящий/исходящий пакет.

А так ли уж нужен этот Check-State?
net.inet.ip.fw.dyn_keepalive - булева переменная. Заставляет генерировать "поддерживающие" пакеты (keep-alive) для tcp-соединений, обрабатываемых динамическими правилами keep-state. Установка в 1 понижает вероятность прерывания tcp-соединения по таймауту, но генерирует лишний трафик. Значение по умолчанию – 1
Взято тут
Здесь тоже неплохо написано
На поддержание соединений нужно какое-то количество трафика? Так ли это, и сколько именно?
Два компьютера HOST1 и HOST2 помогут нам в этом.
Создаём файл размером 100 Мб.

Код: Выделить всё

dd if=/dev/zero of=file100mb bs=1024 count=100K
ТЕСТ 1:
Правим файрвол:

Код: Выделить всё

На HOST1:
ipfw add 3 count tcp from HOST2 1234 to me in via xl0
ipfw add 5 allow tcp from me to HOST2 1234 out via xl0

На HOST2:
ipfw add 1 allow tcp from HOST1 to me 1234
Будем принимать пакеты от компьютера HOST1.

Код: Выделить всё

Выполняем следующие команды на хостах:
HOST2#nc -l 1234 > /dev/null
HOST1#nc HOST2 < file100mb

Код: Выделить всё

Полученные данные c HOST1:
00003 35568   1422728 count tcp from HOST2 1234 to me in via xl0
00005 71826 107730648 allow tcp from me to HOST2 dst-port 1234 out via xl0

Полученные данные c HOST2:
00001   71826 107730648 allow tcp from HOST2 to me dst-port 1234
Из теста видно, что количество отправленных пакетов HOST1=количеству принятых HOST2. Так же видно входящий трафик этой операции. (1,35 Мб.) Не так много, но для тех, кто считает, что отправка данных не имеет входящего трафика, будет рад это видеть.

ТЕСТ 2:
Изменяем файрвол:

Код: Выделить всё

На HOST1:
ipfw add 4 check-state
ipfw del 5
ipfw add 5 allow tcp from me to HOST2 1234 out via xl0 keep-state
Т.е. добавляем Keep-State для этой операции.

Код: Выделить всё

Выполняем следующие команды на хостах:
HOST2#nc -l 1234 > /dev/null
HOST1#nc HOST2 < file100mb

Код: Выделить всё

Полученные данные c HOST1:
00003  35539   1421568 count tcp from HOST2 1234 to me in via xl0
00004      0         0 check-state
00005 107365 109152216 allow tcp from me to HOST2 dst-port 1234 out via xl0 keep-state

Полученные данные c HOST2:
00001 71826 107730648 allow tcp from HOST1 to me dst-port 1234
Запускал эту операцию несколько раз, данные HOST2 всегда одинаковые в обоих тестах.
По HOST1 смотрите сами, входящий трафик остался примерно на том же уровне, но количество отправленных пакетов увеличилось с 71826 до 107365. Трафик тоже увеличился, но не так сильно, с 107730648 до 109152216 байт. (Незначительно изменяются данные на HOST1, если запускать эту операцию несколько раз.)
Видно реализация keep-state(check-state) так работает, раз уж пакеты отправляются с HOST1, но не приходят на HOST2.

Пробовал тестировать с помощью ab:

Код: Выделить всё

HOST1#ab -c 5 -n 100 http://IP-Адрес/ 
Результаты те же. Трафик почти одинаковый.
Сделал вывод, что время имеет значение. Нельзя с помощью быстрых тестов узнать ответ на основной вопрос. ( На поддержание соединений нужно какое-то количество трафика? Так ли это, и сколько именно?)

Решил подключить сетевой диск через mount_smbfs и посмотреть ровно через 1 час количество трафика:
Изменил файрвол на хостах и добавил в cron Подключение/Отключение:
В момент работы динамическое правило выглядит так:
## Dynamic rules (2):
00005 15 1219 (218s) STATE tcp HOST1 60937 <-> HOST2 139
Изменяем файрвол:

Код: Выделить всё

HOST1
ipfw add 1 count ip from HOST2 to me
ipfw add 5 allow ip from me to HOST2 out via fxp0

HOST2
ipfw add 1 count all from HOST1 to HOST2
ipfw add 2 count all from HOST2 to HOST1

Код: Выделить всё

Полученные данные c HOST1:
00001      198      19867 count ip from HOST2 to me
00005      367      26198 allow ip from me to HOST2 out via fxp0

Полученные данные c HOST2:
00001   367    26198 count ip from HOST1 to HOST2
00002   201    20077 count ip from HOST2 to HOST1
 
Сколько отправил HOST1, столько и получил HOST2. Есть расхождение в трафике, но несущественное.
Тот же тест, с keep-state

Код: Выделить всё

Полученные данные c HOST1:
00001    207     20122 count ip from HOST2 to me
00005    580     46409 allow ip from me to HOST2 out via fxp0 keep-state

Полученные данные c HOST2:
00001   381    26647 count ip from HOST1 to HOST2
00002   211    20516 count ip from HOST2 to HOST1
Вобщем нифига не выяснил ответ на собственный же вопрос. :-(
Есть идеи как вычислить?

P.S. Сложилось мнение, что трафик действительно незначительный, но если у Вас 100 компов с запущенными ICQ к примеру, то это выливается в круглую сумму, особенно в месяц.
Лучше установить FreeBSD, чем потратить 30 лет на Linux'ы и выяснить какой из них хуже.

Хостинговая компания Host-Food.ru
Хостинг HostFood.ru
 

Услуги хостинговой компании Host-Food.ru

Хостинг HostFood.ru

Тарифы на хостинг в России, от 12 рублей: https://www.host-food.ru/tariffs/hosting/
Тарифы на виртуальные сервера (VPS/VDS/KVM) в РФ, от 189 руб.: https://www.host-food.ru/tariffs/virtualny-server-vps/
Выделенные сервера, Россия, Москва, от 2000 рублей (HP Proliant G5, Intel Xeon E5430 (2.66GHz, Quad-Core, 12Mb), 8Gb RAM, 2x300Gb SAS HDD, P400i, 512Mb, BBU):
https://www.host-food.ru/tariffs/vydelennyi-server-ds/
Недорогие домены в популярных зонах: https://www.host-food.ru/domains/

Аватара пользователя
Alex Keda
стреляли...
Сообщения: 35148
Зарегистрирован: 2004-10-18 14:25:19
Откуда: Made in USSR
Контактная информация:

Непрочитанное сообщение Alex Keda » 2007-02-01 22:51:35

1 мегабайт на юзера в месяц.
я считал на прошлой работе...
Убей их всех! Бог потом рассортирует...

Аватара пользователя
dikens3
подполковник
Сообщения: 4856
Зарегистрирован: 2006-09-06 16:24:08
Откуда: Нижний Новгород
Контактная информация:

Непрочитанное сообщение dikens3 » 2007-02-02 11:09:21

Да я не о самой ICQ, я о keep-state.
У меня в одном офисе при расходе трафика около 1GB расхождение получалось 30-50Mb в месяц. После отключения Keep-state всё стало в норму. Вот и хотел каким-нибудь тестом найти.
Ведь не секрет, что ICQ, для поддержания соединений, отправляет 60 байт каждую минуту.
А в случае, если ещё к ним будет добавляться keep-state должно быть больше.
Вобщем забил я на keep-state. Буду думать что-нибудь новое.
Лучше установить FreeBSD, чем потратить 30 лет на Linux'ы и выяснить какой из них хуже.

Аватара пользователя
zorg
лейтенант
Сообщения: 665
Зарегистрирован: 2006-03-01 22:25:36
Откуда: Санкт-Петербург

Непрочитанное сообщение zorg » 2007-02-02 18:34:23

вообще не знаю, но если стоит полная аська которая крутит рекламу, то тут 60 байтами не обойдётся, за 12 часов простоя - набежало 16 метров, так что имеет смысл полную аську не ставить! :)
Всё дело в перце!! :)

Аватара пользователя
kolesya
сержант
Сообщения: 191
Зарегистрирован: 2006-10-17 15:54:01
Откуда: Украина, Киев

Непрочитанное сообщение kolesya » 2007-02-19 21:38:35

на qip переходить надо ... или я не прав ?
поделитесь опытом, кто что юзает в качестве "корпоративной аськи" :P

Аватара пользователя
Alex Keda
стреляли...
Сообщения: 35148
Зарегистрирован: 2004-10-18 14:25:19
Откуда: Made in USSR
Контактная информация:

Непрочитанное сообщение Alex Keda » 2007-02-19 22:53:10

миранда
Убей их всех! Бог потом рассортирует...

Аватара пользователя
Raven2000
-=_UNIX_=-
Сообщения: 4423
Зарегистрирован: 2006-10-29 17:59:13
Откуда: Там, где нас нет.
Контактная информация:

Непрочитанное сообщение Raven2000 » 2007-02-19 23:19:16

QIP 2005 Bild 8010

Аватара пользователя
Alex Keda
стреляли...
Сообщения: 35148
Зарегистрирован: 2004-10-18 14:25:19
Откуда: Made in USSR
Контактная информация:

Непрочитанное сообщение Alex Keda » 2007-02-20 0:24:05

локальной аськи нет чтоль?
Убей их всех! Бог потом рассортирует...

Аватара пользователя
kolesya
сержант
Сообщения: 191
Зарегистрирован: 2006-10-17 15:54:01
Откуда: Украина, Киев

Непрочитанное сообщение kolesya » 2007-02-20 9:02:02

lissyara писал(а):локальной аськи нет чтоль?
есть, iserverd юзаю. Но может кто нить посоветует кието варианты (с посгресом пока не особо) ?

Аватара пользователя
Alex Keda
стреляли...
Сообщения: 35148
Зарегистрирован: 2004-10-18 14:25:19
Откуда: Made in USSR
Контактная информация:

Непрочитанное сообщение Alex Keda » 2007-02-20 9:05:13

я wildfire использую. Щас он уже в портах есть
Убей их всех! Бог потом рассортирует...

Аватара пользователя
Raven2000
-=_UNIX_=-
Сообщения: 4423
Зарегистрирован: 2006-10-29 17:59:13
Откуда: Там, где нас нет.
Контактная информация:

Непрочитанное сообщение Raven2000 » 2007-02-20 10:05:50

Может опишешь установку wildfire а :?:

Аватара пользователя
Alex Keda
стреляли...
Сообщения: 35148
Зарегистрирован: 2004-10-18 14:25:19
Откуда: Made in USSR
Контактная информация:

Непрочитанное сообщение Alex Keda » 2007-02-20 10:25:16

а чё там ставить-то?
=======
реально - установка проще некуда.
========
Взял бы да сам описаЛ:)))
Убей их всех! Бог потом рассортирует...

Аватара пользователя
Raven2000
-=_UNIX_=-
Сообщения: 4423
Зарегистрирован: 2006-10-29 17:59:13
Откуда: Там, где нас нет.
Контактная информация:

Непрочитанное сообщение Raven2000 » 2007-02-20 10:31:07

Лана лана надо просто поковырять и поставить
Взял бы да сам описаЛ))
а потом может что накатаю :)
Да к нему какой клиент приятнее на маздае?
лично ты какой импользуешь?
Базу внутреннюю или внешнюю используешь?

Аватара пользователя
Alex Keda
стреляли...
Сообщения: 35148
Зарегистрирован: 2004-10-18 14:25:19
Откуда: Made in USSR
Контактная информация:

Непрочитанное сообщение Alex Keda » 2007-02-20 10:59:44

база у меня MySQL, клиент - под виндой юзал спарк - ихний клиент, щас копете
Убей их всех! Бог потом рассортирует...

Аватара пользователя
dikens3
подполковник
Сообщения: 4856
Зарегистрирован: 2006-09-06 16:24:08
Откуда: Нижний Новгород
Контактная информация:

Непрочитанное сообщение dikens3 » 2007-02-20 11:18:38

Raven2000 писал(а):QIP 2005 Bild 8010
Аналогично.
Лучше установить FreeBSD, чем потратить 30 лет на Linux'ы и выяснить какой из них хуже.

Аватара пользователя
smilealex
мл. сержант
Сообщения: 105
Зарегистрирован: 2007-06-20 20:34:31
Откуда: SAMARA
Контактная информация:

Re: Несколько приёмов работы с IPFW.

Непрочитанное сообщение smilealex » 2007-10-01 9:19:06

плиз squid.conf в студию!
Слава Богу за всё!

Аватара пользователя
dikens3
подполковник
Сообщения: 4856
Зарегистрирован: 2006-09-06 16:24:08
Откуда: Нижний Новгород
Контактная информация:

Re: Несколько приёмов работы с IPFW.

Непрочитанное сообщение dikens3 » 2007-10-01 9:27:25

Парень заблудился. :-)
Лучше установить FreeBSD, чем потратить 30 лет на Linux'ы и выяснить какой из них хуже.

Аватара пользователя
smilealex
мл. сержант
Сообщения: 105
Зарегистрирован: 2007-06-20 20:34:31
Откуда: SAMARA
Контактная информация:

Re: Несколько приёмов работы с IPFW.

Непрочитанное сообщение smilealex » 2007-10-01 9:34:38

dikens3 писал(а):Парень заблудился. :-)
точняк)))
не))) а фигле..в фф открыто чот штук 40 вкладок.. половина с лиссяриного ресурса... вот пальцы и заблудились!!!
соре за офтоп
Слава Богу за всё!