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

Про точное размещение в фаерволле правил

Добавлено: 2007-03-29 16:42:34
proxy-man
Привет камрадам. С тех пор как я перелез на FreeBSD меня мучит один вопрос, который связан с безопасностью системы - как правильно размещать правила в IPFW? Ибо давеча настраивая очередной сервант под фряхой (насэтапил FreeBSD 6.2) я столкнулся со следующей проблемой - нужно было дать возможность удаленным пользователем подключаться к VPN-серверу для получения доступа в локальную сеть и когда я указал следующие правила в фаере:

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

${FwCMD} add allow ip from any to any 1723
${FwCMD} add allow gre from any to any
${FwCMD} add allow ip from any to any via ${VpnIface}

где переменная VpnIface - это перечень псевдоустройст ngX, которые генерирует в системе MPD. Данный перечень правил не сработал так как мне нужно - клиент подключался к VPN-серверу, но доступ в локальную сеть не получал (нужно было предоставить возможность удаленно юзать RDP). Но в пятой ветке все работало замечательно. Указанные правила размещал перед НАТом, затем начал экспериментировать и методом тыка размещал правила уже в разных местах фаера - результат хреновый (видимо у меня /dev/hands прямой симлинк на /dev/ass :) )... У кого есть какие-то советы на эту тему? (листаю раздел хандбука про IPFW, но там в общих чертах информация про фаер как таковой...) Ежели надобно - выложу целый свод правил для фаера.

Добавлено: 2007-04-02 12:21:08
proxy-man

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

FwCMD="/sbin/ipfw -q "   # бинарник ipfw
LanOut="tun0"                # внешний интерфейс
LanIn="nve0"                 # внутренний интерфейс
IpOut="200.200.200.200"     # внешний IP адрес машины
IpIn="192.168.1.1"         # внутренний IP машины
NetMask="24"                # сетевая маска локальной сети
NetIn="192.168.1.0"       # внутрення подсеть
VpnIface="ng0,ng1,ng2,ng3,ng4"  # сетевые интерфейсы для MPD
OpenVpnIface="tap0"      # сетевой интерфейс для OpenVPN
${FwCMD} -f flush
${FwCMD} add check-state
${FwCMD} add allow ip from any to any via lo0
${FwCMD} add allow udp from any to ${IpOut} 1194
${FwCMD} add allow udp from 10.10.0.1 to 10.10.0.0/24 via ${OpenVpnIface}
${FwCMD} add allow udp from 10.10.0.0/24 to 10.10.0.1 via ${OpenVpnIface}
${FwCMD} add allow ip from any to ${IpOut} 1723
${FwCMD} add allow gre from any to any
${FwCMD} add allow ip from any to any via ${VpnIface}
${FwCMD} add deny ip from any to 127.0.0.0/8
${FwCMD} add deny ip from 127.0.0.0/8 to any
${FwCMD} add deny ip from any to 10.0.0.0/8 in via ${LanOut}
${FwCMD} add deny ip from any to 172.16.0.0/12 in via ${LanOut}
${FwCMD} add deny ip from any to 192.168.0.0/16 in via ${LanOut}
${FwCMD} add deny ip from any to 0.0.0.0/8 in via ${LanOut}
${FwCMD} add deny ip from any to 169.254.0.0/16 in via ${LanOut}
${FwCMD} add deny ip from any to 240.0.0.0/4 in via ${LanOut}
${FwCMD} add deny icmp from any to any frag
${FwCMD} add deny log icmp from any to 255.255.255.255 in via ${LanOut}
${FwCMD} add deny log icmp from any to 255.255.255.255 out via ${LanOut}
${FwCMD} add divert natd ip from ${NetIn}/${NetMask} to any out via ${LanOut}
${FwCMD} add divert natd ip from any to ${IpOut} in via ${LanOut}
${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}
${FwCMD} add allow tcp from any to any established
${FwCMD} add allow ip from ${IpOut} to any out xmit ${LanOut}
${FwCMD} add allow udp from any 53 to any via ${LanOut}
${FwCMD} add allow udp from any to any 53 via ${LanOut}
${FwCMD} add allow udp from any to any 123 via ${LanOut}
${FwCMD} add allow tcp from any to ${IpOut} 21 via ${LanOut}
${FwCMD} add allow tcp from any to ${IpOut} 49152-65535 via ${LanOut}
${FwCMD} add allow icmp from any to any icmptypes 0,8,11
${FwCMD} add allow tcp from any to ${IpOut} 80 via ${LanOut}
${FwCMD} add allow tcp from any to ${IpOut} 25 via ${LanOut}
${FwCMD} add allow tcp from any to ${IpIn} 22 via ${LanIn}
${FwCMD} add allow tcp from any to ${IpOut} 22 via ${LanOut}
${FwCMD} add allow tcp from any to ${IpOut} 143 via ${LanOut}
${FwCMD} add allow tcp from any to ${IpOut} 110 via ${LanOut}
${FwCMD} add allow tcp from any to any via ${LanIn}
${FwCMD} add allow udp from any to any via ${LanIn}
${FwCMD} add allow icmp from any to any via ${LanIn}
${FwCMD} add deny ip from any to any
Вот такие у меня правила фаера... Блять никак не могу забороть следующую проблему - удаленные клиенты подключаются к VPN-серверу (MPD использую), но дальше никаких движений нет - VPN-клиенты не получают доступа в локальную сеть. Может быть необходимо какое-то специальное правило, чтобы удаленные машины могли использовать ресурсы ЛВС (в первую очередь - RDP)?
PS - за основу фаера брал статью лиссяры :)

Добавлено: 2007-04-02 15:11:10
dikens3
Общее:

1. Смотри счётчики deny
2. Включи лог для этих правил и смотри что в заблокированных.
3. Если всё нормально и ничего не блокируется, тогда возможно проблема с nat (его настройками или неправильным расположением divert в ipfw.)
4. Маршрутизацию тоже неплохо просмотреть.
5. Ping + ipfw log на сервере решает многие непонятки.

Добавлено: 2007-04-02 16:58:28
Гость
dikens3 писал(а):Общее:

1. Смотри счётчики deny
2. Включи лог для этих правил и смотри что в заблокированных.
3. Если всё нормально и ничего не блокируется, тогда возможно проблема с nat (его настройками или неправильным расположением divert в ipfw.)
4. Маршрутизацию тоже неплохо просмотреть.
5. Ping + ipfw log на сервере решает многие непонятки.
Буду отвечать по пунктам -
1. По счетчикам гляну уже завтра, когда загружу правила. Но какая ценность такой информации? Что я увижу по этим счетчика? Количество пакетов и траффик?
2. Лог у меня включен, т.е. в /etc/rc.conf -> firewall_logging="YES", но в файле /var/log/secrurity нифуя нету :(
3. Хм... про проблему с НАТ. А в чем там собственно может быть проблема?
4. Косяков в маршрутизации не замечено - пакеты бегают туда, куда им нужно ходить.
:(

Добавлено: 2007-04-02 18:04:13
dikens3
Если что-то блокируется (действие LOG), увидишь в цепочке количество заблокированных пакетов.
Потом включаешь лог для этой цепочки и смотришь логи, быть может она не пропускает нужные тебе пакеты?

Если что-то принимается, совсем не означает, что будет нормально работать(Возможно пакет нужно сначала nat'ить) или маршрут будет ХЗ куда.

Добавлено: 2007-04-03 8:15:57
votuanr
${FwCMD} add deny ip from any to any
${FwCMD} add deny log ip from any to any

а потом

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

tail -f /var/log/security | grep Deny
и с удаленных машин ломись в сетку - в логе все и увидишь.

Добавлено: 2007-04-03 22:28:50
proxy-man
Траблу свою решил. Еще раз кратенько опишу ситуевину в которой оказался:
значит был шлюз, нужно было поднять на нем VPN-сервер, что и было сделано (поднял MPD). Используя указанный фаер я смог добиться лишь того, чтобы клиенты находящиеся за пределами ЛВСа, могли подключаться к VPN-серверу, а вот уже получить доступ к терминальному серверу, который находился за брандмауэром, клиенты не могли. Я долго ломал голову - почему клиент, который подключаясь к VPN-серверу, получив адрес из пространства ЛВС, не получал доступа к терминальному серверу при таких вот правилах фаера. Если сбрасывал правила на OPEN - все естественно бегало нормально. Листал хэндбук, читал статьи на OPENNET.RU - ситуация для меня не прояснилась. Смотрел, по совету камрадов, security.log, смотрел счетчики - нифига :? . И тут до меня дошло - необходимо в таком строгом наборе правил фаера дать дополнительное разрешение на доступ VPN-клиента к терминальному серверу, т.е.

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

ipfw add pass ip from ${VpnClients} to ${TermSrv}
Это правило я разместил сразу за правилом которое разрешает использование протокола GRE.
Я то почему-то решил, что раз удаленный хост, подключившись к VPN-серверу, получает IP-адрес внутренней сети, то ему все будет можно :) . Хотя возможно мои размышления не верны... Кто-нидь бросьте линками про ipfw ибо то что есть на том же OpenNet.Ru годятся только для ознакомительных целей.