Muff's website forum

Пожалуйста, войдите или зарегистрируйтесь.

Расширенный поиск  

Новости:

SMF - Just Installed!

Просмотр сообщений

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

Сообщения - solaris

Страницы: [1]
1
И последний вопрос в этой теме. Учитывая твой большой опыт с одной стороны и то, что ты вник в этот набор правил с другой, как тебе вообще мой набор правил?

Есть замечания, но не знаю, насколько они обьективны. Обычно я правила строю по другой схеме.
Обрати внимание на то, что под правило "deny log logamount 20 ip from any to any" не попадает ни один пакет, что заставляет задуматься...
Ну да, но мне что-то в голову не приходит, как можно по-другому сделать.
Может, ты кинешь сюда свои правила, дабы я помедитировал над ними?

2
Soft / Re:Обновление портов
« : Апреля 26, 2011, 10:41:18 am »
Порт обновился до isc-dhcp41-server-4.1.e,2. Но вопрос в другом - а где мои package, старый и новый? В /usr/ports/distfiles только dhcp-4.1-ESV-R2.tar.gz и dhcp-4.1.2-P1.tar.gz и это исходники.
Нашел в /usr/ports/packages/portmaster-*

3
Soft / Обновление портов
« : Апреля 24, 2011, 06:48:52 pm »
А чем пользуются местные обитатели для обновление портов?

P.S. Всех с Пасхой!

4
Soft / Обновление портов
« : Апреля 22, 2011, 08:11:08 pm »
Рано или поздно каждому админу, который развивается в этом качестве, надоедает обновлять порты вручную. Такое случилось и со мной.  ;D
Наиболее популярны (у меня на слуху) для этой задачи две утилиты: portupgrade и portmaster. Поскольку portupgrade тянет за собой lang/ruby18 и databases/ruby-bdb, а ставить их на сервер ради одной программы не хотелось, остановился на portmaster.

В /usr/local/etc/portmaster.rc поставил
# Always save the backup packages of the old port (-b)
BACKUP=bopt
#
# Make and save a package of the new port (-g)
MAKE_PACKAGE=gopt

# Log actions taken by portmaster with a date/time stamp
PM_LOG=/var/log/portmaster.log

Запускаю
$ portmaster -r isc-dhcp41-server-4.1.2_2,1

Порт обновился до isc-dhcp41-server-4.1.e,2. Но вопрос в другом - а где мои package, старый и новый? В /usr/ports/distfiles только dhcp-4.1-ESV-R2.tar.gz и dhcp-4.1.2-P1.tar.gz и это исходники.

Ещё обновлял PHP. В зависимостях был Perl. Поскольку Perl собирать из исходников не хотел, создал файл /var/db/pkg/perl*/+IGNOREME. Portmaster задолбал спрашивать подтверждение, что perl игнорируем, но, как написано в man'е, с этим ничего не поделаешь.

А в целом - доволен тем, что освоил новый инструмент. Думаю, его использование позволит сэкономить время.

5
Просниферил трафик. Обнаружил, что проблема в том, что запрещены именно входящие icmp-запросы к серверу. А потом немного пришлось подумать над поведением трафика. Ознакомился еще раз с типами ICMP и сложил детализированное правило, чтобы только определенный тип трафика под него попадал.
Ясно. Но если разрешить любой ICMP, а не только echo (убрать из правила "icmptypes 8"), работать не будет.

И последний вопрос в этой теме. Учитывая твой большой опыт с одной стороны и то, что ты вник в этот набор правил с другой, как тебе вообще мой набор правил?

6
"А ларчик просто открывался..."
muff, ты - гений! Спасибо большое :-*

А теперь можно пару слов, как ты понял, в чём было дело?

7
Собственно говоря, это и есть "наружу".
У меня три хопа по дороге...
Ну тогда я не понимаю ничего... :(

Готов предоставить root login на сервер, увидите сами...

8
Сорри за задержку - болел.
Почти неделю в кровати валялся. С творческими мыслями в этот период как-то скудно было...
Ну теперь то, надеюсь со здоровьем всё ok?

Моя очередь говорить сорри, аврал с написанием одной проги был, ни секунды свободной.

Решил смоделировать ситуацию на офисном маршрутизаторе.... Итак, кусок файрвола с правилами:

Само собой разумеется, свой айпишник я добавил в таблицу 0. Итак, пытаемся пропинговать muff.kiev.ua c сервера:
А теперь с локальной машины в сети:
Все пинги проходят... Может я что-то упустил?
У меня такие пинги тоже проходят ;)
Пропингуйте с локальной машины в сети ya.ru или что-нибудь ещё снаружи...

