Страница 1 из 2

Команды IPFW

Добавлено: 2006-12-12 9:52:22
Raven2000
Неподскажете такой вопрос
с IPFW если я поменяю правила в конфиге
какой командой можно чтоб IPFW перечитал конфиг
но не вырубало и опять врубало IPFW
Да и мне советовали если что напишешь в конфиге IPFW
то лучше перегрузить машину?
И есть какие нибудь интерестные команды для IPFW которыми вы часто пользуетесь
приколы типа show фтопку :twisted:

Добавлено: 2006-12-12 10:09:37
baklan
Тут уже была тема об этом, но если меняешь одно или немного правил и просто экспериментируешь, то на мой взгляд, лучше использовать :

Код: Выделить всё

ipfw delete номер_старого_правила
ipfw add номер_нового_правила allow ......
Преимущество такого способа в том, что если будет ошибка, то только это правило не сработает , а не грохнется весь файервол. Ну а если правило нормально прошло, то просто выделяю его мышкой в консоли и вставляю в скрипт, при этом возможность ошибки минимальна. А если руками писать в скрипт, то можно ненароком и ошибиться. Ой..., что-то я разговорился с утра :)

Добавлено: 2006-12-12 10:47:21
Raven2000
не это то я знаю
я же хотель типа перечитать конфиг IPFW
а так и я делаю

Добавлено: 2006-12-12 11:06:25
dikens3
Raven2000 писал(а):не это то я знаю
я же хотель типа перечитать конфиг IPFW
а так и я делаю
Пишешь свой фаер, делаешь его запускаемым и наслаждайся.

Код: Выделить всё

cat rc.conf | grep firewall

firewall_enable="YES"
firewall_script="/etc/myfirewall"

Код: Выделить всё

cat myfirewall
#!/bin/sh -


mylan="192.168.x.0/24"
www="192.168.x.x/32"
www2="192.168.x.x/32"
dom="82.208.x.x/32"

fwcmd="/sbin/ipfw -q"
fwtable="/sbin/ipfw table"
${fwcmd} -f flush

# 2 таблица, кому нельзя ходить... Любители поломать что-нибудь.
#fwtable="/sbin/ipfw table"
#${fwtable} 2 f
#badip=" 82.208.182.37 85.214.16.196 "
#for lan in ${badip}
#    do
#       ${fwtable} 2 add $lan
#    done

# Пускаем lo
        ${fwcmd} add pass all from any to any via lo0
# Убиваем любителей ломать наш сайт
#       ${fwcmd} add deny all from table\(2\) to me
# Управление доступом и т.п. к Mail-Серверу и WEB-Серверу
        ${fwcmd} add allow tcp from not ${mylan} to me 25 setup limit src-addr 5
        ${fwcmd} add allow tcp from not ${mylan} to ${www2} 80
        ${fwcmd} add allow tcp from not ${mylan} to ${www} 80
        ${fwcmd} add allow tcp from not ${mylan} to me 110 setup limit dst-port 10
        ${fwcmd} add allow tcp from not ${mylan} to me 995 setup limit dst-port 10
# Запрещаем ftp,ssh для всех, кроме внутренней сети и меня из дома
        ${fwcmd} add deny tcp from not ${dom},${mylan} to me 20,21,22
        ${fwcmd} add deny udp from not ${dom},${mylan} to me 20,21
# Пускаем Нашу сеть
        ${fwcmd} add pass all from any to any via fxp0
        ${fwcmd} add pass all from any to any via re0

Добавлено: 2006-12-12 11:40:38
Raven2000
Чет ты dikens3 нетуда понес я и так написал вот конф (заодно посмотрите может оптимизируйте :) если есть что) и так все работает, а мне надо см. пост в начале...


rc.firewall
fwcmd="/sbin/ipfw -q"

# Out Net
oint="tun0" #Out
oip="0.0.0.0"

# Local Net
iint="nve0" #In
iip="192.168.0.14"
netin="192.168.0.0"
netmask="255.255.255.240"
####################################################
${fwcmd} -f flush #rules off
${fwcmd} add check-state #test dinamich rules

# Allow traf for local
${fwcmd} add allow ip from any to any via lo0
# Deny for 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

# Deny Out localnet
${fwcmd} add deny ip from any to 10.0.0.0/8 in via ${oint}
${fwcmd} add deny ip from any to 172.16.0.0/12 in via ${oint}
${fwcmd} add deny ip from any to 192.168.0.0/16 in via ${oint}
${fwcmd} add deny ip from any to 0.0.0.0/8 in via ${oint}
# Deny auto localnet
${fwcmd} add deny ip from any to 169.254.0.0/16 in via ${oint}
# Deny multicast sends
${fwcmd} add deny ip from any to 240.0.0.0/4 in via ${oint}

