远程网站服务器的Python LDAP认证

0 投票
2 回答
2864 浏览
提问于 2025-04-15 12:13

我有一个在webfaction上托管的django应用,现在它有一个静态/私有IP。

我们办公室的网络显然是在防火墙后面的,AD服务器也在这个防火墙后面。在内部网络中,我可以使用python-ldap通过AD的内部IP地址和端口389进行身份验证,一切都运行得很好。

当我把这个应用移到托管的web服务器上时,我更改了在防火墙上开放的IP地址和端口。为了简单起见,我们开放的端口是389,但进行身份验证的请求总是超时。当我登录到webfaction并从命令行运行python,查询IP地址时,我得到的是webfaction的公共IP地址,而不是我的静态IP。

这是不是我在django中尝试进行身份验证时发生的情况?请求是从python运行的底层IP地址发出的,而不是我的防火墙所期待的静态IP?

我对这些网络和端口映射的知识相当有限,所以任何帮助都将非常感激!

希望这样说清楚了?

2 个回答

0

在你托管的django应用和内部的AD(活动目录)之间,有很多组件。你需要逐个测试,确保它们之间的连接都是正确的。

你的AD服务器位于防火墙后面。防火墙的IP是"a.b.c.d",所有发往这个IP的389端口的流量都会转发到AD服务器。我建议你把这个端口换成一个更高、更随机的端口,这样可以减少被扫描的机会。

通过shell访问,你可以测试一下是否能连接到你的网络。在你尝试以下操作时,可以让防火墙管理员查看防火墙的日志:

  • 检查到防火墙的路由(如果webfaction阻止了这个操作,可能会失败,否则你会看到流量经过的主机列表。如果路由中有防火墙,你会发现连接在那儿丢失,因为大多数防火墙默认会丢弃这样的连接):

    tracert a.b.c.d

  • 对防火墙的IP进行telnet测试,端口是389(这个telnet测试可以让防火墙管理员在日志中看到389端口的连接尝试。如果这些连接到达了,说明外部通信应该没问题):

    telnet a.b.c.d 389

同样,你需要检查AD服务器是否收到了这些请求(查看日志),并且能够做出响应。也许你的AD服务器没有设置好与防火墙通信?

3

我不建议直接在防火墙上打开LDAP的端口。相反,我建议使用SSH隧道。这种方式可以为LDAP的通信加上必要的加密。下面是一个例子。

ssh -N -p 22 username@ldapserver -L 2222/localhost/389

这个例子假设你的LDAP服务器上的SSH服务运行在22号端口,并且可以从你的网页主机访问。它会在LDAP服务器的389号端口和网页主机的2222号端口之间建立一个隧道。然后,你需要在网页主机上配置你的Django应用,让它认为LDAP服务器运行在本地主机的2222号端口上。

撰写回答