Прошу помощи знатоков ipfw

FreeBSD, NetBSD, OpenBSD, DragonFly и т. д.

Модератор: arachnid

Ответить
Аватара пользователя
technotrance
Сообщения: 280
ОС: Fedora, FreeBSD, CentOS, Debian
Контактная информация:

Прошу помощи знатоков ipfw

Сообщение technotrance »

Здравствуйте!
Решил я настроить почтовый шлюз на FreeBSD. Схема простенькая:
Изображение
Сервер2 -- это почтовый шлюз
Сервер1 -- это сервер с зимброй.
Собственно, для почтового шлюза задачи простые:
1. обеспечить серверу1 NAT во внеху.
2. передавать почту с сервера1 дальше в всемирную паутину.
3. обеспечить проброс портов 80 и 443 из внехи к серверу1.
И вот у меня дошло дело до настройки ipfw. Седлал вот так:

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

# сброс всех правил
-f flush

# разрешить любой доступ через интерфейс-петлю
add 00050 allow all from any to any via lo0

# разрешить любой исходящий трафик с сервера
add 00055 allow all from me to any

# разрешить прохождение пакетов со статусом 'установлен'
# add 00075 allow tcp from any to any established

# разрешить пинг почтового шлюза извне
add 00100 allow icmp from any to me icmptypes 8 in via em0

# разрешить серверу обмениваться любым трификом с локальным DNS-сервером
add 00150 allow all from 172.16.1.100 to me via re0

# открытые порты к серверу.
add 00160 allow tcp from any to me 25,465 via em0
add 00161 allow tcp from any to me 22,10000,25,465 via re0

# разрешить любой трафик с зимброй
add 00171 allow all from 172.16.0.62 to any via re0
add 00172 allow all from any to 172.16.0.62 via re0

# NAT для зимбера и проброс портов к нему
nat 1 config if em0 reset same_ports deny_in redirect_port tcp 172.16.0.62:443 443 redirect_port tcp 172.16.0.62:80 80
add 00180 nat 1 all from any to any via em0

# Запретить всё остальное
add 10000 deny all from any to any

Проблема у меня в том, что если я раскомментирую правило 00075, то у меня не будет работать NAT. А если его закомментировать, то NAT работает, но почтовый шлюз уже не может соединиться с другими серверами по 25-ому порту.
Вот как бы решить эту делему...
Честно говоря, после iptables, я не могу до конца вникнуть в логику работы ipfw. Прошу помощи...
Спасибо сказали:
Аватара пользователя
technotrance
Сообщения: 280
ОС: Fedora, FreeBSD, CentOS, Debian
Контактная информация:

Re: Прошу помощи знатоков ipfw

Сообщение technotrance »

Ядро:

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

options IPFIREWALL
options IPFIREWALL_VERBOSE
options IPFIREWALL_VERBOSE_LIMIT=50
options IPFIREWALL_FORWARD
options IPFIREWALL_NAT
options LIBALIAS
options DUMMYNET
options ROUTETABLES=2
options HZ="1000"

в /etc/sysctl.conf:
net.inet.ip.fw.one_pass=1
Спасибо сказали:
Аватара пользователя
arachnid
Модератор
Сообщения: 1099
ОС: freeBSD

Re: Прошу помощи знатоков ipfw

Сообщение arachnid »

разбейте правило для NAT на два - одно на выход наружу - оно будет первым. второе - на вход извне - перед последним запрещением.

что-то типа

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

allow ip from any to any via lo0
nat 10 ip from 192.168.0.0/24 to any via em0
allow ip from me to any keep-state
allow ip from any to any via rl0
nat 10 ip from any to 10.12.26.32 via em0
deny ip from any to any


где em0 внешний интерфейс, а rl0 внутренний.
будет чуть проще с запрещениями и разрешениями.


ps. и желательно вставлять вывод команды ipfw show - что бы увидеть, что именно получилось у Вас после применения ваших правил
-= freeBSD stable, fluxbox =-
"если ты будешь со мной спорить, я тебя запишу в книжечку!" (с) Ежик
Спасибо сказали:
Аватара пользователя
technotrance
Сообщения: 280
ОС: Fedora, FreeBSD, CentOS, Debian
Контактная информация:

Re: Прошу помощи знатоков ipfw

Сообщение technotrance »

Вобщем, покуралесил я ещё немного и добился желаемого. Правила ipfw такие:

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

# сброс всех правил
-f flush

# разрешить любой доступ через интерфейс-петлю
add 00050 allow all from any to any via lo0

# разрешить любой трафик с моим компом
add 00051 allow all from 172.16.1.2 to any via re0
add 00052 allow all from any to 172.16.1.2 via re0

# NAT для зимбера. Опцию переноса строк "\" надо убрать, все должно быть в одну строчку
nat 1 config if em0 reset same_ports deny_in redirect_port tcp 172.16.0.62:443 443 redirect_port tcp 172.16.0.62:80 \
\ 80 redirect_port tcp <белый ip>:25 25 redirect_port tcp <белый ip>:465 465
add 00053 nat 1 tcp from any to any via em0

# второй NAT, чтобы проходил ping везде
nat 2 config if em0 reset same_ports
add 00054 nat 2 icmp from any to any icmptypes 0,8 via em0

# разрешить любой исходящий трафик с сервера
add 00055 allow all from me to any

# разрешить прохождение пакетов со статусом 'установлен'
add 00075 allow tcp from any to any established

# разрешить весь icmp трафик
add 00100 allow icmp from any to any

# разрешить серверу обмениваться любым трификом со DNS-сервером
add 00150 allow all from 172.16.1.100 to me via re0

# открытые порты к серверу.
add 00160 allow tcp from any to me 25,465 via em0
add 00161 allow tcp from any to me 22,10000,25,465 via re0

# разрешить любой трафик с зимброй
add 00171 allow all from 172.16.0.62 to any via re0
add 00172 allow all from any to 172.16.0.62 via re0

# Запретить всё остальное
add 10000 deny all from any to any

при этом, что имею:
- сервер открыт извне только по портам 25 и 465 и для пинга.
- сервер обеспечивает проброс 80 и 443 портов извне до машины с зимброй.
- сервер обеспечивает NAT во внеху для машины с зимброй. В том числе и NAT для пинга.
Собственно, для прохождения пинга пришлось создать второй nat просто...
Возможно, тему стоит и закрыть, но я бы у вас, камрады, хотел бы спросить ещё кое-что. Дело в том, что я всё равно так до конца и не понял логику работы ipfw. А понять бы её очень хотелось. В своё время, когда учился работать с iptables в линуксе, то я наткнулся вот на такую схемку:
Изображение
И после неё, мне стало всё намного понятнее -- я понял где и какие правила надо подставлять.
Вот и хочу спросить, не натыкался ли кто-нибудь где-нибудь на подобную схемку, но для IPFW? Которая бы также наглядно демонстрировала, как именно трафик проходит через все таблички и правила фаервола?
Спасибо сказали:
Аватара пользователя
arachnid
Модератор
Сообщения: 1099
ОС: freeBSD

Re: Прошу помощи знатоков ipfw

Сообщение arachnid »

-= freeBSD stable, fluxbox =-
"если ты будешь со мной спорить, я тебя запишу в книжечку!" (с) Ежик
Спасибо сказали:
Ответить