# Deny fragment packets
${fwcmd} add deny icmp from any to any frag

# Deny shirokowehastelnii icmp for oint
${fwcmd} add deny log icmp from any to 255.255.255.255 in via ${oint}
${fwcmd} add deny log icmp from any to 255.255.255.255 out via ${oint}
#######################################################
#Forwars
#${fwcmd} add fwd ${iip},2121 tcp from ${netin}/${netmask} to any 21 via ${oint}
#${fwcmd} add fwd 127.0.0.1,3128 tcp from ${netin}/${netmask} to any 80 via ${oint}
#Nat
#${fwcmd} add divert natd ip from ${netin}/${netmask} to any out via ${oint}
#${fwcmd} add divert natd ip from any to ${oip} in via ${oint}
###################################################
# Deny Out localnet
${fwcmd} add deny ip from 10.0.0.0/8 to any out via ${oint}
${fwcmd} add deny ip from 172.16.0.0/12 to any out via ${oint}
${fwcmd} add deny ip from 192.168.0.0/16 to any out via ${oint}
${fwcmd} add deny ip from 0.0.0.0/8 to any out via ${oint}
# Deny auto localnet
${fwcmd} add deny ip from 169.254.0.0/16 to any out via ${oint}
# Deny multicast sends
${fwcmd} add deny ip from 224.0.0.0/4 to any out via ${oint}
${fwcmd} add deny ip from 240.0.0.0/4 to any out via ${oint}
# Deny 119
${fwcmd} add deny tcp from any 119 to any via ${oint}

# Deny NetBios traffic out local
${fwcmd} add deny udp from any 137-139 to any via ${oint}
${fwcmd} add deny udp from any to any 137-139 via ${oint}

# Allow DNS
${fwcmd} add allow udp from any 53 to any via ${oint}
${fwcmd} add allow udp from any to any 53 via ${oint}

# Allow Synx TIME
${fwcmd} add allow udp from any to any 123 via ${oint}

# Allow FTP
${fwcmd} add allow tcp from any to any 20,21 via ${oint}
${fwcmd} add allow tcp from any 20,21 to any via ${oint}
#${fwcmd} add allow tcp from any to any 49152-65535 via ${oint}

# Allow ICMP
${fwcmd} add allow ICMP from any to any icmptypes 0,8,11
#${fwcmd} add allow icmp from any to any via ${oint}

# Allow HTTP
${fwcmd} add allow tcp from any to any 80 #via ${oint}
${fwcmd} add allow tcp from any 80 to any #via ${oint}

# Allow Post Pop+SMTP
${fwcmd} add allow tcp from any to any 25 via ${oint}
${fwcmd} add allow tcp from any 25 to any via ${oint}
${fwcmd} add allow tcp from any to any 110 via ${oint}
${fwcmd} add allow tcp from any 110 to any via ${oint}

# Allow ICQ
${fwcmd} add allow tcp from ${netin} to any 5190 in via ${iint}

# Allow 22 SSH
${fwcmd} add allow tcp from any to any 22 in via ${oint}

# Allow HTTPS
${fwcmd} add pass tcp from any to any 443 out
${fwcmd} add pass tcp from any 443 to any out

# Allow fraf allow lan
${fwcmd} add allow tcp from any to any via ${iint}
${fwcmd} add allow udp from any to any via ${iint}
${fwcmd} add allow icmp from any to any via ${iint}

${fwcmd} add allow tcp from any to any established

# Logs
${fwcmd} add deny log tcp from any to any in via ${oint}

# Kill All
${fwcmd} add deny ip from any to any

Re: Команды IPFW

Добавлено: 2006-12-12 12:12:00
dikens3
Raven2000 писал(а):Неподскажете такой вопрос
с IPFW если я поменяю правила в конфиге
какой командой можно чтоб IPFW перечитал конфиг
но не вырубало и опять врубало IPFW
1. Стираешь все правила и добавляешь всё заново. ( Не устраивает тебя)
2. Удаляешь/Добавляешь нужные правила. (Выше описано)
3. Содаёшь таблицы с IP-Адресами и не дёргаешь фаер из-за Добавления/Удаления IP-Адресов.
Больше не знаю.

Код: Выделить всё

