logo NodeSeekbeta

使用ZeroTier组建内网保护小鸡的SSH连接

首先推荐跟着Hantong的帖子里【SSH 安全篇】章节完成基本的安全配置,也可以看【虚拟内网篇(Zerotier)】章节,解释得很到位了。本篇的区别只是用了 iptables-persistent 来管理防火墙。

保护你的小鸡! VPS 安全探讨分享
https://www.nodeseek.com/post-25170-1

在本篇中,我们将介绍如何使用ZeroTier来保护你的VPS小鸡SSH连接。

第一步:安装ZeroTier

从ZeroTier的官方网站下载安装包,然后也注册一个帐号。

https://www.zerotier.com/download/

Debian/Ubuntu一键安装:

curl -s https://install.zerotier.com | sudo bash

安装完成后,你可以使用以下命令来启动和停止ZeroTier服务:

sudo systemctl start zerotier-one.service
sudo systemctl stop zerotier-one.service

为了让ZeroTier在系统启动时自动启动,你还需要启用它:

sudo systemctl enable zerotier-one.service

使用以下命令来查看ZeroTier服务的状态:

sudo systemctl status zerotier-one.service

你的本地(用来ssh的机器)和小鸡都需要安装zerotier,加入到同一个内网。

第二步:加入ZeroTier网络

注册帐号,登陆到 https://my.zerotier.com/

安装并启动ZeroTier服务后,你需要将你的VPS加入到一个ZeroTier网络中。你可以使用以下命令来加入一个网络:

sudo zerotier-cli join ################

其中,################是你的ZeroTier网络的ID,记得要替换!

在 https://my.zerotier.com/ 里拉到 Members 下面,给你的小鸡打勾(没有出现的话等几分钟),允许其进入你的zt内网。

之后要是你想要离开一个网络,可以使用以下命令:

sudo zerotier-cli leave ################

查看、列出你的VPS当前加入的所有ZeroTier网络:

sudo zerotier-cli listnetworks

第三步:查看节点ID

你可以使用以下命令来查看你的VPS在ZeroTier网络中的节点ID:

sudo zerotier-cli info
sudo zerotier-cli status

第四步:配置iptables persistent来限制IP为ZeroTier的IP段

在 https://my.zerotier.com/ 里 Advanced 下面 Managed Routes 里选择你的ip地址段,不要和你现有的重合就行。这里我们假设你选了 172.30.0.0/16

首先,你需要在你的VPS上安装iptables persistent:

apt install -y iptables-persistent

然后,编辑/etc/iptables/rules.v4文件,并将以下内容放入:

*filter

-A INPUT -i lo -j ACCEPT
-A INPUT ! -i lo -d 127.0.0.0/8 -j REJECT
-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
-A OUTPUT -j ACCEPT

#  允许建站
-A INPUT -p tcp --dport 80 -j ACCEPT
-A INPUT -p tcp --dport 443 -j ACCEPT

#  允许SSH,这里假设端口是22
-A INPUT -p tcp -m state --state NEW --dport 22 -j ACCEPT

#  允许ping
-A INPUT -p icmp -m icmp --icmp-type 8 -j ACCEPT
-A INPUT -p icmp -m icmp --icmp-type 3 -j ACCEPT

-A INPUT -m limit --limit 5/min -j LOG --log-prefix "iptables denied: " --log-level 7

-A INPUT -j REJECT
-A FORWARD -j REJECT

COMMIT

使用iptables-persistent的话,这个配置将在系统启动时自动加载。但因为我们现在并不需要重启系统,所以我们需要手动加载这个配置:

iptables-restore < /etc/iptables/rules.v4

如果你的服务器也支持IPv6,你还需要编辑/etc/iptables/rules.v6文件。

如果上面成功,不破坏你的ssh连接(新开一个ssh来测试,不要关掉原来的ssh窗口!),那么恭喜你我们可以继续下面的步骤:

我们只允许来自特定IP段,比如来自你的zerotier网络的 172.30.0.0/16 的SSH连接,你需要在iptables规则中指定这个IP段。

将SSH连接的规则修改为以下内容:

-A INPUT -p tcp -s 172.30.0.0/16 -m state --state NEW --dport 22 -j ACCEPT

只有来自172.30.0.0/16这个IP段的新的SSH连接才会被接受。

然后,将这个新的规则添加到你的/etc/iptables/rules.v4文件中,然后手动加载新的配置:

iptables-restore < /etc/iptables/rules.v4

这样,你的小鸡就只会接受来自172.30.0.0/16这个IP段的SSH连接了,可以防止未经授权的用户通过SSH连接到你的VPS。

为了防止zt进程中断导致失联,你也可以额外加一个其他小鸡的IP作为跳板。

12
  • xhj003

  • 收藏一下

  • xhj003

  • 好帖,学习了

  • 一个跳板太复杂了

  • xhj003

  • @hetray #0

    📢 NodeSeek论坛管理 - 主题帖 "推荐阅读" 通知
    🎉 感谢楼主的精彩分享, 本主题帖将被推荐阅读加精+加鸡腿🍗 xhj008
  • 你的小鸡就只会接受来自172.30.0.0/16这个IP段的SSH连接了
    直接只允许你的公网IP去连接就行了

  • 真不错啊 收藏了

  • SSH服务换成SOCKS5服务是不是也可以?

12

你好啊,陌生人!

我的朋友,看起来你是新来的,如果想参与到讨论中,点击下面的按钮!

📈用户数目📈

目前论坛共有15768位seeker

🎉欢迎新用户🎉