Назад | Перейти на главную страницу

Перенос сервера Microsoft Exchange в частную сеть

В одном из офисов у нас сеть из 50 компьютеров, в которой был всего один сервер:

Этот сервер работал как шлюз (прокси-сервер), почтовый сервер, файловый сервер, межсетевой экран и контроллер домена. У него было два сетевых интерфейса: один для WAN (скажем, 222.222.222.222) и один для LAN (192.168.1.1). Я настроил Linux-сервер в качестве шлюза (без прокси), поэтому Linux-ящик теперь имеет следующие интерфейсы: 222.222.222.222 (наш внешний IP-адрес, мы удалили его с Windows-машины) и 192.168.1.100 (внутренний IP) , но нам нужно сохранить старый сервер Windows в качестве почтового сервера и прокси-сервера для некоторых из наших пользователей, пока мы не подготовим для этого другую машину Linux, поэтому мне нужно, чтобы почтовый сервер на этой машине был доступен из Интернета. Я установил правила iptables для перенаправления всех входящих подключений на 25-м и 110-м портах нашего внешнего IP-адреса на 192.168.1.1:25 и 192.168.1.1:110, и когда я пытаюсь подключиться к нашей SMTP-службе через Telnet

 telnet 222.222.222.222 25

Я получаю приветствие от службы SMTP нашего сервера Windows (192.168.1.1), и она отлично работает. Но когда я telnet POP3 сервис

 telnet 222.222.222.222 110

Я получаю только пустой черный экран и соединение пропадает, если я нажимаю любую кнопку. Проверил правила ISA - на 110-м и 25-м портах вроде все одинаково. Когда я telnet на 110-м портах нашего сервера Windows с нашей новой машины шлюза, вот так:

 telnet 192.168.1.1 110

Я получаю доступ к его сервису POP3:

+OK Microsoft Exchange Server 2003 POP3 server version 6.5.7638.1 
(...) ready.

Что мне сделать, чтобы сделать сервис POP3 доступным через наш новый шлюз?

UPD: мой конфиг iptables выглядит так:

