自建 NAS,系统安全防护配置(二)扫描探测篇

系统:Ubuntu20.04

自建NAS后,为了保护数据安全,以下是我从无目的攻击、针对性攻击两个阶段进行的防护策略。

应对宽泛的无目的服务探测扫描:

1. 对于无目的的IP段的扫描,尽可能的开放少的端口,或者把服务放到不常用端口(如果条件允许的话)。

使用Nginx反向代理后台服务,如果条件允许,通过多域名、子路径、以及端口转发的方式映射多个服务到一个端口。并且限制仅允许域名访问,如下:

server_name www.helloworld.com; # 同一个端口,指定不同的域名,共用一个端口

当大规模扫描某个IP网段时,对方无法探测到Nginx后面的服务,让这种宽泛扫描成为瞎子。

2. 国家级IP范围限制,通过 iptables 限定只允许或者禁止某些国家的IP数据访问。比如明确不会去某个国家则可使用ipset把该国家的地址ban掉,或者只在某些国家范围活动,则仅允许该国家IP访问。

下面是我用的下载中国的IP段脚本,iptables 读取保存的ipset网段,限定非国内IP数据丢弃。  

#!/bin/bash
wget --no-check-certificate -O- 'http://ftp.apnic.net/apnic/stats/apnic/delegated-apnic-latest' > chnroute.txt

# ipv4
echo "process ipv4-------------------";
ipset create chnroute4 hash:net family inet maxelem 65535
cat chnroute.txt | awk -F \| '/CN\|ipv4/ { printf("%s/%d\n", $4, 32-log($5)/log(2)) }' > chnroute4.txt
ipset flush chnroute4
ipset add chnroute4 127.0.0.0/8
ipset add chnroute4 192.168.0.0/16
ipset add chnroute4 172.16.0.0/12
ipset add chnroute4 10.0.0.0/8
while read ip;do
ipset add chnroute4 $ip
done < chnroute4.txt
ipset save chnroute4 > chnroute4.conf

# ipv6
echo "process ipv6-------------------";
ipset create chnroute6 hash:net family inet6 maxelem 65535
cat chnroute.txt | awk -F \| '/CN\|ipv6/ { printf("%s/%d\n", $4, $5) }' > chnroute6.txt
ipset flush chnroute6
ipset add chnroute6 fe80::/10
ipset add chnroute6 2a01:4f9:2b:29dc::149
ipset add chnroute6 2a01:4f9:2b:29dc::153
while read ip;do
ipset add chnroute6 $ip
done < chnroute6.txt
ipset save chnroute6 > chnroute6.conf

应对针对主机的攻击:

如黑客知道你的域名及提供的服务,然后用爬虫爬取了你的NAS目录,用Nmap等一系列工具,针对性的探测到了系统版本、Nginx版本、SSH版本号、PHP版本号;如群晖v6.2.2、unraid v6.9.2等服务的信息,发起了针对该版本的攻击,应对策略如下:

1. 给予该服务最小的权限

  • 运行该服务的账号,禁止登录 /sbin/nologin。如果条件允许,禁止符号链接,nginx配置如下:
    disable_symlinks on;
  • 配合apparmor ,限定该服务允许的访问范围。
  • 假如服务有可执行漏洞,哪怕被攻破,损失也控制在一定范围内;

2. 系统更新源使用官方源,或者可信的源。尽可能不要安装来路不明,或盗版的软件。Ubuntu服务版,默认启用定期自动升级更新,配置好apt源就行了。

3. DDOS攻击,自家用的NAS服务,应该没人用这种方式攻击,亏本不划算呀,不考虑。

4. 避免密码的泄露,Web服务使用HTTPS,因为HTTPS是在HTTP与TCP之间进行的SSL加密,所以哪怕HTTPS的Get明文请求也是由下层加密过的,即使嗅探到数据包也无法解密的,如果使用中间人拦截HTTPS,那么客户端检测到证书与域名不同的话,会给出不安全的证书提示。

5. 应对暴力破解,即穷举服务的密码。

  •  情况一,NAS服务自带防暴力破解功能的,可以启用服务的防暴力破解。如Nextcloud登录失败后,打开网页的速度一次比一次慢,多次后会提示下面的错误,禁止登录。

nextcloud多次无效登录

Nextcloud可以通过config/config.php 文件里开启或关闭防暴力破解选项:

'auth.bruteforce.protection.enabled' => true
  • 情况二,NAS服务没有自带防暴力破解功能,则可以使用Fail2ban来监听NAS服务的日志,通过正则匹配登录失败的记录,几次后临时ban掉该IP一段时间(次数和时间自己设置)。

 

6. 自动检查程序文件是否被篡改,Debian系列可以使用debsums命令来检查,如果发生变化,会有如下的提示:

$ sudo debsums -s
debsums: changed file /lib/systemd/system/networking.service (from ifupdown package)

然后,使用cron执行定时任务,如果有错误,发邮件到自己的监控邮箱。

7. Logwatch 定义自己的规则,每天把昨天的日志分析结果发送到监控邮箱。如所有用户执行的命令,ssh尝试信息等等,请自行定义。

.... 其他略 ...

--------------------- pam_unix Begin ------------------------

sudo:
Authentication Failures:
xxxx(1000) -> ttttt: 1 Time(s)
Sessions Opened:
xxxx-> root: 241 Time(s)
xxxx-> www-data: 35 Time(s)

---------------------- pam_unix End -------------------------
--------------------- SSHD Begin ------------------------

SSHD Started: 4 Times

Users logging in through sshd:
xxxxx:
192.168.1.xx: 4 Times
2409:8a3c:444:xxxx:8c88:e89d:33e3:xxxx: 1 Time

**Unmatched Entries**
Timeout, client not responding from user yxh 192.168.1.xxxx port 50273 : 1 Time
error: kex_exchange_identification: Connection closed by remote host : 1 Time
error: kex_exchange_identification: banner line contains invalid characters : 5 Times

8. 关于如何初步排查服务器是否遭到黑客攻击,参考这篇文章: 如何检查服务器是否遭到黑客攻击?

 

 

 

 

 

安全相关文章:

 

 

 

 

评论列表: