Muff's website forum

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

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

Новости:

SMF - Just Installed!

Автор Тема: ipfw, nat -- как заставить работать ping  (Прочитано 59133 раз)

solaris

  • Пионер
  • *
  • Karma: 0
  • Оффлайн Оффлайн
  • Сообщений: 14
    • Просмотр профиля
ipfw, nat -- как заставить работать ping
« : Марта 08, 2011, 10:44:09 pm »

С большим удовольствием почитал сайт. Спасибо автору за его статьи - полезные и интересные.
Может подскажет кто по следующему вопросу. А то мечтаю решить эту проблему уже несколько лет, а всё никак.  :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  ====
Записан

muff

  • Administrator
  • Долгожитель
  • ***
  • Karma: 0
  • Оффлайн Оффлайн
  • Сообщений: 283
    • Просмотр профиля
    • IT, Network, Beer!
Re:ipfw, nat -- как заставить работать ping
« Ответ #1 : Марта 09, 2011, 04:38:49 pm »

Будет просьба.... Брось вывод ipfw show. Хочу просмотреть счетчики да и так проще как-то смотреть правила..
Нужно разрешить входящие и исходящие icmp-запросы. Только осталось определиться, куда их разместить. Будем отталкиваться от существующих номеров правил.

Как вариант, можно последнее правило сформировать так:
${fwcmd} add deny log ip from any to any via ${ext_if}
Тоесть запретить все не разрешенное на внешнем интерфейсе, разрешив "безобразничать" внутренней сети. А после правила для ppp0 вставим такое:
${fwcmd} add allow icmp from me to any icmptypes 0,3,8,11
${fwcmd} add allow icmp from any to me icmptypes 0,3,8,11

Иначе - только сниферить трафик, и смотреть как ведут себя ICMP-пакеты:
1. Сначала смотрим на внешнем интерфейсе (tcpdump -ni rl1 icmp).Обращаем внимание на SRC и DST.
2. Слушаем на внутреннем интерфейсе (по аналогии). Если запросы не пробегают, добавь все таки вышеуказанные правила перед ppp0:
${fwcmd} add allow icmp from me to any icmptypes 0,3,8,11
${fwcmd} add allow icmp from any to me icmptypes 0,3,8,11


Результаты наблюдения и соображения по этому поводу ожидаю...
« Последнее редактирование: Марта 09, 2011, 11:26:32 pm от muff »
Записан
Если нет ответа, то давайте подумаем...

solaris

  • Пионер
  • *
  • Karma: 0
  • Оффлайн Оффлайн
  • Сообщений: 14
    • Просмотр профиля
Re:ipfw, nat -- как заставить работать ping
« Ответ #2 : Марта 09, 2011, 08:31:47 pm »

Будет просьба.... Брось вывод 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 - получается.
« Последнее редактирование: Марта 09, 2011, 11:07:43 pm от solaris »
Записан

muff

  • Administrator
  • Долгожитель
  • ***
  • Karma: 0
  • Оффлайн Оффлайн
  • Сообщений: 283
    • Просмотр профиля
    • IT, Network, Beer!
Re:ipfw, nat -- как заставить работать ping
« Ответ #3 : Марта 09, 2011, 11:25:38 pm »

Ok...

Кажется картина понятна... Попробуй изменить правила 501 и 502 на такие:
${fwcmd} add 501 allow icmp from 111.1.111.11 to any icmptypes 0,3,8,11 out via ${ext_if}
${fwcmd} add 502 allow icmp from any to 111.1.111.11 icmptypes 0,3,8,11 in via ${ext_if}

где 111.1.111.11 - твой "внешний" айпишник.
« Последнее редактирование: Марта 09, 2011, 11:28:13 pm от muff »
Записан
Если нет ответа, то давайте подумаем...

solaris

  • Пионер
  • *
  • Karma: 0
  • Оффлайн Оффлайн
  • Сообщений: 14
    • Просмотр профиля
Re:ipfw, nat -- как заставить работать ping
« Ответ #4 : Марта 10, 2011, 12:36:19 am »

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

muff

  • Administrator
  • Долгожитель
  • ***
  • Karma: 0
  • Оффлайн Оффлайн
  • Сообщений: 283
    • Просмотр профиля
    • IT, Network, Beer!
Re:ipfw, nat -- как заставить работать ping
« Ответ #5 : Марта 10, 2011, 01:00:16 am »

А если разместить после НАТа? Скажем правилами 1450 и 1451?

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

solaris

  • Пионер
  • *
  • Karma: 0
  • Оффлайн Оффлайн
  • Сообщений: 14
    • Просмотр профиля
Re:ipfw, nat -- как заставить работать ping
« Ответ #6 : Марта 10, 2011, 11:07:11 am »

А если разместить после НАТа? Скажем правилами 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 просидел в попытках. Безрезультатных. :)
« Последнее редактирование: Марта 10, 2011, 04:40:33 pm от solaris »
Записан

muff

  • Administrator
  • Долгожитель
  • ***
  • Karma: 0
  • Оффлайн Оффлайн
  • Сообщений: 283
    • Просмотр профиля
    • IT, Network, Beer!
Re:ipfw, nat -- как заставить работать ping
« Ответ #7 : Марта 10, 2011, 05:01:08 pm »

Хм... Давай поэкспериментируем...

Удаляй правила 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}
Записан
Если нет ответа, то давайте подумаем...

solaris

  • Пионер
  • *
  • Karma: 0
  • Оффлайн Оффлайн
  • Сообщений: 14
    • Просмотр профиля
Re:ipfw, nat -- как заставить работать ping
« Ответ #8 : Марта 10, 2011, 05:30:56 pm »

Удаляй правила 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 идёт.
Записан

muff

  • Administrator
  • Долгожитель
  • ***
  • Karma: 0
  • Оффлайн Оффлайн
  • Сообщений: 283
    • Просмотр профиля
    • IT, Network, Beer!
Re:ipfw, nat -- как заставить работать ping
« Ответ #9 : Марта 10, 2011, 06:56:26 pm »

При текущей конфигурации (сначала только с 1750, а потом и с 1720 правилами), пожалуйста, дай вывод tcpdump (отсеять по icmp).
Записан
Если нет ответа, то давайте подумаем...

solaris

  • Пионер
  • *
  • Karma: 0
  • Оффлайн Оффлайн
  • Сообщений: 14
    • Просмотр профиля
Re:ipfw, nat -- как заставить работать ping
« Ответ #10 : Марта 10, 2011, 09:17:36 pm »

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, 2011, 09:20:39 pm от solaris »
Записан

muff

  • Administrator
  • Долгожитель
  • ***
  • Karma: 0
  • Оффлайн Оффлайн
  • Сообщений: 283
    • Просмотр профиля
    • IT, Network, Beer!
Re:ipfw, nat -- как заставить работать ping
« Ответ #11 : Марта 18, 2011, 04:48:36 pm »

Сорри за задержку - болел.
Почти неделю в кровати валялся. С творческими мыслями в этот период как-то скудно было...

Такой вопрос.. а если установить 1450 правило:
${fwcmd} add 1450 allow icmp from any to any icmptypes 0,3,8,11
Записан
Если нет ответа, то давайте подумаем...

muff

  • Administrator
  • Долгожитель
  • ***
  • Karma: 0
  • Оффлайн Оффлайн
  • Сообщений: 283
    • Просмотр профиля
    • IT, Network, Beer!
Re:ipfw, nat -- как заставить работать ping
« Ответ #12 : Марта 28, 2011, 07:34:16 pm »

Решил смоделировать ситуацию на офисном маршрутизаторе.... Итак, кусок файрвола с правилами:
[Ss][Ii][Mm][Pp][Ll][Ee])

int_if="vr0"         # Inside interface
ext_if="fxp0"         # Outside interface

ext_ip="193.227.206.220"
int_ip="192.168.192.55"

int_net="192.168.192.0/24"
ext_net="193.227.206.216/29"

# 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
        ;;

Вывод ipfw show:
00100         0            0 allow ip from any to any via lo0
00200         0            0 deny ip from any to 127.0.0.0/8
00300         0            0 deny ip from 127.0.0.0/8 to any
00400         0            0 check-state
00500         0            0 deny log logamount 20 ip from 192.168.192.0/24 to any in via fxp0
00600         0            0 deny log logamount 20 ip from 193.227.206.216/29 to any in via vr0
00700         0            0 allow ip from any to any via lo0
00800         0            0 allow gre from any to any keep-state
00900        14          848 allow ip from 193.227.206.220 to any keep-state
01000        62         8904 allow ip from 192.168.192.55 to any keep-state
01100         4          176 allow ip from any to 193.227.206.220 dst-port 20,21,22,1022,25,465,53,80,443,110,995,123,143,993,1701,1723,5222,5269,5280,24554 keep-state
01200       729        88240 allow ip from any to 192.168.192.55 dst-port 20,21,22,1022,25,465,53,80,443,110,995,123,143,993,3306,5222,5269,5280,24554 keep-state
01300         1           56 deny log logamount 20 icmp from any to any icmptypes 5,9,13,14,15,16,17
01400         0            0 deny ip from not table(0) to 192.168.192.55 dst-port 3128
01500      2518       227717 deny ip from not table(0) to any in via vr0
01600         3          192 deny log logamount 20 ip from 192.168.192.0/24 to not table(1) dst-port 25
01700     28539      7789742 nat 123 ip from any to any via fxp0
01800         0            0 allow ip from 193.227.206.220 to any
01900      3163       274331 allow ip from 192.168.192.0/24 to any
02000      5197      6392918 allow ip from any to 192.168.192.0/24
02100         0            0 deny ip from any to any dst-port 135,137,138,139,445
02200         0            0 deny ip from any to 255.255.255.255
02300         0            0 deny log logamount 20 ip from any to any
65535 793397154 580488975665 allow ip from any to any

Само собой разумеется, свой айпишник я добавил в таблицу 0. Итак, пытаемся пропинговать muff.kiev.ua c сервера:
19:30[]root@office#~>ping muff.kiev.ua
PING muff.kiev.ua (195.3.159.250): 56 data bytes
64 bytes from 195.3.159.250: icmp_seq=0 ttl=62 time=0.685 ms
64 bytes from 195.3.159.250: icmp_seq=1 ttl=62 time=0.518 ms
64 bytes from 195.3.159.250: icmp_seq=2 ttl=62 time=0.420 ms
64 bytes from 195.3.159.250: icmp_seq=3 ttl=62 time=0.435 ms
64 bytes from 195.3.159.250: icmp_seq=4 ttl=62 time=0.475 ms
^C
--- muff.kiev.ua ping statistics ---
5 packets transmitted, 5 packets received, 0.0% packet loss
round-trip min/avg/max/stddev = 0.420/0.507/0.685/0.095 ms

А теперь с локальной машины в сети:
C:\>ping muff.kiev.ua

Обмен пакетами с muff.kiev.ua [195.3.159.250] по 32 байт:

Ответ от 195.3.159.250: число байт=32 время=6мс TTL=61
Ответ от 195.3.159.250: число байт=32 время<1мс TTL=61
Ответ от 195.3.159.250: число байт=32 время=2мс TTL=61
Ответ от 195.3.159.250: число байт=32 время=2мс TTL=61

Статистика Ping для 195.3.159.250:
    Пакетов: отправлено = 4, получено = 4, потеряно = 0 (0% потерь),
Приблизительное время приема-передачи в мс:
    Минимальное = 0мсек, Максимальное = 6 мсек, Среднее = 2 мсек


Все пинги проходят... Может я что-то упустил?
Записан
Если нет ответа, то давайте подумаем...

solaris

  • Пионер
  • *
  • Karma: 0
  • Оффлайн Оффлайн
  • Сообщений: 14
    • Просмотр профиля
Re:ipfw, nat -- как заставить работать ping
« Ответ #13 : Апреля 04, 2011, 03:24:32 pm »

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

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

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

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

muff

  • Administrator
  • Долгожитель
  • ***
  • Karma: 0
  • Оффлайн Оффлайн
  • Сообщений: 283
    • Просмотр профиля
    • IT, Network, Beer!
Re:ipfw, nat -- как заставить работать ping
« Ответ #14 : Апреля 04, 2011, 03:30:31 pm »

Собственно говоря, это и есть "наружу".
У меня три хопа по дороге...
Записан
Если нет ответа, то давайте подумаем...
 

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