IPFW+KernNAT+DUMMY

Простые/общие вопросы по UNIX системам. Спросите здесь, если вы новичок

Модераторы: vadim64, terminus

Правила форума
Убедительная просьба юзать теги [cоde] при оформлении листингов.
Сообщения не оформленные должным образом имеют все шансы быть незамеченными.
SidAndNancy
проходил мимо
Сообщения: 2
Зарегистрирован: 2011-11-03 17:18:40

IPFW+KernNAT+DUMMY

Непрочитанное сообщение SidAndNancy » 2011-11-03 18:25:17

Доброго времени суток!

С фрёй общаюсь недавно, если точнее - 4й день, до этого сколько нибудь значимого опыта с юниксами не имел. (не пинайте, типа, сильно)

Поставило начальство задачу заменить устаревшую и вечно грохающуюся Ideco ICS, старший админ, по совместительству мой учитэл недавно ушел, остался я один, маленький и неподготовленный к большой жизни =(. Начальство ессно никаких денег не дает, делай говорят как хочешь, не умеешь - научись и живо...

В общем и целом задача - поднять шлюз в интернет на 30+ пользователей, не офисная сеть (то есть мне достаточно фиолетово куда лазают мои юзеры), но было бы неплохо прикрутить в последствии какую нить трафикогляделку, дабы писать кто, куда, когда и т.п. но и не об этом нынче речь. Биллинг сейчас не важен вообще.

Что сделано:
Прочитано около 100500 статей около 100500 раз (включая хэндбук). Вроде уяснил для себя что прокся мне тут не нужна, сначала поднял в связке с natd, потом выяснил что при нагрузке больше 50 МБит оно не актуально, освоил кернел нат, две ночи промучался с IPFW, в конце концов осознал общий порядок движения правил в фаере. Кое как освоил DUMMY.

В последнюю ночь на листике составил СВОЙ_ПЕРВЫЙ_ФАЕР, и затем перенес его в скрипт, но присмотревшись, понял что не фаер получился а дуршлаг.

Прежде чем выложу скрипт, собсно попробую объяснить что я от него вообще хочу...

1. Доступ к серверу извне только по разрешенным портам, остальное резать.
2. Проброс некоторых портов одного реальника на некоторые порты некоторых локальных адресов.
3. Обрезка скорости юзерам как на входе так и на выходе.
4. Стабильность работы (вроде как аксиома, но все же =))

Добавлю что в sysctl выставлено one_pass=0
Собственно СКРИПТ (я почти уверен что он ошибочен, но это мой первый фаер... разъяснения ниже.)
#! /bin/sh

###############_PEREMENNIE_################

cmd="/sbin/ipfw"
LanOut="re0"
#IPOut="192.168.84.103"
#IPIn="192.168.85.101"
LanIn="rl0"

##############_SBROS_######################

${cmd} -f flush
${cmd} -f pipe flush
${cmd} -f queue flush

##########_VNUTRI_MOJNO_###################

${cmd} add 1000 allow ip from any to any via ${LanIn}

#############_BOIMS9I_#####################

${cmd} add 1100 deny ip from any to 127.0.0.0/8
${cmd} add 1110 deny ip from 127.0.0.0/8 to any
#${cmd} add 1120 deny ip from any to 192.168.0.0/16 in recv ${LanOut}
#${cmd} add 1130 deny ip from 192.168.0.0/16 to any in recv ${LanOut}
${cmd} add 1140 deny ip from any to 172.16.0.0/12 in recv ${LanOut}
${cmd} add 1150 deny ip from 172.16.0.0/12 to any in recv ${LanOut}
${cmd} add 1160 deny ip from any to 10.0.0.0/8 in recv ${LanOut}
${cmd} add 1170 deny ip from 10.0.0.0/8 to any in recv ${LanOut}
${cmd} add 1180 deny ip from any to 169.254.0.0/16 in recv ${LanOut}
${cmd} add 1190 deny ip from 169.254.0.0/16 to any in recv ${LanOut}

##############_LOOPBACK_###################

${cmd} add 1300 allow ip from any to any via lo0

##########_USER_TABLES_####################

${cmd} table 1 add 192.168.85.103/32
${cmd} table 2 add 192.168.85.104/32
${cmd} table 3 add 192.168.85.105/32

##############_CONFIG_PIPES_###############
###############_3Mbit/s_###################

${cmd} pipe 1 config bw 3Mbit/s mask src-ip 0x00000000
${cmd} pipe 11 config bw 3Mbit/s mask dst-ip 0x00000000

###############_8Mbit/s_###################

${cmd} pipe 2 config bw 5Mbit/s mask src-ip 0x00000000
${cmd} pipe 22 config bw 5Mbit/s mask dst-ip 0x00000000

###############_512Kbit/s_#################

${cmd} pipe 3 config bw 512Kbit/s mask src-ip 0x00000000
${cmd} pipe 33 config bw 512Kbit/s mask dst-ip 0x00000000

###############_KERN_NAT_CONFIG_###########

${cmd} nat 1 config log if ${LanOut} reset same_ports deny_in /
redirect_port tcp 192.168.85.103:3333 3333

