Linux 上的防火墙由两个组件组成 - Linux内核中的防火墙机制,以及用于从用户空间配置该机制的工具。Linux内核传统上支持两个不同的防火墙策略子系统 - iptables / xtables 和较新的nftables。nftables在创建和部署防火墙规则时,在性能和灵活性方面都带来了显著优势,特别是对于双栈 IPv4/IPv6 系统。传统的 iptables用户空间管理工具现在配置 nftables 内核后端,同时还提供了新的 nft 用户空间工具,以允许创建传统 iptables范例不支持的更灵活的规则。
可以将iptables规则转换为nft通过iptables-translate和ipt6ables-translate。例如:
iptables-translate -A INPUT -s x.x.x.x/32 -d y.y.y.y/32 -i eth2 -j DROP
更多详细信息请参阅Ubuntu官方手册页:https://manpages.ubuntu.com/manpages/jammy/en/man8/iptables-restore-translate.8.html
一、默认Ubuntu系统使用的是nft,先恢复到 iptables。
- 使用以下命令查看和更改优先级:
update-alternatives --config iptables
示例输出:
Selection Path Priority Status
------------------------------------------------------------
* 0 /usr/sbin/iptables-nft 20 auto mode
1 /usr/sbin/iptables-legacy 10 manual mode
- 将最高优先级设置为iptables:
sudo update-alternatives --install /usr/bin/iptables iptables /usr/sbin/iptables-nft 30
- 默认设置:
sudo update-alternatives --set iptables /usr/sbin/iptables-legacy
- 禁用 UFW 和 nft:
sudo systemctl disable --now ufw
sudo systemctl disable --now nftables
sudo apt install iptables-persistent
sudo systemctl enable --now iptables
注意事项:
systemctl status iptables
#如果查看iptables服务正常,链表的时候提示
bash: /usr/sbin/iptables: No such file or directory
#重新安装一次
apt install iptables
二、如何用 iptables 禁止某个ip?
- 添加对 100.64.24.1 的过滤(直接 DROP 掉)
iptables -I INPUT -s 100.64.24.1 -j DROP
三、Ubuntu永久保存iptables的设置
- 使用以下命令保存当前的iptables规则到文件中:
sudo iptables-save > /etc/iptables/rules.v4
- 然后,使用以下命令安装iptables-persistent软件包,前面安装过的话也不需要再次安装:
sudo apt-get install iptables-persistent
- 在安装过程中,你会被要求确认是否将当前的iptables规则保存到文件中。选择"是",然后继续进行安装。
- 安装完成后,iptables-persistent会自动加载保存的iptables规则文件。
现在,你的iptables设置将在系统重启后自动加载。如果你想更新iptables规则,只需编辑/etc/iptables/rules.v4文件,然后使用以下命令重新加载规则:
sudo iptables-restore < /etc/iptables/rules.v4
上述步骤适用于IPv4的iptables规则。如果你同时使用IPv6规则,可以将上述命令中的v4替换为v6,并相应地将规则保存到/etc/iptables/rules.v6文件中。