9
01750    0      0 allow icmp from any to me via rl0

# tcpdump -ni rl0 icmp
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on rl0, link-type EN10MB (Ethernet), capture size 96 bytes
22:15:23.492821 IP 95.26.225.135 > 195.98.163.142: ICMP echo request, id 1, seq 39, length 40
22:15:28.302316 IP 95.26.225.135 > 195.98.163.142: ICMP echo request, id 1, seq 40, length 40
22:15:33.302705 IP 95.26.225.135 > 195.98.163.142: ICMP echo request, id 1, seq 41, length 40
22:15:38.303337 IP 95.26.225.135 > 195.98.163.142: ICMP echo request, id 1, seq 42, length 40
4 packets captured
108 packets received by filter
0 packets dropped by kernel



01720    0      0 allow icmp from me to any via rl0
01750    0      0 allow icmp from any to me via rl0

# tcpdump -ni rl0 icmp
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on rl0, link-type EN10MB (Ethernet), capture size 96 bytes
22:18:57.676068 IP 95.26.225.135 > 195.98.163.142: ICMP echo request, id 1, seq 43, length 40
22:19:02.301148 IP 95.26.225.135 > 195.98.163.142: ICMP echo request, id 1, seq 44, length 40
22:19:07.301408 IP 95.26.225.135 > 195.98.163.142: ICMP echo request, id 1, seq 45, length 40
22:19:12.301415 IP 95.26.225.135 > 195.98.163.142: ICMP echo request, id 1, seq 46, length 40
^C
4 packets captured
52 packets received by filter
0 packets dropped by kernel

10
Удаляй правила 1449 и 1450 и размести:
${fwcmd} add 1750 allow icmp from any to me icmptypes 0,3,8,11 via ${ext_if}По ходу пакеты уже должны выйти из НАТа, соответсвенно под это правило попадут пакеты, направленные именно серверу.

Для подсраховки можешь еще установить такое правило:
${fwcmd} add 1720 allow icmp from me to any icmptypes 0,3,8,11 via ${ext_if}
Сделал, не сработало, у обоих правил нулевой счётчик.
Подумал, может что у меня не так, но если добавить эти правила как 150 и 120 - снаружи ping идёт.

11
А если разместить после НАТа? Скажем правилами 1450 и 1451?
00100    0      0 check-state
00200    0      0 deny log ip from 192.168.0.0/24 to any in via rl0
00300    0      0 deny log ip from 195.98.163.140/30 to any in via sk0
00400    0      0 allow ip from any to any via lo0
00500    0      0 allow gre from any to any keep-state
00600   24   1480 allow ip from me to any keep-state
00700    0      0 deny ip from { table(3) or table(4) or table(5) } to any
00800 1087  68392 allow ip from any to 195.98.163.142 dst-port 20,21,22,1022,53,80,443,25,465,110,99
5,143,993,1701,1723,5222,5269,5280,24554 keep-state
00900    2    238 allow ip from any to 192.168.0.1 dst-port 20,21,22,1022,53,80,443,123,25,465,110,9
95,143,993,3306,5222,5269,5280,24554 keep-state
01000    0      0 deny log icmp from any to any icmptypes 5,9,13,14,15,16,17
01100    0      0 deny ip from not table(0) to 192.168.0.1 dst-port 3128
01200    3    885 deny ip from not table(0) to any in via sk0
01300    0      0 deny log ip from 192.168.0.0/24 to not table(1) dst-port 25
01400  822 433408 nat 123 ip from any to any via rl0
01449    0      0 allow icmp from 195.98.163.142 to any icmptypes 0,3,8,11 out via rl0
01450    0      0 allow icmp from any to 195.98.163.142 icmptypes 0,3,8,11 in via rl0
01500  401  89387 allow ip from 195.98.163.142 to any
01600  468  94920 allow ip from 192.168.0.0/24 to any
01700  832 687482 allow ip from any to 192.168.0.0/24
01800    0      0 deny ip from any to any dst-port 137,138,139,445
01900    0      0 deny ip from any to 255.255.255.255
02000    0      0 deny log ip from any to any
65535    0      0 deny ip from any to any
Пинг снаружи не проходит и счётчик не увеличивается.
Изнутри идёт, счётчик 1449 увеличивается.

