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 / 问题 / 42549
In Process
pQd
pQd
Asked: 2009-07-19 09:40:27 +0800 CST2009-07-19 09:40:27 +0800 CST 2009-07-19 09:40:27 +0800 CST

您处理复杂 iptables 规则集的方法

  • 772

我很感兴趣你如何在充当防火墙的 Linux 路由器上编写复杂的数据包过滤规则集。一种具有默认丢弃策略。

我通常采用这种方法[只是一个人为的例子]:

iptables -F ; iptables -X; iptables -P FORWARD DROP
iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT

iptables -N FORWARD_machineA
iptables -A FORWARD_machineA -d $machineA -p tcp --dport 80 -j ACCEPT
iptables -A FORWARD_machineA -d $machineA -s $machineB -p tcp --dport 3306 -j ACCEPT
iptables -A FORWARD_machineA -d $machineA -j DROP
iptables -A FORWARD_machineA -s $machineA -d $machineC -p tcp --dport 2 -j ACCEPT
iptables -A FORWARD_machineA -s $machineA -j REJECT

iptables -N FORWARD_machineB
iptables -A FORWARD_machineB -d $machineB -s $machineA -p tcp --dport 3306 -j ACCEPT
iptables -A FORWARD_machineB -d $machineB -j DROP
iptables -A FORWARD_machineB -s $machineB -d $machineC -p tcp --dport 2 -j ACCEPT
iptables -A FORWARD_machineB -s $machineB -j REJECT

iptables -N FORWARD_machineC
iptables -A FORWARD_machineC -d $machineC -s $machineA -p tcp --dport 22 -j ACCEPT
iptables -A FORWARD_machineC -d $machineC -s $machineB -p tcp --dport 22 -j ACCEPT
iptables -A FORWARD_machineC -d $machineC -j DROP
iptables -A FORWARD_machineC -s $machineC -j REJECT

iptables -A FORWARD -s $machineA -j FORWARD_machineA
iptables -A FORWARD -d $machineA -j FORWARD_machineA

iptables -A FORWARD -s $machineB -j FORWARD_machineB
iptables -A FORWARD -d $machineB -j FORWARD_machineB

iptables -A FORWARD -s $machineC -j FORWARD_machineC
iptables -A FORWARD -d $machineC -j FORWARD_machineC

这工作正常,但远非完美:例如,如果我在需要通信的不同子网中添加两台服务器 - 需要在 machineA 和 machineB 的链中添加规则。

在这种情况下,我最感兴趣的是可管理性/可读性 - 所以不需要特殊的性能优化[例如最小化规则查找的平均数量]。

ps:类似的问题,但这不是我正在寻找的答案。

谢谢!

firewall iptables linux-networking
  • 2 2 个回答
  • 1495 Views

2 个回答

  • Voted
  1. Saurabh Barjatiya
    2009-07-19T09:55:18+08:002009-07-19T09:55:18+08:00

    你可以改变

    iptables -A FORWARD -s $machineA -j FORWARD_machineA
    iptables -A FORWARD -d $machineA -j FORWARD_machineA
    

    至

    iptables -A FORWARD -g FORWARD_machineA
    

    这样你就可以有这样的三个规则

    iptables -A FORWARD -g FORWARD_machineA
    iptables -A FORWARD -g FORWARD_machineB
    iptables -A FORWARD -g FORWARD_machineC
    

    在这三个规则之后,只需放一个

    iptables -A FORWARD -j REJECT
    

    这样,如果您只允许在链 FORWARD_machineA 或链 FORWARD_machineB 中进行一次通信以用于机器 A 和机器 B 之间的通信,它可能会起作用。

    至少它将六行 -j 链减少为三行 -g 链。它还消除了在每个链的末尾放置 -j REJECT 的需要。事实上,您必须从每个链的末尾删除 -j REJECT 才能使上述方法有效。

    这是可以根据您的示例进行概括的简单改进。其他改进可能需要更多关于您想要允许的内容和想要阻止的内容的详细信息。

    • 3
  2. Brad Gilbert
    2009-07-20T08:36:34+08:002009-07-20T08:36:34+08:00

    您可以改用pfSense。它有很多特点:

    • 防火墙

      • 按源和目标 IP、IP 协议、源和目标端口过滤 TCP 和 UDP 流量
      • 能够根据每个规则限制同时连接
      • pfSense 利用 p0f,一种先进的被动操作系统/网络指纹识别实用程序,允许您通过操作系统启动连接进行过滤。想允许 FreeBSD 和 Linux 机器上网,但阻止 Windows 机器?pfSense 可以通过被动检测正在使用的操作系统来做到这一点(在许多其他可能性中)。
      • 记录或不记录匹配每个规则的流量的选项。
      • 通过基于每个规则选择网关(用于负载平衡、故障转移、多 WAN 等),可以实现高度灵活的策略路由
      • 别名允许对 IP、网络和端口进行分组和命名。这有助于保持您的防火墙规则集干净且易于理解,尤其是在具有多个公共 IP 和众多服务器的环境中。
      • 具有透明第 2 层防火墙功能 - 可以桥接接口并过滤它们之间的流量,甚至允许使用无 IP 防火墙(尽管您可能需要 IP 用于管理目的)。
      • 数据包规范化 - pf scrub 文档中的描述 - “'Scrubbing' 是数据包的规范化,因此数据包的最终目的地的解释没有歧义。scrub 指令还重新组装分段的数据包,保护某些操作系统免受某些形式的攻击,并丢弃具有无效标志组合的 TCP 数据包。”
        • 默认情况下在 pfSense 中启用
        • 必要时可以禁用。此选项会导致某些 NFS 实现出现问题,但它是安全的,应在大多数安装中启用。
      • 禁用过滤器 - 如果您希望将 pfSense 变成纯路由器,您可以完全关闭防火墙过滤器。

    • 网络地址转换 (NAT)
    • 冗余
    • 负载平衡报告和监控
    • RRD 图

      pfSense 中的 RRD 图维护以下方面的历史信息。

      • CPU 利用率
      • 总吞吐量
      • 防火墙状态
      • 所有接口的单独吞吐量
      • 所有接口的每秒数据包速率
      • WAN 接口网关 ping 响应时间
      • 启用流量整形的系统上的流量整形队列
    • VPN
      • IPsec
      • PPTP
      • 开放式VPN
    • 动态 DNS

      通过:

      • 动态DNS
      • 国土安全部
      • 动态神经系统
      • 易DNS
      • 无IP
      • ODS.org
      • 区域编辑
    • 强制门户
    • DHCP 服务器和中继

    它有一个不错的、易于使用的基于 Web 的配置,只需查看屏幕截图。

    最重要的是,您可以使用商品硬件自己构建它,而且它是开源的。

    • 0

相关问题

  • 那里有什么像样的小型办公室级路由器[关闭]

  • SOHO - 限制来自问题用户的 bittorrent 流量

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

  • 设置安全网站的最佳实践 [关闭]

  • 如何在 Ubuntu 上设置简单的防火墙?

Sidebar

Stats

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

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    从 IP 地址解析主机名

    • 8 个回答
  • Marko Smith

    如何按大小对 du -h 输出进行排序

    • 30 个回答
  • Marko Smith

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

    • 9 个回答
  • Marko Smith

    Windows 中执行反向 DNS 查找的命令行实用程序是什么?

    • 14 个回答
  • Marko Smith

    如何检查 Windows 机器上的端口是否被阻塞?

    • 4 个回答
  • Marko Smith

    我应该打开哪个端口以允许远程桌面?

    • 9 个回答
  • Marko Smith

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

    • 3 个回答
  • Marko Smith

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

    • 15 个回答
  • Martin Hope
    MikeN 在 Nginx 中,如何在维护子域的同时将所有 http 请求重写为 https? 2009-09-22 06:04:43 +0800 CST
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    0x89 bash中的双方括号和单方括号有什么区别? 2009-08-10 13:11:51 +0800 CST
  • Martin Hope
    kch 如何更改我的私钥密码? 2009-08-06 21:37:57 +0800 CST
  • Martin Hope
    Kyle Brandt IPv4 子网如何工作? 2009-08-05 06:05:31 +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