具有Firebird 1.0.3和防火墙设置的事件端口

时间:2014-01-29 10:25:30

标签: tcp firebird firewall

我在旧版局域网应用程序中使用 Firebird 1.0.3 ,其中包括必须通知数据库事件的部分(进程) ;它在Windows8上运行。

使用CurrPorts,我观察到在3050 / tcp上侦听的ibserver.exe以及与[SERVERIP]的一些已建立的连接:3050作为一个地址对。到目前为止这么好,我预料到了这种行为。我只能猜到,其他连接(模式[SERVER-P]:[端口X] - [CLIENT-IP]:[端口Y])如何建立。端口X和Y当然是动态端口。我想这对于每个事件通知行

  • Firebird服务器根据客户端的请求打开一个包含动态端口号的套接字
  • Firebird将端口号传递给客户端,然后
  • 客户端现在要创建套接字(动态端口)并调用connect

...但我想清楚地了解它,因为我必须设置防火墙规则。

是否足以在服务器计算机上的应用程序级别启用Firebird(ibserver.exe)?

(目前无法改变火鸟版本和整体架构。)

1 个答案:

答案 0 :(得分:3)

默认情况下,Firebird会为事件使用随机端口。这对防火墙不起作用,因此Firebird还使用RemoteAuxPort中的firebird.conf设置提供使用固定端口的选项。 Firebird 1.5中添加了此选项,请参阅Firebird 1.5 release notes。从Firebird 1.0迁移到Firebird 1.5应该相对容易(迁移到更新版本,如Firebird 2.5可能会更多工作)。

有关详细信息,请参阅MilanBabuškov撰写的The Power of Firebird Events中的常见问题:防火墙部分:

  

客户端在其端口上与Firebird服务器有常规连接(默认为3050,但可以更改)。在注册事件时,它通过该连接发送请求。服务器在某个随机端口(例如4012)打开另一个连接,并将该端口号发送到客户端。然后客户端连接到该端口。

     

[...]

     

当客户端注册事件时,服务器会打开一个随机端口(例如6023)并将该信息发送给客户端。这就是问题变得明显的地方:客户端尝试连接到防火墙上的那个端口(6023)(因为它“将防火墙视为”服务器)。由于端口是完全随机的,因此防火墙上的端口肯定没有转发规则,因此连接被拒绝。使用此设置,没有办法使其工作,没有将所有流量(所有端口)转发到Firebird服务器,这是我们希望通过将防火墙置于前面而避免的确切事情。