IPFW + natd

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

Модератор: terminus

Правила форума
Убедительная просьба юзать теги [cоde] при оформлении листингов.
Сообщения не оформленные должным образом имеют все шансы быть незамеченными.
Аватара пользователя
$Alchemist
сержант
Сообщения: 173
Зарегистрирован: 2008-06-26 13:38:17
Откуда: SPb
Контактная информация:

IPFW + natd

Непрочитанное сообщение $Alchemist » 2008-06-26 14:15:43

FreeBSD 7.0, IPFW, natd, squid 2.6...
В ядре есть:

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

options         IPFIREWALL
options         IPFIREWALL_VERBOSE
options         IPFIREWALL_VERBOSE_LIMIT=100
options         IPFIREWALL_FORWARD
options         IPDIVERT 
options         DUMMYNET
options         IPFIREWALL_DEFAULT_TO_ACCEPT
Правила:

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

#!/bin/sh

# при работе по SSH, чтобы перечитать конфиг набирать nohup sh /etc/rules

# Прежде, чем мы начнем, сбросим список
ipfw -q -f flush

# Установим префикс команды для набора правил
cmd="ipfw -q add"
skip="skipto 800"
wanip="xxx.xxx.xxx.xxx" # внешний IP
lannet="192.168.0.0/24" # внутренняя сеть

# Нет запретов внутри интерфейса смотрящего в локальную сеть
$cmd 005 allow all from any to any via re0

# Нет ограничений на Loopback интерфейсе
$cmd 010 allow all from any to any via lo0

# Отправляем всех на прозрачный прокси
#$cmd 011 fwd 127.0.0.1,3129 tcp from $lannet to any 80

# проверяем если пакет входящий и транслирован ли он
$cmd 014 divert natd ip from any to any in via rl0

# Позволяем пакету проходить, если предыдущий был добавлен
#в "динамическую" таблицу правил с разрешением состояния keep-state.
$cmd 015 check-state

#################################################################
# Интерфейс смотрящий в интернет (Исходящая секция)
#################################################################

# Разрешаем исходящий доступ к DNS провайдера.
$cmd 020 $skip tcp from $lannet to any 53 out via rl0 setup keep-state

# Allow ICQ
$cmd 035 $skip tcp from $lannet to any 5190 out via rl0 setup keep-state

# Разрешаем http запросы в обход сквида
$cmd 040 $skip tcp from $lannet to any 80 out via rl0 setup keep-state

# Разрешаем https запросы в обход сквида
$cmd 050 $skip tcp from $lannet to any 443 out via rl0 setup keep-state

# Разрешаем исходящий RDP
$cmd 050 $skip tcp from $lannet to any 3389 out via rl0 setup keep-state

# Разрешаем функцию отправки и приема почты
$cmd 060 $skip tcp from $lannet to any 25 out via rl0 setup keep-state
$cmd 061 $skip tcp from $lannet to any 110 out via rl0 setup keep-state

# Разрешаем полный доступ с локалхоста под рутом
$cmd 070 $skip tcp from me to any out via rl0 setup keep-state uid root

# Пытаемся выпустить запросы от сквида
$cmd 071 $skip tcp from me to any 80 out via rl0

# Разрешаем исходящий пинг
$cmd 080 $skip icmp from any to any out via rl0 keep-state

# Эта функция используется SSH
$cmd 110 $skip tcp from any to any 22 out via rl0 setup keep-state

# Разрешаем прохождение пакетов до ntp time server
$cmd 130 $skip udp from $lannet to any 123 out via rl0 keep-state

#################################################################
# Интерфейс смотрящий в Internet (Входящая секция)
# Опрашиваем запросы начала сессии идущие из Интернета
# в локальную сеть или к гейту
#################################################################

# Запрещаем весь входящий траффик из зарезервированных адресных пространств
$cmd 300 deny all from 192.168.0.0/16  to any in via rl0  #RFC 1918 private IP
$cmd 301 deny all from 172.16.0.0/12   to any in via rl0  #RFC 1918 private IP
$cmd 302 deny all from 10.0.0.0/8      to any in via rl0  #RFC 1918 private IP
$cmd 303 deny all from 127.0.0.0/8     to any in via rl0  #loopback
$cmd 304 deny all from 0.0.0.0/8       to any in via rl0  #loopback
$cmd 305 deny all from 169.254.0.0/16  to any in via rl0  #DHCP auto-config
$cmd 306 deny all from 192.0.2.0/24    to any in via rl0  #reserved for docs
$cmd 307 deny all from 204.152.64.0/23 to any in via rl0  #Sun cluster
$cmd 308 deny all from 224.0.0.0/3     to any in via rl0  #Class D & E multicast

# Запрещаем ident
$cmd 315 deny tcp from any to any 113 in via rl0

# Запрещаем весь сервис Netbios. 137=имя, 138=дейтаграмма, 139=сессия
# Netbios это сервис общего доступа MS/Windows .
# Блокируем MS/Windows hosts2 name server requests 81
$cmd 320 deny tcp from any to any 137 in via rl0
$cmd 321 deny tcp from any to any 138 in via rl0
$cmd 322 deny tcp from any to any 139 in via rl0
$cmd 323 deny tcp from any to any 81  in via rl0

# Запрещаем пакеты прибывшие позже
$cmd 330 deny all from any to any frag in via rl0

# Запрещаем ACK пакеты которые не совпадают с динамической таблицей правил
$cmd 332 allow tcp from any to any established in via rl0

# разрешаем некоторые типы ICMP траффика - эхо-запрос,
# эхо-ответ и время жизни пакета истекло
$cmd 360 allow icmp from any to $wanip in via rl0 icmptypes 0,8,11

# Разрешаем входящую www функцию
$cmd 370 allow tcp from any to $wanip 80 in via rl0 setup limit src-addr 2

# Разрешаем входящие безопасные SSH
$cmd 380 allow tcp from any to $wanip 2211 in via rl0 setup limit src-addr 2

# Разрешаем входящую почту
$cmd 390 allow tcp from any to $wanip 25 in via rl0 setup limit src-addr 2

# Разрешаем входящую почту
$cmd 390 allow tcp from any to $wanip 110 in via rl0 setup limit src-addr 2

# Разрешаем RDP
#$cmd 395 allow tcp from any to $wanip 3389 in via rl0 setup limit src-addr 2

# Разрешаем RAdmin
$cmd 395 allow tcp from any to $wanip 50505 in via rl0 setup limit src-addr 2

# Отбрасываем и протоколируем все входящие пакеты из внешнего мира
#$cmd 400 deny log all from any to any in via rl0

# # Отбрасываем и протоколируем все исходящие пакеты во внешний мир
#$cmd 450 deny log all from any to any out via rl0

# Местоположение skipto для исходящих правил состояния
$cmd 800 divert natd ip from $lannet to any out via rl0
$cmd 801 allow ip from any to any

# Режем все лишнее нах!
$cmd 999 deny log all from any to any
Суть вопроса: если активировать правила 400 и 450 - то весь трафик блокируется, а если их не активировать, то получается проходной двор (правило 801).
Заранее благодарен за содействие!
Machines to Work,
People to Think.

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

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

Re: IPFW + natd

Непрочитанное сообщение dikens3 » 2008-06-26 14:36:50

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

Аватара пользователя
$Alchemist
сержант
Сообщения: 173
Зарегистрирован: 2008-06-26 13:38:17
Откуда: SPb
Контактная информация:

Re: IPFW + natd

Непрочитанное сообщение $Alchemist » 2008-06-27 19:15:38

Спасибо, читал...

Перепробовал кучу разных вариантов, пробовал kernel nat, все сводится к одной проблеме:
К примеру, разрешаю только исходящий трафик на 80 порт, происходит соединение и в ответ отправляется пакет мне обратно.
У меня естественно входящий доступ закрыт. Пакет отбивается и исходящего соединения не происходит =\
Как заставить ipfw понять что входящий пакет - это ответ на мой запрос и пропускать такие вещи?!
Machines to Work,
People to Think.

paradox
проходил мимо
Сообщения: 11620
Зарегистрирован: 2008-02-21 18:15:41

Re: IPFW + natd

Непрочитанное сообщение paradox » 2008-06-27 19:20:11

изучить фаревол от и до
как работает
каике политики бывают
как обычно строиться
итд
а новичкам нат я бы рекомендовал поднимать на ipnat вместо natd

Аватара пользователя
alex3
лейтенант
Сообщения: 872
Зарегистрирован: 2006-11-20 16:47:56
Откуда: Переславль
Контактная информация:

Re: IPFW + natd

