自建 NAS, 系统安全防护配置(一) - 防火墙篇

私人项目代码不想放到git、码云等服务器上,所以自建SVN服务,用于存储代码,后来文件越来越多,有了存储文件的需求,然后自建了NAS服务。

服务器系统:Ubuntu20.04 LTS

安装的服务有:

  • SSH服务:远程管理。
  • SVN服务:私人代码仓储。
  • Bind9服务:用于家庭DNS广告过滤,自动从adblock 下载黑名单,然后添加进去。
  • DHCP服务:家庭里的物联网设备分配IP。
  • Commafeed: RSS阅读器
  • NextCloud: 文件存储,家庭照片,资料等。
  • Samba服务:实在不想用,投影上就它访问速度最快。
  • 千千静听歌词服务:千千静听的死粉,自写的服务,搜索、下载、上传歌词

那么该如何做的安全防护呢?

1.  首先IPv6不允许国外IP访问,虽然在内网IPv4也一样不允许国外IP访问,国外数据包一律丢弃。

然后开放22端口,后面配置连接ssh时,采用证书的方式登录。

# IPv4
iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A INPUT -i lo -j ACCEPT # local
iptables -A INPUT -m set ! --match-set chnroute4 src -j DROP # not china ip
iptables -A INPUT -p icmp -j ACCEPT # ping
iptables -A INPUT -p tcp --dport 22 -j ACCEPT # ssh

#IPv6
ip6tables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
ip6tables -A INPUT -i lo -j ACCEPT # local
ip6tables -A INPUT -m set ! --match-set chnroute6 src -j DROP # not china ip
ip6tables -A INPUT -p icmp -j ACCEPT # ping
ip6tables -A INPUT -p ipv6-icmp -j ACCEPT # ping
ip6tables -A INPUT -p tcp --dport 22 -j ACCEPT # ssh

关于 SSH 仅允许指定用户远程登录,参考这篇文章 : Linux SSH 仅允许指定用户远程登录

关于 SSH 仅允许证书登录,参考这篇文章 : Ubuntu Linux SSH 仅允许证书登录

2. 接着配置Samba,经常爆出漏洞的服务  

#IPv4 仅允许光猫后面的内网访问,网络上不可见
iptables -A INPUT -s 192.168.1.0/24 -p tcp -m multiport --dports 137,138 -j ACCEPT # samba
iptables -A INPUT -s 192.168.1.0/24 -p udp -m multiport --dports 137,138 -j ACCEPT # samba

#IPv6
# 不允许远程访问

3. 开放SVN、NextCloud、千千静听服务到所有网络,安全使用Fail2ban来防护,最多重试5次,否则屏蔽该IP。

#IPv6(IPv4 相同,使用iptables命令)
ip6tables -A INPUT -p tcp --dport 81 -j ACCEPT # nginx代理: nextcloud,parse server, 千千, onlyoffice, feed
ip6tables -A INPUT -p tcp --dport 3690 -j ACCEPT # svn

https服务统一采用81端口,针对不同的服务使用子域名,或者子路径的方式来保护,并且服务里禁止纯IP的访问。 这样当用nmap及其他扫描的时候,很难根据IP探测出来该端口后面的服务。

4. DHCP,Bind9,Emby,jellfin等 同Samba一样,仅允许内网IPv4、IPv6访问。

# IPv6配置仅允许特定IP访问(IPv4格式见samba配置)
ip6tables -A INPUT -s 2409:8a3c:xxxx:xxxx::/64 -p tcp --dport 53 -j ACCEPT # named
ip6tables -A INPUT -s 2409:8a3c:xxxx:xxxx::/64 -p udp --dport 53 -j ACCEPT # named

# log
#ip6tables -p udp --dport 53 -j LOG --log-prefix "ip4 udp input: " --log-level 7

 

iptables 配置的IP级防护完成。

 

 

 

 

安全相关文章:

 

 

 

 

 

 

评论列表: