Страница 1 из 1

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

Добавлено: 2006-12-30 16:09:58
KaMa-CyTpA
Есть сеть внутренняя 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}

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

Добавлено: 2006-12-30 17:12:49
Maks
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.

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

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

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

Добавлено: 2007-01-04 10:56:20
alexcom
Maks писал(а): Ну и в конце традиционное:

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

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

Добавлено: 2007-01-04 11:02:29
Alex Keda
у меня все deny логгируются. и лимит на 5 миллионов пакетов стоит...
ничё, нормально всё.

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

Добавлено: 2007-01-04 14:09:07
Alex Keda
статистику собираю :)
ночью скрипт - на почту.
http://www.lissyara.su/?id=1172

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

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

Добавлено: 2007-01-05 10:32:54
Maks
alexcom писал(а):
Maks писал(а): Ну и в конце традиционное:

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

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

Добавлено: 2007-01-05 10:40:42
Maks
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