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 / 问题 / 785691
Accepted
Nathan Basanese
Nathan Basanese
Asked: 2016-06-23 16:05:41 +0800 CST2016-06-23 16:05:41 +0800 CST 2016-06-23 16:05:41 +0800 CST

如何使用 IPTables 关闭某些端口上的所有 _existing_ TCP 连接?

  • 772

假设我有一个想要运行的快速网络分区测试,例如断开 ReDiS 集群的两半,并且我想使用 IPTables 暂时断开一组服务器与另一组的连接。

这与 Fedora 邮件列表中提出的问题非常相似:

https://www.redhat.com/archives/rhl-list/2006-January/msg03380.html

EXISTING,RELATED如果我在 的输出中没有看到iptables --list,我是否需要担心这个?

fedora 邮件列表上的以下答案似乎说是的,如果我EXISTING,RELATED在iptables --list.

https://www.redhat.com/archives/rhl-list/2006-January/msg03396.html

给反身标记者的注释,在那里:这个问题,更重要的是,它的答案,将讨论 IPTables 是否会在更新其规则时丢弃现有连接。

据我所知,本网站上有关此主题的其他问题并未解决现有连接和尝试连接之间的差异:

如何关闭除通过 IPTABLES 列出的所有网络的某些 TCP/UDP 端口(传入)

我在以下 URL 链接的页面上通过 Google 搜索找到了我的大部分研究结果:

https://duckduckgo.com/?q=iptables+close+existing+connections

iptables tcp redis linux-networking
  • 1 1 个回答
  • 8755 Views

1 个回答

  • Voted
  1. Best Answer
    HBruijn
    2016-06-23T21:49:04+08:002016-06-23T21:49:04+08:00

    任何 iptables 规则都不会关闭现有的 TCP 连接,因为这涉及主动发送带有 FIN 位的消息。这是由应用程序完成的,而不是由数据包过滤器完成的。

    另一方面,iptables 可以随时阻止您的应用程序通过任何现有连接接收或传输新数据包,它还可以拒绝建立任何新连接。

    这与您是否有状态防火墙无关。

    这完全取决于您插入新防火墙规则的确切位置。因为,请记住,您的防火墙规则会按照它们列出的顺序进行检查,并且处理将在第一个决定性匹配时停止。

    即一个简单的状态防火墙:

    [root@host ~]# iptables-save
    *filter
    :INPUT ACCEPT [0:0]
    :FORWARD ACCEPT [0:0]
    :OUTPUT ACCEPT [441:59938]
                         #1  < INSERT NEW RULE HERE
    -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
    -A INPUT -i lo -j ACCEPT
                         #2  < INSERT NEW RULE HERE
    -A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT
    -A INPUT -p tcp -m state --state NEW -m tcp --dport 80 -j ACCEPT
    -A INPUT -p tcp -m state --state NEW -m tcp --dport 443 -j ACCEPT
                         #3  < INSERT NEW RULE HERE
    -A INPUT -j REJECT --reject-with icmp-host-prohibited
                         #4  < iptables -A WILL APPEND NEW RULE HERE
    -A FORWARD -j REJECT --reject-with icmp-host-prohibited
    COMMIT
    

    现在,如果您想要一个新规则:

    INPUT -s 10.0.0.89/32 -j REJECT --reject-with icmp-port-unreachable
    

    并将其插入位置#1,从该主机收到的所有数据包都将被阻止。

    在位置 #2 插入该规则,现有连接上的数据包仍将被允许,但无法建立新连接。

    在位置 #3 插入特定的新规则是没有用的,因为效果与根本没有针对 10.0.0.89 的特定策略相同,但这是放置规则以授予对 10.0.0.89 的访问权限的正确位置港口。

    并且使用iptables -A INPUT 将新规则附加到 INPUT 链是没有用的,因为这会将规则放置在所有流量都已被规则拒绝的位置 #4 INPUT -j REJECT --reject-with icmp-host-prohibited。

    简而言之:使用iptables -I(而不是ipatbles -A)中的规则编号选项将新的(临时)规则放置在具有预期效果的位置:

    sudo iptables -I <rule number> INPUT -s 10.0.0.89/32 -j REJECT --reject-with icmp-port-unreachable
    

    如果使用相同的状态防火墙配置,您想停止允许纯 HTTP,您可以删除允许流量到端口 80 的规则

    sudo iptables -D INPUT -p tcp -m state --state NEW -m tcp --dport 80 -j ACCEPT
    

    但是这样做不会清空 iptables 使用的会话状态表,并且规则仍然允许到端口 80 的现有连接-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT

    您可以通过简单地停止/重新启动网络服务器来解决这个问题,这将通过发送 FIN 消息正确关闭这些打开的会话并将它们从会话状态表中清除。

    或者,您可以将规则阻止数据包添加到位置 #1 的端口 80。

    • 7

相关问题

  • 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