iptables nat 仅限端口 25?

iptables nat 仅限端口 25?

我正在尝试配置防火墙。它有两个网络接口,eth0 (lan) 和 eth1 (wan)。

allow-hotplug eth1
auto eth1
iface eth1 inet static
address 192.168.2.2
gateway 192.168.2.1
netmask 255.255.255.0

allow-hotplug eth0
auto eth0
iface eth0 inet static
address 192.168.16.6
netmask 255.255.255.0
network 192.168.16.0
broadcast 192.168.0.255

eth1 后面是一个路由器,它为我提供了一个动态 IP。

在同一台机器上,有一个 Web 代理。实际上,局域网上的计算机只能使用代理访问 Web。现在,我需要局域网中的机器通过互联网访问 SMTP 和 POP3 服务器。所以我需要 NAT,但只针对端口 25 和 110。我不想对其他端口进行 NAT。

你能帮助我一步一步地配置 iptables 吗 (我对 iptables 真的很陌生)?

问候

答案1

下面的代码可以完成这项工作。Iptables 很容易使用 - 您只需明确告诉它如何处理来自或流向特定端口上特定位置的流量。虽然您只请求了端口 25 和 110,但我也包含了安全 SMTP 和安全 POP3 的选项。

下面我建议的做法是考虑您已设置的任何防火墙规则,并将您请求的规则放在处理顺序的较高位置。Iptables 按照匹配的顺序处理规则,因此,如果您的防火墙中已有其他可能阻止 SMTP 或 POP3 的规则,我使用了插入命令并指定应将规则放在列表顶部。如果您没有其他防火墙规则,则可以将“-I”替换为“-A”,并删除“FORWARD”和“POSTROUTING”表后的行号。

我建议尽可能地实现连接跟踪,下面的第一个 iptables 规则会启用该功能。如果您运行的是较旧的内核,那么您可能会遇到这些命令的问题,但如果它们对您有用,那就太好了。如果它们不起作用,则删除第一行,并删除所有其他行的“-m tcp”部分。

#Enable IP Forwarding
echo 1 > /proc/sys/net/ipv4/ip_forward

#Turn on connection tracking
iptables -I FORWARD 1 -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT

#Allow SMTP traffic out to the internet. This includes regular and authenticated SMTP
iptables -I FORWARD 2 -i eth1 -p tcp -m tcp --dport 25 -j ACCEPT
iptables -I FORWARD 2 -i eth1 -p tcp -m tcp --dport 465 -j ACCEPT
iptables -I FORWARD 3 -i eth1 -p tcp -m tcp --dport 587 -j ACCEPT

#Allow POP3 traffic out to the internet. This includes regular and SSL secured POP3
iptables -I FORWARD 4 -i eth1 -p tcp -m tcp --dport 110 -j ACCEPT
iptables -I FORWARD 5 -i eth1 -p tcp -m tcp --dport 995 -j ACCEPT

#NAT the traffic leaving your router for the allowed forwarded ports above
iptables -t nat -I POSTROUTING 1 -o eth0 -p tcp --dport 25 -j MASQUERADE
iptables -t nat -I POSTROUTING 2 -o eth0 -p tcp --dport 465 -j MASQUERADE
iptables -t nat -I POSTROUTING 3 -o eth0 -p tcp --dport 587 -j MASQUERADE
iptables -t nat -I POSTROUTING 4 -o eth0 -p tcp --dport 110 -j MASQUERADE
iptables -t nat -I POSTROUTING 5 -o eth0 -p tcp --dport 995 -j MASQUERADE

#Optionally, block any other forwarded traffic
iptables -I FORWARD 6 -i eth1 -j REJECT

答案2

轻而易举的柠檬挤压:

iptables -t nat -A POSTROUTING -p TCP --dport 25 -j MASQUERADE

iptables -t nat -A POSTROUTING -p TCP --dport 110 -j MASQUERADE

:)

答案3

首先要说的是:

allow-hotplug eth0
auto eth0
iface eth0 inet static
address 192.168.16.6
netmask 255.255.255.0
network 192.168.16.0
broadcast 192.168.0.255

是错误的(或打字错误;))。broadcast应该是192.168.16.255

假设每台计算机都将此 Linux 机器 ( 192.168.16.6) 作为其默认网关,则只需配置 IP 转发即可:

 # Enable ip forward:
 echo 1 > /proc/sys/net/ipv4/ip_forward
 # The same cam be achieved by:
 #  sysctl -w net.ipv4.ip_forward=1

 # Forwarding traffic between interfaces:
 iptables -A FORWARD -i eth0 -o eth1 --src 192.168.16.0/24 -p tcp --dport 25 -j ACCEPT
 iptables -A FORWARD -i eth0 -o eth1 --src 192.168.16.0/24 -p tcp --dport 110 -j ACCEPT
 # This rule prevents other traffic to be dropped
 iptables -A FORWARD -i eth0 -o eth1 --src 192.168.16.0/24 -j DROP

 # Masquerade traffic to the outside world:
 # If the public ip is a dynamic one use MASQUERADE
 iptables -t nat -A POSTROUTING -o eth1 --src 192.168.16.0/24 -j MASQUERADE

 # If the public ip is a static one, use SNAT
 iptables -t nat -A POSTROUTING -o eth1 --src 192.168.16.0/24 -j SNAT --to-source <pub_ip>

当公共连接建立时,如果它创建了 ppp 链接,那么您必须替换eth1为,比如说,ppp0

意识到:这绝不是一个强大的防火墙,它只是一组可以执行您想要的操作的最低限度的规则。

相关内容