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

Исходное сообщение
"FreeBSD 6.1 ipfw "

Отправлено sancho78rus , 26-Ноя-06 14:42 
Возник вопрос: правильно ли я создал скрипт ipfw?

rl1 - внешний интерфейс
rl1 - внутренний интерфейс

ipfw -f flush

#nat
ipfw add 20 divert natd all from any to any via rl1

#deny netbios
ipfw add 30 deny tcp from any to any 135-139 via rl1
ipfw add 40 deny tcp from any 135-139 to any

ipfw add 50 allow all from x.x.x.x to any
ipfw add 70 allow all from any to x.x.x.x

ipfw add 80 allow all from 192.168.1.100 to any
ipfw add 90 allow all from any to 192.168.1.100 via rl0
#ipfw add 100 allow all from any to 192.168.1.100 via rl1

ipfw add 105 allow all from any to any via rl0

########################################################

#dns for server
ipfw add 110 allow udp from 192.168.1.101 to any 53
ipfw add 120 allow udp from any 53 to 192.168.1.101

#server: pop3, smtp, rdp, radmin
ipfw add 130 allow tcp from 192.168.1.101 to any 3389
ipfw add 140 allow tcp from 192.168.1.101 to any 25
ipfw add 150 allow tcp from 192.168.1.101 to any 110
ipfw add 160 allow tcp from 192.168.1.101 to any 4899
ipfw add 170 allow tcp from any 4899 to any
ipfw add 180 allow tcp from any 110 to any
ipfw add 190 allow tcp from any 25 to any
ipfw add 200 allow tcp from any 3389 to any


#http
ipfw add 210 allow tcp from any to any 80
ipfw add 220 allow tcp from any 80 to any

#ftp
ipfw add 222 allow tcp from any to any 20
ipfw add 223 allow tcp from any to any 21
ipfw add 224 allow tcp from any 21 to any
ipfw add 225 allow tcp from any 20 to any


#icq
ipfw add 230 allow tcp from any to any 443
ipfw add 240 allow tcp from any to any 5190
ipfw add 250 allow tcp from any 443 to any
ipfw add 260 allow tcp from any 5190 to any


#ping
ipfw add 310 allow icmp from any to any


особенно смущают парные правила типа 210 и 220. как сделать все грамотнее?


Содержание

Сообщения в этом обсуждении
"FreeBSD 6.1 ipfw "
Отправлено Grey , 27-Ноя-06 00:56 
>ipfw add 230 allow tcp from any to any 443
>ipfw add 240 allow tcp from any to any 5190
>ipfw add 250 allow tcp from any 443 to any
>ipfw add 260 allow tcp from any 5190 to any

я бы указал интерфейс ... ил ипоконтретнее сети ... а то можно споткнуться..

P.S. хотя это навскидку ...


"FreeBSD 6.1 ipfw "
Отправлено sancho78rus , 27-Ноя-06 09:29 
а надо ли создавать по два правила на каждый порт? это правильно?

"FreeBSD 6.1 ipfw "
Отправлено Grey , 27-Ноя-06 10:27 
>а надо ли создавать по два правила на каждый порт? это правильно?
>

это Вам виднее... Вы же строите набор правил, Вы должны понимать что и для чего делаете...


