深入理解nftables:强化你的网络安全

深入理解nftables:强化你的网络安全什么是 nftables nftables 是一个用于管理 Linux 内核网络堆栈的工具 它的强大之处在于其清晰而强大的配置语言 以及对多种网络协议的全面支持 与之前的 iptables 相比 nftables 提供了更灵活 可读性更强和性能更好的解决方案 安装 nftables 首先

大家好,我是讯享网,很高兴认识大家。

什么是nftables?

nftables是一个用于管理Linux内核网络堆栈的工具,它的强大之处在于其清晰而强大的配置语言,以及对多种网络协议的全面支持。与之前的iptables相比,nftables提供了更灵活、可读性更强和性能更好的解决方案。

安装nftables

首先,确保你的Linux发行版支持nftables,并使用包管理器安装它。安装后,你可以使用以下命令启动nftables服务:

sudo systemctl start nftables 

讯享网

1. 基本概念:

  • 表(Tables):Nftables配置由表组成,表是规则的容器。有四种类型的表:filter、nat、mangle、和raw。通常,我们在filter表中配置防火墙规则。
  • 链(Chains):表包含多个链,链是规则的集合。Nftables中有五种默认链:input、output、forward、prerouting和postrouting。这些链用于不同的网络包处理阶段。
  • 规则(Rules):规则是定义如何处理网络包的指令。规则由条件(匹配条件)和操作(对匹配的包执行的操作)组成。
  • 集合(sets):集合是一种数据结构,用于存储IP地址、端口号等信息,以便在规则中引用。
    当涉及到Nftables时,理解其基本概念和语法是非常重要的。

2. 基本命令:

  • 查看规则集:使用以下命令查看当前规则集:
    讯享网sudo nft list ruleset 
  • 创建新表:创建新的Nftables表,例如,创建一个新的filter表:
    sudo nft add table ip filter 
  • 创建新链:在表中创建新的链,例如,创建一个新的input链:
    讯享网sudo nft add chain ip filter input { type filter hook input priority 0; } 
  • 添加规则:向链中添加规则,例如,允许SSH流量:
    sudo nft add rule ip filter input tcp dport 22 accept 
  • 删除规则:从链中删除规则,使用delete命令,例如:
    讯享网sudo nft delete rule ip filter input tcp dport 22 accept 
  • 保存规则:将规则保存到配置文件中以便永久生效:
    sudo nft list ruleset > /etc/nftables.conf sudo systemctl restart nftables 

3. 规则语法:

  • 匹配条件:规则中的条件用于匹配网络包。条件可以包括源地址、目标地址、端口号、协议等信息。例如,ip saddr表示源地址,tcp dport表示目标端口。
  • 操作:规则中的操作定义了匹配的网络包应该如何处理,包括接受、拒绝、重定向等。例如,accept表示接受网络包。
  • 连接跟踪:Nftables支持连接跟踪,可以根据网络连接的状态进行过滤和操作。例如,ct state用于匹配连接状态。

高级nftables用法

连接跟踪

nftables可以用于创建强大的防火墙规则,其中一个关键功能是连接跟踪,允许您跟踪网络连接的状态。连接跟踪对于管理网络流量和实施安全策略非常重要。下面是一个示例规则,演示如何使用连接跟踪:

讯享网table ip my_filter { 
    chain input { 
    type filter hook input priority 0; policy drop; ct state new,established accept } } 

上述规则表明,只有新建立的连接和已建立的连接才会被接受,其他一切都会被拒绝。

端口转发:

#!/usr/sbin/nft -f table ip my_nat { 
    chain prerouting { 
    type nat hook prerouting priority 0; tcp dport 80 redirect to :8080 } } 

这个规则将端口80的流量重定向到本地端口8080。

限速

nftables还可以用于限制特定类型的流量速率,以防止过多的流量影响网络性能。以下是一个限速的示例规则:

讯享网table ip my_filter { 
    chain input { 
    type filter hook input priority 0; policy drop; ip saddr 192.168.1.0/24 limit rate over 1/second accept } } 

上述规则表示,只允许来自子网192.168.1.0/24的流量以每秒不超过1个包的速率进入。

多协议族支持

nftables支持多个协议族,包括ip、ip6、inet、arp、bridge等。您可以在不同的协议族中定义规则,以根据网络层协议类型来处理流量。下面是一个多协议族支持的示例:


讯享网

