IP 주소로 접근 제어하기

매뉴얼웍스 6.0.18 버전부터 지원합니다.

사용자 IP 접근 제어는 매뉴얼웍스에 접근할 수 있는 클라이언트 IP를 허용하거나 차단하는 기능입니다. 외부에 공개한 서버에서 특정 사무실, VPN, 운영망 등에서만 접속을 허용해야 할 때 사용합니다.

이 기능은 시작 스크립트 옵션 설정으로 활성화한 후 콘솔 명령으로 설정합니다. 기본 모드는 허용 모드이며, IP 주소는 단일 IP, CIDR, 와일드카드, 범위 형식을 지원합니다.

시작 스크립트 옵션 3rabbitz.enable_ip_filter 값이 true일 때만 동작합니다. 이 기능을 사용하려면 서버 시작 옵션에 -D3rabbitz.enable_ip_filter=true를 추가한 후 매뉴얼웍스를 다시 시작합니다.

설정 확인하기

콘솔에서 다음 명령어를 실행합니다.

list-ip-filter

현재 IP 접근 제어 활성화 여부, 접근 제어 모드, 등록한 IP 주소 목록, 프록시 헤더 신뢰 여부, 프록시 수를 확인합니다. 프록시 수는 설정했을 때만 나옵니다.

허용 모드 사용하기

허용 모드에서는 등록한 IP 주소에서 온 요청만 접근할 수 있습니다. 등록하지 않은 IP 주소의 요청은 차단합니다.

콘솔에서 다음 명령어를 실행합니다.

set-ip-filter-mode -mode allow
add-ip-filter -address 203.0.113.10
add-ip-filter -address 192.168.0.0/24

위 예에서는 203.0.113.10 단일 IP와 192.168.0.0/24 대역에서 온 요청만 허용합니다.

허용 모드를 사용할 때는 현재 관리자가 접속한 IP 주소를 먼저 등록해야 합니다. 현재 접속 IP 주소는 /r/api/client_ip 주소에서 확인할 수 있습니다. 현재 접속 IP를 등록하지 않으면 설정 직후 관리자도 접속할 수 없을 수 있습니다. /r/api/client_ip는 접근 제어와 같은 방식(프록시 헤더 신뢰 설정과 프록시 수)으로 IP를 고르므로 접근 제어가 판정하는 IP를 보여줍니다. 프록시 헤더를 신뢰하지 않으면 접근 제어는 서버에 직접 연결한 IP(프록시 뒤라면 프록시 서버 IP)로 판정합니다. 프록시 설정을 바꿨다면 허용 모드를 켜기 전에 /r/api/client_ip로 IP를 다시 확인합니다.

차단 모드 사용하기

차단 모드에서는 등록한 IP 주소에서 온 요청만 차단합니다. 등록하지 않은 IP 주소의 요청은 허용합니다.

콘솔에서 다음 명령어를 실행합니다.

set-ip-filter-mode -mode deny
add-ip-filter -address 198.51.100.20
add-ip-filter -address 10.0.0.0/8

위 예에서는 198.51.100.20 단일 IP와 10.0.0.0/8 대역에서 온 요청을 차단합니다.

IP 주소 삭제하기

등록한 IP 주소를 삭제하려면 콘솔에서 다음 명령어를 실행합니다.

remove-ip-filter -address 203.0.113.10

등록한 IP 주소를 모두 삭제하려면 다음 명령어를 실행합니다.

clear-ip-filter

IP 주소 목록이 비어 있으면 접근 제어 모드와 관계없이 모든 요청을 허용합니다.

프록시 환경에서 사용하기

로드 밸런서나 리버스 프록시 뒤에서 매뉴얼웍스를 실행하면 실제 사용자 IP 대신 프록시 서버 IP가 클라이언트 IP로 인식될 수 있습니다. 신뢰할 수 있는 프록시가 X-Forwarded-For 같은 헤더로 사용자 IP를 전달한다면 다음 명령어를 실행합니다.

trust-ip-filter-proxy

프록시 헤더를 신뢰하면 X-Forwarded-For, Proxy-Client-IP, WL-Proxy-Client-IP 등의 헤더를 차례로 확인하고, 헤더에 IP가 여러 개이면 첫 번째 IP를 사용합니다.

프록시를 거쳐 들어오는 요청은 앞단에 둔 프록시 수를 함께 정하는 것이 안전합니다. 매뉴얼웍스 6.0.26 버전부터 지원합니다.

set-ip-filter-proxy-count -count 1

X-Forwarded-For 헤더의 뒤에서부터 정한 수만큼 떨어진 값을 클라이언트 IP로 씁니다. 프록시가 하나면 1, 로드 밸런서와 리버스 프록시를 차례로 두었다면 2입니다. 1 이상만 설정할 수 있습니다.

프록시 수 설정을 지우려면 0을 지정합니다. 그러면 프록시 수를 정하기 전처럼 헤더의 첫 번째 값을 씁니다.

set-ip-filter-proxy-count -count 0

프록시 수를 정하지 않으면 예전처럼 헤더의 첫 번째 값을 씁니다. 첫 번째 값은 클라이언트가 임의로 넣을 수 있으므로, 허용 모드에서 등록하지 않은 IP가 허용 목록의 IP를 헤더에 넣어 통과할 수 있습니다. 프록시 뒤에서 IP 접근 제어를 쓴다면 프록시 수를 정합니다.

프록시 헤더를 신뢰하지 않으려면 다음 명령어를 실행합니다.

untrust-ip-filter-proxy

인터넷에서 직접 접근할 수 있는 서버에서는 프록시 헤더를 신뢰하지 않는 것이 안전합니다. 신뢰할 수 있는 로드 밸런서나 리버스 프록시가 앞단에 있을 때만 프록시 헤더 신뢰 옵션을 사용합니다.

프록시 헤더 신뢰와 프록시 수 설정은 3rabbitz.enable_ip_filter를 켜지 않아도 API마다 정하는 허용 IP 검사와 /r/api/client_ip에 적용합니다. 프록시 뒤에서 API의 허용 IP를 쓴다면 trust-ip-filter-proxy와 set-ip-filter-proxy-count를 실행합니다. 프록시 헤더를 신뢰하지 않으면 API를 부른 IP를 프록시 서버 IP로 판정합니다.

지원하는 IP 형식

다음 형식을 지원합니다.

add-ip-filter 명령어는 형식을 검사하지 않고 입력한 값을 그대로 등록합니다. 잘못된 IP 주소나 CIDR 형식은 일치하지 않는 항목으로 처리합니다.