我正在尝试配置防火墙。它有两个网络接口,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
。
意识到:这绝不是一个强大的防火墙,它只是一组可以执行您想要的操作的最低限度的规则。