Есть офисный шлюз на freebsd, на котором крутится mysql, apache, squid. Задача - чтоб все сервисы в локалке были доступны, а извне был доступен только 22й порт, а все остальное закрыто. Накатал вот такой срипт (ext и int - соответственно смотрят на прова и локалку)-localnet="192.168.1.0/24"
extip="1.2.6.5"
intip="192.168.1.1"
extiface="rl0"
intiface="vr0"${fwcmd} add 09999 skipto 10000 all from any to any via ${extiface}
${fwcmd} add 09999 skipto 11000 all from any to any via ${intiface}
${fwcmd} add 09999 skipto 65000 ip from any to any# ETXERNAL INTERFACE
${fwcmd} add 10110 deny ip from any to 192.168.0.0/16 in recv ${extiface}
${fwcmd} add 10110 deny ip from 192.168.0.0/16 to any in recv ${extiface}
${fwcmd} add 10110 deny ip from any to 172.16.0.0/12 in recv ${extiface}
${fwcmd} add 10110 deny ip from 172.16.0.0/12 to any in recv ${extiface}
${fwcmd} add 10110 deny ip from any to 10.0.0.0/8 in recv ${extiface}
${fwcmd} add 10110 deny ip from 10.0.0.0/8 to any in recv ${extiface}
${fwcmd} add 10110 deny ip from any to 169.254.0.0/16 in recv ${extiface}
${fwcmd} add 10110 deny ip from 169.254.0.0/16 to any in recv ${extiface}${fwcmd} add 10120 deny icmp from any to any in icmptype 5,9,13,14,15,16,17 recv ${extiface}
${fwcmd} add 10510 divert natd all from ${localnet} to any out xmit ${extiface}
${fwcmd} add 10520 divert natd all from any to ${extip} in recv ${extiface}${fwcmd} add 10920 allow gre from ${extip} to any out xmit ${extiface}
${fwcmd} add 10920 allow gre from any to ${extip} in recv ${extiface}${fwcmd} add 10930 check-state
${fwcmd} add 10940 allow tcp from me to any out xmit ${extiface} setup keep-state
${fwcmd} add 10940 allow udp from me to any out xmit ${extiface} keep-state
${fwcmd} add 10940 allow icmp from any to any via ${extiface} keep-state${fwcmd} add 10950 allow tcp from any to ${extip} 22 in recv ${extiface} keep-state
${fwcmd} add 10990 allow all from any to ${localnet} via ${extiface}
${fwcmd} add 10998 deny log all from any to any via ${extiface}
${fwcmd} add 10999 skipto 65000 log ip from any to any# INTERNAL INTERFACE 1
${fwcmd} add 11110 deny all from not 192.168.1.0/24 to any in recv ${intiface}
${fwcmd} add 11520 fwd 192.168.1.1,3128 tcp from 192.168.1.0/24 to any 21,23,70,80,210,280,488,591,777,2041,2042,5190,9080,9443 recv ${intiface}
${fwcmd} add 11910 allow all from any to 192.168.1.0/24 out xmit ${intiface}
${fwcmd} add 11910 allow all from 192.168.1.0/24 to any in recv ${intiface}
${fwcmd} add 11920 allow all from any to 255.255.255.255 via ${intiface}
${fwcmd} add 11920 allow all from 255.255.255.255 to any via ${intiface}${fwcmd} add 11998 deny all from any to any via ${intiface}
${fwcmd} add 11999 skipto 65000 log ip from any to any# DEFAULT RULE
${fwcmd} add 65000 pass log all from any to any
${fwcmd} фвв 65535 deny ip from any to anyПри этом на тот же сквид можно законнектится телнетом на 3128 порт.. Где накосячил и что добавить нужно?
> Есть офисный шлюз на freebsd, на котором крутится mysql, apache, squid. Задача
> - чтоб все сервисы в локалке были доступны, а извне был
> доступен только 22й порт, а все остальное закрыто. Накатал вот такой
> срипт (ext и int - соответственно смотрят на прова и
> локалку)-[skip]
> При этом на тот же сквид можно законнектится телнетом на 3128 порт..
> Где накосячил и что добавить нужно?а нельзя обойти аккуратным прописыванием listen-ов в ваших демонах?
Добавьте в natd опцию deny_incomings
Вообще конфиг перегружен ненужными правилами очень сильно ,а некоторые - вообще бессмысленны.. например правило за номером 10990...Фееричная дырка в безопасности...
Легальных пакетов попадающих под это правило быть не может.. о чем вы думали когда писали такое??А уж об чем думали когда писали
add 09999 skipto 65000 ip from any to any
add 65000 pass log all from any to any
Одному Ходже Насреддину известно...
> Добавьте в natd опцию deny_incomings
> Вообще конфиг перегружен ненужными правилами очень сильно ,а некоторые - вообще бессмысленны..
> например правило за номером 10990...Фееричная дырка в безопасности...
> Легальных пакетов попадающих под это правило быть не может.. о чем вы
> думали когда писали такое??
> А уж об чем думали когда писали
> add 09999 skipto 65000 ip from any to any
> add 65000 pass log all from any to any
> Одному Ходже Насреддину известно...:) согласен, эти правила в общем-то бессмысленны.. За одним исключением - по этим правилам я мониторю каунты - если счетчик по ним отличается от значения 0 - значит есть повод почесать маковку.. Но при всем при этом систему они не нагружают, так как очередь до них не доходит.
ipfw -a list -
10990 0 0 allow ip from any to 192.168.1.0/24 via rl0
Зато ОЧЕНЬ помогли при написании и мониторинге всего этого.. да так и остались висеть, как только все отточу - погрохаю нафик. Кстати - по непонятной мне причине все заработало, причем похоже после ребута. С чем связано - непонятно..
ЗЫ: Большое спасибо за отклик на просьбу о помощи. Буду рад советам по оптимизации всего этого, тем более, что сейчас нужно будет поднимать впн для доступа из вне в локальную сеть..
> Добавьте в natd опцию deny_incomingsНе будет ли эта опция причиной, что подключиться к боксу снаружи к внешнему адресу будет невозможно?
> Вообще конфиг перегружен ненужными правилами очень сильно ,а некоторые - вообще бессмысленны..
> например правило за номером 10990...Фееричная дырка в безопасности...Рассмотрим соединение общий случай без прозрачного проксирования.
Клиент из сети 192.168... начинает tcp подключение к внешнему адресу.пакеты из внутренней сети проходят через внутренний интерфейс и попадают под правило
${fwcmd} add 11910 allow all from 192.168.1.0/24 to any in recv ${intiface}далее пакет передается на внешний интерфейс и попадает под правило
${fwcmd} add 10510 divert natd all from ${localnet} to any out xmit ${extiface}
возвращается в цепочку правил и попадает под правило
${fwcmd} add 10940 allow tcp from me to any out xmit ${extiface} setup keep-stateвнешний хост отвечает
входящие пакеты от внешнего хоста попадают под правило
${fwcmd} add 10520 divert natd all from any to ${extip} in recv ${extiface}
адрес назначения меняется на адрес 192.168..... и пакет возвращается в цепочку правил
сейчас уже на внешнем интерфейсе проверяется входящий пакет с адресом назначения 192.168.... какое правило пропустит этот пакет на внешнем интерфейсе?под созданное динамическое правило от
${fwcmd} add 10940 allow tcp from me to any out xmit ${extiface} setup keep-state
пакет не подпадает так как указан адрес me, адрес внешнего интерфейса, надо же проверять адрес 192.168. .....
а попадет пакет под правило
${fwcmd} add 10990 allow all from any to ${localnet} via ${extiface}В данном случае это правило нужно.
В общем случает правило нужно изменить для одностороннего прохождения пакетов.
Наличие этого правило зависит от других правил.> Легальных пакетов попадающих под это правило быть не может.. о чем вы
> думали когда писали такое??
> А уж об чем думали когда писали
> add 09999 skipto 65000 ip from any to any
> add 65000 pass log all from any to any
> Одному Ходже Насреддину известно...
> В общем случает правило нужно изменить для одностороннего прохождения пакетов.Учел этот момент, спасибо.
>> Одному Ходже Насреддину известно...
Я же писал - это для тестов :) Итоговый вариант пока вот такой:
localnet="192.168.1.0/24"
vpnnet="192.168.0.0/24"
extip="XX.XX.XX.XX"
intip="192.168.1.1"
vpnip="192.168.0.1"
extiface="rl0"
intiface="vr0"
vpniface="ng0" – добавился VPN интерфейс, через MPD5 для доступа к localnet извне
bcast="255.255.255.255"
${fwcmd} table 1 flush – для bruteblock
${fwcmd} table 2 flush
${fwcmd} table 2 add 10.0.0.0/8
${fwcmd} table 2 add 169.254.0.0/16
${fwcmd} table 2 add 172.16.0.0/12
${fwcmd} table 2 add 192.168.0.0/12
${fwcmd} add 100 pass all from any to any via lo0
${fwcmd} add 200 deny all from any to 127.0.0.0/8
${fwcmd} add 300 deny ip from 127.0.0.0/8 to any${fwcmd} add 09999 skipto 10000 all from any to any via ${extiface}
${fwcmd} add 09999 skipto 11000 all from any to any via ${intiface}
${fwcmd} add 09999 skipto 12000 all from any to any via ${vpniface}
# ETXERNAL INTERFACE
${fwcmd} add 10110 deny ip from any to table\(2\) in recv ${extiface}
${fwcmd} add 10110 deny ip from table\(2\) to any in recv ${extiface}
${fwcmd} add 10110 deny ip from table\(1\) to any in recv ${extiface}${fwcmd} add 10120 deny icmp from any to any in icmptype 5,9,13,14,15,16,17 recv ${extiface}
${fwcmd} add 10510 divert natd all from ${localnet} to any out xmit ${extiface}
${fwcmd} add 10530 divert natd all from any to ${extip} in recv ${extiface}${fwcmd} add 10920 allow gre from ${extip} to any out xmit ${extiface}
${fwcmd} add 10920 allow gre from any to ${extip} in recv ${extiface}${fwcmd} add 10930 check-state
${fwcmd} add 10940 allow tcp from me to any out xmit ${extiface} setup keep-state
${fwcmd} add 10940 allow udp from me to any out xmit ${extiface} keep-state
${fwcmd} add 10940 allow icmp from any to any via ${extiface} keep-state${fwcmd} add 10950 allow tcp from any to ${extip} 22 in recv ${extiface} keep-state
${fwcmd} add 10960 allow tcp from any to ${extip} 1723 in recv ${extiface} keep-state
${fwcmd} add 10990 allow all from any to ${localnet} out xmit ${extiface}
${fwcmd} add 10990 allow all from any to ${vpnnet} out xmit ${extiface}${fwcmd} add 10998 deny log all from any to any via ${extiface}
# INTERNAL INTERFACE
${fwcmd} add 11110 deny all from not ${localnet} to any in recv ${intiface}${fwcmd} add 11520 fwd ${intip},3128 tcp from ${localnet} to any 23,70,80,210,280,488,591,777,2041,2042,5190,9080,9443 recv ${intiface}
${fwcmd} add 11910 allow all from any to ${localnet} out xmit ${intiface}
${fwcmd} add 11910 allow all from ${localnet} to any in recv ${intiface}
${fwcmd} add 11920 allow all from any to ${bcast} via ${intiface}
${fwcmd} add 11920 allow all from ${bcast} to any via ${intiface}${fwcmd} add 11998 deny log all from any to any via ${intiface}
# VPN INTERFACE
${fwcmd} add 13110 deny all from not ${vpnnet} to any in recv ${vpniface}
${fwcmd} add 13910 allow all from any to ${vpnnet} out xmit ${vpniface}
${fwcmd} add 13910 allow all from ${vpnnet} to any in recv ${vpniface}
${fwcmd} add 13920 allow all from any to ${bcast} via ${vpniface}
${fwcmd} add 13920 allow all from ${bcast} to any via ${vpniface}${fwcmd} add 13998 deny log all from any to any via ${vpniface}
# DEFAULT RULE
${fwcmd} add 65535 deny log all from any to anyИ есть еще вопрос – необходимо, чтоб у клиента VPN при подключении был доступ к интернет. Как правильно это прописать? Добавить правило
${fwcmd} add 10520 divert natd all from ${vpnnet} to any out xmit ${extiface} ?
${fwcmd} add 10990 allow all from any to ${localnet} via ${extiface}
${fwcmd} add 10990 allow all from any to ${vpnnet} via ${extiface}Эти строки оставил все-таки в изначальном варианте, так как с out не учитывается приходящий пакет из ната. Тем более, что тут остаются только честные пакеты, все левое отсеивается правилом 10110.