Webserver

OpenBSD httpd.conf 條件

  • July 4, 2016

注意:這個問題是關於名為的內置 O​​penBSD http 伺服器httpd及其配置。它不適用於任何其他 Web 伺服器。

是否可以對新的 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
 }
}

如果這是可能的,那麼正確的做法是什麼?

更一般地說 - 在 OpenBSD 的man-page 中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對我來說似乎相當愚蠢,我想應該有其他東西可以使用它們,但我在文件中找不到或理解任何這樣的案例。

雖然httpd支持patterns在某些關鍵字(alias match、、 )的上下文中使用location matchserver match但您正在尋找的功能未在httpd.

我看到了兩種實現你的意圖的方法:

  1. 郵件列表上的交叉openbsd-misc郵件 - 的作者之一httpd可能會在那裡接你
  2. 用於pf防火牆。我強烈推薦這種方式,原因有很多,包括
  • 對拒絕服務類型的攻擊提供更高級別的保護,因為應用程序 ( httpd) 不必承受任何負載
  • IP來自客戶端的數據包可以在全域( )範圍內被檢查和阻止- 即氾濫的客戶端可能無法連接到ssh

我認為,pf學習可以是一件非常令人滿意的事情。

此外,我懷疑對相應文章的可能答案openbsd-misc與我的建議相似:)

引用自:https://unix.stackexchange.com/questions/275665