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 / 问题 / 1090764
Accepted
Little Code
Little Code
Asked: 2022-01-22 11:32:21 +0800 CST2022-01-22 11:32:21 +0800 CST 2022-01-22 11:32:21 +0800 CST

nftables (nft) 链优先级问题

  • 772

nft让我头疼不已,无论我如何调整政策,我仍然无法让它发挥作用。

我想到的概念:

  • 一个存在通用规则的“基础”链(例如允许ssh等)
  • 一个或多个特定于守护程序特定规则所在的应用程序(例如 http 服务器链)

我尝试了许多不同的规则排列,但我永远无法同时获得“基础”+ 守护程序流量,我总是最终阻止其中一个!;-(

这是我当前的(简化的)配置(目前构成它允许ssh但不允许http)

/etc/nftables.conf:

#!/usr/sbin/nft -f                                                                                                                                                                                                                                              
flush ruleset                                                                                                                       
table inet filter {   
     counter input_ssh {}     
        set my_admin_ipv4 {                                                                                                        
                type ipv4_addr                                                                                                      
                flags interval                                                                                                      
                counter                                                                                                             
                elements = {                                                                                                        
                        10.0.0.0/8,                                                                                                 
                        172.16.0.0/12,                                                                                              
                        192.168.0.0/16                                                                                                                                                                                      
                }                                                                                                                   
        }         
       chain input {
                type filter hook input priority filter;
                iifname lo accept comment "Allow loopback traffic";
                ct state established,related accept comment "Allow established/related connections";
                ct state invalid drop comment "Deny invalid connections";

                # SSH
                tcp dport ssh ip saddr @my_admin_ipv4 counter name input_ssh accept comment "Allow IPv4 SSH from Admin";
    policy drop;
        }
        chain forward {
                type filter hook forward priority 0;
                policy drop;
        }
        chain output {
                type filter hook output priority 0;
        }
 include "/etc/nft/*.conf"
}

/etc/nft/http.conf:

counter input_http {} 
   chain http {
    type filter hook input priority filter - 1;
      # HTTP #
      tcp dport {80,443} counter name input_nginx accept comment "Allow HTTP";
    policy accept; 
    }
debian nftables
  • 1 1 个回答
  • 455 Views

1 个回答

  • Voted
  1. Best Answer
    A.B
    2022-01-22T15:01:53+08:002022-01-22T15:01:53+08:00

    您可以选择在同一钩子的后续链中将数据包标记为安全行为。

    • 每个接受规则都应该标记数据包

      执行显式接受的规则应在接受之前标记数据包。任何发生:

      ... accept
      

      应替换为:

      ... meta mark set 0xf00 accept
      

      如果标记没有其他角色,则该值不重要,只要它不为 0。

    • 每个链都应该接受一个标记的数据包,因为这是安全的行为

      通过在链的早期使用此规则:

      meta mark != 0 accept
      

    这是一般的想法。如果更有意义,仍然可以进行调整和例外。

    这是遵循这种方法的重新审视的规则集。该标记在ct ... invalid drop规则之后被接受,这是一条不应被绕过的重要规则(实际上本可以在较早的链中一劳永逸地完成,因为它是一个丢弃规则)。如果在下面,输入是过滤器/输入钩子中的最后一个链,它实际上并不需要标记已接受的数据包,但这样做并没有什么坏处。

    /etc/nftables.conf::

    flush ruleset 
    table inet filter {   
        counter input_ssh {}     
        set my_admin_ipv4 {                                                                                                        
            type ipv4_addr                                                                                                      
            flags interval                                                                                                      
            counter                                                                                                             
            elements = {                                                                                                        
                10.0.0.0/8,                                                                                                 
                172.16.0.0/12,                                                                                              
                192.168.0.0/16                                                                                                                                                                                      
            }                                                                                                                   
        }         
        chain input {
            type filter hook input priority filter; policy drop;
            iifname lo meta mark set 0x1 accept comment "Allow loopback traffic";
            ct state established,related meta mark set 0x1 accept comment "Allow established/related connections";
            ct state invalid drop comment "Deny invalid connections";
            meta mark != 0 accept
    
            # SSH
            tcp dport ssh ip saddr @my_admin_ipv4 counter name input_ssh meta mark set 0x1 accept comment "Allow IPv4 SSH from Admin";
        }
        chain forward {
            type filter hook forward priority 0; policy drop;                      
        }
        chain output {
            type filter hook output priority 0; policy accept;
        }
        include "/etc/nft/*.conf"
    }
    

    /etc/nft/http.conf(替换counter_nginx为counter_http)。meta mark != 0 accept这里可能不需要该规则,因为之前可能没有任何其他链,但拥有它也没有什么坏处。

        counter input_http {} 
        chain http {
            type filter hook input priority filter - 1; policy accept;
             meta mark != 0 accept
             # HTTP #
             tcp dport {80,443} counter name input_http meta mark set 0x2 accept comment "Allow HTTP";
        }
    

    此方法使用标记,因此将更难与已将标记用于其他目的的其他防火墙规则集成。通过按位运算保留一些标记位仍然是可能的。

    • 1

相关问题

  • 关闭 FTP

  • 如何在同一台电脑上从 putty 连接 debian vmware

  • debian- 文件到包的映射

  • Debian Ubuntu 网络管理器错误 [关闭]

  • 为本地网络中的名称解析添加自定义 dns 条目

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