본문 바로가기
방랑자의 공부/정리하지 않은 공간

[OPNsense] - nginx reverse proxy 사용하기

by 푸른방랑자 2022. 2. 20.
반응형

안녕하세요 여태 OPNsense를 설치했고, VPN까지 설치를 했습니다.

[개요]

가정에서 웹서버나 NAS같은것을 운영하게 된다면 외부에서도 접속을 할 경우가 잦아질 넨데 이때마다 VPN을 연결 하는 것은 굉장히 불편합니다. 특히 저는 WireGuard를 설치해서 설정 해 두지 않은 PC는 더욱 힘들죠.
더구나 웹서버를 운영하는 경우에느 VPN접속을 해야 볼 수 있다? 불편합니다.

외부에서 접속을 하기 위해서는 포트포워드를 사용하여 로컬IP를 공인IP로 변경하는 방법을 쓰고, 공유기에서도 쉽게 사용할 수 있죠.
(쉽게말해 포트포워드는 특정 포트로 들어오는 패킷을 포트를 바꿔서 통신 해주는 것)
ddns를 사용하여 웹 서비스를 2개를 사용한다고 가정 해 봅시다.
A(192.168.0.5), B(192.168.0.6)서비스에 각각 80, 443 포트가 사용 될 거지만, 포트포워딩에서는 외부에서 알 수 있는 공인IP(예시도메인: nevar.org)의 포트를 A, B서비스로 연결해야 합니다.
A로 접근을 설정하자면 nevar.org:80, :443 -> A(192.168.0.5:80, 443)으로 연결합니다.
B로 접근을 설정하자면 어? 공인 IP의 80, 443을 사용 했네요? nevar.org:8888, 9443 -> B(192.168.0.6:80, 443)
이런식으로 사용하게 되면 내가 모든 포트를 기억해야 외부에서 접근할 수 있고, 다른 사용자들이 접근하기 위해서도 번거롭게 됩니다.

여기서 Proxy라는 것을 사용하게 되면 중계기를 통해서 접속을 할 수 있게됩니다.
A.nevar.org -> 192.168.0.5, B.nevar.org -> 192.168.0.6 이런식으로 서브도메인을 기억하여 웹서버로 접속할 수 있게되죠.
더구나 Proxy에서 ssl인증서를 확인 한 다음 내부에서는 http통신이 가능하기도 합니다.
자세하게 설명을 하고 싶지만 다루시는 분이 많기에, 생각나는데로 끄적이고 설정 방법으로 들어갑니다.

[설정방법]

[인증서]

[System] → [Firmware] → [Plugins] 으로 이동 후, os-acme-clinet와 os-nginx를 설치 해 줍니다.

 

[Services] → [ACME Client] → [Settings] → [Settings]으로 이동하여 위와같이 체크를 해 준다음 Apply

 

[Services] → [ACME Client] → [Settings] → [Update Schedule]으로 이동하여, 인증서가 자동 갱신 될 수 있도록 자동 스케쥴 추가

 

[Services] → [ACME Client] → [Accounts], 인증서를 생성할 계정의 이름과 이메일 주소를 작성

 

[Services] → [ACME Client] → [Automations], 최신 인증서가 갱신될 때 마다 nginx를 재시작하여 최신화를 유지하기 위해 자동 스케쥴을 생성 해 줍니다.

 

[Services] → [ACME Client] → [Challenge Types]
인증기관(CA) 인증서를 발급 할 서버에 인증서와 동일한 도메인인지 확인하는 과정이 있음. 그 과정 중에 ACME(현재 설치한 플러그인) 프로토콜을 가지고 CA와 서버의 유효성을 체크하기 위해 설정한다. DuckDNS로그인 후 token값을 복사하여 붙여넣기

 

012

[Services] → [ACME Client] → [Certificates]
대망의 인증서를 생성한다 HTTPS를 사용하기 위해...!
Alt NAmes에는 와일드카드 도메인으로 작성하여 도메인 하나로 여러 서비스를 이용하도록 하기위해 "*.본인도메인"을 입력한다.
나머지 ACME CA Settins에는 본인이 위에서 생성한 것을 선택하면 된다.

반응형

[Nginx]

[Services] → [Nginx] → [Configuration] → [Upstream] → [Upstream Server]
본인의 사설대역의 서버 IP를 입력하고, 순서는 마음대로 기입한다, 기존에 쓰고 있는게 있어서 2번으로 설정했다.

 

[Services] → [Nginx] → [Configuration] → [Upstream] → [Upstream] 추가 "반드시" advanced mode를 선택!
TLS: Client Certificate 부분에 위에서 설정한 서버에 인증서를 선택 해 준다.

 

[Services] → [Nginx] → [Configuration] → [HTTP(S)] → [Location]에서도 advanced mode로 들어간다.
윗부분은 일부로 잘랐다. URL Pattern에 / 입력하면 된다.
WebSocket Support만 체크 해 주고 타임아웃(초)를 설정 해 준다.

 

[Services] → [Nginx] → [Configuration] → [HTTP(S)] → [Security Headers]
XSS는 차단 해 주고, Strict Transport Security가 뭔지 몰라 검색을 해 보니 HSTS라는 내용이 였던것 같다. 높게 설정하면 좋다는 듯 MAC가 63072000이며 730일 이다

 

01

[Services] → [Nginx] → [Configuration] → [HTTP(S)] → [HTTP Server]
해당 부분이 거의 메인이다. 외부에서 웹 서버를 접속 할 때에 도메인 뒤에 별도 포트를 적고 싶지 않아서 80과 443으로 설정한다.
Server Name에는 본인이 사용 할 도메인을 적으면 된다. 아까 인증서에 와일드카드(*.도메인)로 작성 하였으니, 예를 들어 Duckdns에서 발급 받은 도메인이 sky-wanderer.ducndns.org라면, nas.sky-wanderer.duckdns.org로 작성하면 된다.
Locations, TLS, CA는 위에서 작성한 내용을 선택하고 body size도 본인 마음대로 설정하면 된다.
'Enable Let's Encrypt Plugin Support' 체크, 'HTTPS Only' 체크, Disable Bot Protection 마음대로, 'Advanced ACL Authentication Backend' none, sendfile 체크 해제

 

[System] → [Settings] → [Administration]
상단에서 listen포트를 80, 443으로 설정 해 두었다. 그럼 OPNsense의 웹접속 포트를 변경하지 않으면 꼬일게 분명하여 포트를 변경한다.

 

[Services] → [Nginx] → [Configuration] → [General Settings]
Nginx를 활성화 한다.

 

[Firewall] → [Rules] → [WAN]
외부에서 80, 443으로 접속 할 수 있게 포트를 열어주면 끝이다.
여러가지 포트를 묶고 싶다면 [Firewall] → [Aliases]에서 묶어주면 된다.  끝.

반응형

댓글