Short summary
I would like to suggest adding a configurable listen address / bind address to /ip/service, allowing services such as WinBox, SSH, API and WebFig to listen only on explicitly selected local IP addresses instead of all addresses assigned to the router.
This would make it possible to completely avoid exposing management services on public-facing IP addresses without requiring firewall rules.
Detailed description
Consider a MikroTik router with multiple IP addresses, for example:
- a private management IP
- one or more internal/service IPs
- a public Internet-facing IP
Currently, services configured under /ip/service, such as WinBox, SSH, API or WebFig, are listening on the router's addresses. The address / "Available From" setting can restrict which source addresses are allowed to use the service, but this is an access restriction rather than a configurable local bind address.
From a network perspective, I would prefer the service to not listen at all on addresses where it is not required.
For example, I would like to be able to configure something conceptually similar to:
/ip/service set winbox listen-address=10.0.0.1
or perhaps reference an address configured under /ip/address.
The result should be that WinBox actually opens TCP/8291 only on 10.0.0.1, while TCP/8291 is not opened by the service on the router's public IP address at all.
The same would apply to SSH, API, API-SSL, HTTP/HTTPS, etc.
Of course, this can currently be achieved from a security perspective by using the RouterOS firewall and dropping connections to the respective service ports on unwanted interfaces or destination addresses.
However, that means the firewall has to process the traffic in the first place. In a router handling a large amount of traffic, adding firewall processing for something that may only be relevant to perhaps one out of a million packets seems unnecessary when the application could simply not bind to that IP address in the first place.
I also see a conceptual difference between these two configurations:
Available From:
"The service is listening here, but only these remote addresses are permitted to use it."
Listen Address:
"The service does not exist on this local IP address at all."
I think both settings have their purpose and could complement each other.
Ideally, listen-address could either accept one or multiple local IP addresses directly, or possibly reference addresses configured under /ip/address.
For routers with dedicated management addresses, loopbacks, public transit addresses and customer-facing interfaces, this would provide a very clean way of explicitly defining where RouterOS management services should actually be exposed.
How important/useful would such a feature be for other RouterOS users?
Do you generally solve this exclusively with firewall rules, or would you also prefer the individual RouterOS services to support explicit local address binding?