1

Тема: NAT для отдельного IP & Firewall FreeBSD

оборудовал две машины - на одной почтовый сервер, ФТП, ВПН, НАТ.
На втором Винда которая подключена кабелем к первой машине.

Дело в том, что если запускать НАТД обычным образом, то к примеру postfix | proftpd не могут толком работать , так  к примеру постфикс отправляет почту не с адреса к которому его настроили, а proftpd вообще отказывается соединяться (путается при установке пассивного соединения).

Собственно машина одна, адресов внутри 5, сервисов тоже разделено скажем 5.
Тема в следующем: Указать постфиксу отправлять почту с его адреса, а транслировать адреса с другого. Первую задачу выполнил, путем ограничения divert правила в фаерволе.

Привожу примеры:

00050      0        0 divert 8668 ip4 from ${NAT_IP} to 192.168.0.0/24 via em0
00055      0        0 divert 8668 ip4 from 192.168.0.0/24 to ${NAT_IP} via em0
...
00600   5451  6214258 allow tcp from any to ${MAIL_IP} dst-port 25
00700   1265  1405078 allow tcp from ${MAIL_IP} to any dst-port 25

кажется все в порядке. Но теперь НАТ не исполняет свои обязанности. С Виндовс-машины инет не виден.
Пробовал указать адрес -a для поднятия natd

natd_enable="YES"               # Enable natd (if firewall_enable == YES).
#natd_interface="bge0"          # Public interface or IPaddress to use.

но и это не помогло. Что тут не так?

2

Re: NAT для отдельного IP & Firewall FreeBSD

К сожалению, в postfix yt настраивается адрес, от которого он передает почту.
Alexander, в чем смысл иметь на машине 5 адресов и, главное, 5 сервисов на _разных_ IP?
Чем Вас не устаивает, скажем, postfix и ftp-демон на одном IP? Вопросы религии?

---
Victor

3

Re: NAT для отдельного IP & Firewall FreeBSD

Верно. Он прикрепляется опцией smtp_bind_address =
Но когда НАТ включен divert natd from any to any , и на интерфейсе висят к примеру 5 адресов, то он выходит на отправку с первым попавшимся. Вот в чем проблема.
И потом ФТП тоже не корректно сокет пассивынй создает.

Но кажется уже почти решил проблему. Отпишусь чуть позже.

Добавлено: 15-01-2010 14:04:19

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


Добавлено: 15-01-2010 17:47:27

Задача решаема.

Смысл исполнения:
1. фильтрация через ipfw всех хостов что должны отрабатывать другие сервисы(не НАТ).
2. Добавление NATD правил в самую последнюю очередь исполнения ipfw

Получается очень красиво. И не забываем закрывать доступы с IP которые уже отработаны. Это помогает для дебага и улучшает понимание работы всего фаервола smile

приведу пример из рабочего файла /etc/rc.firewall:

[Mm][Aa][Ii][Nn])
       # set this to your local network
        net="$firewall_client_net"
        MAINNET="1.2.3.0/29"
        MAILHOST="1.2.3.1"
        HTTPHOST="1.2.3.2"
        FTPHOST="1.2.3.3"
        VPNHOST="1.2.3.4"
        NATHOST="1.2.3.5"
        # SMTP
        ${fwcmd} add pass tcp from ${MAILHOST} to any established
        ${fwcmd} add pass tcp from any to ${MAILHOST} established
        ${fwcmd} add pass tcp from any to ${MAILHOST} 25 setup
        ${fwcmd} add pass tcp from ${MAILHOST} to any 25 setup
        # POP# SSL
        ${fwcmd} add pass tcp from any to ${MAILHOST} 995 setup #POP3-SSL
        ${fwcmd} add pass tcp from ${MAILHOST} 995 to any       #POP3-SSL
        ${fwcmd} add pass tcp from any to ${MAILHOST} 110       #POP3
        ${fwcmd} add pass tcp from ${MAILHOST} 110 to any       #POP3
        ${fwcmd} add pass tcp from any to ${MAILHOST} 143       #IMAP
        ${fwcmd} add pass tcp from ${MAILHOST} 110 to any       #IMAP
        ${fwcmd} add pass tcp from any to ${MAILHOST} 993       #IMAP-SSL
        ${fwcmd} add pass tcp from ${MAILHOST} 993 to any       #IMAP-SSL
......
        #VPN
        ${fwcmd} add pass udp from any to ${VPNHOST} 1812-1813
        ${fwcmd} add pass udp from ${VPNHOST} 1812-1813 to any
        ${fwcmd} add allow gre from any to ${VPNHOST}
        ${fwcmd} add allow gre from ${VPNHOST} to any
        ${fwcmd} add allow tcp from any to ${VPNHOST} 1723
        ${fwcmd} add allow tcp from ${VPNHOST} 1723 to any
        # Allow DNS queries out in the world
        ${fwcmd} add pass udp from ${VPNHOST} to any 53 keep-state
        ${fwcmd} add pass udp from any 53 to ${VPNHOST} keep-state
        ${fwcmd} add deny log ip from any to ${VPNHOST}
#  ------------- NATD outs -----------
${fwcmd} add divert natd log logamount 100 ip from any to any via bge0
#${fwcmd} add divert natd log logamount 100 ip from any to ${NATHOST} via bge0
# Allow any traffic to or from my own net.
${fwcmd} add pass all from any to ${net}
${fwcmd} add pass all from ${net} to any
# STATICs
${fwcmd} add pass tcp from any to ${NATHOST} 49152-65534 keep-state
${fwcmd} add pass tcp from any 49152-65534 to ${NATHOST} keep-state
# HTTP
${fwcmd} add pass tcp from ${NATHOST} to any 80
${fwcmd} add pass tcp from any 80 to ${NATHOST}
# HTTPS
${fwcmd} add pass tcp from ${NATHOST} to any 443
${fwcmd} add pass tcp from any 443 to ${NATHOST}
# SMTP
#${fwcmd} add pass tcp from ${MAINNET} to any 25
# ICMP
${fwcmd} add pass icmp from any to any
# Allow DNS queries out in the world
${fwcmd} add pass udp from any to any 53
${fwcmd} add pass udp from any 53 to any
# RDP
${fwcmd} add pass tcp from any to ${NATHOST} 3389
${fwcmd} add pass tcp from ${NATHOST} 3389 to any
        # Everything else is denied by default, unless the
        # IPFIREWALL_DEFAULT_TO_ACCEPT option is set in your kernel
        # config file.
        ${fwcmd} add deny log logamount 100 ip from any to any
        ;;

и потом в /etc/natd.conf

log_ipfw_denied
alias_address 1.2.3.5
log yes
# RDP
redirect_port tcp 192.168.1.5:3389 3389

ну и соответственно в /etc/rc.conf

gateway_enable="YES"
natd_enable="YES"               # Enable natd (if firewall_enable == YES).
natd_flags="-f /etc/natd.conf"                  # Additional flags for natd.
### Basic network and firewall/security options: ###
firewall_enable="YES"           # Set to YES to enable firewall functionality
firewall_type="MAIN"            # Firewall type (see /etc/rc.firewall)
#firewall_type="OPEN"           # Firewall type (see /etc/rc.firewall)
firewall_quiet="YES"            # Set to YES to suppress rule display
firewall_logging="YES"          # Set to YES to enable events logging
firewall_flags=""               # Flags passed to ipfw when type is a file
firewall_client_net="192.168.1.0/24" # Network address for "client" firewall.

--- вот ---

На сем откланиваюсь smile