Да и мне советовали если что напишешь в конфиге IPFW
то лучше перегрузить машину?
Сам уже догадался, что это НЕОБЯЗАТЕЛЬНО?

Добавлено: 2006-12-12 12:12:21
Sapsan
дак запускай этот скрипт, в чём проблема то? только ipfw -q flush в начало нужно добавить, чтоб старые правила сбрасывались.

Добавлено: 2006-12-12 12:17:54
dikens3
Давайте к каким-нибудь правилам придём.

1. Количество пройдённых пакетом правил ДОЛЖНО быть минимально. (Влияет на скорость работы)

Код: Выделить всё

# 1 таблица, куда нельзя ходить
fwtable="/sbin/ipfw table"
${fwtable} 1 f
NETS=" 10.0.0.0/8 172.16.0.0/12 169.254.0.0/16 192.0.2.0/24 192.168.0.0/16 224.0.0.0/4 240.0.0.0/4 "

for lan in ${NETS}
    do
        ${fwtable} 1 add $lan
    done
У меня так: (переделай под себя)

Код: Выделить всё

# Прибиваем ненужный траффик
        ${fwcmd} add deny log all from me to table\(1\) out via ${ifout}

Код: Выделить всё

${netin}/${netmask} 
Собственное изобретение человека. Думаю устарело уже. В твоём случае точно. IP-Адреса в таблицу(Если будут). Сеть пропиши полностью, читать удобнее будет.
netin="192.168.0.0/28"

Добавлено: 2006-12-13 9:33:00
Raven2000
в начале rc.firewallа

fwtable="/sbin/ipfw table"
${fwtable} 1 f
NETS=" 10.0.0.0/8 172.16.0.0/12 169.254.0.0/16 192.0.2.0/24 192.168.0.0/16 224.0.0.0/4 240.0.0.0/4 "

for lan in ${NETS}
do
${fwtable} 1 add $lan
done

# в конце rc.firewall
${fwcmd} add deny log all from me to table\(1\) out via ${ifout}

Я так понимаю что таблиц иона сделать много... :?:

Добавлено: 2006-12-13 11:25:15
dikens3
Сколько таблиц не знаю, ограничение наверное есть. Мне хватает и этих. :-)

А что касается:
NETS=" 10.0.0.0/8 172.16.0.0/12 169.254.0.0/16 192.0.2.0/24 192.168.0.0/16 224.0.0.0/4 240.0.0.0/4 "

То с этих IP-Адресов с/в инет(а) данные ходить не должны. ( Есть конечно исключения )
В твоём случает будет так:

Код: Выделить всё

# Deny In localnet 
${fwcmd} add deny ip from any to table\(1\) in via ${oint}
${fwcmd} add deny ip from table\(1\) to any in via ${oint}
...
...
# Deny Out localnet
${fwcmd} add deny ip from table\(1\) to any out via ${oint}
${fwcmd} add deny ip from any to table\(1\) out via ${oint}

Добавлено: 2006-12-13 12:24:06
Raven2000
можешь выложить твой конфиг плиз :wink:
и еще меня раздражают цепочки для 1 сервиса 2 правила
типа
# Allow DNS
${fwcmd} add allow udp from any 53 to any via ${oint}
${fwcmd} add allow udp from any to any 53 via ${oint}

# Allow FTP
${fwcmd} add allow tcp from any to any 20,21 via ${oint}
${fwcmd} add allow tcp from any 20,21 to any via ${oint}

# Allow HTTP
${fwcmd} add allow tcp from any to any 80 #via ${oint}
${fwcmd} add allow tcp from any 80 to any #via ${oint}

ведь как то можно пустить сразу в 1 правило типа
${fwcmd} add pass tcp from any to ${oint} 21 setup

только для например ftp (и например неуказывать порт а сразу так писать ftp)
${fwcmd} add allow tcp from any to ${oint} ftp setup -?

Для например
# Allow DNS
${fwcmd} add allow udp from any 53 to any via ${oint}
${fwcmd} add allow udp from any to any 53 via ${oint}
так
${fwcmd} add pass udp from ${oint} to any 123 keep-state

как думаешь :?:

