我用的是家庭宽带,pppoe 拨号,有公网 IP ,映射了群晖等一些服务出去,之前在路由器上设置了访问日志观察了一段时间,基本上每时每刻都会有全世界各地的 IP 做端口扫描探测。 下面是国外国内两个著名的 IP 资产测绘平台上搜索 synology 关键词的情况: shodan 20W 结果:
fofa 100W+ 结果:
这其中可能就有你我的 nas ,虽说一般也没那么容易就被攻击,但做些防护措施总没错的,万一哪天群晖曝出漏洞,也没那么快就被利用到。
我用的是 routeros ,目前 filter 表主要做了这么些规则:
1 、fasttrack forward ,没有指定接口,用于快速转发已经建立起连接的流量( establised 和 related ),也就是不需要经过下面的规则了,设置了硬件 offload ,可以减轻路由器计算压力
2 、fasttrack input ,同上,主要区别是一个是转发,一个是路由器本身的服务,比如 VPN 的流量,已经建立连接的 VPN 就不需要继续走下面的防火墙规则了
3 、白名单,在白名单里的 IP 直接放行,通常可以设置一些比较固定的远端管理 IP
4 、丢弃非法流量和黑名单流量,非法流量有可能是一些特殊机制的扫描造成的,直接丢弃;黑名单来自于下面规则中的扫描行为检测
5 、拒绝指定时间段内(例如凌晨 1 点到早上 7 点)对游戏服务器的访问,就几个小伙伴一起玩的 mc 之类的,因为之前发现有小伙伴玩到凌晨 4 点,这很危险,影像身体健康,所以设置了这个手动防沉迷机制。
突然想起这里可能有点问题,因为前面提到已经建立的连接直接就会转发,所以这条规则可能要放到更前面去才能产生效果。
6 、监测端口扫描行为并添加到黑名单,这是 routeros 自带的功能,可以自行调整参数,例如 3 秒中内访问了 5 个以上不同的端口试图新建连接。
7 、允许访问路由器自身开放的服务,例如 VPN 、SSH 等
8 、拒绝其它所有进入流量,这个主要是避免访问到路由器上开放的其它一些不必要的端口。如果有需要开放的话,应该手动添加到第 7 条中去。
接下来的计划:
预计还可以研究一下根据地域来阻止访问,例如禁止所有国外 IP 访问,甚至只允许省内访问,群晖上已经设置了禁止国外 IP 访问,这也能阻挡掉很多扫描和攻击行为,注意前面还要放通内网 IP ,不然局域网都访问不到了。
NAT 表主要是一些内部服务的端口映射,其中有一条值得一提,用于在局域网通过公网 IP 访问内部服务器的,又叫做 IP 回流、发夹效应( Hairpinning )、“NAT 环回” ( NAT loopback ) 等等: 当局域网通过网关访问局域网地址时,对源地址进行转换,这样就能在内网通过域名或者公网 IP 来访问到内部的群晖系统了。
所以大家还有什么其它的防火墙设置策略吗?
总结一下跟帖v友的常见防火墙设置:
今天遇到一个问题,我的群晖设置防火墙拒绝国外IP后,遇到 let's encrypt 更新 SSL 证书失败,记录一下解决方案,我是通过 docker certbot/dns-cloudflare 这个容器定期更新的,报错内容是:
HTTPSConnectionPool(host='acme-v02.api.letsencrypt.org', port=443): Max retries exceeded with url: /directory (Caused by NewConnectionError(': Failed to establish a new connection: [Errno -3] Try again'))
一开始我觉得不应该啊,防火墙的拒绝不都是拒绝的进入流量吗,我这个是出的流量怎么也不行呢,于是我在群晖终端shell里面 curl -v https://acme-v02.api.letsencrypt.org/directory
发现请求和返回都是正常的,然后又仔细看了看,发现容器默认网络是 bridge,那么它的流量相对于群晖来说就是 forward 流量,看来群晖的防火墙对返回来的 foward 流量进行了拦截,解决方法很简单,容器用 host 网络就可以了:
docker run -t --rm --network host --name certbot -v "/letsencrypt:/etc/letsencrypt" -v "/cloudflare.ini:/cloudflare.ini" certbot/dns-cloudflare renew --force-renew --dns-cloudflare --dns-cloudflare-credentials /cloudflare.ini
1
hermanarturo 73 天前
666
|
2
hermanarturo 73 天前
设置了如果从外网访问 router 的 22 3389 之类的端口,直接添加 ip 到黑名单里面
|
3
ZeroClover 73 天前
访问特定 API w/ OIDC credentials 自动对访问 IP 全服务同步加白 15 分钟
懒得弄的就端口敲门 其实大部分内网服务都直接 Cloudflare Tunnel ,不需要暴露对外端口 |
4
totoro625 73 天前 1
一个固定的白名单 + 访问特定 api 自动加白名单比较好
简单易维护 如访问一个 api 链接,加白名单,直到当天 24 点进行删除 |
5
tool2dx 73 天前
公网 IP4 没办法的,你可以把服务改成公网 IP6 ,就没人扫你了。
我自己写了一个 fail2ban ,专门搜集屡教不改的 IP 黑名单,自动化拉到 iptables -j DROP 里关禁闭。 |
6
vcn8yjOogEL 73 天前
VPN
|
7
dodakt 73 天前
我是特殊端口 +单位 ip 和运营商基站 ip 白名单 然后连接其他肺白名单网络就上 vpn 感觉够用了 毕竟大多数时候需求都是单位网络和流量访问
|
8
Jinnrry 73 天前 via iPhone
我是只开一个端口做 vpn ,任何访问都通过 vpn 。自己搞防火墙太维护成本太高了,而且非常容易出错,而且很可能是把自己拦住但是拦不住攻击
|
9
Jhma 73 天前
不要把非公共服务端口暴露给外网,各类 VPN 是最优解,网上很多把群晖的端口暴露出来的教程真是害人不浅
|
10
iamwin 73 天前 via Android
我用 opnsense 默认策略,只开放外网 vpn 端口回家,没了
|
11
povsister 73 天前
无论什么防火墙
default deny + 按需 ACL 绝不多配就行了。 |
13
rulagiti 73 天前
用 vpn 连,甚至更严格用楼上的端口敲门及 api 添加源 ip 白名单。
|
14
piero66 73 天前 via Android
我都是用 ipv6 或者 zerotier ,公网 v4 只有 pt 在用,映射全关了
|
17
Autonomous 69 天前
群晖防火墙规则→所有规则,最后一条“拒绝所有”的规则其实不需要,因为默认就是拒绝兜底,楼主你可以试着删掉,测试一下。
|