The OpenNET Project / Index page

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



Индекс форумов
Составление сообщения

Исходное сообщение
"IPFW NAT - порядок прохождения правил"
Отправлено neekonoff, 20-Апр-17 21:22 
Проблему я решил таким образом:
(другие адреса и интерфейсы, мушто на типа "тестовом стенде" на hyper-v, но в остальном все идентично)

#!/bin/sh
ipfw -q -f flush
cmd="ipfw -q add"
eif="hn0"       #внешний интерфейс
iif="hn1"       #внутренний интерфейс
ip1="192.168.100.5"    #типа белый ip на eif
#ip2="192.168.100.6"
#-----------------------------------------------------------
$cmd 008 allow all from any to any via lo0
$cmd 010 allow all from any to any via $iif
#-----------------------NAT config--------------------------
ipfw -q nat 1 config ip $ip1 same_ports reset deny_in redirect_port tcp 10.1.10.11:80 80 redirect_port tcp 192.168.100.5:22 22
#--------------------------NAT------------------------------
$cmd 100 nat 1 tcp from 10.1.10.11 80 to any out xmit $eif
$cmd 102 nat 1 ip from any to $ip1 not 80 in recv $eif
#-----------------------------------------------------------
$cmd 111 check-state
#------------------------Outgoing---------------------------
$cmd 210 skipto 820 tcp from 10.1.10.0/24 to any out via $eif setup keep-state
$cmd 212 skipto 820 icmp from 10.1.10.0/24 to any out via $eif keep-state
$cmd 330 deny all from any to any frag in via $eif
$cmd 332 deny tcp from any to any established in via $eif
#------------------------Incoming---------------------------
$cmd 350 skipto 850 tcp from any to $ip1 80 in recv $eif setup keep-state
$cmd 380 allow tcp from any to me 22 in via $eif setup limit src-addr 2
#---------------------------Log-----------------------------
$cmd 700 deny log all from any to any in via $eif
$cmd 710 deny log all from any to any out via $eif
#--------------------------Skipto---------------------------
$cmd 820 nat 1 ip from any to any out via $eif
$cmd 850 nat 1 tcp from any to $ip1 in recv $eif
$cmd 900 allow ip from any to any
#-----------------------------------------------------------
$cmd 999 deny log all from any to any
#---------------------------------------

Таким образом получается, что:

Трафик, приходящий извне на IP 192.168.100.5:80
На проходе IN
1. Доходит до правила 350 (в динамическую таблицу добалвяется запись вида 192.168.100.5:80<->"IP-адрес_инициатора:какой-то_порт") и "прыгает" на 850.
2. На правиле 850 адрес назначения заменяется с 192.168.100.5:80 на 10.1.10.11:80, далее выходит из NAT и, так как one_pass=0, доходит до правила 900 и выходит из прохода IN.
На проходие OUT
1. Доходит до правила 010 и выпускается на машину с адресом 10.1.10.11:80

Ответный трафик от машины 10.1.10.11:80
На проходе IN
1. Доходит до правила 010, выходит из прохода IN и попадает в проход OUT
На проходе OUT
1. Доходит до правила 100, заменяется адрес источника с 10.1.10.11:80 на 192.168.100.5:80, выходит из NAT и, так как one_pass=0, идет дальше до правила 111.
2. На правиле 111 проверяется динамическая таблица и, так как в ней уже присутствует запись вида 192.168.100.5:80<->"IP-адрес_инициатора:какой-то_порт", трафик выпускается наружу.

Может быть кому-то пригодится.

Отдельное спасибо Дум Дум за помосчь в рассуждениях! :)

 

Ваше сообщение
Имя*:
EMail:
Для отправки новых сообщений в текущей нити на email укажите знак ! перед адресом, например, !user@host.ru (!! - не показывать email).
Более тонкая настройка отправки ответов производится в профиле зарегистрированного участника форума.
Заголовок*:
Сообщение*:
 
При общении не допускается: неуважительное отношение к собеседнику, хамство, унизительное обращение, ненормативная лексика, переход на личности, агрессивное поведение, обесценивание собеседника, провоцирование флейма голословными и заведомо ложными заявлениями. Не отвечайте на сообщения, явно нарушающие правила - удаляются не только сами нарушения, но и все ответы на них. Лог модерирования.



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

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