The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

форумы  помощь  поиск  регистрация  майллист  ВХОД  слежка  RSS
"Глюки ipfw (ipfw + NAT + keep-state)"
Вариант для распечатки  
Пред. тема | След. тема 
Форумы OpenNET: Виртуальная конференция (Public)
Изначальное сообщение [Проследить за развитием треда]

"Глюки ipfw (ipfw + NAT + keep-state)" 
Сообщение от KOSM Искать по авторуВ закладки(ok) on 12-Июл-05, 16:16  (MSK)
Постановка задачи: есть у меня 3 сетки: одна домашняя и две "враждебные", одна из которых - инет. Но из эксперимента я исключил вторую враждебную сетку и оставил только домашнюю (rl0) и инет (rl2). Задача - свернуть домашнюю сетку во внешний ip, да так, чтобы снаружи можно было обращаться к определённым сервисам на гейте. Казалось бы просто?

Вот моё решение:
Я собрал фрю 5.4 (была 5.3, а там, как мне известно, ip forwarding не работает, что впрочем не имеет отношения к этой задаче). Запустил natd, для ipfw указал следующие правила:

#!/bin/sh

cmd="ipfw -q add"
skip="skipto 1000"
ifhome="rl0" # домашняя сетка
ifham="rl1"  # не используется
ifinet="rl2" # инет

$cmd 50 allow ip from any to any via lo0
$cmd 53 deny ip from any to 127.0.0.0/8
$cmd 55 deny ip from 127.0.0.0/8 to any
$cmd  60 deny icmp from any to any in icmptype 5,9,13,14,15,16,17

$cmd 100 divert natd ip from any to any in via $ifinet
$cmd 110 check-state

# Исходящий траф

$cmd 200 $skip ip from any to any out via $ifinet keep-state

# Deny all inbound traffic from non-routable reserved address spaces
$cmd 400 deny all from 192.168.0.0/16  to any in via $ifinet  #RFC 1918 private IP
$cmd 401 deny all from 172.16.0.0/12    to any in via $ifinet  #RFC 1918 private IP
$cmd 402 deny all from 10.0.0.0/8         to any in via $ifinet  #RFC 1918 private IP
$cmd 403 deny all from 127.0.0.0/8       to any in via $ifinet  #loopback
$cmd 404 deny all from 0.0.0.0/8           to any in via $ifinet  #loopback
$cmd 405 deny all from 169.254.0.0/16  to any in via $ifinet  #DHCP auto-config
$cmd 406 deny all from 192.0.2.0/24      to any in via $ifinet  #reserved for doc's
$cmd 407 deny all from 204.152.64.0/23 to any in via $ifinet  #Sun cluster
$cmd 408 deny all from 224.0.0.0/3        to any in via $ifinet  #Class D & E ulticast

$cmd 500 allow all from any to any via $ifhome

# Входящий траф
$cmd 550 allow tcp from any to me 21 in via $ifinet
$cmd 560 allow tcp from any to me 80 in via $ifinet
$cmd 550 allow icmp from any to me in via $ifinet icmptypes 8

$cmd 700 deny log ip from any to any

$cmd 1000 allow ip from me to any out via $ifinet
$cmd 1010 divert natd ip from any to any out via $ifinet

# по дефолту allow ip from any to any

Что из этого получилось: вся эта конструкция благополучно работает минут 10-15, а потом ipfw резко начинает игнорировать правила, содержащие keep-state (возможно, ещё какие-то) и выкидывать пакеты через 700-е правило. Инет ни в локалке, ни на серваке соответственно не работатет.
Иногда помогает даже добавление и удаление какого-нибудь бестолкового правила.

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

  Правка | Высказать мнение | Ответить | Рекомендовать в FAQ | Cообщить модератору | Наверх

 Оглавление

Индекс форумов | Темы | Пред. тема | След. тема
Сообщения по теме

1. "Глюки ipfw (ipfw + NAT + keep-state)" 
Сообщение от Chris Искать по авторуВ закладки(??) on 12-Июл-05, 17:53  (MSK)
Во время глюка сделай ipfw -a list и покажи плиз...
  Удалить Правка | Высказать мнение | Ответить | Рекомендовать в FAQ | Cообщить модератору | Наверх

2. "Глюки ipfw (ipfw + NAT + keep-state)" 
Сообщение от Chris Искать по авторуВ закладки(??) on 12-Июл-05, 17:56  (MSK)
ну и ipfw -d list само собой
  Удалить Правка | Высказать мнение | Ответить | Рекомендовать в FAQ | Cообщить модератору | Наверх

3. "Глюки ipfw (ipfw + NAT + keep-state)" 
Сообщение от KOSM Искать по авторуВ закладки(??) on 12-Июл-05, 19:39  (MSK)
>ну и ipfw -d list само собой

Полёт продлился 15 минут... вот что получилось в результате:

00050   0      0 allow ip from any to any via lo0
00053   0      0 deny ip from any to 127.0.0.0/8
00055   0      0 deny ip from 127.0.0.0/8 to any
00060   0      0 deny icmp from any to any in icmptypes 5,9,13,14,15,16,17
00100 1211 450164 divert 8668 ip from any to any in via rl2
00110   0      0 check-state
00200 9369 2372751 skipto 1000 ip from any to any out via rl2 keep-state
00301   0      0 deny ip from 172.16.0.0/12 to any in via rl1
00302   0      0 deny ip from 10.0.0.0/8 to any in via rl1
00303   0      0 deny ip from 127.0.0.0/8 to any in via rl1
00304   0      0 deny ip from 0.0.0.0/8 to any in via rl1
00305   0      0 deny ip from 169.254.0.0/16 to any in via rl1
00306   0      0 deny ip from 192.0.2.0/24 to any in via rl1
00307   0      0 deny ip from 204.152.64.0/23 to any in via rl1
00308   0      0 deny ip from 224.0.0.0/3 to any in via rl1
00400   0      0 deny ip from 192.168.0.0/16 to any in via rl2
00401  26   8685 deny ip from 172.16.0.0/12 to any in via rl2
00402   0      0 deny ip from 10.0.0.0/8 to any in via rl2
00403   0      0 deny ip from 127.0.0.0/8 to any in via rl2
00404   0      0 deny ip from 0.0.0.0/8 to any in via rl2
00405   0      0 deny ip from 169.254.0.0/16 to any in via rl2
00406   0      0 deny ip from 192.0.2.0/24 to any in via rl2
00407   0      0 deny ip from 204.152.64.0/23 to any in via rl2
00408   0      0 deny ip from 224.0.0.0/3 to any in via rl2
00500 1955 179399 allow ip from any to any via rl0
00550   0      0 allow tcp from any to me dst-port 21 in via rl2
00550   0      0 allow icmp from any to me in via rl2 icmptypes 8
00560  54   2560 allow tcp from any to me dst-port 80 in via rl2
00700 5343 250108 deny log logamount 10 ip from any to any
01000 1352 176865 allow ip from me to any out via rl2
01010 1323 161123 divert 8668 ip from any to any out via rl2
65535 13775 2612842 allow ip from any to any
## Dynamic rules (311):
00200 119  19745 (187s) STATE tcp ISP_NET.34.224 2781 <-> 64.12.28.160 5190
00200 375  60405 (245s) STATE tcp 172.16.1.99 2781 <-> 64.12.28.160 5190
00200   6    360 (9s) STATE udp 172.16.1.99 1096 <-> ISP_NET.32.5 53
00200  96   6954 (7s) STATE udp 172.16.1.99 1056 <-> ISP_NET.32.5 53
00200  88   7607 (196s) STATE tcp ISP_NET.34.224 2628 <-> 195.38.6.247 2956
00200   3    180 (9s) STATE udp 172.16.1.99 1096 <-> ISP_NET.35.5 53
00200 285  23949 (276s) STATE tcp 172.16.1.99 2628 <-> 195.38.6.247 2956
00200  36   2604 (8s) STATE udp 172.16.1.99 1056 <-> ISP_NET.35.5 53
00200   0      0 (1s) STATE udp 172.16.1.99 7916 <-> 200.176.203.43 53976
00200   0      0 (1s) STATE udp 172.16.1.99 7916 <-> 129.105.23.226 1954
00200 236  36258 (206s) STATE tcp ISP_NET.34.224 2636 <-> 205.188.248.208 80
00200 192  38444 (71s) STATE tcp ISP_NET.34.224 2638 <-> 205.188.248.208 80
00200   0      0 (5s) STATE udp 172.16.1.99 7916 <-> 140.192.34.175 12205
00200   0      0 (18s) STATE tcp 172.16.1.99 2782 <-> 205.188.248.208 80
00200 576 115332 (71s) STATE tcp 172.16.1.99 2638 <-> 205.188.248.208 80
00200 708 108774 (206s) STATE tcp 172.16.1.99 2636 <-> 205.188.248.208 80
00200   0      0 (1s) STATE udp 172.16.1.99 7916 <-> 202.220.175.99 10567
00200   0      0 (1s) STATE udp 172.16.1.99 7916 <-> 221.150.130.93 1845

И вот параметры ipfw:

net.inet.ip.fw.enable: 1
net.inet.ip.fw.autoinc_step: 100
net.inet.ip.fw.one_pass: 1
net.inet.ip.fw.debug: 1
net.inet.ip.fw.verbose: 1
net.inet.ip.fw.verbose_limit: 10
net.inet.ip.fw.dyn_buckets: 8192
net.inet.ip.fw.curr_dyn_buckets: 8192
net.inet.ip.fw.dyn_count: 328
net.inet.ip.fw.dyn_max: 4096
net.inet.ip.fw.static_count: 32
net.inet.ip.fw.dyn_ack_lifetime: 300
net.inet.ip.fw.dyn_syn_lifetime: 20
net.inet.ip.fw.dyn_fin_lifetime: 1
net.inet.ip.fw.dyn_rst_lifetime: 1
net.inet.ip.fw.dyn_udp_lifetime: 10
net.inet.ip.fw.dyn_short_lifetime: 5
net.inet.ip.fw.dyn_keepalive: 1
net.link.ether.ipfw: 1

  Удалить Правка | Высказать мнение | Ответить | Рекомендовать в FAQ | Cообщить модератору | Наверх


Архив | Удалить

Индекс форумов | Темы | Пред. тема | След. тема
Оцените тред (1=ужас, 5=супер)? [ 1 | 2 | 3 | 4 | 5 ]
Пожалуйста, прежде чем написать сообщение, ознакомьтесь с данными рекомендациями.




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2025 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру