IP 주소 대신 동적 DNS로 Nginx 허용 목록을 사용하는 방법은 무엇입니까?

IP 주소 대신 동적 DNS로 Nginx 허용 목록을 사용하는 방법은 무엇입니까?

Ubuntu 20.04에서 Nginx 웹 서버를 실행하고 있습니다. 내 가상 호스트 구성 파일에서 지정된 IP를 제외한 모든 IP가 URL에 액세스하는 것을 차단하도록 허용/거부 지시문을 설정했습니다. 내 가상 호스트 설정은 다음과 같습니다.

server {
    # Restrict access to LAN & Personal IP's
    allow 127.0.0.1; # LoopBack IP Address
    allow 192.168.1.0/24; # LAN IP Address
    allow 123.456.789.102/32; # Home Public IP Address
    allow 111.222.333.444/32; # Work Dynamic IP Address
    deny all;
    error_page 403 =444;
...

문제는 내 "회사 동적 IP 주소"가 실제로 동적이며 자주 변경된다는 것입니다. 그래서 며칠 정도는 직장 IP 주소에서 웹페이지에 액세스할 수 있을 것입니다 111.222.333.444/32. 그런데 회사 동적 IP 주소가 로 변경되면 555.777.888.999/32회사 공용 IP 주소가 변경되어 더 이상 회사에서 웹 페이지에 액세스할 수 없습니다.

현재 저는 동적 DNS 공급자를 통해 회사 IP 주소를 설정했습니다. 따라서 내 업무용 동적 DNS 주소는 입니다 dansworkip.ddnsfree.com. 내 작업의 공용 IP 주소가 변경되면 Nginx가 domain 에서 새 IP 주소를 조회 dansworkip.ddnsfree.com하고 이를 허용 지시문에 넣을 수 있도록 동적 DNS 호스트 주소를 Nginx의 허용 목록에 통합하고 싶습니다 .

나는 다음과 같은 것을 시도했습니다 :

server {
    # Restrict access to LAN & Personal IP's
    allow 127.0.0.1; # LoopBack IP Address
    allow 192.168.1.0/24; # LAN IP Address
    allow 123.456.789.102/32; # Home Public IP Address
    allow dansworkip.ddnsfree.com; # Work Dynamic IP Address
    deny all;
    error_page 403 =444;
...

하지만 이 구성을 시도하면 Nginx가 시작되지 않고 Nginx 로그에 다음 오류가 표시됩니다.

[emerg] 10269#10269: invalid parameter "dansworkip.ddnsfree.com" in /etc/nginx/conf.d/www.mysite.com

제 질문은 Nginx가 허용된 도메인의 IP 주소를 조회하고 동적 DNS 호스트 이름의 IP 주소를 화이트리스트에 추가하도록 동적 DNS를 Nginx에 통합하려면 어떻게 해야 합니까?입니다.

답변1

IP 주소를 인증 토큰으로 사용하는 것은 일반적으로 나쁜 습관으로 간주됩니다. Nginx에는 귀하가 요청한 것을 달성할 수 있는 기능이 없습니다. 귀하가 제기한 문제에 대한 해결책을 정말로 찾아야 한다면 댓글에 제안된 Alexey의 솔루션을 사용하겠습니다. 그러나 Nginx에는 다음을 수행할 수 있는 매우 유용한 인증/권한 부여 기능이 있습니다.결정을 넘겨주다귀하가 선택/디자인한 웹페이지로 이동합니다.

거기에서 코딩할 수 있는 인증 규칙/메커니즘을 사용할 수 있습니다. 세션 데이터를 사용할 수 있지만(선택한 도구가 이를 지원하는 경우) 세션 식별자가 게이트웨이를 제공하는 애플리케이션에 의해 구현된 것과 충돌할 수 있는지 여부를 고려하십시오.

예를 들어, PHP에서는

<?php
$ipdir="/var/www/access";
$TTL=600;

function deny_access() 
{
   header('HTTP/1.0 403 Forbidden');
   exit;
}

function permit_access()
{
   print "";
   exit;
}

function refresh_config()
{
   // replace files in "/allow", delete aged files from "/deny"
   // then update timestamp on control file.
   // Implementation left as an exercise for the reader
}

if (time() - filemtime($ipdir . "/control.file") > $TTL) {
    refresh_config();
} 
if (file_exists($ipdir . "/deny", $_SERVER['REMOTE_ADDR'])) {
    deny_access();
} else if (file_exists($ipdir . "/allow", $_SERVER['REMOTE_ADDR'])) {
    permit_access();
} else {

}

여러 요인에 따라 더 효율적일 수 있지만 IP 주소로 제한되는 대체 접근 방식은 다음을 유지하는 것입니다.nginx 자체에서 조회- 외부 목록을 유지 관리합니다.

관련 정보