我有一个Linux虚拟机,分配有内网IPv4和公网IPv6。
为了防止外网嗅探,只对ipv4的内网开放了全部权限,也就是将192.168.*.0/24添加到了trusted可信区。
Firewalld不像Windows防火墙一样智能,没有内置“本地网络”选项,不能自动将获取到地址的整个网段加入白名单。我是不是可以通过脚本来实现这个功能呢?
经过研究,我编写了这个脚本,经过测试,可用。
#! /bin/bash
ipnow=$(/usr/sbin/ip addr|grep global|grep -v deprecated|awk '/inet6 /{print $2}')
networknew=$(ipcalc -n $(echo $ipnow)|awk '{print substr($0, 9)}')
networksetted=$(cat /<**文件存放目录**>/.networksetted)
if [ "$networknew" != "$networksetted" ] ; then
firewall-cmd --remove-source=$networksetted/64 --zone=trusted
firewall-cmd --remove-source=$networksetted/64 --zone=trusted --permanent
firewall-cmd --add-source=$networknew/64 --zone=trusted
firewall-cmd --add-source=$networknew/64 --zone=trusted --permanent
echo $networknew > /<**文件存放目录**>/.networksetted
fi
使用这个脚本需要先安装ipcalc,看名字就知道是ip计算器,使用这个软件能够更好地兼容缩写后的IPv6地址,比如240e:1234::1234:1。此外,运营商在分配ipv6地址时一般会分配好几个子网,比如/56,/60等,可以到光猫中进行查看。如果你有下挂其他路由器的需求,则可以用光猫中实际分配到的子网掩码替换上述代码中的/64,这样就可以让使用下挂路由器的终端也可以被纳入ipv6的trusted可信区。
将脚本保存到内网的Linux主机当中,并添加到crontab,每分钟执行一次,就可以及时更新防火墙中的可信IPv6子网。
使用这个脚本,是因为我关闭了光猫中的IPv6防火墙。如果你没有关闭,则无需使用此脚本。