#################_SSH_#####################

${cmd} add 2000 allow from any to ${IPOut}:22 via ${LanOut}

############_PIPES_OUT_####################

${cmd} add 3000 pipe 1 ip from table\(1\) to any out xmit ${LanOut}
${cmd} add 3010 pipe 2 ip from table\(2\) to any out xmit ${LanOut}
${cmd} add 3020 pipe 3 ip from table\(3\) to any out xmit ${LanOut}

###############_NAT_#######################

${cmd} add 4000 nat 1 ip from any to any via ${LanOut}

###########_PIPES_IN_######################

${cmd} add 5000 pipe 11 ip from any to table\(1\) in recv ${LanOut}
${cmd} add 5010 pipe 22 ip from any to table\(2\) in recv ${LanOut}
${cmd} add 5020 pipe 33 ip from any to table\(3\) in recv ${LanOut}

###########_EXIT_IZ_FAERA##################

${cmd} add 6000 allow from any to any
Пожалуйста потратьте немного времени на чтение скрипта, здесь вроде никаких выпендрежнетств нет, должно быть просто и понятно.

Вопрос в общем то такой - я приведу свою логику движения в этом фаере, а Вы, пожалуйста скажите, прав я или нет, ибо если прав я дальше буду продолжать уже по аналогии smile

Итак.
Трафик исходящий от юзера будет влетать в фаер c IN, долетать до правила 1000 и вылетать из фаера, так как внутри сети все можно. Ему будет присвоено OUT и он снова влетит в фаер, пролетит до соответствующей ему пайпы (правила 3000-3990), уйдет в DUMMY, обрежется до установленной скорости, вернется в фаер, влетит в НАТ, где создастца запись о маскиррвании и присвоится внешний ИП, затем так как установлено one_pass=0 влетит опять в фаер, после чего вылетит в интернет по правилу 6000.
Трафик возвращающийся к юзеру будет влетать в фаер с IN до правила 4000 (НАТ), где разнатитса, вернется в фаер, обрежется соответствующей ему пайпой, выйдет из фаера, получит OUT, влетит в фаер и сразу же на правиле 1000 вылетит к юзеру.
Трафик для которого указан в НАТЕ редирект портов будет вести себя аналогично трафику, который возвращается к юзеру, за тем лишь изменением что НАТитца он будет исходя из предустановленной записи в НАТе о редиректе.
Весь левый трафик извне будет долетать до НАТа и им отвергаться, так как стоит опция deny_in.
Трафик инициализированный извне на ИП сервера на порт 22 будет с IN долетать до правила 2000 (SSH), вылетать из фаера, долетать с OUT до правила 1000 и вылетать из фаера.

Благодаря маске 0x00000000 должна создаваться отдельная пайпа для каждого юзера. (так ли это и насколько это вообще правильное исполнение?)

Как то вот так у меня получилось. Повторю вопросы:

1. Правильна ли моя логика?
2. Соответствует ли мой скрипт моей логике или я где то накосячил и не заметил?
3. Разумно ли я добавил пайпы, или лучше будет делать как то иначе?
4. Видел у некоторых людей пайпы на влет и на вылет идут блоком, видимо нат где то выше или ниже... КАК тогда режеться входящий или исходящий трафик у них?
5. Что еще стоило бы добавить в правила фаера исходя из моей ситуации?

Спасибо тому человеку который осилил стокамногабукаф (что и куда выслать - в личку smile)

Хостинговая компания 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/

SidAndNancy
проходил мимо
Сообщения: 2
Зарегистрирован: 2011-11-03 17:18:40

Re: IPFW+KernNAT+DUMMY

Непрочитанное сообщение SidAndNancy » 2011-11-03 19:33:22

И еще господа, сижу разбираюсь в фаере по статье http://www.lissyara.su/articles/freebsd/tuning/ipfw/...

Хотел набраться умного а в результате завис наглухо... так вот, в обоих конфигах блок
# рубим траффик к частным сетям через внешний интерфейс
# заметтьте - эти правила отличаются от тех что были выше!
${FwCMD} add deny ip from 10.0.0.0/8 to any out via ${LanOut}
${FwCMD} add deny ip from 172.16.0.0/12 to any out via ${LanOut}
${FwCMD} add deny ip from 192.168.0.0/16 to any out via ${LanOut}
${FwCMD} add deny ip from 0.0.0.0/8 to any out via ${LanOut}
# рубим автоконфигуреную частную сеть
${FwCMD} add deny ip from 169.254.0.0/16 to any out via ${LanOut}
# рубаем мультикастовые рассылки
${FwCMD} add deny ip from 224.0.0.0/4 to any out via ${LanOut}
# рубаем мультикастовые рассылки
${FwCMD} add deny ip from 240.0.0.0/4 to any out via ${LanOut}
это косяк, или я чего очень сильно не понимаю? не перепутали ли здесь например
10.0.0.0/8 to any
c
any to 10.0.0.0/8

и так далее по списку? ведь все что влетает из локалки в направлении наружу будет зарубаться на этих правилах, а должно зарубаться все что вылетает из сервера через внешний интерфейс на локальные адреса, или я адске неправ?