Грамотный IPFW - как именно сделать?
Модератор: terminus
Правила форума
Убедительная просьба юзать теги [cоde] при оформлении листингов.
Сообщения не оформленные должным образом имеют все шансы быть незамеченными.
Убедительная просьба юзать теги [cоde] при оформлении листингов.
Сообщения не оформленные должным образом имеют все шансы быть незамеченными.
-
- мл. сержант
- Сообщения: 127
- Зарегистрирован: 2006-11-10 12:48:45
- Откуда: Мурманск
- Контактная информация:
Грамотный IPFW - как именно сделать?
Есть сеть внутренняя 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}
Внутренний интерфейс 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
#${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
Тарифы на хостинг в России, от 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/
Тарифы на виртуальные сервера (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 - как именно сделать?
IMHO, это вообще тут не надо.KaMa-CyTpA писал(а): #NAT
natd -f /etc/natd.conf -n ${interface_external}
У меня структура /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}
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...
-
- мл. сержант
- Сообщения: 127
- Зарегистрирован: 2006-11-10 12:48:45
- Откуда: Мурманск
- Контактная информация:
Спасибо за ответ!
Единственное я не указал - то, что я я написал - это содержимое моего /etc/rc.local
Поэтому в конце такая штукенция прикручена по поводу NAT...
А по поводу NAT - ${cmd} add divert natd all from any to any via ${outif} - этой строкой можно заменить две мои строчки? Или как?
И меня вот волнует ещё строка в которой я всем всё разрешаю - она в самом конце. Но без неё веб-сессии работают, а мыло и SSH и RDP ни в какую...
Хотя хочу разрешить тока со своей машинки - 56 IP...
Единственное я не указал - то, что я я написал - это содержимое моего /etc/rc.local
Поэтому в конце такая штукенция прикручена по поводу NAT...
А по поводу NAT - ${cmd} add divert natd all from any to any via ${outif} - этой строкой можно заменить две мои строчки? Или как?
И меня вот волнует ещё строка в которой я всем всё разрешаю - она в самом конце. Но без неё веб-сессии работают, а мыло и SSH и RDP ни в какую...
Хотя хочу разрешить тока со своей машинки - 56 IP...
-
- ефрейтор
- Сообщения: 53
- Зарегистрирован: 2006-09-05 17:46:29
Re: Грамотный IPFW - как именно сделать?
Ну на счет log ты загнул....Maks писал(а): Ну и в конце традиционное:
Код: Выделить всё
${cmd} add 65534 deny log all from any to any
Прикинь на сколько будет расти лог


- Alex Keda
- стреляли...
- Сообщения: 35426
- Зарегистрирован: 2004-10-18 14:25:19
- Откуда: Made in USSR
- Контактная информация:
-
- ефрейтор
- Сообщения: 53
- Зарегистрирован: 2006-09-05 17:46:29
- Alex Keda
- стреляли...
- Сообщения: 35426
- Зарегистрирован: 2004-10-18 14:25:19
- Откуда: Made in USSR
- Контактная информация:
-
- ефрейтор
- Сообщения: 53
- Зарегистрирован: 2006-09-05 17:46:29
- Maks
- рядовой
- Сообщения: 26
- Зарегистрирован: 2006-12-28 9:49:47
- Откуда: Internet
Re: Грамотный IPFW - как именно сделать?
А он ротируется. Грепом из него по крону выбирается интересующее меня (хто там ломился на SSH, и так далее) и шлется в почту, а остальное лежит себе пока не будет "переротировано"alexcom писал(а):Ну на счет log ты загнул....Maks писал(а): Ну и в конце традиционное:
Код: Выделить всё
${cmd} add 65534 deny log all from any to any
Прикинь на сколько будет расти лог![]()

The Truth Is Out There...
- Maks
- рядовой
- Сообщения: 26
- Зарегистрирован: 2006-12-28 9:49:47
- Откуда: Internet
Незнаю.KaMa-CyTpA писал(а):Спасибо за ответ!
Единственное я не указал - то, что я я написал - это содержимое моего /etc/rc.local
Поэтому в конце такая штукенция прикручена по поводу NAT...
А по поводу NAT - ${cmd} add divert natd all from any to any via ${outif} - этой строкой можно заменить две мои строчки? Или как?
Но знаю то, что в моем варианте все работает уже больше года и ни разу еще не "ломалось".

KaMa-CyTpA писал(а): И меня вот волнует ещё строка в которой я всем всё разрешаю - она в самом конце.
В самом конце должна быть строка, которая всем все запрещает. А до нее должны идти разрешающие правила. Это политика "Все что не разрешено - запрещено", в отличии от противоположного варианта.
Я этот вариант считаю более правильным. Иначе если делать фаер по принципу "все что не запрещено - разрешено", но есть вероятность что то забыть запретить. А когда забываешь что-то разрешить, то сразу об этом узнаешь

http://www.opennet.ru/docs/RUS/ipfw/ipf ... ty.html.gzKaMa-CyTpA писал(а): Но без неё веб-сессии работают, а мыло и SSH и RDP ни в какую...
Хотя хочу разрешить тока со своей машинки - 56 IP...
The Truth Is Out There...