AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题 / 474005
Accepted
Richard T
Richard T
Asked: 2013-01-31 14:36:39 +0800 CST2013-01-31 14:36:39 +0800 CST 2013-01-31 14:36:39 +0800 CST

混淆 Post FedoraCore Upgrade: NAT / port forwarding trouble, POSTROUTING MASQUERADE 对转发端口有意想不到的影响

  • 772

在网关/防火墙系统的硬件故障之后,在新硬件上安装了较新版本的 Fedora Core (17),并使用了 /etc/sysconfig 中的旧“iptables”和 system-config-firewall 文件(仅此而已)。旧版本的 FC 未知,但可能是 14 或 15,旧磁盘不再可读。(我把以前的 iptables 文件内容放在下面。)

该系统的工作专门用于:

  1. 接受来自任何网络源的端口 22 (ssh) 以进行本地传送 (sshd)。
  2. 将端口 222 转发到内部系统上的端口 22 (ssh),保留原始 IP 地址。
  3. 将端口 25(电子邮件)转发到内部系统,保留原始 IP 地址。
  4. 将所有(非端口 22)入站流量从内部网络转发到外部网络,沿途应用 NAT/Masquerading,并允许相关的外部生成的返回数据包酌情通过。

上面列出的步骤是这个盒子的唯一工作,它以前工作正常。

我从哪里开始:

当恢复服务时,到端口 22 (sshd) 的所有连接都工作正常,到所有其他端口的外部连接转发或适当丢弃,但内部系统看到的 IP 地址是网关的 IP 地址,而不是保留其源 IP地址。

当我将系统连接到网络时,关于电子邮件的所有问题都发生了变化;网关后面的邮件服务器系统正在拒绝基于 IP 地址/系统名称不匹配的邮件,取消检查会使垃圾邮件过滤系统变得疯狂。

MASQUERADING 是错误的界面但是......

眼尖的 serverfault 参与者 DavidSchwartz 注意到内部接口的伪装已打开(通过 -A POSTROUTING -o eth0 -j MASQUERADE),解释了看到网关 IP 地址的内部系统,但是当更改以反映外部接口时(例如: - POSTROUTING -o eth1 -j MASQUERADE),然后所有转发停止!是的,我的意思是端口转发,从外部到内部(内部系统上的端口 222 到端口 22)。

我真的不明白。

为清楚起见,似乎为 INTERNAL 接口打开伪装,虽然不是预期的,但确实具有允许端口转发实际发生从外部到内部的积极属性。切换为伪装(正确的)外部接口以某种方式禁用端口转发,因为没有其他更改。

SNAT 与伪装

由于有两个面向外部的“服务器系统”,它们也具有已配置为备用出站路径的内部接口,我查看了它们,发现它们具有非常不同的伪装技术;没有像上面引用的两段那样的行,而是这样:

-A POSTROUTING -s 192.168.0.0/24 -o eth0 -j SNAT --to-source <external.v4.ip.addr>  

太好了-我明白了,有道理,我试试看!我注释掉了 MASQUERADE 行并包含(在同一位置)一条 SNAT 行,如此处所述,YAY!它做了两件事:

  1. 我根据需要获得出站网络地址转换,并且;
  2. 它现在将入站连接请求从外部端口转发到端口 222 到内部系统上的端口 22,并根据需要保留原始 IP 地址。

遗留问题

不起作用的是其他相同的转发端口 25(在内部系统上保留端口 25)。

目前这是我必须解决的问题!(而且越快越好!)为什么一个端口转发而不是另一个?它不是“tcp”类型的端口吗?如果不是,应该用什么来代替它?(没想到是UDP……)

不太重要; 很高兴知道为什么旧配置可以工作,但现在不行了!Fedora Core 的差异?更新 IP 表?我依赖错误吗?-微笑-

这是 iptables 中的两条端口转发线:

-A PREROUTING -i eth0 -p tcp --dport 25 -j DNAT --to-destination 192.168.0.64:25
-A PREROUTING -i eth0 -p tcp --dport 222 -j DNAT --to-destination 192.168.0.64:22

我试过在上面有和没有尾随的“:25”。同样,外部端口 222 转发到内部系统端口 22 就好了,端口 25 根本不转发。

请注意,从可以直接看到邮件服务器系统(不通过网关/防火墙)的系统对端口 25 的 telnet 访问完美无缺。此外,我尝试将端口 24 转发到端口 25 作为测试并得到相同的结果(无响应)。

这是 iptables 文件:

# eth0 is internal
# eth1 is external

*nat
:PREROUTING ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
:POSTROUTING ACCEPT [0:0]

# NO packets get through without this next line:
-A POSTROUTING -o eth0 -j MASQUERADE
# the above line was commented out and replaced with:
-A POSTROUTING -s 192.168.0.0/24 -o eth0 -j SNAT --to-source <external.v4.ip.addr>

-A PREROUTING -i eth1 -p tcp --dport 25 -j DNAT --to-destination 192.168.0.64:25

-A PREROUTING -i eth1 -p tcp --dport 222 -j DNAT --to-destination 192.168.0.64:2
2

COMMIT
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -i eth0 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT

-A INPUT -m state --state NEW -m tcp -p tcp --dport 25 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 222 -j ACCEPT

-A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
-A FORWARD -p icmp -j ACCEPT
-A FORWARD -i lo -j ACCEPT
-A FORWARD -i eth0 -j ACCEPT
-A FORWARD -o eth0 -j ACCEPT
-A FORWARD -i eth1 -m state --state NEW -m tcp -p tcp -d 192.168.0.64 --dport 25
 -j ACCEPT
-A FORWARD -i eth1 -m state --state NEW -m tcp -p tcp -d 192.168.0.64 --dport 22
 -j ACCEPT

-A INPUT -j REJECT --reject-with icmp-host-prohibited
-A FORWARD -j REJECT --reject-with icmp-host-prohibited
COMMIT
iptables
  • 2 2 个回答
  • 1006 Views

2 个回答

  • Voted
  1. David Schwartz
    2013-01-31T17:45:08+08:002013-01-31T17:45:08+08:00
    -A POSTROUTING -o eth0 -j MASQUERADE
    

    您要求它伪装流出内部接口的流量,这就是它正在做的事情。伪装意味着冒充连接的来源。删除此行,如果出现问题,请添加正确的规则。

    • 0
  2. Best Answer
    Richard T
    2013-09-19T12:03:26+08:002013-09-19T12:03:26+08:00

    我终于解决了这个问题。

    好吧,实际上我放弃了它并在处理另一个问题时找到了答案。

    答案是:内部接收系统必须使用相同的返回路由 - 相同的网关/防火墙系统 - 端口转发才能正常工作!至少对于 SMTP 是这样。对于某些服务(如 ssh)来说似乎并非如此,但行为证实,如果默认路由不是转发连接的系统,则 SMTP(在我的例子中是 Postfix)将无法正常工作。

    这对我们这些想要冗余的人有影响——我希望邮件服务器能够从多个网关/防火墙接收转发端口。我还没有弄清楚如何为这个多网关/防火墙策略创建特殊路由,但我知道 iptables 可以做到。

    祝你好运!

    • 0

相关问题

  • OpenVPN 的 Linux IP 转发 - 正确的防火墙设置?

  • iptables 单个规则中的多个源 IP

  • 存储 iptables 规则的规范方法是什么

  • 使用 iptables 和 dhcpd 进行端口转发

  • 根据 Apache 日志数据自动修改 iptables 以阻止行为不良的客户端

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    新安装后 postgres 的默认超级用户用户名/密码是什么?

    • 5 个回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve