防火墙nftables

防火墙nftables

防火墙nftables

1、封锁ip

2、端口过滤(封锁/允许端口)、默认封锁所有端口

3、流量限制,可以限制某个端口或 IP 地址的访问速率,防止 DDoS 攻击。

安装

sudo apt update
sudo apt install nftables

启用

sudo nft add table inet filter
创建一个表

sudo nft add chain inet filter input { type filter hook input priority 0 \; policy drop \; }
创建一个链,设置默认策略为丢弃流量

sudo nft add rule inet filter input tcp dport 22 accept
首先允许 SSH 端口(22)

注意这三条命令要一次执行
=======

sudo nft add rule inet filter input iif lo accept
确保允许回环接口流量

sudo nft add rule inet filter input ct state established,related accept
为了确保已经建立的连接(例如 SSH 会话)继续正常通信,可以允许已建立的连接:

sudo nft list ruleset
保存并测试查看是否生效

常见指令

添加端口,改22就可以了
sudo nft add rule inet filter input tcp dport 22 accept

添加多个端口
sudo nft add rule inet filter input tcp dport {22, 80} accept


查看nft的规则配置
sudo nft list ruleset

关键看
table inet filter {
chain input {
type filter hook input priority filter; policy drop;
tcp dport 22 accept
iif "lo" accept
ct state established,related accept
}
}
==========================

允许单个ip访问所有端口
sudo nft add rule inet filter input ip saddr 192.168.1.100 accept

允许多个ip访问所有端口
sudo nft add set inet filter allowed_ips { type ipv4_addr\; }
sudo nft add element inet filter allowed_ips { 192.168.1.100, 192.168.1.101 }
sudo nft add rule inet filter input ip saddr @allowed_ips accept
这里分了三步。1、创建一个allowed_ips的集合。2、将ip放在里面allowed_ips。3、放行ip访问所有端口


允许单个ip访问特定端口
sudo nft add rule inet filter input ip saddr 192.168.1.100 tcp dport {22, 80} accept

允许多个ip访问特定端口
sudo nft add rule inet filter input ip saddr {192.168.1.100, 192.168.1.101} tcp dport {22, 80} accept

==========================

将accept改为drop即为禁止

sudo nft add rule inet filter input ip saddr 192.168.1.100 drop

sudo nft add rule inet filter input ip saddr {192.168.1.100, 192.168.1.101} drop

sudo nft add rule inet filter input ip saddr 192.168.1.100 tcp dport {22, 80} drop

sudo nft add rule inet filter input ip saddr {192.168.1.100, 192.168.1.101} tcp dport {22, 80} drop

规则持久化

sudo nft list ruleset > /etc/nftables.conf

创建或编辑 /etc/systemd/system/nftables.service 文件:

sudo vim /etc/systemd/system/nftables.service

添加以下内容到文件中:

[Service]
ExecStart=/usr/sbin/nft -f /etc/nftables.conf
  • ExecStartExecReload 行指定了 nftables 服务如何启动和重载规则。
  • WantedBy=multi-user.target 确保在启动过程中加载此服务。
sudo systemctl daemon-reload
sudo systemctl restart nftables

启用该服务使其在系统启动时加载规则:

sudo systemctl enable nftables

这样,nftables 会在每次启动时自动加载 /etc/nftables.conf 文件中的规则。

重启系统后,你可以通过以下命令验证规则是否已经加载:

sudo nft list ruleset

这将列出当前的 nftables