如何使用 KrakenD 禁止访问来自本地主机的请求的某些端点?
How to forbid access to certain endpoint for requests out of localhost using KrakenD?
我有两个端点,我希望其中之一只能通过本地主机的请求访问。另一个应该接收来自任何地方的请求。在文档的 Security 部分,我找到了下一个配置:
"extra_config": {
"github_com/devopsfaith/krakend-httpsecure": {
"allowed_hosts": [
"host.known.com:443"
]
}
}
但这只是在根级别。此外,这包括端口,我需要过滤条件:“来自本地主机?”
有什么方法可以满足这个要求吗?是否使用KrakenD、IPTables等...
KrakenD Enterprise 为您解决。但如果您使用的是社区版,那么您可以使用 Common Expression Language (CEL) 组件。
虽然它比 IP 过滤(企业)本身有更多限制,但 CEL 允许您在后端实际受到攻击之前编写 pre-conditions。
检查请求是否来自本地主机 (IPv6) 的示例:
{
"endpoint": "/localhost-ipv6",
"extra_config": {
"validation/cel": [
{
"check_expr": "'127.0.0.1' in req_headers['X-Forwarded-For']"
}
]
}
}
您可以使用您在环境中收到的 X-Forwarded-For
的确切值来调整上述代码段。为确保您测试的是正确的东西,请创建如下所示的测试端点:
{
"endpoint": "/test-headers",
"backend": [
{
"host": ["http://localhost:8080"],
"url_pattern": "/__debug/"
}
]
}
使用 krakend run -d -c krakend.json
启动 krakend,然后从内部和外部发出请求。您将在 KrakenD 日志中看到 headers。喜欢:
2022/03/15 10:38:26 KRAKEND DEBUG: [ENDPOINT: /__debug/*] Headers: map[Accept-Encoding:[gzip] User-Agent:[KrakenD Version 2.0.0] X-Forwarded-For:[127.0.0.1] X-Forwarded-Host:[localhost:8080]]
最后,还有其他方法可以用 CEL 组件解决这个问题。您甚至可以使用 CEL 创建伪身份验证,例如:
{
"validation/cel": [
{
"check_expr": "'acbdefghijklmnopqrstuvwxyz1234567890' in req_headers['X-KEY']"
}
]
}
文档中有更多示例https://www.krakend.io/docs/endpoints/common-expression-language-cel/
我有两个端点,我希望其中之一只能通过本地主机的请求访问。另一个应该接收来自任何地方的请求。在文档的 Security 部分,我找到了下一个配置:
"extra_config": {
"github_com/devopsfaith/krakend-httpsecure": {
"allowed_hosts": [
"host.known.com:443"
]
}
}
但这只是在根级别。此外,这包括端口,我需要过滤条件:“来自本地主机?”
有什么方法可以满足这个要求吗?是否使用KrakenD、IPTables等...
KrakenD Enterprise 为您解决。但如果您使用的是社区版,那么您可以使用 Common Expression Language (CEL) 组件。
虽然它比 IP 过滤(企业)本身有更多限制,但 CEL 允许您在后端实际受到攻击之前编写 pre-conditions。
检查请求是否来自本地主机 (IPv6) 的示例:
{
"endpoint": "/localhost-ipv6",
"extra_config": {
"validation/cel": [
{
"check_expr": "'127.0.0.1' in req_headers['X-Forwarded-For']"
}
]
}
}
您可以使用您在环境中收到的 X-Forwarded-For
的确切值来调整上述代码段。为确保您测试的是正确的东西,请创建如下所示的测试端点:
{
"endpoint": "/test-headers",
"backend": [
{
"host": ["http://localhost:8080"],
"url_pattern": "/__debug/"
}
]
}
使用 krakend run -d -c krakend.json
启动 krakend,然后从内部和外部发出请求。您将在 KrakenD 日志中看到 headers。喜欢:
2022/03/15 10:38:26 KRAKEND DEBUG: [ENDPOINT: /__debug/*] Headers: map[Accept-Encoding:[gzip] User-Agent:[KrakenD Version 2.0.0] X-Forwarded-For:[127.0.0.1] X-Forwarded-Host:[localhost:8080]]
最后,还有其他方法可以用 CEL 组件解决这个问题。您甚至可以使用 CEL 创建伪身份验证,例如:
{
"validation/cel": [
{
"check_expr": "'acbdefghijklmnopqrstuvwxyz1234567890' in req_headers['X-KEY']"
}
]
}
文档中有更多示例https://www.krakend.io/docs/endpoints/common-expression-language-cel/