如何通过IP地址限制svnserve服务器访问,仅允许指定IP操作?
解决svnserve设置IP白名单的问题
好问题!直接给你明确结论:svnserve本身并没有内置IP白名单功能,不过在你的Ubuntu系统上,完全可以通过系统层面的工具实现仅允许指定IP访问SVN服务器的需求,不需要依赖Apache。下面给你两种实用的方案:
方案一:使用TCP Wrappers(推荐,配置简单)
绝大多数Linux发行版的svnserve都默认支持TCP Wrappers(这是一个应用层的访问控制工具),你可以先验证一下:
ldd /usr/bin/svnserve | grep libwrap
如果输出包含libwrap.so.0,就说明支持。接下来按步骤配置:
- 首先编辑
/etc/hosts.deny,拒绝所有IP访问svnserve:svnserve: ALL - 然后编辑
/etc/hosts.allow,添加你允许的IP地址(替换成你的实际IP):svnserve: 192.168.1.100 # 单个IP # 要是需要多个IP,用逗号分隔:svnserve: 192.168.1.100,10.0.0.5 # 也可以指定网段:svnserve: 192.168.1.0/255.255.255.0 - 最后重启svnserve让配置生效(如果你的svnserve是用systemd管理的):
要是你是直接用命令启动的进程(比如你给出的PID 31422),可以用sudo systemctl restart svnservekill -HUP 31422让它重新加载配置,不过更稳妥的是重启进程。
方案二:使用iptables(网络层控制,更底层)
如果TCP Wrappers不适用,或者你更倾向于从网络层面限制,那就用iptables(Ubuntu的ufw是它的前端,也可以用ufw操作):
- 先允许你的IP访问SVN默认端口3690:
sudo iptables -A INPUT -p tcp --dport 3690 -s 你的IP地址 -j ACCEPT - 然后拒绝所有其他IP访问这个端口:
sudo iptables -A INPUT -p tcp --dport 3690 -j DROP - 为了让规则在系统重启后依然生效,保存规则:
之后每次重启系统,规则都会自动加载。sudo iptables-save > /etc/iptables/rules.v4
补充说明
两种方案都能实现你要的“仅允许指定IP执行checkout、commit、log等操作”的需求,区别在于:
- TCP Wrappers是在应用层拦截,会记录更详细的访问日志在系统日志里;
- iptables是在网络层拦截,性能更优,适合高流量场景。
你可以根据自己的需求选择其中一种就行。
内容的提问来源于stack exchange,提问作者Eddie Bravo
相关产品推荐
相关产品推荐

