防火墙 使用

防火墙 支持

Neardi 发布的普通固件一般不满足 ufw 的运行要求,如果有需求,可以使用 SDK 打开内核的相关配置,重新编译烧录内核以支持 ufw。

以下案例是基于 Neardi Ubuntu 20.04,内核配置部分是通用的!

检查 Kernel 配置

cd kernel
ARCH=arm64 make menuconfig

需要在内核中启用与网络过滤和防火墙相关的配置:

  • CONFIG_NETFILTER: 这是网络过滤框架的基础,必须启用。

  • CONFIG_NF_CONNTRACK: 启用网络连接跟踪支持。

  • CONFIG_NETFILTER_XT_*: 启用各种netfilter扩展,包括标记、地址类型、连接跟踪等。

  • CONFIG_IP_VS_*: 启用IP虚拟服务器支持,用于负载均衡。

  • CONFIG_IP_NF_IPTABLES: 启用iptables支持。

  • CONFIG_IP_NF_FILTER: 启用IP包过滤功能。

  • CONFIG_IP_NF_NAT: 启用网络地址转换(NAT)支持。

  • CONFIG_IP_NF_TARGET_*: 启用各种iptables目标,如MASQUERADE、NETMAP、REDIRECT等。

  • ONFIG_BRIDGE: 如果您使用桥接网络,这个选项也应该启用。

在 make menuconfig 中,您可以使用 / 键来搜索上述配置项,然后按照提示进行操作。确保所有相关的配置项都被标记为 <*>(编译进内核)或 (编译为模块)。完成后,保存配置并退出 menuconfig。

保存内核配置选项菜单:

ARCH=arm64 make savedefconfig

保存后SDK根目录会生成defconfig文件

替换config:

cp defconfig arch/arm64/configs/rockchip_linux_defconfig

接着在 kernel 目录下编译内核:

cd ..
./build.sh kernel

不熟悉menuconfig的用户,可以直接修改如下文件,在RK3568上验证过:

+++ b/kernel/arch/arm64/configs/rockchip_linux_defconfig
@@ -99,13 +99,21 @@ CONFIG_SYN_COOKIES=y
 # CONFIG_IPV6_SIT is not set
 CONFIG_NETFILTER=y
+CONFIG_BRIDGE_NETFILTER=y
+CONFIG_NF_CONNTRACK=y
+CONFIG_NF_CONNTRACK_FTP=y
+CONFIG_NF_CONNTRACK_TFTP=y
+CONFIG_NETFILTER_XT_MARK=y
+CONFIG_NETFILTER_XT_MATCH_ADDRTYPE=y
+CONFIG_NETFILTER_XT_MATCH_CONNTRACK=y
+CONFIG_NETFILTER_XT_MATCH_IPVS=y
+CONFIG_IP_VS=y
+CONFIG_IP_VS_PROTO_TCP=y
+CONFIG_IP_VS_PROTO_UDP=y
+CONFIG_IP_VS_RR=y
+CONFIG_IP_VS_NFCT=y
+CONFIG_NETFILTER_NETLINK_ACCT=y
+CONFIG_NETFILTER_NETLINK_QUEUE=y
+CONFIG_NETFILTER_NETLINK_LOG=y
+CONFIG_NETFILTER_NETLINK_OSF=y
 CONFIG_NF_CONNTRACK=y
+CONFIG_NF_LOG_NETDEV=y
 CONFIG_NF_CONNTRACK_FTP=y
 CONFIG_NF_CONNTRACK_TFTP=y
 CONFIG_NETFILTER_XT_MARK=y
+CONFIG_NETFILTER_XT_TARGET_LOG=y
 CONFIG_NETFILTER_XT_MATCH_ADDRTYPE=y
 CONFIG_NETFILTER_XT_MATCH_CONNTRACK=y
 CONFIG_NETFILTER_XT_MATCH_IPVS=y
+CONFIG_NETFILTER_XT_MATCH_LIMIT=y
+CONFIG_NETFILTER_XT_MATCH_MULTIPORT=y
 CONFIG_IP_VS=y
 CONFIG_IP_VS_PROTO_TCP=y
 CONFIG_IP_VS_PROTO_UDP=y
 CONFIG_IP_NF_IPTABLES=y
+CONFIG_IP_NF_FILTER=y
+CONFIG_IP_NF_NAT=y
+CONFIG_IP_NF_TARGET_MASQUERADE=y
+CONFIG_IP_NF_TARGET_NETMAP=y
+CONFIG_IP_NF_TARGET_REDIRECT=y
 CONFIG_IP_NF_MANGLE=y
+CONFIG_BRIDGE=y
+CONFIG_CGROUP_NET_PRIO=y
 CONFIG_CAN=y
 CONFIG_CAN_ROCKCHIP=y
 CONFIG_CANFD_ROCKCHIP=y

安装 ufw

sudo apt install ufw

在 /etc/default/ufw 配置文件中,将 IPV6=yes 修改为 IPV6=no。

# /etc/default/ufw
#

# Set to yes to apply rules to support IPv6 (no means only IPv6 on loopback
# accepted). You will need to 'disable' and then 'enable' the firewall for
# the changes to take affect.
-IPV6=yes
+IPV6=no

简单命令

检查UFW状态:

sudo ufw status

启用UFW:

sudo ufw enable

禁用UFW:

sudo ufw disable

允许特定端口:

sudo ufw allow 端口号

拒绝特定端口:

sudo ufw deny 端口号

允许特定IP地址:

sudo ufw allow from IP地址

拒绝特定IP地址:

sudo ufw deny from IP地址

更多ufw高级功能和命令,请参考: https://www.digitalocean.com/community/tutorials/ufw-essentials-common-firewall-rules-and-commands