Грамотный IPFW - как именно сделать?

Проблемы установки, настройки и работы Правильной Операционной Системы

Модератор: terminus

Правила форума
Убедительная просьба юзать теги [cоde] при оформлении листингов.
Сообщения не оформленные должным образом имеют все шансы быть незамеченными.
KaMa-CyTpA
мл. сержант
Сообщения: 127
Зарегистрирован: 2006-11-10 12:48:45
Откуда: Мурманск
Контактная информация:

Грамотный IPFW - как именно сделать?

Непрочитанное сообщение KaMa-CyTpA » 2006-12-30 16:09:58

Есть сеть внутренняя 192.168.0.0/24
Внутренний интерфейс 192.168.0.254
Внешний интерфейс 213.142.192.193
Внутри два DC 4, 11.
Мыло 10.
На FreBSD - SQUID NAT SAMBA FTP
Стараюсь написать IPFW так чтобы и снаружи закрыто всё подряд было, и чтобы сервер в АД регистрировался. Чтобы пользователи ходили через SQUID, но есть компы в сети, на которых установлены такие программы, которые не понимают проксей - и нужен НАТ. Также из локалки должна быть видна шара на этом сервере чтобы выкладывать туда инфу и чтобы потом люди с другого города забирали её по FTP.
Как сделать так, чтобы через NAT ходили только те, кому можно, а остальные только через SQUID - потому что статистика и всё такое...

/sbin/ipfw -f flush
/sbin/ipfw -f pipe flush
/sbin/ipfw -f queue flush

cmd="/sbin/ipfw -q add "
ip_external="213.142.192.193"
ip_internal="192.168.0.254"
interface_internal="vr0"
interface_external="fxp0"
network_external="213.142.192.0/24"
network_internal="192.168.0.0/24"
lan="192.168.0"

${cmd} check-state
${cmd} allow ip from any to any via lo0
${cmd} deny all from any to 127.0.0.0/8
${cmd} deny all from 127.0.0.0/8 to any
${cmd} deny icmp from any to any
${cmd} deny all from any to any frag
${cmd} deny all from any to me 22 via ${interface_external}
#Deny Internal
${cmd} deny all from ${network_external} to any in via ${interface_internal}
${cmd} deny ip from any to 10.0.0.0/8 in via ${interface_external}
${cmd} deny ip from any to 172.16.0.0/12 in via ${interface_external}
${cmd} deny ip from any to 192.168.0.0/16 in via ${interface_external}
${cmd} deny ip from any to 0.0.0.0/8 in via ${interface_external}
${cmd} deny ip from any to 169.254.0.0/16 in via ${interface_external}
${cmd} deny ip from any to 224.0.0.0/4 in via ${interface_external}
${cmd} deny ip from any to 240.0.0.0/4 in via ${interface_external}
#FTP
${cmd} allow all from any to ${ip_external} 21 via ${interface_external}
#DNS
#${cmd} allow udp from ${lan}.10, ${lan}.4, ${lan}.11 to me 53 via ${interface_internal} keep-state
#${cmd} allow udp from ${network_internal} to ${lan}.10, ${lan}.4, ${lan}.11 dst-port 53 via ${interface_internal} keep-state
#MAIL
#${cmd} allow tcp from ${lan}.10 to ${network_internal} dst-port 25,110,143 via ${interface_internal} keep-state
#${cmd} allow tcp from ${network_internal} to ${lan}.10 dst-port 25,110,143 via ${interface_internal} keep-state
#AD
#${cmd} allow all from ${lan}.4 to me via ${interface_internal} keep-state
#${cmd} allow all from me to ${lan}.4 dst-port 88,137,139,389,464,3268 via ${interface_internal} keep-state
#${cmd} allow all from ${lan}.11 to me via ${interface_internal} keep-state
#${cmd} allow all from me to ${lan}.11 dst-port 88,137,139,389,464,3268 via ${interface_internal} keep-state
#NAT DIVERT
${cmd} divert natd ip from ${network_internal} to any out via ${interface_external}
${cmd} divert natd ip from any to ${ip_external} in via ${interface_external}
#Deny External
${cmd} deny all from ${network_internal} to any in via ${interface_external}
${cmd} deny ip from 10.0.0.0/8 to any out via ${interface_external}
${cmd} deny ip from 172.16.0.0/12 to any out via ${interface_external}
${cmd} deny ip from 192.168.0.0/16 to any out via ${interface_external}
${cmd} deny ip from 0.0.0.0/8 to any out via ${interface_external}
${cmd} deny ip from 169.254.0.0/16 to any out via ${interface_external}
${cmd} deny ip from 224.0.0.0/4 to any out via ${interface_external}
${cmd} deny ip from 240.0.0.0/4 to any out via ${interface_external}
#NAT COMPUTER
${cmd} allow all from ${lan}.56 to any setup
${cmd} allow all from any to ${lan}.56
#БЕЗ НЕГО ВООБЩЕ НИЧЕГО НЕ РАБОТАЕТ
${cmd} allow all from any to any
#NAT
natd -f /etc/natd.conf -n ${interface_external}

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

Аватара пользователя
Maks
рядовой
Сообщения: 26
Зарегистрирован: 2006-12-28 9:49:47
Откуда: Internet

Re: Грамотный IPFW - как именно сделать?

Непрочитанное сообщение Maks » 2006-12-30 17:12:49

KaMa-CyTpA писал(а): #NAT
natd -f /etc/natd.conf -n ${interface_external}
IMHO, это вообще тут не надо.

У меня структура /etc/rc.firewall следущая:

1. Описание переменных.
2. flush опции.
3. Описание правил доступа по статическим маршрутам (описаных в rc.conf), те которые не попадают в дайверт natd.
(этого пункта у Вас может и не быть... Просто у меня за внешним интерфейсом есть еще "серые" локальные сети, которые должны иметь доступ в мою внутреннюю "серую" сеть - например: 192.168.0.0.24 <-> 172.15.15.0/24).
4. Включаем NAT'ирование пакетов:

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

${cmd} add divert natd all from any to any via ${outif}
где ${outif} - имя внешнего интерфейса.
5. Описание правил доступа к внутренним серверам с "серыми" IP, на сервисы которых проброшены порты с внешнего интерфеса согласно правилам в /etc/natd.conf
6. Выставление шейпов.
7. Описание правил доступа к серверу с внешнего и внутреннего интерфесам (кому можно на эту машинку ходить по ssh, кому можно щимиться к MySQL извне и т.д.)
8. Описание правил доступа из локальной сети во внешний мир.

Ну и в конце традиционное:

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

${cmd} add 65534 deny log all from any to any
Все что не разрешено - запрещено!

Пункты 7 и 8 можно поменять местами. Главное не притулить пункт 4 позже 5-8, или раньше 3, если используются static_routes, потому что все пакеты которые пройдут после divert будут отправлены через внешний интерфейс на Ваш default gateway.
The Truth Is Out There...

KaMa-CyTpA
мл. сержант
Сообщения: 127
Зарегистрирован: 2006-11-10 12:48:45
Откуда: Мурманск
Контактная информация:

Непрочитанное сообщение KaMa-CyTpA » 2007-01-04 9:43:33

Спасибо за ответ!
Единственное я не указал - то, что я я написал - это содержимое моего /etc/rc.local
Поэтому в конце такая штукенция прикручена по поводу NAT...
А по поводу NAT - ${cmd} add divert natd all from any to any via ${outif} - этой строкой можно заменить две мои строчки? Или как?

И меня вот волнует ещё строка в которой я всем всё разрешаю - она в самом конце. Но без неё веб-сессии работают, а мыло и SSH и RDP ни в какую...
Хотя хочу разрешить тока со своей машинки - 56 IP...

alexcom
ефрейтор
Сообщения: 53
Зарегистрирован: 2006-09-05 17:46:29

