Добрый день всем!
Программист волею судеб заставлен администрировать небольшую сеть фирмы.
Хотя слово администрировать мало видимо подходит к той элементарной видимо задаче которую я пытаюсь решить. Не дайте загнуться, поможите :)
Вобщем есть машина с двумя картами xl0(смотрит в инет) и xl1(смотрит в локалку). На машине нет ни web-сервера, ни proxy-сервера, ни почты, ни dns-сервера, вообщем ничего нет :) Только firewall(ipfw) и natd. В локальной сети порядка 30 машин которым надо ходить в инет. Вроде перечитав кучу инфы кое-как настроил что мог, но вот с правилами ipfw потерялся совсем.
#!/bin/sh
ipfw='/sbin/ipfw -q'
ournet='192.168.10.1/24'
uprefix='192.168.10'
ifout='xl1'
ifuser='xl0'
${ipfw} flush
${ipfw} add 100 check-state
${ipfw} add 200 deny icmp from any to any in icmptype 5,9,13,14,15,16,17
${ipfw} add 210 reject ip from ${ournet} to any in via ${ifout}
${ipfw} add 300 allow ip from any to any via lo
${ipfw} add 310 allow tcp from me to any keep-state via ${ifout}
${ipfw} add 320 allow icmp from any to any
${ipfw} add 330 allow ip from me to any
${ipfw} add 400 allow tcp from any to me ssh
#${ipfw} add 510 divert natd ip from ${ournet} to any out via ${ifout}
${ipfw} add 520 divert natd ip from any to any via xl1
${ipfw} add 1000 allow tcp from ${ournet} to any via ${ifuser}
${ipfw} add 1000 allow tcp from any to ${ournet} via ${ifuser}Вопрос1. Правило 510 закоментировано поттому как пропадает доступ к инету из локалки. А 520 работает но стоит добавить out - не работаетю Вобщем как надо?
Вопрос2. Как ограничить правильно пропускную способность? Куда добавить правила, если они кночно правильно написаны?
/sbin/ipfw pipe 1 config bw 1000Kbit/s
/sbin/ipfw queue 1 config pipe 1 weight 50 mask dst-ip 0xFFFFFFFF
/sbin/ipfw queue 2 config pipe 2 weight 75 mask dst-ip 0xFFFFFFFF
/sbin/ipfw add queue 1 ip from any to 192.168.10.1/24
/sbin/ipfw add queue 2 ip from any to 192.168.10.10
Вопрос3. Как подсчитать трафик по каждой машине, но трафик нужен только по интернет соединениям?ЗЫ. FreeBSD 4.7 и спасибо Всем
${ipfw} add 510 divert natd ip from ${ournet} to any out via ${ifout}
${ipfw} add 520 divert natd ip from any to any via ${ifout}и вроде усё :-) чтобы твоя сеть ходила... или что надо?
я 510 потому и закоментировал что не работало, а вместо него написал 520 которое any to any но это вроде как то не очень правильно, или я ошибаюсь?
520 нормальное правило он включает два правила и туда и обратно, а 510 это только правило из внутренней сети, к нему нужно еще обратное правило
Еще вопросик если можно:
Почему перестает все работать если я добавляю правило:
ipfw add 65534 deny all from any to any
>Еще вопросик если можно:
>Почему перестает все работать если я добавляю правило:
> ipfw add 65534 deny all from any to any
Я думаю, из-за этого:
${ipfw} add 1000 allow tcp from ${ournet} to any via ${ifuser}
${ipfw} add 1000 allow tcp from any to ${ournet} via ${ifuser}Эти правила действуют только в одну сторону.
Попробуй что-то вроде такого:
${ipfw} add 1000 allow tcp from ${ournet} to any 80, 21, 25, 53 keep-state
${ipfw} add 1001 deny ip from any to anyИли вообще разреши весь обмен через локальный интерфейс:
${ipfw} add 1000 allow ip from any to any
А для подсчета траффика по пользователям пропиши правила:
${ipfw} add count from 192.168.10.10 to any 80,21
И т.д. для каждого пользователя.Пробуй! Если не получится - пиши, попробуем разобраться
>${ipfw} add 1000 allow tcp from ${ournet} to any via ${ifuser}
>${ipfw} add 1000 allow tcp from any to ${ournet} via ${ifuser}
>
>Эти правила действуют только в одну сторону.А в другую так?
${ipfw} add 1000 allow tcp from ${ournet} to any via ${ifuser}
${ipfw} add 1000 allow tcp from any to ${ournet} via ${ifout}>Или вообще разреши весь обмен через локальный интерфейс:
>${ipfw} add 1000 allow ip from any to anyА это не страшно с точки зрения безопасности?:)
>А для подсчета траффика по пользователям пропиши правила:
>${ipfw} add count from 192.168.10.10 to any 80,21
>И т.д. для каждого пользователя.count должен быть перед правилами по каждому пользователю, так правильно?
${ipfw} add count from 192.168.10.10 to any out via {$ifout}
${ipfw} add allow from 192.168.10.10 to any
>А в другую так?
>${ipfw} add 1000 allow tcp from ${ournet} to any via ${ifuser}
>${ipfw} add 1000 allow tcp from any to ${ournet} via ${ifout}
^^^^^
Это ж внешний интерфейс. А ${ournet} - внутренняя сеть. Так не надо делать.>>Или вообще разреши весь обмен через локальный интерфейс:
>>${ipfw} add 1000 allow ip from any to any
>А это не страшно с точки зрения безопасности?:)Забыл добавить: via ${ifuser}.
Таким образом ты разрешаешь свободный обмен с локальной сетью через внутренний интерфейс. А от проникновений снаружи у тебя правила раньше были написаны.Пойми принцип маскарадинга: у тебя ведь пакет из внутренней сети наружу не транзитом проходит, а преобразовывается на сервере. Т.е. наружу идет пакет с реальным ip, а не с внутренним. Поэтому тебе нужно разрешить свободный обмен через внутренний интерфейс, а через внешний - только то, что можно.
>count должен быть перед правилами по каждому пользователю, так правильно?
Достаточно только этого
>${ipfw} add count from 192.168.10.10 to any out via {$ifout}
А потом просто разрешаешь доступ для всей сети.
>${ipfw} add allow from 192.168.10.10 to any
>Достаточно только этого
>>${ipfw} add count from 192.168.10.10 to any out via {$ifout}
>А потом просто разрешаешь доступ для всей сети.
>>${ipfw} add allow from 192.168.10.10 to anyМне бы доступ только нескольким компам разрешить а остальной сети запретить. И к MAC-адресам как привязать IP?
Спасибо за ответы :)
>
>Мне бы доступ только нескольким компам разрешить а остальной сети запретить. И
Тогда просто:
${ipfw} add allow tcp from 192.168.10.10 to any via {$ifout}
Счетчики автоматически создаются для каждого правила.>к MAC-адресам как привязать IP?
В основном это делается на свичах. Но можешь посмотреть в сторону arplookup. Этот демон тебе скажет, если вдруг кто-то сменил МАС-адрес. Другого варианта к сожалению, не знаю
>${ipfw} add allow tcp from 192.168.10.10 to any via {$ifout}
А form any to 192.168.10.10 не надо?
всё, труба, савсем запутался :)
Уважаемый Дмитрий, если тебе не очень сложно, не мог бы ты потратить 5 минут и привести окончательный итог, всмысле полным текстом?:) А то меня видимо скоро начнут бить ногами с моими экспериментами - связь переодически теряется после моих упражнений :)
Спсибо еще раз:)
>Попробуй что-то вроде такого:
>${ipfw} add 1000 allow tcp from ${ournet} to any 80, 21, 25,
>53 keep-state
>${ipfw} add 1001 deny ip from any to anyНе работает
>Или вообще разреши весь обмен через локальный интерфейс:
>${ipfw} add 1000 allow ip from any to anyНе работает
>ournet='192.168.10.1/24'это бред :)
Правила взял из статьи Кузмича? :)
У него для теории хорошо расписано, но использовать как рабочий вариант бессмысленно. Тем более, что динамические правила при размере сети в 30 компов никакой пользы не принесут.Стучи в аську 837068 или пиши mailksa@mail.ru
>Правила взял из статьи Кузмича? :)Не знаю :) Правила остались от человека пытающегося админить это хозяйство.
>>Правила взял из статьи Кузмича? :)
>
>Не знаю :) Правила остались от человека пытающегося админить это хозяйство.А что мешает переписать по новой?
Хочешь готовое решение?
Вопщем сейчас правила имеют следующий вид:${ipfw} add 100 check-state
${ipfw} add 200 deny icmp from any to any in icmptype 5,9,13,14,15,16,17${ipfw} add 210 reject ip from ${ournet} to any in via ${ifout}
${ipfw} add 300 allow ip from any to any via lo
${ipfw} add 310 allow tcp from me to any keep-state via ${ifout}
${ipfw} add 320 allow icmp from any to any
${ipfw} add 330 allow ip from me to any${ipfw} add 400 allow tcp from any to me ssh
${ipfw} add 520 divert natd ip from any to any via xl1
${ipfw} add 65535 allow ip from any to any
Если перед последним правилом я ставлю:
${ipfw} add 65534 deny ip from any to any
то то какое бы правило я не написал по отдельно взятому компу или по подсети с номером например 1000, ни одно из них не работает! Может это из-за динамических правил?
И не будет работать. Никогда не дойдет
>И не будет работать. Никогда не дойдет
А как надо написать что б дошло?
У меня кусок, отвечающий за маскарадинг выглядит так:oif="em1" - Внешний интерфейс
onet="0.0.0.0"
omask="0.0.0.0"
oip="193.193.193.193"# set these to your inside interface network and netmask and ip
iif="em0" - внутренний интерфейс
inet="10.150.0.0"
imask="255.255.0.0"
iip="10.150.10.1"${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 check-state
${fwcmd} add divert natd all from any to any via ${oif}
# Разрешаю прямой выход только с определенных адресов
${fwcmd} add permit tcp from 10.150.10.37 to any via ${iif}
${fwcmd} add deny log tcp from any to any via ${iif}
# Stop spoofing
${fwcmd} add deny all from ${inet}:${imask} to any in via ${oif}# Stop RFC1918 nets on the outside interface
${fwcmd} add deny all from 10.0.0.0/8 to any via ${oif}
${fwcmd} add deny all from 172.16.0.0/12 to any via ${oif}
${fwcmd} add deny all from 192.168.0.0/16 to any via ${oif}
Сделал так:${ipfw} add 100 pass all from any to any via lo0
${ipfw} add 200 deny all from any to 127.0.0.0/8
${ipfw} add 300 deny ip from 127.0.0.0/8 to any
${ipfw} add check-state${ipfw} add devert natd all from any to any via ${ifout}
${ipfw} add permit tcp from ${uprefix}.55 to any via ${ifuser}
${ipfw} add permit tcp from ${uprefix}.131 to any via ${ifuser}${ipfw} add deny log tcp from any to any via ${ifuser}
${ipfw} add deny all from ${ournet} to any in via ${ifout}
${ipfw} add deny all from 192.168.0.0/16 to any via ${ifout}
${ipfw} add deny all from 10.0.0.0/8 to any via ${ifout}
${ipfw} add deny all from 172.16.0.0/12 to any via ${ifout}пришлось бежать на другой этаж, не смог удаленно подключиться после перезагрузки :(
>Сделал так:А свою машину в этот список включил? Если нет - то ты к серверу не достучишься.
>${ipfw} add permit tcp from ${uprefix}.55 to any via ${ifuser}
>${ipfw} add permit tcp from ${uprefix}.131 to any via ${ifuser}
>${ipfw} add deny log tcp from any to any via ${ifuser}
>А свою машину в этот список включил? Если нет - то ты
она первая в списке, 55
>>А свою машину в этот список включил? Если нет - то ты
> она первая в списке, 55
Так...
Я там правила менял чтобы тебе подошли. Видно, где-то ошибся.. Давай втупую подставим мои правила.
#Rejecting direct access to internet for local users
${fwcmd} add permit tcp from 10.150.10.37 to any 80 via ${iif}
${fwcmd} add permit tcp from 10.150.10.37 to any 21 via ${iif}${fwcmd} add deny tcp from 10.150.0.0/16 to any 80 via ${iif}
${fwcmd} add deny tcp from 10.150.0.0/16 to any 21 via ${iif}${fwcmd} add permit all from any to any via ${iif}
В итоге ты должен выходить на веб и фтп наружу. И все, а по локальному интерфейсу все будет бегать без ограничений.
>Я там правила менял чтобы тебе подошли. Видно, где-то ошибся.. Давай втупую
>подставим мои правила.Извиняюсь за свою тупость, но все вместе выглядеть должно так?:
${ipfw} add 100 pass all from any to any via lo0
${ipfw} add 200 deny all from any to 127.0.0.0/8
${ipfw} add 300 deny ip from 127.0.0.0/8 to any
${ipfw} add check-state${ipfw} add devert natd all from any to any via ${ifout}
${fwcmd} add permit tcp from 192.168.10.55 to any 80 via ${ifout}
${fwcmd} add permit tcp from 192.168.10.55 to any 21 via ${ifout}${fwcmd} add deny tcp from 192.168.10.0/16 to any 80 via ${ifout}
${fwcmd} add deny tcp from 192.168.10.0/16 to any 21 via ${ifout}${fwcmd} add permit all from any to any via ${iif}
#${ipfw} add permit tcp from ${uprefix}.55 to any via ${ifuser}
#${ipfw} add permit tcp from ${uprefix}.131 to any via ${ifuser}#${ipfw} add deny log tcp from any to any via ${ifuser}
#${ipfw} add deny all from ${ournet} to any in via ${ifout}
#${ipfw} add deny all from 192.168.0.0/16 to any via ${ifout}
#${ipfw} add deny all from 10.0.0.0/8 to any via ${ifout}
#${ipfw} add deny all from 172.16.0.0/12 to any via ${ifout}
${fwcmd} add permit tcp from 192.168.10.55 to any 80 via ${ifout}<-ifuser
${fwcmd} add permit tcp from 192.168.10.55 to any 21 via ${ifout}<-ifuser${fwcmd} add deny tcp from 192.168.10.0/16 to any 80 via ${ifout}<-ifuser
${fwcmd} add deny tcp from 192.168.10.0/16 to any 21 via ${ifout}<-ifuserДико извиняюсь :)
(1)
>${fwcmd} add permit tcp from 192.168.10.55 to any 80 via ${ifuser}
>${fwcmd} add permit tcp from 192.168.10.55 to any 21 via ${ifuser}
>${fwcmd} add deny tcp from 192.168.10.0/16 to any 80 via ${ifuser}
>${fwcmd} add deny tcp from 192.168.10.0/16 to any 21 via ${ifuser}>${fwcmd} add permit all from any to any via ${iif}
^^^^^ {ifuser}
(2)
>#${ipfw} add permit tcp from ${uprefix}.55 to any via ${ifuser}
>#${ipfw} add permit tcp from ${uprefix}.131 to any via ${ifuser}
У тебя (1) разрешило выход наружу только на веб и фтп, а (2) - на все.Если тебе нужно разрешить все не разбираясь (типа аськи и т.п.), то можно сделать так:
${ipfw} add permit tcp from ${uprefix}.55 to any via ${ifuser}
${ipfw} add permit tcp from ${внутренний IP-адрес сервера} to any via ${ifuser}
${ipfw} add deny tcp from any to any via ${ifuser}
>#${ipfw} add deny log tcp from any to any via ${ifuser}Вторым этапом нужно разрешить обмен через внешний интерфейс. Поставь
${fwcmd} add permit all from any to any via ${ifout}Если все заработает, потом закроешь ненужные порты. Или попробуй такое правило:
${fwcmd} add permit all from any to any out via ${ifout} keep-state
Получилось так:
${ipfw} -f flush
${ipfw} add 100 pass all from any to any via lo0
${ipfw} add 200 deny all from any to 127.0.0.0/8
${ipfw} add 300 deny ip from 127.0.0.0/8 to any
${ipfw} add 400 check-state
${ipfw} add 500 devert natd all from any to any via ${ifout}
${ipfw} add 600 permit tcp from ${ournet} to any via ${ifuser}
${ipfw} add 700 permit tcp from 192.168.10.1 to any via ${ifuser}
${ipfw} add 800 deny tcp from any to any via ${ifuser}
${ipfw} add 900 permit all from any to any via ${ifout}
как это ни грустно, не работает :(
А с чего бы это работало?
${ipfw} add 500 devert natd all from any to any via ${ifout}
~~~~~~
${ipfw} add 600 permit tcp from ${ournet} to any via ${ifuser}
${ipfw} add 700 permit tcp from 192.168.10.1 to any via ${ifuser}Допустим все делается только для одного хоста 192.168.10.1
и что вы хотите увидеть.Нет не одного правила разрешающего для внешнего интерфейса кроме нат.
При прхождении через внешний интерфейс пакет не попадет не под одно правило а значит поподет под последние запретить все и всем.
Добрый человек :) дык как же эти мои правида корректно написать то? 3 день маюсь уже
#!/bin/sh
ipfw='/sbin/ipfw -q'ournet=192.168.10.0/24
#uprefix='192.168.10'
ifout='xl1'
ifuser='xl0'${ipfw} flush
${ipfw} add pass all from any to any via lo0
${ipfw} add deny all from any to 127.0.0.0/8
${ipfw} add deny ip from 127.0.0.0/8 to any
${ipfw} add allow all from any to any via xl0
${ipfw} add divert natd ip from any to any via xl1
${ipfw} add deny icmp from any to any in icmptype 5,9,13,14,15,16,17
${ipfw} add allow icmp from any to any
${ipfw} add allow tcp from any to any out via xl1 setup
${ipfw} add allow tcp from any to ${ipout} established
${ipfw} add allow tcp from any to ${ipout} 22 setup
${ipfw} add check-state
${ipfw} add allow udp from any to any 53 keep-state
можно еще что нибудь по udp по вкусу
${ipfw} add 65000 deny all from any to anyПоробуй это, если заработает можешь добавить еще что-нубудь
Не работает :(
70180607покажи ipfw show
ты определили переменную ipout ?
>покажи ipfw show
>ты определили переменную ipout ?#!/bin/sh
ipfw='/sbin/ipfw -q'
ournet='192.168.10.0/24'
uprefix='192.168.10'
ifout='xl1'
ifuser='xl0'${ipfw} -f flush
${ipfw} add pass all from any to any via lo0
${ipfw} add deny all from any to 127.0.0.0/8
${ipfw} add deny ip from 127.0.0.0/8 to any
${ipfw} add allow all from any to any via xl0
${ipfw} add divert natd ip from any to any via xl1
${ipfw} add deny icmp from any to any in icmptype 5,9,13,14,15,16,17
${ipfw} add allow icmp from any to any
${ipfw} add allow tcp from any to any out via xl1 setup
${ipfw} add allow tcp from any to ${ifout} established
${ipfw} add allow tcp from any to ${ifout} 22 setup
${ipfw} add check-state
${ipfw} add allow udp from any to any 53 keep-state
${ipfw} add 65000 deny all from any to any
Что ты мне показываешь
Я просил ipfw show
>Что ты мне показываешь
>Я просил ipfw show
Сори :)
Но я сейчас сижу под другими, работающими правилами, и если я сейчас перегружусь, то меня видимо убьют :)
Попытка номер два:${fwcmd} add divert natd all from any to any via ${ifout}
${fwcmd} add allow all from 192.168.10.1 to any
${fwcmd} add allow all from any to 192.168.10.1
${fwcmd} add deny all from ${ournet} to any
${fwcmd} add allow tcp from any to any
>Вобщем есть машина с двумя картами xl0(смотрит в инет) и xl1(смотрит в
>локалку). На машине нет ни web-сервера, ни proxy-сервера, ни почты, ни
>dns-сервера, вообщем ничего нет :) Только firewall(ipfw) и natd. В локальной
>сети порядка 30 машин которым надо ходить в инет. Вроде перечитав
>кучу инфы кое-как настроил что мог, но вот с правилами ipfw
>потерялся совсем.
>#!/bin/sh
>ipfw='/sbin/ipfw -q'
>ournet='192.168.10.1/24'
>uprefix='192.168.10'
>ifout='xl1'
>ifuser='xl0'вы, господа, определитесь какие интерфейсы куда смотрят...
а то реально, похоже, одно, а в правилах - другое...