Добавлено: 2006-12-13 13:52:01
dikens3
Raven2000 писал(а):можешь выложить твой конфиг плиз
Нет.
и еще меня раздражают цепочки для 1 сервиса 2 правила
типа
# Allow DNS
${fwcmd} add allow udp from any 53 to any in via ${oint}
${fwcmd} add allow udp from any to any 53 out via ${oint}
Это нормально. Пакеты входят и выходят :-)
В чём плохо такое правило и мои рекомендации?
1. Непонятно кто послал запросы твой шлюз или пользователи?
Как вариант настроить кеширующий DNS и изменить эти строки файрвола. (any -> me ) Настроить DNS у всех пользователей на кэш. DNS
2. Установить IP-Адреса DNS провайдера в правиле.
Чтобы просканировать ВСЕ твои UDP порты, достаточно указать что мой исходый порт для сканирования 53?
# Allow HTTP
${fwcmd} add allow tcp from any to any 80 via out ${oint}
${fwcmd} add allow tcp from any 80 to any in via ${oint} established
Нельзя пускать setup пакеты просто так. :-)
Ещё можно указать диапазон портов:
${fwcmd} add allow tcp from any 80 to any 1024-65535 in via ${oint} established
ведь как то можно пустить сразу в 1 правило
Можно, вот так :-)

Код: Выделить всё

${fwcmd} add allow ip from any to any 
только для например ftp (и например неуказывать порт а сразу так писать ftp)
${fwcmd} add allow tcp from any to ${oint} ftp setup -?
Можно, предварительно ознакомившись с файлом /etc/services
${fwcmd} add pass udp from ${oint} to any 123 keep-state
Брось заниматься ерундой, интерфейс пишется только после via, recv и т.п.
В полях FROM и TO только IP-Адреса, никаких интерфейсов.
как думаешь :?:
Пробуй сам думать. И много читать:-)

Добавлено: 2006-12-14 10:03:16
Raven2000
Пробуй сам думать. И много читать
Я и так пробую и так читаю :twisted: :lol: а тут был вопрос не о том как настроить ipfw а о другом :D

и смотри строчку ${fwcmd} add pass tcp from any to ${oint} 21 setup
все работаетс

Цитата

${fwcmd} add pass udp from ${oint} to any 123 keep-state

Брось заниматься ерундой, интерфейс пишется только после via, recv и т.п.
В полях FROM и TO только IP-Адреса, никаких интерфейсов.
тоже брось заним ер. почитай в инете да и в томже "спец хакере" правила такие же были :)

так что тоже иногда думай и читай :lol: это поможет тебе незастоятся :idea:

Добавлено: 2006-12-14 11:08:32
dikens3

Код: Выделить всё

ifconfig
rl0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500
        options=48<VLAN_MTU,POLLING>
        inet 192.168.x.x netmask 0xffffff00 broadcast 192.168.x.x
        ether 00:14:78:05:21:22
        media: Ethernet autoselect (100baseTX <full-duplex>)
        status: active
rl1: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500
        options=48<VLAN_MTU,POLLING>
        ether 00:14:78:25:4e:87
        media: Ethernet autoselect (100baseTX <full-duplex>)
        status: active
lo0: flags=8049<UP,LOOPBACK,RUNNING,MULTICAST> mtu 16384
        inet 127.0.0.1 netmask 0xff000000
tun0: flags=8051<UP,POINTOPOINT,RUNNING,MULTICAST> mtu 1492
        inet 82.208.x.x --> 213.177.x.x netmask 0xffffffff
        Opened by PID 246
# ipfw -q add pass ip from rl0 to any
ipfw: hostname ``rl0'' unknown

ipfw add pass udp from tun0 to any 123
ipfw: hostname ``tun0'' unknown
Ссылку давай.

P.S. FreeBSD 5.5

Добавлено: 2006-12-14 11:33:23
Alex Keda
тебе же сказали - читай xakep :)

Добавлено: 2006-12-14 12:03:44
Raven2000
навскид вспомнил тут :)

http://www.hub.ru/modules.php?name=Page ... age&pid=37
FreeBSD в качестве сервера доступа. Часть 2. Немного о безопасности
Простой сервер доступа с NAT
Немного о безопасности
Настройка FireWall :!:

И в Спец хакере 07/68/июль 2006 г
там где "защищаем веб-се6рвисы грамотно"
есть немного про правилам ipfw
если надо приведу примеры
да даже сразу

Добавлено: 2006-12-14 12:38:23
dikens3
Ну пните меня, если я не прав
Твой конфиг:
# Out Net
oint="tun0" #Out
..
..
${fwcmd} add pass udp from ${oint} to any 123 keep-state

Код: Выделить всё

from <откуда> - IP-адрес источника пакета. Для протоколов TCP и UDP так же может быть указан и порт. Может быть указан IP-адрес, доменное имя компьютера (типа www.hub.ru), или целая подсеть в формате IP:MASK или IP/LEN, например 192.168.0.0:255.255.255.0 или 192.168.0.0/24. Есть так же два специальных слова - any, означающее любой адрес (аналогично 0.0.0.0/0) и me, означающее любой из адресов, принадлежащих локальной системе. Номер порта указывается после адреса через пробел. Несколько номеров портов можно указать через запятую. Перед адресом или номером порта может стоять слово "not", инвертирующее значение адреса или порта, т.е. from not 192.168.0.0/24 означает "все пакеты, пришедшие не из сети 192.168.0.0/24".
to <куда> - Адрес назначения пакета. Формат адреса аналогичен предыдущему.
Ну где тут интерфейс? Ты ставишь название интерфейса после From или to, каким образом?

Код: Выделить всё

если надо приведу примеры
Конечно надо, я от жизни отстал если это работает. :-)
Вывод:
ipfw -ad l | grep ТВОЁ ПРАВИЛО, где полях from,to указано название ИНТЕРФЕЙСА.

Для примера:

Код: Выделить всё

00800 15327 14889305 skipto 10000 ip from any to me in via tun*
00900 10723  1266229 skipto 15000 ip from me to any out via tun*
01000 52669  6432144 skipto 25000 ip from any to any in via rl1
P.S.

Код: Выделить всё

тоже брось заним ер. почитай в инете да и в томже "спец хакере" правила такие же были
Совсем нет, если ты обратишь внимание там IP-Адреса

Добавлено: 2006-12-14 12:56:47
Raven2000
я наверное понял что ты имеешь в виду
from <откуда> - IP-адрес источника пакета.
у мя динамич внешний ip по skylinky вот и приходится извращатся :(
Или я чегото непонял

lissyara! рассуди или обьясни кто прав иль нет :P кто в доме хозяин :D

Добавлено: 2006-12-14 13:13:42
dikens3

Код: Выделить всё

Это
${fwcmd} add pass udp from ${oint} to any 123 keep-state
на это:
${fwcmd} add pass udp from any to any 123 via ${oint} keep-state

видишь разницу?

Добавлено: 2006-12-14 13:35:56
Raven2000
${fwcmd} add pass udp from ${oint} to any 123 keep-state
Разрешаем NTP- запросы
все работает
oint="tun0" #tun0 - образуется при подкл к инету модемом (я ссылаюсь на tun0 потому что ip динамический в инете (если подругому можно скажи))
и все ок все работает так и с веб
${fwcmd} add pass tcp from any to ${oint} 80 setup
чтож непонятно то посмотри выше там я сфоткал спец там и прочтешь что непонятно. :?

Добавлено: 2006-12-14 13:46:35
baklan
Мне кажется, что dikens3 имеет ввиду вот это

Код: Выделить всё

www# /sbin/ipfw add 123 pass tcp from any to tun0 80 setup
ipfw: hostname ``tun0'' unknown
www#

Добавлено: 2006-12-14 14:02:17
Raven2000
я все эти правила прописываю в rc.confige а потом перегружаю

www# /sbin/ipfw add 123 pass tcp from any to tun0 80 setup #хрень какая-то у тя понаписана
ipfw: hostname ``tun0'' unknown # а че ты ожидал

а это tun0 только при ppp соединение выходит вот я его и завернул как внешний интерфейс oint="tun0"

Лано все фтопку ибо хрень великая получается :lol: 8)

Добавлено: 2006-12-14 14:17:41
dikens3
Raven2000 писал(а):${fwcmd} add pass udp from ${oint} to any 123 keep-state
Разрешаем NTP- запросы
все работает
:?
Если работает покажи работающее правило, покажи это правило выводом
ipfw -a l
Я не понимаю, как его распознал файрвол? Пример я тебе выше написал, ещё раз напишу
00800 15327 14889305 pass udp from tun0 to any 123 keep-state
У тебя должно быть такое правило в firewall, я выделил номер жирным шрифтом.

Добавлено: 2006-12-14 14:22:52
Raven2000
Если работает покажи работающее правило, покажи это правило выводом
ipfw -a l
Я не понимаю, как его распознал файрвол? Пример я тебе выше написал.
Хорошо токо завтра скину я тут далеко от BSD :arrow:
а сервак в районной ЛВС (те у мя дома на крыше в сейфе :lol: )
ОК?

Добавлено: 2006-12-14 14:25:32
dikens3
Да не вопрос.
В верхнем посте про номер забудь, но в целом у тебя должно получиться как там написано.