P.S. Сорри, за неуверенность, но сейчас нету возможности смоделировать ситуацию, чтобы выдать конкретный ответ...
Да какие тут сорри, спасибо, что пытаешься помочь!

P.S. На всякий случай
# sysctl net.inet.ip.fw.one_pass
net.inet.ip.fw.one_pass: 1

P.P.S. Сколько раз обещал себе не пытаться изменить правила. Но вчера всё равно часа 3 просидел в попытках. Безрезультатных. :)

12
Не работает ping изнутри LAN. :(
Всё логично - пришел на роутер ответный icmp-пакет. И как ipfw поймёт, что его надо не обработать 502-м правилом, а отправить дальше, в NAT? С IP-пакетом он это определяем по порту (думаю), а в ICMP нет портов.
Очевидно, без динамического правила проблема не решаема.
Я пытался сделать 1400 динамическим, добавив в его конец keep-state, но тогда NAT вообще перестаёт работать.

13
Будет просьба.... Брось вывод ipfw show. Хочу просмотреть счетчики да и так проще как-то смотреть правила..
00100    0      0 check-state
00200    0      0 deny log ip from 192.168.0.0/24 to any in via rl0
00300    0      0 deny log ip from 195.98.163.140/30 to any in via sk0
00400    0      0 allow ip from any to any via lo0
00500    0      0 allow gre from any to any keep-state
00501   16   1200 allow icmp from me to any icmptypes 0,3,8,11
00502   17   1260 allow icmp from any to me icmptypes 0,3,8,11
00600  993 142399 allow ip from me to any keep-state
00700    0      0 deny ip from { table(3) or table(4) or table(5) } to any
00800 1222  87155 allow ip from any to 195.98.163.142 dst-port 20,21,22,1022,53,80,443,25,465,110,995,143,993,1701,1723,5222,5269,5280,24554 keep-state
00900   22   2732 allow ip from any to 192.168.0.1 dst-port 20,21,22,1022,53,80,443,123,25,465,110,995,143,993,3306,5222,5269,5280,24554 keep-state
01000    0      0 deny log icmp from any to any icmptypes 5,9,13,14,15,16,17
01100    0      0 deny ip from not table(0) to 192.168.0.1 dst-port 3128
01200   11   3509 deny ip from not table(0) to any in via sk0
01300    0      0 deny log ip from 192.168.0.0/24 to not table(1) dst-port 25
01400   10    544 nat 123 ip from any to any via rl0
01500    3    180 allow ip from 195.98.163.142 to any
01600 1546 188638 allow ip from 192.168.0.0/24 to any
01700    4    240 allow ip from any to 192.168.0.0/24
01800    0      0 deny ip from any to any dst-port 137,138,139,445
01900    0      0 deny ip from any to 255.255.255.255
02000    0      0 deny log ip from any to any
65535    0      0 deny ip from any to any
Нужно разрешить входящие и исходящие icmp-запросы. Только осталось определиться, куда их разместить. Будем отталкиваться от существующих номеров правил.
А после правила для ppp0 вставим такое:
${fwcmd} allow icmp from me to any icmptypes 0,3,8,11
${fwcmd} allow icmp from any to me icmptypes 0,3,8,11
Сделал правила 501 и 502. Как и ожидалось, теперь сам сервер пингуется, а из LAN пропинговать, например, ya.ru - не получается.
Если убрать 501 и 502, сервер пинговаться не будет, а из LAN пропинговать ya.ru - получится.

Как вариант, можно последнее правило сформировать так:
${fwcmd} add deny log ip from any to any via ${ext_if}
Тоесть запретить все не разрешенное на внешнем интерфейсе, разрешив "безобразничать" внутренней сети.
Ну, во-первых, всё равно есть правило 65535 (можно, конечно, в конфиге ядре сделать default-to-accept), а во-вторых всё равно не поможет.

Иначе - только сниферить трафик, и смотреть как ведут себя ICMP-пакеты:
никогда в жизни не использовал tcpdump. попробую.

1. Сначала смотрим на внешнем интерфейсе (tcpdump -ni rl1 icmp).Обращаем внимание на SRC и DST.

Запускаю ping на внешнем компе и смотрю:

# tcpdump -ni rl0 icmp
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on rl0, link-type EN10MB (Ethernet), capture size 96 bytes
Mar  9 21:47:19 gate kernel: rl0: promiscuous mode enabled
21:47:43.083327 IP 89.178.245.105 > 195.98.163.142: ICMP echo request, id 1, seq 11, length 40
21:47:48.083818 IP 89.178.245.105 > 195.98.163.142: ICMP echo request, id 1, seq 12, length 40
21:47:53.083193 IP 89.178.245.105 > 195.98.163.142: ICMP echo request, id 1, seq 13, length 40
^C
3 packets captured
71 packets received by filter
0 packets dropped by kernel

2. Слушаем на внутреннем интерфейсе (по аналогии). Если запросы не пробегают, добавь все таки вышеуказанные правила перед ppp0:
${fwcmd} allow icmp from me to any icmptypes 0,3,8,11
${fwcmd} allow icmp from any to me icmptypes 0,3,8,11

Запускаю ping ya.ru на компе внутри LAN, добавляю правила и смотрю:

# ipfw add 501 allow icmp from me to any icmptypes 0,3,8,11
# ipfw add 502 allow icmp from any to me icmptypes 0,3,8,11
# tcpdump -ni sk0 icmp
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on sk0, link-type EN10MB (Ethernet), capture size 96 bytes
00:01:31.262409 IP 192.168.0.21 > 213.180.204.3: ICMP echo request, id 1, seq 175, length 40
00:01:36.116795 IP 192.168.0.21 > 213.180.204.3: ICMP echo request, id 1, seq 176, length 40
00:01:40.750203 IP 192.168.0.21 > 213.180.204.3: ICMP echo request, id 1, seq 177, length 40
^C
3 packets captured
554 packets received by filter
0 packets dropped by kernel



Результаты наблюдения и соображения по этому поводу ожидаю...
Спасибо за участие! :)