"FreeBSD 6.1 ipfw "
Отправлено mg , 29-Ноя-06 04:50 
>Возник вопрос: правильно ли я создал скрипт ipfw?
>
>rl1 - внешний интерфейс
>rl1 - внутренний интерфейс
>
>
>
>ipfw -f flush
>
>#nat
>ipfw add 20 divert natd all from any to any via rl1
Ну это ты лихо закрутил , и это точно не правильно, почему?
Потому что в ipfw проверка пакетов прекращается при срабатывании первого подходящего правила. Так вот у тебя все пакеты приходящи на внешний интерфейс будут сразу же срабатывать на этом правиле ипопадать в программу natd и только после того как natd их занатит они будт попадать вновь на проверку правил. При этом заметь они теперь будут считаться пакетами от тебя самого и смогут попадать куда угодно минуя все твои запреты :)
Такое правило выставленное в самом начале не лучше правила
ipfw allow all from any to any
Потому что пакеты будут попадать не на таблицу маршрутизации а на natd и елси в нём какие-то дырки то можно будет их использовать :)
Обычно вместо него создают два правила
ipfw add 20 divert natd all from ${our_net} to any via rl1
ipfw add 25 divert natd all from any to me via rl1
Но самое главное, разместите все правила запретов перед этими двумя правилами, иначе грош цена вашим запретам...
>
>#deny netbios
>ipfw add 30 deny tcp from any to any 135-139 via rl1
>
>ipfw add 40 deny tcp from any 135-139 to any
>
>ipfw add 50 allow all from x.x.x.x to any
>ipfw add 70 allow all from any to x.x.x.x
>
>ipfw add 80 allow all from 192.168.1.100 to any
>ipfw add 90 allow all from any to 192.168.1.100 via rl0
>#ipfw add 100 allow all from any to 192.168.1.100 via rl1
>
>ipfw add 105 allow all from any to any via rl0
>
>########################################################
>
>#dns for server
>ipfw add 110 allow udp from 192.168.1.101 to any 53
>ipfw add 120 allow udp from any 53 to 192.168.1.101
>
>#server: pop3, smtp, rdp, radmin
>ipfw add 130 allow tcp from 192.168.1.101 to any 3389
>ipfw add 140 allow tcp from 192.168.1.101 to any 25
>ipfw add 150 allow tcp from 192.168.1.101 to any 110
>ipfw add 160 allow tcp from 192.168.1.101 to any 4899
>ipfw add 170 allow tcp from any 4899 to any
>ipfw add 180 allow tcp from any 110 to any
>ipfw add 190 allow tcp from any 25 to any
>ipfw add 200 allow tcp from any 3389 to any
>
>
>#http
>ipfw add 210 allow tcp from any to any 80
>ipfw add 220 allow tcp from any 80 to any
>
>#ftp
>ipfw add 222 allow tcp from any to any 20
>ipfw add 223 allow tcp from any to any 21
>ipfw add 224 allow tcp from any 21 to any
>ipfw add 225 allow tcp from any 20 to any
>
>
>#icq
>ipfw add 230 allow tcp from any to any 443
>ipfw add 240 allow tcp from any to any 5190
>ipfw add 250 allow tcp from any 443 to any
>ipfw add 260 allow tcp from any 5190 to any
>
>
>#ping
>ipfw add 310 allow icmp from any to any
>
>
>особенно смущают парные правила типа 210 и 220. как сделать все грамотнее?
>
Вот чуть чуть переделанные ваши же правила


ipfw -f flush

#allow loopback иначе вообще ничего работать не будет
ipfw add 10 allow all from any to any via lo

#deny netbios
ipfw add 30 deny tcp from any to any 135-139 via rl1
ipfw add 40 deny tcp from any 135-139 to any

#убиваем всё что придёт на внешний интерфейс от локальных адресов
ipfw add 101 deny log logamount 10 ip from 192.168.0.0/16 to any in via rl1
ipfw add 110 deny log logamount 10 ip from 176.16.0.0/12 to any in via rl1
ipfw add 120 deny log logamount 10 ip from 10.0.0.0/8 to any in via rl1
ipfw add 150 deny ip from any to 127.0.0.0/8
ipfw add 151 deny log logamount 100 ip from 127.0.0.0/8 to any

# Убиваем все пакеты с неправильно выставленными флагами (хоть какая-то защита от дос-атаки)
ipfw add 152 deny log logamount 100 tcp from any to any in tcpflags fin,psh,urg recv rl1
ipfw add 153 deny log logamount 100 tcp from any to any in tcpflags !syn,!fin,!ack,!psh,!rst,!urg recv rl1
ipfw add 154 deny log logamount 100 tcp from any to any in tcpflags syn,fin recv rl1
ipfw add 155 deny log logamount 100 tcp from any to any in tcpflags fin,rst recv rl1
ipfw add 156 deny log logamount 100 ip from any to any in ipoptions ssrr,lsrr,rr,ts recv rl1

# Включаем nat всех адресов из подсети 192.168.100.0/24
# если надо ещё кого-то натить то соотвествтенно добавляешь строчку
ipfw add 160 divert natd all from 192.168.100.0/24 to any via rl1
ipfw add 165 divert natd all from any to me via rl1

ipfw add 170 allow all from x.x.x.x to any
# нижнее правило неимеет смысла, ибо оно вообще всё разрешаетна вход,
# от этого вся безопасность сводиться на 0
#ipfw add 175 allow all from any to x.x.x.x

ipfw add 180 allow all from 192.168.1.100 to any
ipfw add 190 allow all from any to 192.168.1.100 via rl0

# нижнее правило разрешает абсолютно всё вашим пользователям, поэтому никакие правила типа
# разрешить icq или pop3 не требуются
ipfw add 205 allow all from any to any via rl0

########################################################

#dns for server
# не понятное правило, кто такой 192.168.1.101 ? Но итак
# ему уже всё разрешено в правиле 205
# ipfw add 210 allow udp from 192.168.1.101 to any 53
ipfw add 220 allow udp from any 53 to me

#server: pop3, smtp, rdp, radmin - не имеют никакого смысла
# вы их уже разрешили выше правилом номер 205
#ipfw add 230 allow tcp from 192.168.1.101 to any 3389
#ipfw add 240 allow tcp from 192.168.1.101 to any 25
#ipfw add 250 allow tcp from 192.168.1.101 to any 110
#ipfw add 260 allow tcp from 192.168.1.101 to any 4899

