URL: https://ssl.opennet.ru/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID1
Нить номер: 91953
[ Назад ]

Исходное сообщение
"Ограничение доступа к NAT внешним IP адресам"

Отправлено Svetliy , 17-Июл-11 03:43 
В общем ситуация следующая:
Решил ради эксперимента поднять домашнюю сеть.
Есть компутер выступающий в качестве НАТ сервера.
На нем FreeBSD 8.2. Машинка смотрит одним интерфейсом в мою, домашнюю сеть, другим - в сеть провайдера. Провайдер районный, в его сети множество компов. Ранее были обнаружены попытки прослушки портов из этой сети.
Моя задача такова - закрыть доступ к шлюзу снаружи от всех айпишников за исключением двух: айпишника прокси и внутреннего ДНС, в целях безопасности.

Проблема заключается в том что у меня не получается написать правило, которое устанавливало-бы исключительное разрешение обмена пакетами для конкретных адресов а не для всей подсети.

Собственно я пытался реализовать это следующим образом


#!/bin/sh

FwCMD="/sbin/ipfw -q"
LanOut="xl0"
LanIn="nfe0"
IpOut="192.168.0.115"
IpIn="10.0.15.1"
NetMaskOut="23"
NetMaskIn="24"
NetIn="10.0.15.0"
GateWay="192.168.0.150"
DNS="192.168.0.151"