Непрочитанное сообщение alex3 » 2008-06-27 19:24:55

гм... а если почитать сам rc.firewall умолчальный... и посмыслить над порядком правил? я не претендую, просто - вдруг поможет.
paradox - плохому не учи...
Если ipfw можно считать речью обычного человека, то pf - речь политика. За каждой ошибкой -ядерный песец.

paradox
проходил мимо
Сообщения: 11620
Зарегистрирован: 2008-02-21 18:15:41

Re: IPFW + natd

Непрочитанное сообщение paradox » 2008-06-27 19:28:38

ты насчет natd ?
так его сложно поднимать
не каждый новичек поймет что такое divert
а ipnat
поднимаеться двумя строчками
kldload
и ipnat -f /etc/
итд

для новичков пойдет


а насчет политик
так пусть почитают
есть политика разрешать все от себя
и разрешать к себе токо то что знаю
как пример

и таких примеров много = ))

Аватара пользователя
alex3
лейтенант
Сообщения: 872
Зарегистрирован: 2006-11-20 16:47:56
Откуда: Переславль
Контактная информация:

Re: IPFW + natd

Непрочитанное сообщение alex3 » 2008-06-27 19:35:36

я, когда был новичком, полгода вмысливал /etc/rc.firewall, а потом взял и написал то, что мне нужно.... заработало раза с пятого ;-)
Если ipfw можно считать речью обычного человека, то pf - речь политика. За каждой ошибкой -ядерный песец.

paradox
проходил мимо
Сообщения: 11620
Зарегистрирован: 2008-02-21 18:15:41

Re: IPFW + natd

Непрочитанное сообщение paradox » 2008-06-27 19:38:15

статья для новичков есть где то на опеннете
там очень неплохо расписано как пакеты гуляют по ipfw
нужно если на нее копилефта нет
сюда добавить
либо линками как то пинать

Аватара пользователя
$Alchemist
сержант
Сообщения: 173
Зарегистрирован: 2008-06-26 13:38:17
Откуда: SPb
Контактная информация:

Re: IPFW + natd

Непрочитанное сообщение $Alchemist » 2008-06-27 21:33:16

Проблему установки соединения должны решить keep-state, но что-то не помню, чтобы через нат эта схема у меня корректно отрабатывала... :(
Machines to Work,
People to Think.

Аватара пользователя
$Alchemist
сержант
Сообщения: 173
Зарегистрирован: 2008-06-26 13:38:17
Откуда: SPb
Контактная информация:

Re: IPFW + natd

Непрочитанное сообщение $Alchemist » 2008-06-28 0:09:16

Правила с keep-state попадают в динамическую таблицу, в дефолтное запрещающее правило ничего не попадает, в журнале запретов нет, но соединений не происходит! :st:
Machines to Work,
People to Think.

paradox
проходил мимо
Сообщения: 11620
Зарегистрирован: 2008-02-21 18:15:41

Re: IPFW + natd

Непрочитанное сообщение paradox » 2008-06-28 0:32:43

видать барьер с divert побороть немогут = )))

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

Re: IPFW + natd

Непрочитанное сообщение dikens3 » 2008-06-28 8:37:04

Автор, посмотрите мой пример с ICMP и проследите по каким правилам идёт и возвращается пакет.
# Разрешаем исходящий доступ к DNS провайдера.
$cmd 020 $skip tcp from $lannet to any 53 out via rl0 setup keep-state
Лично мне не очень понятно действие этой конструкции.(я понимаю что она должна делать, а вот что будет не понимаю. Эксперимент нужен, по типу моего, по приведённой ссылке)

Короче, какое создаётся динамическое правило в момент срабатывания этого правила? Наверное allow, а не skip.. Тем самым при повторном срабатывании на правиле с check-state будет выполнено allow (а не переход к divert). Вобщем хз, только предположения.
Лучше установить FreeBSD, чем потратить 30 лет на Linux'ы и выяснить какой из них хуже.

Аватара пользователя
$Alchemist
сержант
Сообщения: 173
Зарегистрирован: 2008-06-26 13:38:17
Откуда: SPb
Контактная информация:

Re: IPFW + natd

Непрочитанное сообщение $Alchemist » 2008-06-28 22:58:17

Вобщем правила уже отточены, вроде как, до идеала, пакеты направляются куда нужно, но соединения не происходит:

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