# если хотите иметь доступ из вне к этой машине на pop3, smtp, rdp, radmin
# то надо так
ipfw add 270 allow tcp from any to me 4899,110,25,3389 in
# если же не требуется такого то уберите это правило, потому что из вне (из интерента)
# к вам можно будет подключаться на эти порты


#http если у вас на этой машине есть какой-то сайт (установлен Apach)
#то нужно такое правило
ipfw add 310 allow tcp from any to me 80 in
# а если нету апача то уберите правило номер 310

# ниже правило тоже лишено смысла, вы это уже разрешили в 205 для своих внутренних компов
# и в правиле номер 170 для конкретно этого компа
#ipfw add 320 allow tcp from any 80 to any

#ftp если тут есть фтп сервер и вы хотите на него попасть из вне (из интерента)
#то это будет почти невозможно , поэтому я убрал все эти правила (долго объяснять)
# но как клиент ftp вы можете ходить куда-угодно по ftp и без этих правил
#ipfw add 322 allow tcp from any to any 20
#ipfw add 323 allow tcp from any to any 21
#ipfw add 324 allow tcp from any 21 to any
#ipfw add 325 allow tcp from any 20 to any


#icq - уже разрешено в 205 и 170
#ipfw add 330 allow tcp from any to any 443
#ipfw add 340 allow tcp from any to any 5190
#ipfw add 350 allow tcp from any 443 to any
#ipfw add 360 allow tcp from any 5190 to any


#ping - опасно, но допустимо
ipfw add 410 allow icmp from any to any

У меня вопрос, какая стоит задача, есть задача выставить ограничения своим пользователям котрых натит эта машина, на какие-то возможности, например чтоб они не могли соединяться с чем-то или нужно им всё разрешить?  


"FreeBSD 6.1 ipfw "
Отправлено sancho78rus , 29-Ноя-06 18:49 

>Ну это ты лихо закрутил , и это точно не правильно, почему?
> ...

Спасибо за такой развернуты ответ. многое для меня прояснилось.. нужно будет опробовать это все на практике на днях...

а вообще задача - запретить все кроме нужного (icq, http, ftp, терминалка, pop3) причем smtp тоже нужно запретить для всех кроме одной машины (там стоит почтовый сервак)


"FreeBSD 6.1 ipfw "
Отправлено tiv , 30-Ноя-06 11:58 
>>Возник вопрос: правильно ли я создал скрипт ipfw?
>>
>>rl1 - внешний интерфейс
>>rl1 - внутренний интерфейс
>>
>>
>>
>>ipfw -f flush
>>
>>#nat
>>ipfw add 20 divert natd all from any to any via rl1
>Ну это ты лихо закрутил , и это точно не правильно, почему?
>
>Потому что в ipfw проверка пакетов прекращается при срабатывании первого подходящего правила.
>Так вот у тебя все пакеты приходящи на внешний интерфейс будут
>сразу же срабатывать на этом правиле ипопадать в программу natd и
>только после того как natd их занатит они будт попадать вновь
>на проверку правил. При этом заметь они теперь будут считаться пакетами
>от тебя самого и смогут попадать куда угодно минуя все твои
>запреты :)
>Такое правило выставленное в самом начале не лучше правила
>ipfw allow all from any to any
Мне кажется что это не так, если пакет попал в нат и его нет в таблице соответствия портов и адресов, то он не меняется и проходит дальше проверку пока не попадет под запрещающие или разрешающие правило. А вот если захочется ограничить инет из локалки отдельно взятым адресам на определенные порты то это не сработает так как правило
>>ipfw add 20 divert natd all from any to any via rl1
выпустит всех

"FreeBSD 6.1 ipfw "
Отправлено mg , 02-Дек-06 01:15 
>Мне кажется что это не так, если пакет попал в нат и
>его нет в таблице соответствия портов и адресов, то он не
>меняется и проходит дальше проверку пока не попадет под запрещающие или
>разрешающие правило.
Ну давайте так, диверт выполняет простую функцию прсто перенаправить в программу. Сама же программа natd если не найдёт никакого соответствия может конечно вести себя как с опцией skipto но я сомневаюсь. Да и вообще сам факт чт ов нат попадают левые пакеты - меня бы насторожил. А что если у этих пакетов локальные адреса ? Оно же их может и занатить куда-нибудь, это получается за ваш счёт в инет полезут...
Опасные это игры...
>А вот если захочется ограничить инет из локалки отдельно
>взятым адресам на определенные порты то это не сработает так как
>правило
>>>ipfw add 20 divert natd all from any to any via rl1
>выпустит всех
Да, но если это правило будет стоять не 20 номером а скажем 500 то перед ним можно поставить любые запреты в том числе на своих пользователей...