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 / 问题 / 486313
Accepted
luison
luison
Asked: 2013-03-10 11:45:08 +0800 CST2013-03-10 11:45:08 +0800 CST 2013-03-10 11:45:08 +0800 CST

IPTABLES nat 使用 CSF 维护源 IP 地址

  • 772

一段时间以来,我们一直在虚拟化 (OpenVZ) 环境中成功使用 CSF,结合 venet 和桥接接口,因此我们可以使用公共 IP + 本地寻址虚拟系统。

Kernel IP routing table
Destination       Gateway         Genmask         Flags Metric Ref    Use Iface
10.0.0.100        0.0.0.0         255.255.255.255 UH    0      0        0 venet0
xxx.xxx.xxx.24    0.0.0.0         255.255.255.255 UH    0      0        0 venet0
xxx.xxx.xxx.0     0.0.0.0         255.255.255.0   U     0      0        0 vmbr0
10.0.0.0          0.0.0.0         255.255.255.0   U     0      0        0 vmbr10
0.0.0.0           xxx.xxx.xxx.254 0.0.0.0         UG    0      0        0 vmbr0

我们通过 iptables 规则路由“本地”ips 的流量:

iptables -t nat -A POSTROUTING -s "10.0.0.0/24" -o vmbr0 -j MASQUERADE

/proc/sys/net/ipv4/ip_forward 值显然设置为 1

主机和 venet 联网机器运行它们自己的 CSF 安装,该安装为此设置创建所有防火墙规则,其中包括创建“重定向”到内部 IP 的可能性。

有了这个,我们可以打开主机 IP 上的特定端口,这些端口由本地网络上的本地内部虚拟机提供服务。CSF 创建的一长串防火墙规则包括:

Chain PREROUTING (policy ACCEPT 53M packets, 15G bytes)
num   pkts bytes target     prot opt in     out     source               destination         
1        0     0 DNAT       tcp  --  !lo    *       0.0.0.0/0            XXX.XXX.XXX.184      tcp dpt:5100 to:10.0.0.100:5000 

Chain POSTROUTING (policy ACCEPT 9700K packets, 615M bytes)
num   pkts bytes target     prot opt in     out     source               destination         

3        0     0 SNAT       tcp  --  *      !lo     0.0.0.0/0            10.0.0.100          to:XXX.XXX.XXX.184 
8       10   600 MASQUERADE  all  --  *      vmbr0   10.0.0.0/24          0.0.0.0/0           

CSF 防火墙上的重定向功能有效,但报告的 IP 是主机 IP,而不是原始 IP,因此我们不能用目标虚拟系统上的另一个 CSF 实例(或简单的防火墙规则)来限制它。我们知道,在 PREROUTING 上,它们也不能限制在主机 CSF 上。

CSF 自述文件实际上指出“所有到另一个 IP 地址的重定向将始终出现在带有该服务器源的目标服务器上,而不是原始 IP 地址。” 所以这是一个标准功能。

CSF 支持一个 postrules.sh 文件,我们可以在其中手动包含 NAT 规则,但我们不确定是否可以使用 IPTABLES SNAT 和/或 DNAT 将“真实”源 IP 传递到 NAT IP 的目的地。

iptables
  • 2 2 个回答
  • 3411 Views

