Nginx는 실제 프로덕션 환경에서 널리 사용되는 오픈소스 고성능 웹 서버이자 역방향 프록시 서버입니다. 역방향 프록시 기능은 트래픽 제어, 로드 밸런싱, 보안 보호와 같은 기능을 구현하는 데 도움이 될 수 있습니다. 그러나 역방향 프록시를 수행할 때 클라이언트의 IP 주소 및 지리적 위치 정보와 같은 다른 요소를 고려해야 합니다. 이를 통해 당사는 액세스를 더 잘 제어하고 웹사이트의 보안을 보장할 수 있습니다.
따라서 이 글에서는 Nginx 리버스 프록시에서 IP 주소와 지리적 위치를 기반으로 ACL을 구성하여 보다 세부적인 액세스 제어를 달성하는 방법을 소개합니다.
1. ACL이란 무엇입니까
구체적인 구성 방법을 소개하기 전에 먼저 ACL이 무엇인지 알아야 합니다. ACL(Access Control List)은 액세스 제어 목록으로, 네트워크 장치의 데이터 흐름을 제어하는 데 사용되는 정책입니다. ACL을 통해 다양한 조건에 따라 트래픽을 분류하고 제한하여 네트워크 보안 및 트래픽 제어 목적을 달성할 수 있습니다.
Nginx에서는 IP 주소, 지리적 위치 및 기타 조건을 기반으로 ACL을 구성하여 액세스를 제어할 수 있습니다. 따라서 역방향 프록시를 수행할 때 클라이언트의 IP 주소와 위치 정보를 기반으로 해당 ACL을 구성하여 클라이언트의 요청을 더 잘 제어할 수 있습니다.
2. IP 주소 기반 ACL 구성
IP 주소는 Internet Protocol Address의 약자로 인터넷 프로토콜 주소입니다. 인터넷에서 고유한 컴퓨터를 식별하는 식별자로 32개의 이진수 비트로 구성되며 일반적으로 4개의 십진수로 표시되며 각 비트는 마침표로 구분된 0~255 사이의 값을 갖습니다(예: 127.0 .0.1).
IP 주소는 사용 범위, 할당 규칙, 주소 형식 등의 요소에 따라 분류될 수 있습니다. 일반적인 분류 방법은 다음과 같습니다.
(1) 사용 범위에 따라 공인 IP 주소와 사설 IP 주소로 구분됩니다. 공인 IP 주소는 인터넷에 연결하는 데 사용되며 사설 IP 주소는 인트라넷에 사용됩니다. 의사소통.
(2) 할당 규칙에 따라 고정 IP 주소와 동적 IP 주소로 구분됩니다. 고정 IP 주소는 네트워크 관리자가 수동으로 설정하는 고정 IP 주소로, 일반적으로 서버와 같이 위치가 고정된 장치에 사용됩니다. 동적 IP 주소는 네트워크 서비스 공급자가 동적으로 할당하고 시간이 지남에 따라 변경되는 IP 주소입니다.
(3) 주소 형식에 따라 IPv4 주소와 IPv6 주소로 구분됩니다. IPv4 주소는 현재 널리 사용되는 32비트 주소 형식입니다. IPv6 주소는 128비트 주소 형식을 사용하는 차세대 IP 주소로 IPv4 주소를 대체하는 데 사용됩니다.
Nginx에서는 클라이언트의 IP 주소를 기반으로 역방향 프록시 ACL 구성을 수행할 수 있습니다. 구체적인 구성은 다음과 같습니다.
(1) 단일 IP 주소 제한
단일 IP 주소로만 액세스를 제한해야 하는 경우 다음 구성을 사용할 수 있습니다.
location / { #allow access from IP address 192.168.1.100 allow 192.168.1.100; deny all; }
위 구성에서 허용 지시어는 다음과 같습니다. 액세스를 제한하는 데 사용되며 거부 지시어는 액세스를 거부하는 데 사용됩니다. IP 주소가 192.168.1.100인 클라이언트만 접속이 허용되며, 다른 클라이언트는 거부됩니다.
(2) 다중 IP 주소 제한
여러 IP 주소에 대한 액세스를 제한해야 하는 경우 다음 구성을 사용할 수 있습니다.
location / { #allow access from IP address 192.168.1.100 and 192.168.1.101 allow 192.168.1.100; allow 192.168.1.101; deny all; }
위 구성에서는 IP 주소가 192.168.1.100 및 192.168.1.101인 클라이언트가 허용됩니다. 에 액세스하려면 다른 클라이언트가 거부됩니다.
(3) IP 주소 세그먼트에 따른 제한
특정 IP 주소 세그먼트에 대한 액세스를 제한해야 하는 경우 다음 구성을 사용할 수 있습니다.
location / { # allow access from IP address segments 192.168.1.0/24 allow 192.168.1.0/24; deny all; }
위 구성에서 IP 주소 세그먼트가 192.168.1.0인 클라이언트 /24는 액세스가 허용되며 다른 클라이언트는 거부됩니다. 그 중 "/24"는 마스크를 뜻하는데, 처음 24비트가 네트워크 주소이고 마지막 8비트가 호스트 주소라는 뜻이다.
3. 지리적 위치 기반 ACL 구성
Nginx에서 지리적 위치 기반 ACL 구성을 구현하려면 MaxMind GeoIP2가 필요합니다. MaxMind GeoIP2는 풍부한 지리적 위치 정보를 제공하는 IP 지리적 위치 데이터베이스입니다. GeoIP2를 통해 클라이언트의 IP 주소를 도시, 지역, 국가 및 해당 ISO 코드와 같은 정보에 매핑할 수 있습니다.
GeoIP2 설치는 크게 4단계로 나뉩니다.
(1) 종속성 패키지 설치
yum -y install automake autoconf libtool gcc make pcre-devel zlib-devel
(2) GeoIP2 다운로드
wget https://github.com/maxmind/geoip-api-c/releases/download/v1.9.2/GeoIP-1.9.2.tar.gz
(3) 압축을 풀고 GeoIP2 설치
tar xzf GeoIP-1.9.2.tar.gz cd GeoIP-1.9.2 ./configure make && make check && make install
(4) 다운로드 GeoIP2-Library 및 GeoIP2-City
mkdir /usr/share/GeoIP cd /usr/share/GeoIP/ wget http://geolite.maxmind.com/download/geoip/database/GeoLite2-City.tar.gz wget http://geolite.maxmind.com/download/geoip/database/GeoLite2-Country.tar.gz tar -zxvf GeoLite2-City.tar.gz tar -zxvf GeoLite2-Country.tar.gz
GeoIP2를 설치한 후에는 Nginx에서 그에 맞게 구성해야 합니다. 구체적인 단계는 다음과 같습니다.
(1) Nginx 구성 파일에 GeoIP2 관련 구성을 추가합니다
# set geoip database path geoip_country /usr/share/GeoIP/GeoLite2-Country.mmdb; geoip_city /usr/share/GeoIP/GeoLite2-City.mmdb; # enable nginx api http { geoip2 /usr/share/GeoIP/GeoLite2-City.mmdb { $geoip2_data_city_name city names en; $geoip2_data_country_iso_code country iso_code; $geoip2_data_latitude latitude; $geoip2_data_longitude longitude; } }
위 구성에서는 GeoIP2의 데이터베이스 경로를 지정하고 도시, 국가, 경도 및 위도 등과 관련된 정보를 구성했습니다. . 이후 사용을 위해.
(2) Nginx 위치에서 GeoIP2 사용
location / { # allow access from China if ($geoip2_data_country_iso_code != CN) { return 403; } }
위 구성에서는 클라이언트의 지리적 위치 정보를 확인하고 중국(국가 코드는 CN)의 클라이언트만 액세스하도록 허용합니다.
IV.요약
본 글의 소개를 통해 Nginx 리버스 프록시에서 IP 주소와 지리적 위치를 기반으로 한 ACL 구성과 지리적 위치 정보 쿼리 및 접근 제어를 위해 MaxMind GeoIP2를 사용하는 방법에 대해 알아보았습니다. 이러한 기능을 통해 당사는 클라이언트 액세스를 더욱 잘 제어하고 보다 안전하고 효율적인 서비스를 제공할 수 있습니다. 이 글이 독자들에게 도움이 되기를 바랍니다.
위 내용은 Nginx 리버스 프록시의 IP 주소 및 지리적 위치를 기반으로 한 ACL 구성의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!