table inet my_filter { 
    chain input { 
    type filter hook input priority 0; policy drop; ip saddr 192.168.1.0/24 accept } } table ip6 my_filter { 
    chain input { 
    type filter hook input priority 0; policy drop; ip6 saddr fd00::/64 accept } } 

上述示例中,我们创建了两个不同协议族的表,一个用于IPv4流量,一个用于IPv6流量,以分别处理它们。

共享规则和集合

要在不同协议族之间共享规则和集合,您可以使用define来定义规则或集合,然后在不同协议族的规则中引用它们。例如:

讯享网define my_ips = { 
    192.168.1.0/24, 10.0.0.0/24 } table ip my_filter { 
    chain input { 
    type filter hook input priority 0; policy drop; ip saddr $my_ips accept } } table ip6 my_filter { 
    chain input { 
    type filter hook input priority 0; policy drop; ip6 saddr fd00::/64 accept } } 

上述示例中,我们定义了一个名为my_ips的集合,包含了一些IP地址,然后在不同协议族的规则中引用了这个集合。

Nftables中的IP集合

IP sets是一种非常有用的功能,允许你将一组IP地址组织在一起以用于规则匹配。IP集合可以用于多种目的,例如允许或拒绝一组IP地址的流量,或者用于创建更复杂的规则。

1. 创建IP集合:

要创建一个IP集合,你可以使用nft add set命令。下面是一个示例,创建一个名为my_ip_set的IP集合:

sudo nft add set ip filter my_ip_set { 
    type ipv4_addr } 

这将创建一个IPv4地址类型的IP集合,并将其放置在filter表中。

2. 添加IP地址到集合:

要向IP集合添加IP地址,使用add element命令。例如,将IP地址192.168.1.100添加到my_ip_set中:

讯享网sudo nft add element ip filter my_ip_set { 
    192.168.1.100 } 

3. 删除IP地址从集合:

要从IP集合中删除IP地址,使用delete element命令。例如,从my_ip_set中删除IP地址192.168.1.100

sudo nft delete element ip filter my_ip_set { 
    192.168.1.100 } 

4. 使用IP集合:

将IP集合用于规则匹配是Nftables的一个强大功能。你可以在规则中使用@符号来引用IP集合。例如,创建一个规则来允许my_ip_set中的IP地址访问SSH端口:

讯享网sudo nft add rule ip filter input ip saddr @my_ip_set tcp dport 22 accept 

这将允许my_ip_set中的IP地址访问SSH端口。

5. 查看IP集合:

要查看IP集合的内容,可以使用list set命令:

sudo nft list set ip filter my_ip_set 

这将列出my_ip_set中包含的所有IP地址。

6. 删除IP集合:

要删除IP集合,使用delete set命令。例如,删除my_ip_set

讯享网sudo nft delete set ip filter my_ip_set 

Nftables允许你创建端口集合(Port Sets)

要创建一个端口集合,你可以使用nft add set命令。下面是一个示例,创建一个名为my_port_set的端口集合:

sudo nft add set inet filter my_port_set { 
    type inet_service } 

这将创建一个端口类型的端口集合,并将其放置在inet地址家族的filter表中。

2. 添加端口到集合:

要向端口集合添加端口,使用add element命令。例如,将端口号80添加到my_port_set中:

讯享网sudo nft add element inet filter my_port_set { 
    80 } 

3. 删除端口从集合:

要从端口集合中删除端口,使用delete element命令。例如,从my_port_set中删除端口号80

sudo nft delete element inet filter my_port_set { 
    80 } 

4. 使用端口集合:

将端口集合用于规则匹配是Nftables的一个强大功能。你可以在规则中使用@符号来引用端口集合。例如,创建一个规则来允许my_port_set中的端口号访问:

讯享网sudo nft add rule inet filter input tcp dport @my_port_set accept 

这将允许my_port_set中的端口号的TCP流量通过。

5. 查看端口集合:

要查看端口集合的内容,可以使用list set命令:

sudo nft list set inet filter my_port_set 

这将列出my_port_set中包含的所有端口号。

6. 删除端口集合:

要删除端口集合,使用delete set命令。例如,删除my_port_set

讯享网sudo nft delete set inet filter my_port_set 

端口集合是Nftables中非常有用的功能,可用于管理和组织端口号,以更灵活地控制网络包的过滤和路由。请根据你的需求使用这些命令,并谨慎测试规则以确保网络安全性和性能。

小讯
上一篇 2025-03-25 07:23
下一篇 2025-04-08 18:55

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/21115.html