注意:这个问题是关于内置 OpenBSD http 服务器名为httpd
及其配置。它不适用于任何其他网络服务器。
是否可以对新的 OpenBSD http 服务器进行运行时条件配置httpd
?一个简单的例子是
server "myserver.com" {
if $REMOTE_ADDR == "127.0.0.1" block drop
}
禁止本地访问。
另一个也许更相关和更具启发性的例子是,我正在实现一个从特定位置运行的远程服务的接口,那么我将受益于类似的东西
remote_service1_ip = "192.168.0.1"
server "myserver.com" {
location "/remote_service1_api/" {
if $REMOTE_ADDR != $remote_service1_ip block drop
}
}
如果这是可能的,正确的做法是什么?
更一般地说 - 有许多预定义的宏在man
-OpenBSD 页面-httpd.conf
如中所述block
:
$DOCUMENT_URI
The request path.
$QUERY_STRING
The optional query string of the request.
$REMOTE_ADDR
The IP address of the connected client.
$REMOTE_PORT
The TCP source port of the connected client.
$REMOTE_USER
The remote user for HTTP authentication.
$REQUEST_URI
The request path and optional query string.
$SERVER_ADDR
The configured IP address of the server.
$SERVER_PORT
The configured TCP server port of the server.
$SERVER_NAME
The name of the server.
%n
The capture index n of a string that was captured by the enclosing location match option.
我想知道如何使用它们。在重定向上下文中使用$REMOTE_ADDR
对我来说似乎相当愚蠢,我想应该有其他用途可以使用它们,但我在文档中找不到或理解任何此类用例。
答案1
同时httpd
支持使用patterns
alias match
在某些关键字 ( ,, )的上下文中,location match
您server match
正在寻找的功能未在 中实现httpd
。
我看到有两种方法可以实现你的意图:
- 邮件列表上的 crosspost
openbsd-misc
- 的作者之一httpd
可能会在那里接你 - 使用
pf
到防火墙。由于各种原因,我强烈推荐这种方式,包括httpd
由于应用程序 ( ) 不必承受任何负载,因此可以针对拒绝服务类型的攻击提供更高级别的保护- 来自客户端的数据包可以在全局 (
IP
) 范围内进行检查和阻止 - 即泛洪客户端可能无法连接到该ssh
端口
我认为,pf
学习是一件非常令人满意的事情。
此外,我怀疑对相应帖子的可能答案openbsd-misc
与我的建议类似:)