当我尝试在 iptables 中为仅限 Outlook 用户打开端口 110 和 25 时,我无法执行此操作,只能通过以下方式转发:
-I FORWARD -i eth0 -s 192.168.1.0/24 -j ACCEPT
-I FORWARD -i eth1 -d 192.168.1.0/24 -j ACCEPT
但这样做会允许我的局域网中的其余用户绕过我的 squid 代理。这些转发命令仅用于 pen 端口 110 和 25 的正确语法是什么?
编辑:
这是我当前直接配置的 iptables 文件。它现在可以工作,但我确信它远非完美。目前,没有明确代理服务器的用户无法连接到互联网。Outlook 端口正在运行。
# Generated by iptables-save v1.3.5 on Fri Mar 9 13:59:24 2012
*nat
:PREROUTING ACCEPT [25448:1902369]
:POSTROUTING ACCEPT [29:1625]
:OUTPUT ACCEPT [786:56571]
-A POSTROUTING -o eth1 -j MASQUERADE
COMMIT
# Completed on Fri Mar 9 13:59:24 2012
# Generated by iptables-save v1.3.5 on Fri Mar 9 13:59:24 2012
*filter
:INPUT DROP [0:0]
:FORWARD DROP [1:68]
:OUTPUT DROP [0:0]
:LOGDROP - [0:0]
-A INPUT -i lo -j ACCEPT
-A INPUT -m state --state NEW,RELATED,ESTABLISHED -j ACCEPT
-A INPUT -i eth0 -p tcp -m tcp --dport 22 -m state --state NEW -j ACCEPT
-A INPUT -i eth0 -p tcp -m tcp --dport 3128 -m state --state NEW -j ACCEPT
-A INPUT -i eth1 -p tcp -m tcp --dport 110 -m state --state NEW -j ACCEPT
-A INPUT -i eth1 -p tcp -m tcp --dport 25 -m state --state NEW -j ACCEPT
-A INPUT -i eth0 -p icmp -m icmp --icmp-type 8 -j ACCEPT
-A INPUT -j LOGDROP
-A OUTPUT -o lo -j ACCEPT
-A OUTPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A OUTPUT -o eth1 -p udp -m udp --dport 53 -m state --state NEW -j ACCEPT
-A OUTPUT -o eth1 -p tcp -m tcp --dport 53 -m state --state NEW -j ACCEPT
-A OUTPUT -o eth0 -p udp -m udp --dport 123 -m state --state NEW -j ACCEPT
-A OUTPUT -o eth0 -p tcp -m tcp --dport 22 -m state --state NEW -j ACCEPT
-A OUTPUT -o eth1 -p tcp -m tcp --dport 21 -m state --state NEW -j ACCEPT
-A OUTPUT -o eth1 -p tcp -m tcp --dport 80 -m state --state NEW -j ACCEPT
-A OUTPUT -o eth1 -p tcp -m tcp --dport 443 -m state --state NEW -j ACCEPT
-A OUTPUT -o eth1 -p tcp -m tcp --dport 5190 -m state --state NEW -j ACCEPT
-A OUTPUT -o eth1 -p tcp -m tcp --dport 110 -m state --state NEW -j ACCEPT
-A OUTPUT -o eth1 -p tcp -m tcp --dport 25 -m state --state NEW -j ACCEPT
-I FORWARD -m state --state NEW,RELATED,ESTABLISHED -j ACCEPT
-I FORWARD -i eth0 -s 192.168.1.0/24 -p tcp --dport 110 -j ACCEPT
-I FORWARD -i eth0 -s 192.168.1.0/24 -p tcp --dport 25 -j ACCEPT
-A LOGDROP -j LOG
-A LOGDROP -j DROP
COMMIT
# Completed on Fri Mar 9 13:59:24 2012
答案1
好的,我们从头重新开始。
将 FORWARD 链接设置为 ACCEPT (以防万一)
iptables -P FORWARD ACCEPT
清除 FORWARD 链
iptables -F FORWARD
允许您的用户检查 smtp 和 pop
iptables -A FORWARD -s 192.168.1.0/24 -p tcp --dport 25 -j ACCEPT
iptables -A FORWARD -s 192.168.1.0/24 -p tcp --dport 110 -j ACCEPT
不要添加 -d 192.168.1.0/24 -j ACCEPT,因为这是不安全。
让我们回答这些问题
iptables -A FORWARD -m state --state RELATED, ESTABLISHED -j ACCEPT
将 FORWARD 链策略重新设置为 DROP
iptables -P FORWARD DROP
现在,第一部分应该可以工作了。如果不行,则 ip_forward 未启用。
echo 1 > /proc/sys/net/ipv4/ip_forward
关于重启问题。Iptables 命令不是持久的,因此您必须使用脚本,或者使用 Linux 发行版内置的 iptables 管理脚本。
最简单但不太优雅的方法是当您对配置和工作感到满意时运行此命令。
iptables-save >/etc/myfirewall_config
并连接并启动脚本,在启动时重新加载它
iptables-restore </etc/myfirewall_config
完毕。
如果完成所有这些操作后您仍然遇到问题,请发布您的 NAT 表(iptables -t nat -vnL)
答案2
'-I FORWARD -i eth1 -d 192.168.1.0/24 -j ACCEPT' 启用/打开从(可能)您的出口 iface 到内部局域网的访问。
允许传出连接使用 - 'iptables -I FORWARD -s 192.168.11.0/24 -p tcp --dport 110 -j ACCEPT'。
请注意,这样启用传出连接是错误的,您会给病毒/蠕虫/木马提供通过这些端口连接到互联网的机会。通过指定确切的目标 IP 来限制它,或者强制用户使用启用了 AUTH 的内部 smtp 服务器进行传出连接。
如果他们需要远程 pop3,请通过 pop3 下载邮件到您的网络内部的服务器,并通知您的用户使用内部 pop3“镜像”副本。
还有一些 pop3 代理或一些邮件客户端可以通过代理运行 pop3/smtp...