將 Microsoft Exchange 伺服器移至專用網路
在其中一個辦公室,我們有一個 50 台電腦的網路,其中只有一台伺服器機器:
- 視窗 2003 伺服器
- 微軟 ISA 伺服器
- 微軟交換 2003
該伺服器用作網關(代理伺服器)、郵件伺服器、文件伺服器、防火牆和域控制器。它有兩個網路介面,一個用於 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 機器,所以我需要那台機器上的郵件伺服器可以從 Internet 訪問。我設置了 iptables 規則,將我們外部 IP 的第 25 和第 110 埠上的所有傳入連接重定向到 192.168.1.1:25 和 192.168.1.1:110,當我嘗試遠端登錄我們的 SMTP 服務時
telnet 222.222.222.222 25
我收到了來自我們 Windows 伺服器 (192.168.1.1) SMTP 服務的問候,這很好。但是當我遠端登錄 POP3 服務時
telnet 222.222.222.222 110
如果我按下任何按鈕,我只會看到空白的黑屏,並且連接似乎消失了。我檢查了 ISA 規則——第 110 和第 25 埠的一切似乎都相同。當我從我們的新網關機器上遠端登錄 Windows 伺服器的第 110 個埠時,如下所示:
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 虛擬伺服器屬性”的“訪問”選項卡下的連接控制屬性是否允許“除以下列表之外的所有”。
我不建議您讓未加密的 POP3 可訪問。你可以在你的 linux 機器上使用這個 stunnel(例如,參見http://www.sysdesign.ca/guides/secure_pop3.html)來提供 POP3。
這不僅可以保護您的電子郵件訪問免受密碼被盜的影響,還可以解決您的問題,因為連接將在本地進行。我建議對 SMTP 也這樣做,但您必須讓埠 25 可用於接收郵件。