В общем ситуация следующая:
Решил ради эксперимента поднять домашнюю сеть.
Есть компутер выступающий в качестве НАТ сервера.
На нем FreeBSD 8.2. Машинка смотрит одним интерфейсом в мою, домашнюю сеть, другим - в сеть провайдера. Провайдер районный, в его сети множество компов. Ранее были обнаружены попытки прослушки портов из этой сети.
Моя задача такова - закрыть доступ к шлюзу снаружи от всех айпишников за исключением двух: айпишника прокси и внутреннего ДНС, в целях безопасности.Проблема заключается в том что у меня не получается написать правило, которое устанавливало-бы исключительное разрешение обмена пакетами для конкретных адресов а не для всей подсети.
Собственно я пытался реализовать это следующим образом
#!/bin/shFwCMD="/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 совсем новичок, собственно с целью обучения и поставил данную систему у себя, так-что извините уж за глупые вопросы.
Ответивших заранее благодарю.
1. Ваш нат прозрачен для внутреннего компа, поэтому в настройках браузера вы наверняка прописываете <адрес прокси провайдера>:<порт>, поэтому на внешенм интерфейсе первым правилом разрешите хождение от ip провайдера к вашему внешнему ip на xl0, вторым обратное прохождение, ну а третьим блокируйте всю внешнюю сетку на xl0...
2. Зачем вы свой dns повесили на внешку, оставьте на внутреннем адресе и сконфигурируйте его как форвард на dns провайдера, мне кажется dns провайдера совпадает с ip проксика... ,
если же не совпадает, ну еще добавите разрешающие правила...
> 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То-есть фаервол уже не запрещает прохождение пакетов по данному маршруту, но есть явная ошибка в синтаксисе написания правил разрешения ибо пакеты никуда не отправляются. Вот только как правильно указать это правило не могу ни как нагуглить. ((
>> 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)Все заработало)) Благодарю!))