- 사용할 WAF는 Naxsi로 Nginx 서버를 보호하는 WAF입니다. 혹시 Apache 등 다른 웹 서버를 사용한다면 제대로 동작하지 않을 가능성이 있습니다. 

 

 

1. WAF 플러그인 설치

System - Firmware - Plugins - os-nginx 설치

- 필요한 경우 Opnsense 업데이트를 먼저 진행합니다. GUI에서 업데이트가 제대로 안된다면 Cli를 사용하면 됩니다. 다만, 업데이트 전 문제가 생길 수 있으니 스냅샷 등 백업을 해두는 것을 추천합니다.

 

2. Reverse Proxy 설정

- Reverse Proxy는 클라이언트가 서버로 접근할 때, 서버로 직접 접근(요청)하지 못하도록 중간에서 클라이언트에게 요청 받고 서버 응답을 대신 전달하는 역할을 수행한다. 덕분에 로드 밸런싱 및 보안 강화를 수행할 수 있다.

 

Sevices - Nginx - Configuration - Upstream - Upstream Server - +버튼

- 동일한 서비스를 2개 이상의 서버에서 운영하고 있다면 2개 서버 모두 등록

 

- Description: 웹 서버 이름(구분하기 위한 적절한 이름)

- Server: 서버 IP(서브넷 마스크 없이 EX - 10.0.0.1)

- Port: 서비스 포트

- Server Priority: 로드밸런싱 할 때 우선 순위(단일 서버라면 그냥 1 입력)

- 서버 최대 연결 수, 로드밸런싱 대상에서 서버를 제외할 실패 횟수 기준, 최대 대기 시간 등은 필수 입력 아님

 

 

Sevices - Nginx - Configuration - Upstream - Upstream - +버튼

 

 

- Description: 서비스 명(위에 등록한 웹 서버 묶음으로 구분하기 위한 적절한 이름)

- Server Entries: 서비스 대상(여러 서버 등록 가능)

- Load Balancing Algorithm: 로드밸런싱 방식 

  => 'Weighted Round Robin' 은 서버에 가중치 부여 후 가중치에 따라 적절히 트래픽 배분 

  => 'IP Hash'은 IP를 기억하여 한 번 연결된 서버로 계속 트래픽 전달

- 나머지는 TLS 설정으로 우선 기본값 유지

 

 

Sevices - Nginx - Configuration - HTTP(S) - Location - +버튼

 

- Description: 적절한 이름

- URL Pattern: 접근 가능한 경로 설정(접근 경로를 필터링 할 목적이 있다면 지정하고 아니면 루트경로 / 입력)

  => EX) /abc/로 URL Pattern을 등록하면 /abc/ 경로론 접근 가능하나 /123/ 경로는 실제 존재해도 접근 불가(404 Error)

- Upstream Servers: 요청을 프록시할 서버(위에서 생성한 Upstream Servers 선택)

 

 

Sevices - Nginx - Configuration - HTTP(S) - HTTP Server - +버튼

 

- HTTP(S) Listen Address: HTTP 혹은 HTTPS 서비스 Port 입력

  => EX) HTTP Listen Address를 8888로 지정한다면 외부에서 서비스 접근을 8888 Port로 해야한다.

- Server Name: IP 접근을 허용한다면 WAN IP, 도메인으로 접근을 허용할 거면 허용할 도메인을 입력 / IP 접근, 도메인 접근 동시 허용 가능

- Locations: Server Name + Listen Address로 접근했을 때 배분할 서버 지정(위에서 생성한 Location)

 

 

 

Sevices - Nginx - Configuration - General Settings - Enable nginx 체크 - Apply

- Nginx 프록시 (재)시동

 

 

3.접근 테스트

- 테스트 전에 Opnsense 방화벽 정책을 생성해줘야한다. (WAF 설정 관련 글이기에 방화벽 룰은 생략)

  => 인터페이스는 WAN, 오픈할 Port는 위에 ' HTTP Server'에서 정의한 HTTP(S) Listen Address로 설정

참고 사이트: https://docs.opnsense.org/manual/firewall.html

 

Rules — OPNsense documentation

Before creating rules, it’s good to know about some basics which apply to all rules. States By default rules are set to stateful (you can change this, but it has consequences), which means that the state of a connection is saved into a local dictionary w

docs.opnsense.org

 

- 외부에서 접근 시 접근 가능

 

- opnsense에서 접근 로그 확인 가능

Sevices - Nginx - Logs / HTTP Access

- 접근 시간, 접근한 IP, 접근 경로 등 확인 가능

 

- Nginx 웹 서버에서 tcpdump로 트래픽을 확인하면 출발지 IP는 OPNsense.localdomain으로 확인된다.

  => 웹 서버에 클리이언트의 요청이 직접 도달하지 않음

 

이렇게 되면 Reverse Proxy 설정이 완료된다. 이제 다음 글에서는 웹 서버를 외부 위협에서 보호하기 위한 WAF 설정을 진행할 예정이다.

 

참고 사이트: https://docs.opnsense.org/manual/how-tos/nginx.html

 

nginx: Basic Load Balancing — OPNsense documentation

3) Create A Location Locations are are used to map URLs to upstreams, directories, settings and so on. In our case we want to proxy the request to the previously created upstream. If we want to match everything, we use “/” without a special matcher. No

docs.opnsense.org

 

+ Recent posts