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

Проблемы установки, настройки и работы Правильной Операционной Системы

Модератор: terminus

Правила форума
Убедительная просьба юзать теги [cоde] при оформлении листингов.
Сообщения не оформленные должным образом имеют все шансы быть незамеченными.
Аватара пользователя
technotrance
рядовой
Сообщения: 19
Зарегистрирован: 2013-01-29 9:05:06
Откуда: Екатеринбург
Контактная информация:

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

Непрочитанное сообщение technotrance » 2013-01-29 9:07:27

Здравствуйте!
Решил я настроить почтовый шлюз на 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. Прошу помощи...
Ядро:

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

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

Хостинговая компания Host-Food.ru
Хостинг HostFood.ru
 

Услуги хостинговой компании Host-Food.ru

Хостинг HostFood.ru

Тарифы на хостинг в России, от 12 рублей: https://www.host-food.ru/tariffs/hosting/
Тарифы на виртуальные сервера (VPS/VDS/KVM) в РФ, от 189 руб.: https://www.host-food.ru/tariffs/virtualny-server-vps/
Выделенные сервера, Россия, Москва, от 2000 рублей (HP Proliant G5, Intel Xeon E5430 (2.66GHz, Quad-Core, 12Mb), 8Gb RAM, 2x300Gb SAS HDD, P400i, 512Mb, BBU):
https://www.host-food.ru/tariffs/vydelennyi-server-ds/
Недорогие домены в популярных зонах: https://www.host-food.ru/domains/

Аватара пользователя
dmtr
ст. прапорщик
Сообщения: 545
Зарегистрирован: 2009-11-06 22:01:34
Откуда: с Ростова

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

Непрочитанное сообщение dmtr » 2013-01-29 10:26:21

поставьте нат-правило раньше, и лучше перед

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

allow all from me to any
собственно в вашей нумерации его надо поставить между 50 и 55.

Как только пакет попадает под условия правила, он обрабатывается и следующие правила уже не проходит.
This game has no name. It will never be the same.

harmless
лейтенант
Сообщения: 719
Зарегистрирован: 2007-08-23 10:56:51
Откуда: Украина, г. Киев, г. Белая Церковь
Контактная информация:

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

Непрочитанное сообщение harmless » 2013-01-29 10:28:12

Задвинь правило 75 после ната

Аватара пользователя
technotrance
рядовой
Сообщения: 19
Зарегистрирован: 2013-01-29 9:05:06
Откуда: Екатеринбург
Контактная информация:

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

Непрочитанное сообщение technotrance » 2013-01-29 11:44:11

dmtr писал(а):поставьте нат-правило раньше, и лучше перед

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

allow all from me to any
собственно в вашей нумерации его надо поставить между 50 и 55.

Как только пакет попадает под условия правила, он обрабатывается и следующие правила уже не проходит.
Вот это помогло :)
Но возникла другая проблема... Щас почтовые серваки извне не могут подключиться к моему почтовому шлюзу, чтоб передать почту.

Аватара пользователя
technotrance
рядовой
Сообщения: 19
Зарегистрирован: 2013-01-29 9:05:06
Откуда: Екатеринбург
Контактная информация:

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

Непрочитанное сообщение technotrance » 2013-01-29 11:46:02

правила вот так сделал:

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

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

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

add 00052 nat 1 all from any to any via em0

# разрешить любой исходящий трафик с сервера
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

Аватара пользователя
technotrance
рядовой
Сообщения: 19
Зарегистрирован: 2013-01-29 9:05:06
Откуда: Екатеринбург
Контактная информация:

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

Непрочитанное сообщение technotrance » 2013-01-29 11:49:05

Т.е. получается, что щас правила 00100 и 00160 не срабатывают -- сервак не доступен извне никак, даже не пингуется

Аватара пользователя
technotrance
рядовой
Сообщения: 19
Зарегистрирован: 2013-01-29 9:05:06
Откуда: Екатеринбург
Контактная информация:

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

Непрочитанное сообщение technotrance » 2013-01-29 12:26:26

Такс... Собственно, положение с правилом 00160 я исправил вот так:

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

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 хх.хх.хх.хх:хх redirect_port tcp хх.хх.хх.хх:465
хх.хх.хх.хх -- это белый ай-пишник сервера...
Как-то бы щас ещё сделать так, чтобы сервер извне пинговать можно было...

Аватара пользователя
technotrance
рядовой
Сообщения: 19
Зарегистрирован: 2013-01-29 9:05:06
Откуда: Екатеринбург
Контактная информация:

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

Непрочитанное сообщение technotrance » 2013-01-29 12:41:09

technotrance писал(а):Как-то бы щас ещё сделать так, чтобы сервер извне пинговать можно было...
пинг поправил изменив вот это правило:

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

00052 nat 1 tcp from any to any via em0
вместо tcp стояло all
Правда, из-за этого, щас с зимбровкого сервера пинги во внеху не проходят...
Про прохождение пингов я уже гуглил -- с ними вобще всё плохо... У многих эта проблема встречается. Пинг либо из локалки в внеху проходит, но при этом с самого шлюза пинг не идёт. Либо же, наоборот, со шлюза пинг идёт, но при этом из локалки пинг не идёт :cz2:

Аватара пользователя
dmtr
ст. прапорщик
Сообщения: 545
Зарегистрирован: 2009-11-06 22:01:34
Откуда: с Ростова

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

Непрочитанное сообщение dmtr » 2013-01-29 14:55:43

покажите как сейчас выглядит вывод

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

ipfw list
This game has no name. It will never be the same.

Аватара пользователя
technotrance
рядовой
Сообщения: 19
Зарегистрирован: 2013-01-29 9:05:06
Откуда: Екатеринбург
Контактная информация:

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

Непрочитанное сообщение technotrance » 2013-01-29 17:13:19

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

00050 allow ip from any to any via lo0
00052 nat 1 tcp from any to any via em0
00055 allow ip from me to any
00075 allow tcp from any to any established
00100 allow icmp from any to me icmptypes 8 in via em0
00150 allow ip from 172.16.1.100 to me via re0
00160 allow tcp from any to me dst-port 25,465 via em0
00161 allow tcp from any to me dst-port 22,10000,25,465 via re0
00171 allow ip from 172.16.0.62 to any via re0
00172 allow ip from any to 172.16.0.62 via re0
10000 deny ip from any to any
65535 deny ip from any to any

harmless
лейтенант
Сообщения: 719
Зарегистрирован: 2007-08-23 10:56:51
Откуда: Украина, г. Киев, г. Белая Церковь
Контактная информация:

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

Непрочитанное сообщение harmless » 2013-01-29 17:29:57

К сожалению не вижу логики в данном наборе правил.

Аватара пользователя
technotrance
рядовой
Сообщения: 19
Зарегистрирован: 2013-01-29 9:05:06
Откуда: Екатеринбург
Контактная информация:

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

Непрочитанное сообщение technotrance » 2013-01-29 17:33:31

А что не так?

harmless
лейтенант
Сообщения: 719
Зарегистрирован: 2007-08-23 10:56:51
Откуда: Украина, г. Киев, г. Белая Церковь
Контактная информация:

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

Непрочитанное сообщение harmless » 2013-01-29 17:37:57

Смысла нет!
Лучше написать себе что хочешь получить, а потом писать правила
Все понять даст выхлоп

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

ipfw -at list

Аватара пользователя
technotrance
рядовой
Сообщения: 19
Зарегистрирован: 2013-01-29 9:05:06
Откуда: Екатеринбург
Контактная информация:

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

Непрочитанное сообщение technotrance » 2013-01-29 17:43:51

Да, собственно, что хотел получить -- я в самом первом посте написал... И с помощью dmtr я это почти и получил...
Единственно что пинги с компа, который за NATом, не проходят...

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

# ipfw -at list
00050     0       0                         allow ip from any to any via lo0
00052  1633  830321 Tue Jan 29 20:19:08 2013 nat 1 tcp from any to any via em0
00055  3952 1580582 Tue Jan 29 20:39:23 2013 allow ip from me to any
00075  4286  967312 Tue Jan 29 20:39:23 2013 allow tcp from any to any established
00100   660   54832 Tue Jan 29 20:39:01 2013 allow icmp from any to me icmptypes 8 in via em0
00150    50   11746 Tue Jan 29 17:28:36 2013 allow ip from 172.16.1.100 to me via re0
00160     0       0                         allow tcp from any to me dst-port 25,465 via em0
00161    59    3540 Tue Jan 29 17:28:35 2013 allow tcp from any to me dst-port 22,10000,25,465 via re0
00171     9     636 Tue Jan 29 20:12:57 2013 allow ip from 172.16.0.62 to any via re0
00172    27    1404 Tue Jan 29 20:01:00 2013 allow ip from any to 172.16.0.62 via re0
10000 40397 4571904 Tue Jan 29 20:39:20 2013 deny ip from any to any
65535     0       0                         deny ip from any to any

Гость
проходил мимо

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

Непрочитанное сообщение Гость » 2013-01-29 17:48:07

technotrance писал(а):Такс... Собственно, положение с правилом 00160 я исправил вот так:

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

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 хх.хх.хх.хх:хх redirect_port tcp хх.хх.хх.хх:465
хх.хх.хх.хх -- это белый ай-пишник сервера...
Как-то бы щас ещё сделать так, чтобы сервер извне пинговать можно было...
Если ставите нат выше то обратите внимание на директиву deny_in

Аватара пользователя
technotrance
рядовой
Сообщения: 19
Зарегистрирован: 2013-01-29 9:05:06
Откуда: Екатеринбург
Контактная информация:

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

Непрочитанное сообщение technotrance » 2013-01-29 17:51:02

Гость писал(а): Если ставите нат выше то обратите внимание на директиву deny_in
А я на неё давно внимание обратил :) Если её не поставить, то сервер вобще становится полностью открыт для внехи. А мне этого никак не надо. Только 25-ый и 465-ый порты у сервера должны быть открыты для внешнего мира.

Гость
проходил мимо

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

Непрочитанное сообщение Гость » 2013-01-29 18:05:48

technotrance писал(а): Но возникла другая проблема... Щас почтовые серваки извне не могут подключиться к моему почтовому шлюзу, чтоб передать почту.
Поставить правило 100 выше нат.

Гость
проходил мимо

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

Непрочитанное сообщение Гость » 2013-01-29 18:10:30

technotrance писал(а): Как-то бы щас ещё сделать так, чтобы сервер извне пинговать можно было...
Имелось в виду это.

Гость
проходил мимо

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

Непрочитанное сообщение Гость » 2013-01-29 18:20:39

technotrance писал(а):
Гость писал(а): Если ставите нат выше то обратите внимание на директиву deny_in
А я на неё давно внимание обратил :) Если её не поставить, то сервер вобще становится полностью открыт для внехи. А мне этого никак не надо. Только 25-ый и 465-ый порты у сервера должны быть открыты для внешнего мира.
А для чего тогда правило 10000?

harmless
лейтенант
Сообщения: 719
Зарегистрирован: 2007-08-23 10:56:51
Откуда: Украина, г. Киев, г. Белая Церковь
Контактная информация:

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

Непрочитанное сообщение harmless » 2013-01-29 19:52:27

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

add 53 nat 1 icmp from any to any via em0
Спасет твою ситуацию и для сервера и для тех кто за натом

Аватара пользователя
technotrance
рядовой
Сообщения: 19
Зарегистрирован: 2013-01-29 9:05:06
Откуда: Екатеринбург
Контактная информация:

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

Непрочитанное сообщение technotrance » 2013-01-30 7:37:13

Спасло :) Но зато щас сам сервер из внехи не пингуется...

Аватара пользователя
technotrance
рядовой
Сообщения: 19
Зарегистрирован: 2013-01-29 9:05:06
Откуда: Екатеринбург
Контактная информация:

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

Непрочитанное сообщение technotrance » 2013-01-30 7:49:28

Гость писал(а):А для чего тогда правило 10000?
Ну оно, так то, бесполезно... Ибо опцию IPFIREWALL_DEFAULT_TO_ACCEPT я не стал в ядре включать. Но оно и мешать не должно, ибо стоит в самом конце.

Аватара пользователя
technotrance
рядовой
Сообщения: 19
Зарегистрирован: 2013-01-29 9:05:06
Откуда: Екатеринбург
Контактная информация:

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

Непрочитанное сообщение technotrance » 2013-01-30 7:56:27

Гость писал(а):А для чего тогда правило 10000?
И кстати, это правило не помогает, если deny_in не стоит.

Гость
проходил мимо

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

Непрочитанное сообщение Гость » 2013-01-30 9:21:36

А если так?

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

 add 00100 check-state
 add 00200 allow ip from me to any keep-state
 add 00300 allow icmp from any to me icmptypes 8
 add 00400 nat 1 all from any to any via em0
 add 00500 nat 1 icmp from any to any via em0
и т.д.

Аватара пользователя
technotrance
рядовой
Сообщения: 19
Зарегистрирован: 2013-01-29 9:05:06
Откуда: Екатеринбург
Контактная информация:

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

Непрочитанное сообщение technotrance » 2013-02-02 17:08:58

Вобщем, покуралесил я ещё немного и добился желаемого. Правила 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? Которая бы также наглядно демонстрировала, как именно трафик проходит через все таблички и правила фаервола?