${FwCMD} -f flush
${FwCMD} add check-state
${FwCMD} add allow ip from any to any via lo0
${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 allow ip from ${GateWay}/${NetMaskOut} to any in via ${LanOut}
${FwCMD} add allow ip from ${DNS}/${NetMaskOut} to any in via ${LanOut}

${FwCMD} add allow ip from ${GateWay}/${NetMaskOut} to any out via ${LanOut}
${FwCMD} add allow ip from ${DNS}/${NetMaskOut} to any via ${LanOut}

Но ipfw show говорит следующее:

# ipfw show
00100     0        0 check-state
00200     0        0 allow ip from any to any via lo0
00300     0        0 deny ip from any to 127.0.0.0/8
00400     0        0 deny ip from 127.0.0.0/8 to any
00500  1834   166000 allow ip from 192.168.0.0/23 to any in via xl0
00600     0        0 allow ip from 192.168.0.0/23 to any in via xl0
00700     7      396 allow ip from 192.168.0.0/23 to any out via xl0
00800     0        0 allow ip from 192.168.0.0/23 to any via xl0
00900     0        0 deny ip from any to 10.0.0.0/8 in via xl0
01000     0        0 deny ip from any to 172.160.0.0/12 in via xl0
01100     0        0 deny ip from any to 0.0.0.0/8 in via xl0
01200     0        0 deny ip from any to 169.254.0.0/16 in via xl0
01300  4863  1189583 deny ip from any to 240.0.0.0/4 in via xl0
01400     0        0 deny icmp from any to any frag
01500     0        0 deny log logamount 20 icmp from any to 255.255.255.255 in via xl0
01600     0        0 deny log logamount 20 icmp from any to 255.255.255.255 out via xl0
01700  3967   543761 divert 8668 ip from 10.0.15.0/24 to any out via xl0
01800 10817 13357168 divert 8668 ip from any to 192.168.0.115 in via xl0
01900     0        0 deny ip from 10.0.0.0/8 to any out via xl0
02000     0        0 deny ip from 172.16.0.0/12 to any out via xl0
02100     0        0 deny ip from 0.0.0.0/8 to any out via xl0
02200     0        0 deny ip from 169.254.0.0/16 to any out via xl0
02300     0        0 deny ip from 224.0.0.0/4 to any out via xl0
02400     0        0 deny ip from 240.0.0.0/4 to any out via xl0
02500 37003 28924036 allow tcp from any to any established
02600   145     8978 allow ip from 192.168.0.115 to any out xmit xl0
02700    36    10101 allow udp from any 53 to any via xl0
02800     0        0 allow udp from any to any dst-port 123 via xl0
02900     0        0 allow icmp from any to any icmptypes 0,8,11
03000    79     4740 allow tcp from any to any via nfe0
03100   114    17177 allow udp from any to any via nfe0
03200     0        0 allow icmp from any to any via nfe0
03300 36909  3246285 deny ip from any to any
65535     8      642 deny ip from any to any

То есть открывается вся подсеть 192.168.0.0. Подскажите пожалуйста как правильно установить подобные исключения? В настройках ipfw совсем новичок, собственно с целью обучения и поставил данную систему у себя, так-что извините уж за глупые вопросы.
Ответивших заранее благодарю.


Содержание

Сообщения в этом обсуждении
"Ограничение доступа к NAT внешним IP адресам"
Отправлено Сергей , 17-Июл-11 12:38 
1. Ваш нат прозрачен для внутреннего компа, поэтому в настройках браузера вы наверняка прописываете <адрес прокси провайдера>:<порт>, поэтому на внешенм интерфейсе первым правилом разрешите хождение от ip провайдера к вашему внешнему ip на xl0, вторым обратное прохождение, ну а третьим блокируйте всю внешнюю сетку на xl0...
2. Зачем вы свой dns повесили на внешку, оставьте на внутреннем адресе и сконфигурируйте его как форвард на dns провайдера, мне кажется dns провайдера совпадает с ip проксика... ,
если же не совпадает, ну еще добавите разрешающие правила...


"Ограничение доступа к NAT внешним IP адресам"
Отправлено Svetliy , 17-Июл-11 17:30 
> 1. Ваш нат прозрачен для внутреннего компа, поэтому в настройках браузера вы
> наверняка прописываете <адрес прокси провайдера>:<порт>, поэтому на внешенм интерфейсе
> первым правилом разрешите хождение от ip провайдера к вашему внешнему ip
> на xl0, вторым обратное прохождение, ну а третьим блокируйте всю внешнюю
> сетку на xl0...
> 2. Зачем вы свой dns повесили на внешку, оставьте на внутреннем адресе
> и сконфигурируйте его как форвард на dns провайдера, мне кажется dns
> провайдера совпадает с ip проксика... ,
> если же не совпадает, ну еще добавите разрешающие правила...

Благодарю. Внутренний ДНС пока-что не поднимал, но обязательно займусь этим. Сейчас переписал фаервол. По Вашему совету сперва поставил два разрешающих правила, на прохождение транзитных пакетов от ИП адреса провайдера. В следующем виде:

#!/bin/sh

FwCMD="/sbin/ipfw -q"

LanOut="xl0"
LanIn="nfe0"
IpOut="192.168.0.115"
IpIn="10.0.15.1"
NetMaskIn="24"
NetMaskOut="23"
NetIn="10.0.15.0"

${FwCMD} -f flush
${FwCMD} add check-state
${FwCMD} add allow ip from any to any via lo0
${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 allow ip from any to 192.168.0.150 out via ${LanOut}
${FwCMD} add allow ip from any to 192.168.0.150 in via ${LanOut}  


#${FwCMD} add allow ip from any to 192.168.0.151 out via ${LanOut}
#${FwCMD} add allow ip from any to 192.168.0.151 in via ${LanOut}

${FwCMD} add deny ip from any to 192.168.0.0/23 in via ${LanOut}
${FwCMD} add deny ip from any to 192.168.0.0/23 out via ${LanOut}


Ради эксперимента закомитил строчки с разрешением ИП адресов внешнего ДНС, и действительно запрет работает:

PING 192.168.0.151 (192.168.0.151): 56 data bytes
ping: sendto: Permission denied
ping: sendto: Permission denied


Но при попытке пропинговать ИП прокси провайдера возникает следующая проблема:

PING 192.168.0.150 (192.168.0.150): 56 data bytes
^C
--- 192.168.0.150 ping statistics ---
5 packets transmitted, 0 packets received, 100.0% packet loss

То-есть фаервол уже не запрещает прохождение пакетов по данному маршруту, но есть явная ошибка в синтаксисе написания правил разрешения ибо пакеты никуда не отправляются. Вот только как правильно указать это правило не могу ни как нагуглить. ((


"Ограничение доступа к NAT внешним IP адресам"
Отправлено Svetliy , 17-Июл-11 19:07 
>> 1. Ваш нат прозрачен для внутреннего компа, поэтому в настройках браузера вы
>> наверняка прописываете <адрес прокси провайдера>:<порт>, поэтому на внешенм интерфейсе
>> первым правилом разрешите хождение от ip провайдера к вашему внешнему ip
>> на xl0, вторым обратное прохождение, ну а третьим блокируйте всю внешнюю
>> сетку на xl0...
>> 2. Зачем вы свой dns повесили на внешку, оставьте на внутреннем адресе
>> и сконфигурируйте его как форвард на dns провайдера, мне кажется dns
>> провайдера совпадает с ip проксика... ,
>> если же не совпадает, ну еще добавите разрешающие правила...

Поправил разрешения на:

${FwCMD} add allow ip from 192.168.26.200 to any in via ${LanOut}
${FwCMD} add allow ip from any to 192.168.26.200 out via ${LanOut}

(Все что приходит от 192.168.0.150 через интерфейс xl0
И все что уходит на 192.168.0.150 через интерфейс xl0)

Поправил запреты:

${FwCMD} add deny ip from 192.168.0.0/23 to any in via ${LanOut}
${FwCMD} add deny ip from any to 192.168.0.0/23 out via ${LanOut}

(Все что приходит от 192.168.0.0/23 сети для всего через интерфейс xl0
И все что уходит от всего к 192.168.0.0./23 сети через интерфейс xl0)

Все заработало)) Благодарю!))