想象一下,您需要在 Internet 路由器上打开端口,但不希望它们被轻易发现或枚举。
如何防止黑客/公司扫描您的开放端口?
答案1
- 编辑
/etc/config/firewall
并添加以下内容:
config include
option enabled '1'
option type 'script'
option path '/etc/firewall.user'
option fw4_compatible '1'
- 创建包含以下内容的文件
/etc/firewall.user
:
set -x # enable verbose mode
nft add set inet fw4 scanner { type ipv4_addr\; flags timeout\; timeout 24h\; }
nft add set inet fw4 good { type inet_service\; elements = { \
5000, \
10000 \
}}
nft add set inet fw4 known { type ipv4_addr\; flags constant, interval\; elements = { \
35.203.210.0/24, \
35.203.211.0/24, \
45.128.232.0/24, \
64.62.156.0/24, \
64.62.197.0/24, \
65.49.1.0/24, \
94.156.71.0/24, \
107.170.0.0/16, \
123.254.109.0/24, \
152.32.128.0/17, \
162.142.125.0/24, \
162.216.149.0/24, \
162.216.150.0/24, \
162.243.0.0/16, \
167.94.138.0/24, \
167.94.145.0/24, \
167.94.146.0/24, \
185.180.143.0/24, \
185.242.226.0/24, \
192.241.128.0/17, \
193.163.125.0/24, \
198.235.24.0/24, \
198.199.96.0/20, \
199.45.154.0/24, \
206.168.32.0/22, \
205.210.31.0/24 \
}}
nft insert rule inet fw4 input_wan ip saddr @scanner counter log drop
nft insert rule inet fw4 input_wan tcp dport \!= @good ct state new tcp flags \& \(fin\|syn\|rst\|ack\) == syn update @scanner { ip saddr }
nft insert rule inet fw4 input_wan ip saddr @scanner update @scanner { ip saddr }
nft insert rule inet fw4 prerouting ip saddr @scanner counter log drop
nft insert rule inet fw4 prerouting ip saddr @known counter drop
将用户防火墙脚本标记为可执行:
chmod +x /etc/firewall.user
您现在可以应用规则:
fw4 restart
。
解释性说明
- 该
@scanner
集包含尝试打开任何端口的 IP,但@good
您希望对所有主机保持开放的端口列表除外。它的过期时间为 24 小时,因为我的 WiFi 路由器相当陈旧且功能较弱,无法足够快地处理该组中的太多记录。您可以更改24h
为类似的内容7d
。你自便。 - 该
@known
组是我一周左右收集的,这些是一直进行端口扫描的网络。 - 仅对此进行测试
OpenWRT 23.xx
。它可能在未来的版本中不起作用。
重要信息
- 如果您仅向列入白名单的 IP 地址打开端口,则整个规则集是多余的但有时您旅行并需要从未知位置访问您的家庭网络,因此有此规则集。
- 另一种解决方案是启用端口碰撞,但在智能手机等设备上使用此技术并不总是微不足道或不可能的,尤其是当您需要将端口转发到 LAN 供其他不懂技术的人使用时。