mail# ipfw -de show
00001 837 174180 allow ip from any to any established
00020   3    144 allow ip from any to any via re0
00030   0      0 allow ip from any to any via lo0
00035   0      0 divert 8668 ip from any to any in via rl0
00040   0      0 allow icmp from any to any keep-state
00050   0      0 allow udp from any to any dst-port 53 out via rl0
00060   0      0 allow udp from any 53 to any in via rl0
00099   0      0 allow ip from me to any out via rl0 setup keep-state
00100   3    144 skipto 400 tcp from 192.168.0.0/24 to any dst-port 80 out via rl0 setup keep-state
00200   0      0 allow tcp from any to 213.221.11.22 dst-port 80 in via rl0 setup limit src-addr 2
00210   0      0 allow tcp from any to 213.221.11.22 dst-port 22 in via rl0 setup limit src-addr 2
00220   0      0 allow tcp from any to 213.221.11.22 dst-port 25 in via rl0 setup limit src-addr 2
00230   0      0 allow tcp from any to 213.221.11.22 dst-port 110 in via rl0 setup limit src-addr 2
00300   0      0 deny log logamount 300 ip from any to any
00400   3    144 divert 8668 ip from any to any out via rl0
00410   3    144 allow ip from any to any
00999   0      0 deny log logamount 300 ip from any to any
65535   0      0 allow ip from any to any
## Dynamic rules (2):
00100   1     48 (19s) STATE tcp 192.168.0.120 4379 <-> 213.180.204.11 80
00100   0      0 (15s) STATE tcp 192.168.0.120 4377 <-> 213.180.204.11 80
Machines to Work,
People to Think.

paradox
проходил мимо
Сообщения: 11620
Зарегистрирован: 2008-02-21 18:15:41

Re: IPFW + natd

Непрочитанное сообщение paradox » 2008-06-28 23:11:14

вот 1000 раз говорил
неюзайте divert если не понимаете как он работает

tcpdump в зубы!
и logamount на ipfw
man nc

особенно вникните в 100 правило

Аватара пользователя
alex3
лейтенант
Сообщения: 872
Зарегистрирован: 2006-11-20 16:47:56
Откуда: Переславль
Контактная информация:

Re: IPFW + natd

Непрочитанное сообщение alex3 » 2008-06-28 23:21:02

man nc
Norton Commander? :cz2:
Если ipfw можно считать речью обычного человека, то pf - речь политика. За каждой ошибкой -ядерный песец.

paradox
проходил мимо
Сообщения: 11620
Зарегистрирован: 2008-02-21 18:15:41

Re: IPFW + natd

Непрочитанное сообщение paradox » 2008-06-28 23:24:08

man 1 nc
netcat

Аватара пользователя
$Alchemist
сержант
Сообщения: 173
Зарегистрирован: 2008-06-26 13:38:17
Откуда: SPb
Контактная информация:

Re: IPFW + natd

Непрочитанное сообщение $Alchemist » 2008-06-29 0:02:14

paradox писал(а):вот 1000 раз говорил
неюзайте divert если не понимаете как он работает
это не наш метод
я изначально многое не понимал, но продолжал упорно разбираться и это приносило свои результаты...
paradox писал(а): tcpdump в зубы!
спасибо, посмотрю т.к. по логам полной картины не видно
paradox писал(а):и logamount на ipfw
а это как понимать?
paradox писал(а):man nc
в общих чертах понял что за зверь, но для каких целей мне его можно применить не понял :unknown:
paradox писал(а): особенно вникните в 100 правило
Понимаю его так:
исходящие пакеты из локальной сети на порт 80 перенаправляются в правило 800, где происходит трансляция NAT
при этом устанавливается соединение между исходящим адресом и адресом назначения (setup keep-state)
Machines to Work,
People to Think.

paradox
проходил мимо
Сообщения: 11620
Зарегистрирован: 2008-02-21 18:15:41

Re: IPFW + natd

Непрочитанное сообщение paradox » 2008-06-29 0:31:38

вот изза не понимания 100 правила и диверта
у вас и появляються тараканы
а точнее отсутвуют

nc нужен что бы вы присоеденились на порт natd и увидели что там происходит
либо включили natd.conf debug

я вообще не понимаю что вы пытались сделать 100 правилом
я бы его вообще прибил
смысла оно не несет

пересмотрите свой фаер
а еще лучше переделайте его