P.S. На одном форуме мне посоветовали решить проблему "Через stateful firewall, создавая states для пакетов out recv $iif xmit $oif (пакеты самого роутера под такое условие не попадают),". Я сделал такое правило
ipfw add 1410 allow icmp out recv sk0 xmit rl0 keep-state
но это ничего не дало - сервер не пингуется, из LAN пропинговать ya.ru - получается.

14
С большим удовольствием почитал сайт. Спасибо автору за его статьи - полезные и интересные.
Может подскажет кто по следующему вопросу. А то мечтаю решить эту проблему уже несколько лет, а всё никак.  :o :'(

FreeBSD 8.2, работает гейтом и сервером.
При текущей настройке правил ping из локальной сети проходит, а из Интернета пропинговать сервер не получается.

Если после правила
${fwcmd} add nat 123 all from any to any via ${ext_if}
добавить правило с разрешением для icmp, получится ровно наоборот.

Можно убрать ключ "deny_in" из параметров nat и добавить после правила
${fwcmd} add nat 123 all from any to any via ${ext_if}
правило
${fwcmd} add allow icmp from any to any
все ping'и проходят. Но мне кажется, что это несекьюрно.

Очевидно, надо как-то отличить пакет, идущий к серверу от того, который пришел в ответ на ping изнутри сети и который надо про-nat-ить. С TCP/UDP такое же получается, а с ICMP возможно?

И вообще любые комментарии и советы по правилам горячо приветствуются.

====  Begin rc.conf  ====
ifconfig_rl0="inet 192.168.0.1 netmask 255.255.255.0"
ifconfig_rl1="inet 111.1.111.11 netmask 255.255.255.128"

int_if="rl0"         # Inside interface
ext_if="rl1"         # Outside interface

firewall_enable="YES"
firewall_logging="YES"
firewall_script="/usr/local/etc/ipfw.rules"
firewall_coscripts="/usr/local/etc/ipfw.smtp-servers /usr/local/etc/ipfw.users"