-P INPUT DROP
-P FORWARD DROP
-P OUTPUT DROP
-N bad_packets
-N bad_tcp_packets
-N icmp_packets
-N tcp_inbound
-N tcp_outbound
-N udp_inbound
-N udp_outbound
-A INPUT -i lo -j ACCEPT
-A INPUT -j bad_packets
-A INPUT -d 224.0.0.1/32 -j DROP
-A INPUT -s 192.168.1.0/24 -i eth0 -j ACCEPT
-A INPUT -d 192.168.1.255/32 -i eth0 -j ACCEPT
-A INPUT -i eth1 -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -i eth1 -p tcp -j tcp_inbound
-A INPUT -i eth1 -p udp -j udp_inbound
-A INPUT -i eth1 -p icmp -j icmp_packets
-A INPUT -m pkttype --pkt-type broadcast -j DROP
-A INPUT -j LOG --log-prefix "fp=INPUT:99 a=DROP "
-A FORWARD -j bad_packets
-A FORWARD -i eth0 -p tcp -j tcp_outbound
-A FORWARD -i eth0 -p udp -j udp_outbound
-A FORWARD -i eth0 -j ACCEPT
-A FORWARD -i eth1 -m state --state RELATED,ESTABLISHED -j ACCEPT
-A FORWARD -j LOG --log-prefix "fp=FORWARD:99 a=DROP "
-A FORWARD -d 192.168.1.1/32 -i eth1 -p udp -m udp --dport 110 -j ACCEPT
-A FORWARD -d 192.168.1.1/32 -i eth1 -p udp -m udp --dport 25 -j ACCEPT
-A OUTPUT -p icmp -m state --state INVALID -j DROP
-A OUTPUT -s 127.0.0.1/32 -j ACCEPT
-A OUTPUT -o lo -j ACCEPT
-A OUTPUT -s 192.168.1.100/32 -j ACCEPT
-A OUTPUT -o eth0 -j ACCEPT
-A OUTPUT -o eth1 -j ACCEPT
-A OUTPUT -j LOG --log-prefix "fp=OUTPUT:99 a=DROP "
-A bad_packets -s 192.168.1.0/24 -i eth1 -j LOG --log-prefix "fp=bad_packets:2 a=DROP "
-A bad_packets -s 192.168.1.0/24 -i eth1 -j DROP
-A bad_packets -m state --state INVALID -j LOG --log-prefix "fp=bad_packets:1 a=DROP "
-A bad_packets -m state --state INVALID -j DROP
-A bad_packets -p tcp -j bad_tcp_packets
-A bad_packets -j RETURN
-A bad_tcp_packets -i eth0 -p tcp -j RETURN
-A bad_tcp_packets -p tcp -m tcp ! --tcp-flags FIN,SYN,RST,ACK SYN -m state --state NEW -j LOG --log-prefix "fp=bad_tcp_packets:1 a=DROP "
-A bad_tcp_packets -p tcp -m tcp ! --tcp-flags FIN,SYN,RST,ACK SYN -m state --state NEW -j DROP
-A bad_tcp_packets -p tcp -m tcp --tcp-flags FIN,SYN,RST,PSH,ACK,URG NONE -j LOG --log-prefix "fp=bad_tcp_packets:2 a=DROP "
-A bad_tcp_packets -p tcp -m tcp --tcp-flags FIN,SYN,RST,PSH,ACK,URG NONE -j DROP
-A bad_tcp_packets -p tcp -m tcp --tcp-flags FIN,SYN,RST,PSH,ACK,URG FIN,SYN,RST,PSH,ACK,URG -j LOG --log-prefix "fp=bad_tcp_packets:3 a=DROP "
-A bad_tcp_packets -p tcp -m tcp --tcp-flags FIN,SYN,RST,PSH,ACK,URG FIN,SYN,RST,PSH,ACK,URG -j DROP
-A bad_tcp_packets -p tcp -m tcp --tcp-flags FIN,SYN,RST,PSH,ACK,URG FIN,PSH,URG -j LOG --log-prefix "fp=bad_tcp_packets:4 a=DROP "
-A bad_tcp_packets -p tcp -m tcp --tcp-flags FIN,SYN,RST,PSH,ACK,URG FIN,PSH,URG -j DROP
-A bad_tcp_packets -p tcp -m tcp --tcp-flags FIN,SYN,RST,PSH,ACK,URG FIN,SYN,RST,ACK,URG -j LOG --log-prefix "fp=bad_tcp_packets:5 a=DROP "
-A bad_tcp_packets -p tcp -m tcp --tcp-flags FIN,SYN,RST,PSH,ACK,URG FIN,SYN,RST,ACK,URG -j DROP
-A bad_tcp_packets -p tcp -m tcp --tcp-flags SYN,RST SYN,RST -j LOG --log-prefix "fp=bad_tcp_packets:6 a=DROP "
-A bad_tcp_packets -p tcp -m tcp --tcp-flags SYN,RST SYN,RST -j DROP
-A bad_tcp_packets -p tcp -m tcp --tcp-flags FIN,SYN FIN,SYN -j LOG --log-prefix "fp=bad_tcp_packets:7 a=DROP "
-A bad_tcp_packets -p tcp -m tcp --tcp-flags FIN,SYN FIN,SYN -j DROP
-A bad_tcp_packets -p tcp -j RETURN
-A icmp_packets -p icmp -f -j LOG --log-prefix "fp=icmp_packets:1 a=DROP "
-A icmp_packets -p icmp -f -j DROP
-A icmp_packets -p icmp -m icmp --icmp-type 8 -j DROP
-A icmp_packets -p icmp -m icmp --icmp-type 11 -j ACCEPT
-A icmp_packets -p icmp -j RETURN
-A tcp_inbound -p tcp -m tcp --dport 113 -j REJECT --reject-with icmp-port-unreachable
-A tcp_inbound -p tcp -m tcp --dport 80 -j ACCEPT
-A tcp_inbound -p tcp -m tcp --dport 21 -j ACCEPT
-A tcp_inbound -p tcp -m tcp --sport 20 -j ACCEPT
-A tcp_inbound -p tcp -m tcp --dport 22 -j ACCEPT
-A tcp_inbound -p tcp -m tcp --dport 25 -j ACCEPT
-A tcp_inbound -p tcp -m tcp --dport 110 -j ACCEPT
-A tcp_inbound -p tcp -j RETURN
-A tcp_outbound -p tcp -j ACCEPT
-A udp_inbound -p udp -m udp --dport 137 -j DROP
-A udp_inbound -p udp -m udp --dport 138 -j DROP
-A udp_inbound -p udp -m udp --dport 113 -j REJECT --reject-with icmp-port-unreachable
-A udp_inbound -p udp -m udp --sport 67 --dport 68 -j ACCEPT
-A udp_inbound -p udp -j RETURN
-A udp_outbound -p udp -j ACCEPT

Убедитесь, что свойства управления подключением на вкладке «Доступ» в «Свойства виртуального сервера POP3» разрешают «Все, кроме списка ниже».