paradox
проходил мимо
Сообщения: 11620
Зарегистрирован: 2008-02-21 18:15:41

Re: IPFW + natd

Непрочитанное сообщение paradox » 2008-06-29 0:42:33

чуть не забыл

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

ps ax| grep natd
покажите
а то может порт natd никто и не обслуживает

Аватара пользователя
$Alchemist
сержант
Сообщения: 173
Зарегистрирован: 2008-06-26 13:38:17
Откуда: SPb
Контактная информация:

Re: IPFW + natd

Непрочитанное сообщение $Alchemist » 2008-06-29 0:55:47

paradox писал(а):чуть не забыл

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

ps ax| grep natd
покажите
а то может порт natd никто и не обслуживает
перезагрузил сервак с natd_flags="-mu" и он ушел в аут... :crazy: :pardon:
в понедельник с утра приеду на работу, верну его к жизни и покажу.
но на память, sockstat выдавал инфу по natd...
Machines to Work,
People to Think.

paradox
проходил мимо
Сообщения: 11620
Зарегистрирован: 2008-02-21 18:15:41

Re: IPFW + natd

Непрочитанное сообщение paradox » 2008-06-29 0:59:55

sockstat не показывает информацию о том как и куда идет пакет и как он переписан
а использование divert при его непонимании
вы токо что убедились к чему приводит

поэтому до понедельника изучайте
ipnat
можно пореккомнедовать и pf
но для новичков
и тем кому особно сложного ничего не надо
обычный ipnat рулит

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

Re: IPFW + natd

Непрочитанное сообщение dikens3 » 2008-06-29 8:03:01

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

00001 837 174180 allow ip from any to any established
Мля..... Ну а где divert (nat) до этого правила? Думаете что divert нужен только для SYN пакета, а для остальных нет?
Данное правило стоит не в том месте и вообще в изначальном примере его небыло, откуда оно взялось?

Самому не показалось странным, что входящие пакеты не попадают в нат?

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

00035   0      0 divert 8668 ip from any to any in via rl0
Лучше установить FreeBSD, чем потратить 30 лет на Linux'ы и выяснить какой из них хуже.

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

Re: IPFW + natd

Непрочитанное сообщение Alex Keda » 2008-06-29 8:04:12

ipfw - единственный файрволл с челоеческим лицом
Убей их всех! Бог потом рассортирует...

Аватара пользователя
$Alchemist
сержант
Сообщения: 173
Зарегистрирован: 2008-06-26 13:38:17
Откуда: SPb
Контактная информация:

Re: IPFW + natd

Непрочитанное сообщение $Alchemist » 2008-06-29 19:36:23

dikens3 писал(а):

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

00001 837 174180 allow ip from any to any established
Мля..... Ну а где divert (nat) до этого правила? Думаете что divert нужен только для SYN пакета, а для остальных нет?
Данное правило стоит не в том месте и вообще в изначальном примере его небыло, откуда оно взялось?

Самому не показалось странным, что входящие пакеты не попадают в нат?

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

00035   0      0 divert 8668 ip from any to any in via rl0
Делал по переводу хэндбука http://www.lissyara.su/?id=1356, последний скрипт.
Это правило вставил для того, чтобы меня не отрубало по SSH после применения скрипта с правилами.
Да и вообще, входящий нат мне по сути и не нужен т.к. пробросом портов на внутренние серваки у меня занимается rinetd
Machines to Work,
People to Think.

Nix86
проходил мимо

Re: IPFW + natd

Непрочитанное сообщение Nix86 » 2008-06-29 20:51:38

$Alchemist писал(а):
dikens3 писал(а):

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

00001 837 174180 allow ip from any to any established
Мля..... Ну а где divert (nat) до этого правила? Думаете что divert нужен только для SYN пакета, а для остальных нет?
Данное правило стоит не в том месте и вообще в изначальном примере его небыло, откуда оно взялось?

Самому не показалось странным, что входящие пакеты не попадают в нат?

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

00035   0      0 divert 8668 ip from any to any in via rl0
Делал по переводу хэндбука http://www.lissyara.su/?id=1356, последний скрипт.
Это правило вставил для того, чтобы меня не отрубало по SSH после применения скрипта с правилами.
Да и вообще, входящий нат мне по сути и не нужен т.к. пробросом портов на внутренние серваки у меня занимается rinetd
:smile: Входящий nat нужен. divert - это не проброс портов)