Re: Грамотный IPFW - как именно сделать?

Непрочитанное сообщение alexcom » 2007-01-04 10:56:20

Maks писал(а): Ну и в конце традиционное:

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

${cmd} add 65534 deny log all from any to any
Ну на счет log ты загнул....
Прикинь на сколько будет расти лог :roll: :wink:

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

Непрочитанное сообщение Alex Keda » 2007-01-04 11:02:29

у меня все deny логгируются. и лимит на 5 миллионов пакетов стоит...
ничё, нормально всё.
Убей их всех! Бог потом рассортирует...

alexcom
ефрейтор
Сообщения: 53
Зарегистрирован: 2006-09-05 17:46:29

Непрочитанное сообщение alexcom » 2007-01-04 13:26:33

lissyara писал(а):у меня все deny логгируются. и лимит на 5 миллионов пакетов стоит...
ничё, нормально всё.
Ну понятно что ничего страшного не произойдет :)))
Ну все же.. Я логирую только запреты на некоторые закрытые с внешнего мира (22,etc).А логировать все смысл имхо?...

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

Непрочитанное сообщение Alex Keda » 2007-01-04 14:09:07

статистику собираю :)
ночью скрипт - на почту.
http://www.lissyara.su/?id=1172
Убей их всех! Бог потом рассортирует...

alexcom
ефрейтор
Сообщения: 53
Зарегистрирован: 2006-09-05 17:46:29

Непрочитанное сообщение alexcom » 2007-01-04 16:57:27

lissyara писал(а):статистику собираю :)
ночью скрипт - на почту.
http://www.lissyara.su/?id=1172
Занимательно...
пожалуй подумаю на этот счет :)

Аватара пользователя
Maks
рядовой
Сообщения: 26
Зарегистрирован: 2006-12-28 9:49:47
Откуда: Internet

Re: Грамотный IPFW - как именно сделать?

Непрочитанное сообщение Maks » 2007-01-05 10:32:54

alexcom писал(а):
Maks писал(а): Ну и в конце традиционное:

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

${cmd} add 65534 deny log all from any to any
Ну на счет log ты загнул....
Прикинь на сколько будет расти лог :roll: :wink:
А он ротируется. Грепом из него по крону выбирается интересующее меня (хто там ломился на SSH, и так далее) и шлется в почту, а остальное лежит себе пока не будет "переротировано" ;)
The Truth Is Out There...

Аватара пользователя
Maks
рядовой
Сообщения: 26
Зарегистрирован: 2006-12-28 9:49:47
Откуда: Internet

Непрочитанное сообщение Maks » 2007-01-05 10:40:42

KaMa-CyTpA писал(а):Спасибо за ответ!
Единственное я не указал - то, что я я написал - это содержимое моего /etc/rc.local
Поэтому в конце такая штукенция прикручена по поводу NAT...
А по поводу NAT - ${cmd} add divert natd all from any to any via ${outif} - этой строкой можно заменить две мои строчки? Или как?
Незнаю.
Но знаю то, что в моем варианте все работает уже больше года и ни разу еще не "ломалось". ;)
KaMa-CyTpA писал(а): И меня вот волнует ещё строка в которой я всем всё разрешаю - она в самом конце.


В самом конце должна быть строка, которая всем все запрещает. А до нее должны идти разрешающие правила. Это политика "Все что не разрешено - запрещено", в отличии от противоположного варианта.

Я этот вариант считаю более правильным. Иначе если делать фаер по принципу "все что не запрещено - разрешено", но есть вероятность что то забыть запретить. А когда забываешь что-то разрешить, то сразу об этом узнаешь :D
KaMa-CyTpA писал(а): Но без неё веб-сессии работают, а мыло и SSH и RDP ни в какую...
Хотя хочу разрешить тока со своей машинки - 56 IP...
http://www.opennet.ru/docs/RUS/ipfw/ipf ... ty.html.gz
The Truth Is Out There...