2 个回答

  • Voted
  1. Daniel t.
    2013-03-10T13:36:16+08:002013-03-10T13:36:16+08:00

    您提到的在目的地看到“真实”源 IP 的唯一方法是避免 Natting 或 Masquerading 它。请记住,SNAT 和 DNAT 分别代表源和目标网络转换,因此一旦数据包通过 Natting 规则,源/目标地址就会永久“更改”。您无法在目的地取回它们。

    • 2
  2. Best Answer
    simlev
    2020-08-07T13:35:22+08:002020-08-07T13:35:22+08:00

    问题:

    我们不确定是否可以使用 IPTABLES SNAT 和/或 DNAT 将“真实”源 IP 传递到目的地。

    回答:

    是的,这是可能的,如果您使用的是 CSF,这里是如何做到的。不要依赖 CSF 的重定向功能,即有类似于以下内容的行/etc/csf/csf.redirect:

    XXX.XXX.XXX.184|2222|10.0.0.100|22|tcp
    

    相反,将以下iptables命令放入/etc/csf/csfpost.sh:

    /sbin/iptables -I FORWARD -i vmbr0 -o vmbr10 -d 10.0.0.0/24 -j ACCEPT
    /sbin/iptables -I FORWARD -i vmbr0 -o vmbr10 -d 10.0.0.0/24 -j LOCALINPUT
    /sbin/iptables -t nat -A PREROUTING -i vmbr0 -p tcp -m tcp --dport 2222 -j DNAT --to-destination 10.0.0.100:22
    

    测试:

    $ ssh xxx.xxx.xxx.184 -p 2222 'netstat -tn'
    Active Internet connections (w/o servers)
    Proto Recv-Q Send-Q Local Address           Foreign Address         State
    tcp        0     72 10.0.0.100:22           xxx.xxx.xxx.199:55812   ESTABLISHED
    

    解释:

    /sbin/iptables --table nat --append PREROUTING --in-interface vmbr0 --protocol tcp --match tcp --dport 2222 --jump DNAT --to-destination 10.0.0.100:22
    

    此行将来自 port 上外部接口的 TCP 流量重定向到 port上2222的内部地址。10.0.0.10022

    • /sbin/iptables需要完整的iptables可执行文件。
    • --table nat在 nat(网络地址转换)表上工作。
    • --append PREROUTINGPREROUTING在链中所有现有规则之后附加此规则。
    • --in-interface vmbr0捕获vmbr0接口上的所有流量。
    • --protocol tcp只捕获 TCP 流量。
    • --match tcp使用 TCP 模块。
    • --dport 2222只捕获指向端口的流量2222。
    • --jump DNAT执行目标网络地址转换。
    • --to-destination 10.0.0.100:22将目标地址更改为10.0.0.100,将目标端口更改为22。
    /sbin/iptables --insert FORWARD --in-interface vmbr0 --out-interface vmbr10 --destination 10.0.0.0/24 --jump LOCALINPUT
    

    这一行允许不跳过所有 CSF 的过滤只是因为我们正在重定向。

    • /sbin/iptables需要完整的iptables可执行文件。
    • --insert FORWARDFORWARD在链中现有规则之前插入此规则。这是重定向数据包的去向,而不是例如INPUT链。
    • --in-interface vmbr0匹配进入vmbr0接口的流量。
    • --out-interface vmbr10匹配从vmbr0接口流出的流量作为重定向的结果。
    • --destination 10.0.0.0/24仅匹配发往(重定向到)内部网络的流量。
    • --jump LOCALINPUT通过LOCALINPUT链。这是 CSF 执行其众所周知的所有良好过滤的地方,防止被禁止和列入黑名单的 IP 到达系统。有了这个规则,我们将 CSF 的过滤扩展到内部网络上的所有主机(而不是仅将流量发往运行 CSF 的主机)。
    /sbin/iptables --insert FORWARD --in-interface vmbr0 --out-interface vmbr10 --destination 10.0.0.0/24 --jump ACCEPT
    

    此行将所有剩余的转发流量传递给内部主机。

    • /sbin/iptables需要完整的iptables可执行文件。
    • --insert FORWARDFORWARD在链中现有规则之前插入此规则。在链中执行所有归档后,将评估此规则LOCALINPUT。
    • --in-interface vmbr0匹配进入vmbr0接口的流量。
    • --out-interface vmbr10匹配从vmbr0接口流出的流量作为重定向的结果。
    • --destination 10.0.0.0/24仅匹配发往(重定向到)内部网络的流量。
    • --jump ACCEPT在 CSF 执行了所有过滤(在LOCALINPUT链中)之后,我们希望对剩余的数据包进行ACCEPT编辑。
    • 1

相关问题

  • 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