Apache:允许从域访问而不使用反向查找

Apache:允许从域访问而不使用反向查找

我想允许从 apache 中的“域名”而不是 IP 地址访问文件夹。现在,allow from接受域作为参数,但我认为它还会进行反向 DNS 查找以进行交叉检查(这很好,但对我来说太严格了)。有没有办法配置 apache 不进行反向 DNS 检查(针对该特定allow from指令)。

((基本上,我只想允许从具有动态 IP 地址的 PC 进行访问。我已使用 DynDns 将其映射到域 - 但是我的“动态 IP”的反向查找不会解析到该域))。

或者,如果有人可以建议一项免费服务,该服务还可以为我的动态 IP 配置反向 DNS 查找(首先不知道这是否可行),那么这也可以解决问题。

谢谢!

J.P

答案1

简短的回答是否定的,因为 ApacheAllow from必须执行反向和正向 DNS 查找:

“此配置将导致 Apache 对客户端 IP 地址执行双重反向 DNS 查找,无论 HostnameLookups 指令的设置如何。它将对 IP 地址执行反向 DNS 查找以查找关联的主机名,然后对主机名执行正向查找以确保它与原始 IP 地址匹配。只有正向和反向 DNS 一致且主机名匹配时才会允许访问。”

我的建议是对该特定目录进行某种身份验证,而不是尝试通过主机名进行限制。

答案2

更新:如果你的 Apache 版本 >= 2.4.19,你可以使用

Require forward-dns yourhost.example.com

这不会进行反向查找。当然,它需要完整的主机名。请参阅Apache 关于“需要 forward-dns”的文档了解详情。

对于旧版本的 Apache:

通常情况下,您不能对动态主机使用“允许来自”功能(对于动态主机,反向 DNS 通常指向您的 ISP)。但无论如何,对于一些不值得使用身份验证进行保护的页面,我还是想这样做。所以这是我的解决方法。

我的服务器配置为在 DNS 之前首先使用 /etc/hosts 文件。这是通过添加order hosts,bind以下内容实现的/etc/host.conf

# cat /etc/host.conf 
order hosts,bind
multi on

我有一个 cron 作业,每 15 分钟用我当前的动态外部 IP 更新主机文件。就我而言,我在自己的 DNS 上有自己的子域,并且想要更新多个主机。我从 cron 调用的更新脚本是:

#!/bin/sh
## Update /etc/hosts with our dynamic hosts

# dig ends the domain name with a dot, so we need it
domain=dyn.example.com.

die() {
    echo "$1" 1>&2
    exit 1;
}

tmpfile=$(mktemp "/tmp/hosts.XXXXX")
cp -a /etc/hosts $tmpfile || die "Cannot copy /etc/hosts to $tmpfile"

perl -i -ne "print unless /\Q$domain\E\s/" $tmpfile || die "Cannot remove $domain from $tmpfile"

dig -t AXFR $domain | \
  perl -lne '/^(\S+)\s+\d+\s+IN\s+A\s+(\S+)/ && print "$2 $1"' >> $tmpfile \
  || die "Cannot add $domain entries to $tmpfile"

mv $tmpfile /etc/hosts || die "Error cannot mv $tmpfile to /etc/hosts"

如果您只需要更新单个主机,那么您的脚本可以比这简单得多。

相关内容