gateway_enable="YES"
firewall_nat_enable="YES"

icmp_drop_redirect="YES"        # Set to YES to ignore ICMP REDIRECT packets
icmp_log_redirect="YES"         # Set to YES to log ICMP REDIRECT packets
====  End rc.conf  ====

====  Begin ipfw.rules  ====
###  Suck in the configuration variables  ############################
if [ -z "${source_rc_confs_defined}" ]; then
   if [ -r /etc/defaults/rc.conf ]; then
      . /etc/defaults/rc.conf
      source_rc_confs
   elif [ -r /etc/rc.conf ]; then
      . /etc/rc.conf
   fi
fi


###  Set some variables  #############################################
int_ip=`ifconfig ${int_if}|grep inet|awk '{print $2}'`      # Inside ip
int_net=`ifconfig ${int_if}|grep inet|awk '{print $2 ":" $4}'`   # Inside network and netmask

ext_ip=`ifconfig ${ext_if}|grep inet|awk '{print $2}'`      # Outside ip
ext_net=`ifconfig ${ext_if}|grep inet|awk '{print $2 ":" $4}'`   # Outside network and netmask


###  Set quiet mode if requested  ####################################
case ${firewall_quiet} in [Yy][Ee][Ss])
   fwcmd="/sbin/ipfw -q"
   ;;
*)
   fwcmd="/sbin/ipfw"
   ;;
esac


###  Flush out the list before we begin  #############################
${fwcmd} -f flush


###  Rules  ##########################################################
    # Check dynamic rules
${fwcmd} add check-state

    # Stop spoofing
${fwcmd} add deny log ip from ${int_net} to any in via ${ext_if}
${fwcmd} add deny log ip from ${ext_net} to any in via ${int_if}

    # Rules for lo0
${fwcmd} add allow ip from any to any via lo0

    # Rules for VPN
${fwcmd} add allow gre from any to any keep-state

    # Rules for ppp0
#${fwcmd} add allow ip from any to any via ppp0 keep-state

    # Allow all outgoing from server
${fwcmd} add allow ip from ${ext_ip} to any keep-state
${fwcmd} add allow ip from ${int_ip} to any keep-state

    # Allow access to our services
${fwcmd} add allow ip from any to ${ext_ip} ftp\\-data,ftp,ssh,1022,smtp,smtps,domain,http,https,pop3,pop3s,ntp,imap,imaps,l2tp,pptp,xmpp\\-client,xmpp\\-server,5280,24554 keep-state
${fwcmd} add allow ip from any to ${int_ip} ftp\\-data,ftp,ssh,1022,smtp,smtps,domain,http,https,pop3,pop3s,ntp,imap,imaps,3306,     xmpp\\-client,xmpp\\-server,5280,24554 keep-state

    # Block some ICMP packets
${fwcmd} add deny log icmp from any to any icmptype 5,9,13,14,15,16,17


###  Rules for gateway only  #########################################
case ${firewall_nat_enable} in [Yy][Ee][Ss])

    # Disallow users access to our proxy
${fwcmd} add deny ip from not table\(0\) to ${int_ip} 3128

    # Disallow users access to our NAT service
${fwcmd} add deny ip from not table\(0\) to any in via ${int_if}

    # Block access to foreign smtp
${fwcmd} add deny log ip from ${int_net} to not table\(1\) smtp

    # Network Address Translation
${fwcmd} nat 123 config if ${ext_if} log deny_in same_ports
${fwcmd} add nat 123 all from any to any via ${ext_if}

    # Rules for NATed packets
${fwcmd} add allow ip from ${ext_ip} to any

    # Allow users to have Internet
${fwcmd} add allow ip from ${int_net} to any
${fwcmd} add allow ip from any to ${int_net}

esac


    # Drop all connections w/out logging: on netbios ports
${fwcmd} add deny ip from any to any 135,137,138,139,microsoft\\-ds

    # Drop all connections w/out logging: broadcast
${fwcmd} add deny ip from any to 255.255.255.255

    # Drop any other packets & log it
${fwcmd} add deny log ip from any to any
====  End ipfw.rules  ====

Страницы: [1]

Страница сгенерирована за 0.082 секунд. Запросов: 26.