防火墙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
|
ExecStart 和 ExecReload 行指定了 nftables 服务如何启动和重载规则。
WantedBy=multi-user.target 确保在启动过程中加载此服务。
sudo systemctl daemon-reload sudo systemctl restart nftables
|
启用该服务使其在系统启动时加载规则:
sudo systemctl enable nftables
|
这样,nftables 会在每次启动时自动加载 /etc/nftables.conf 文件中的规则。
重启系统后,你可以通过以下命令验证规则是否已经加载:
这将列出当前的 nftables