См. Снимок экрана: http://www.iainlbc.com/pop3.jpg

Если вы больше не используете ISA в качестве межсетевого экрана, а только как прокси, вам следует удалить все правила из его конфигурации и создать только одну политику «разрешить весь трафик из любого места в любое место»; Запуск ISA на том же компьютере, что и Exchange, и DC может вполне беспорядочный.

Вы также должны убедиться, что ваша конфигурация IPTABLES действительно разрешает внешние подключения к внутренней службе POP3 и что для службы POP3 Exchange не настроен какой-либо черный список.

Также вам следует протестировать свои услуги из вне ваша сеть: маршрутизация может стать болезненной, когда вы начинаете из своей локальной сети, выходите через NAT, а затем возвращаетесь через общедоступный IP-адрес с NAT на внутренний сервер.


Редактировать:

Я очень озадачен вашей конфигурацией IPTABLES.

Вы написали:

-A FORWARD -d 192.168.1.1/32 -i eth1 -p udp -m udp --dport 110 -j ACCEPT 
-A FORWARD -d 192.168.1.1/32 -i eth1 -p udp -m udp --dport 25 -j ACCEPT

Но SMTP и POP3 TCP протоколы, а не UDP те!

Кроме того, вы делаете это:

-A INPUT -i eth1 -p tcp -j tcp_inbound
[...]
-A tcp_inbound -p tcp -m tcp --dport 80 -j ACCEPT 
-A tcp_inbound -p tcp -m tcp --dport 21 -j ACCEPT 
-A tcp_inbound -p tcp -m tcp --sport 20 -j ACCEPT 
-A tcp_inbound -p tcp -m tcp --dport 22 -j ACCEPT 
-A tcp_inbound -p tcp -m tcp --dport 25 -j ACCEPT 
-A tcp_inbound -p tcp -m tcp --dport 110 -j ACCEPT

Эти правила принимают подключения к этим портам, когда они направлены к самому брандмауэру (Цепочка INPUT), но как вы пересылаете их на внутренние серверы? Я не вижу здесь переадресации портов.

Я также не вижу здесь какой-либо NAT ... но у меня создалось впечатление, что ваш брандмауэр Linux имеет общедоступный IP-адрес на внешнем интерфейсе.

Я бы не рекомендовал оставлять незашифрованный протокол POP3 доступным. Вы можете использовать этот stunnel на вашем Linux-сервере (см. http://www.sysdesign.ca/guides/secure_pop3.html например) для обеспечения POP3.

Это не только защитит ваш доступ к электронной почте от украденных паролей, но и решит вашу проблему, так как соединение будет установлено локально. Я рекомендую сделать то же самое и для SMTP, но вам придется оставить порт 25 доступным для входящей почты.

Как отмечали другие, вам необходимо, чтобы служба POP3 слушала любой интерфейс, а не только бывший внешний. Я не могу помочь с этим, но: Используйте

netstat -an | find ":110"

чтобы убедиться, что вы видите что-то вроде

TCP    0.0.0.0:110           0.0.0.0:0              LISTENING

и нет

TCP    222.222.222.222:110           0.0.0.0:0              LISTENING

Последнее означает, что только попытки подключения к 222-IP достигают службы POP3. В зависимости от конфигурации брандмауэра ваши попытки подключения будут прекращаться (порт находится в «скрытом режиме» или «действовать как мертвый при приближении», отбрасывается без уведомления) или немедленно отключаются (порт ICMP недоступен или отправлен TCP RST-пакет).

Вы также можете проверить, что попытка подключения вообще доходит до машины службы POP3, используя анализатор пакетов, например Wireshark на сервере Windows.

Вряд ли заслуживает ответа, но может помочь вам лучше разобраться в проблеме: https://www.testexchangeconnectivity.com/ Используя последние 2 теста на этой странице и, возможно, некоторые другие, вы сможете получить ссылки на базу знаний Microsoft для решения проблемы.

Удачи

Хорошо, конфигурация iptables либо неправильная, либо неполная. Для такой конфигурации вы должны использовать модуль nat и таблицу PREROUTING.

Проверить, есть ли iptables -nL -t nat показывает вам что-то другое.

То, что вы пытаетесь сделать, это DNAT (преобразование сетевых адресов назначения). Правильный вызов для него:

iptables -t nat -p tcp -A PREROUTING -d 222.222.222.222/32 --dport 110 -j DNAT --to-destination 192.168.1.1

Удачи,
Жуан Мигель Невеш