这是我的(想象这是你允许的远程 IP:11.25.10.52/0):

这是我的(想象这是你允许的远程 IP:11.25.10.52/0):

我意识到“安全”是一个非常有内涵的定义。

我需要连接到 SFTP 日志服务器(仅用户/密码,无 ssh 密钥)。

SFTP 服务器有 IP 白名单,而我的所有服务器 IP 都是动态的。我想设置一个具有静态 IP 的 SOCKS5 代理服务器,以便我从我的服务器进行连接并代理 SSH 连接。不幸的是,我无法在防火墙中将传入 IP 列入白名单,因为我使用的是 Heroku,它使用 Amazon 上的任何 IP

我主要关心的是这个代理服务器是否对全世界开放,我想确保我所做的步骤是好的,或者我是否需要做更多。我知道安全性可以走极端,但我并不是超级高级,所以我想要一个适合 99.95% 应用程序的中间立场。

这是我所做的步骤,没有其他步骤(因此没有额外的配置或软件安装等)。

  1. 在 Google Cloud 上创建一个实例,使用Ubuntu 18.04,并为其指定一个静态 IP
  2. tcp:1080使用 Google Cloud Web 界面在防火墙中打开端口,阻止80443
  3. 使用以下命令创建一个新用户,使用非常安全的密码(长度为 24 个字符,包含字母和数字)

    useradd -M -s /usr/sbin/nologin -p $(openssl passwd -1 PASSWORD) USERNAME 
    
  4. 安装 Dante,使用以下配置(ens4来自运行ifconfig并获取适配器名称。我猜这是 Google 云的称呼):

    logoutput: /var/log/danted.log
    
    internal: ens4 port = 1080
    external: ens4
    
    socksmethod: username
    clientmethod: none
    
    user.privileged: root
    user.unprivileged: nobody
    # comment out user.libwrap lines
    
    timeout.io: 43200
    
    client pass {
      from: 0.0.0.0/0 to: 0.0.0.0/0
      log: error
    }
    
    socks pass {
      from: 0.0.0.0/0 to: logging-service.example.com
      log: error
    }
    

我主要担心的是:

  1. 开放 1080 端口可以吗?有些人说这不好,但他们给我提供了一些我不明白的东西,比如“netplan.io”。如果这不是一个好主意,有什么简单的解决办法吗?
  2. 我注意到您可以在and块method内使用关键字...我应该在那里放些什么吗?还是使用and之下的内容?clientsockssocksmethodclientmethod
  3. 我是否应该添加一些可以阻止失败的登录尝试的东西(我认为它被称为 fail2ban?)
  4. 我确实对该部分添加了限制socks,只允许连接到logging-service.example.com,但我认为如果有人入侵到那时,那就有些问题了。
  5. net-ssh我使用的/库net-sftp也支持“跳跃”代理,这样更安全吗?
  6. 允许全世界连接到端口 1080 并尝试猜测用户名/密码似乎很奇怪。我想这使其成为最薄弱的环节。只要密码长且安全,还有其他方法可以加强这个最薄弱的环节吗?

还有其他想法可以使其更安全吗?

答案1

1) 不确定他们在说什么。显然,您需要打开一个端口,只要您的服务器可以访问该端口,端口号是多少就没什么区别了。

但是 1080 是标准的 socks 端口,因此如果有人进行端口扫描并发现端口 1080 是开放的,他们首先可能会猜测该端口上运行着一个 socks 服务器,然后他们会使用“socks 攻击工具”对其进行攻击。相反,如果您让 Dante 监听端口 443,他们可能首先会猜测这是一个 https 服务器,然后首先使用“https 攻击工具”对其进行攻击。也就是说,这可能会让攻击者感到困惑。

2) 它将使用上面的内容。仅当上面的内容是多个方法/客户端方法的列表,并且您希望将某些规则限制在该列表的子集时,将其放入其中才有用。

3) 不知道“fail2ban”是什么,但你可能想为此制定规则。如果你在 Dante 日志文件中发现来自 IP 地址“k”的 100 个请求被阻止,那么为该 IP 地址添加“客户端阻止”规则可能是明智之举,而不是让它继续玩猜谜游戏。

4)有道理。

5)是的,只要您可以在您的用例中使用它。

6)也许不是。不过可能的情况如下:

  • 使用“method: gssapi”而不是“method: username”。这更安全(不会通过网络将明文用户名/密码发送到 Dante),但配置起来也更困难,并且需要设置 Kerberos。

  • 如果您连接到 Dante 的服务器运行 identd/rfc931-servers,您可以将“clientmethod: none”更改为“clientmethod: rfc931”,并在 Dante 主机上为此目的添加额外的“identd”用户名。这
    将作为一种双因素身份验证,有人必须猜测 Dante 将接受来自哪些 identd 用户名的连接,以及 Dante 将接受来自这些连接的哪些用户名/密码。然而,这也是一种明文协议,因此如果有人可以嗅探网络流量,他们就可以看到 identd 名称以及您的 socks 用户名和密码。

答案2

我认为您的理想配置将受到全世界的欢迎。

这是我的(想象这是你允许的远程 IP:11.25.10.52/0):

- 阻止块(阻止全部意味着 0.0.0.0)

- pass(我猜是传递你的数据的意思)

- 客户端可能通过另一种方式传递。:D

- 好吧就是这样。*** 非常好。。如果你需要帮助,你可以在 fb 上找到我:blaz kos (mas chulo q otros)

最好不要使用 1080,因为所有机器人和扫描仪都会首先尝试这个……

#-------------------------------------------------------------



日志输出:stderr
内部:eth0 端口 = 1234
外部:eth0
用户.特权:代理
用户.非特权:无人
用户.libwrap:无人
客户端传递 {
从:11.25.10.52/0 端口 1-65535 到:0.0.0.0/0
}
传递 {
从:11.25.10.52/32 到:0.0.0.0/0 端口 1-65535
}
块 {
从:0.0.0.0/0 到:0.0.0.0/0
日志:连接错误
}


相关内容