일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- SSD인클로저
- 미지아
- Rocky LInux
- 쿠버네티스
- 울트라나브
- 빨콩
- Code-Server
- 포토박스
- 미니스튜디오
- k0s
- 트랙포인트
- lubuntu
- 시놀로지
- centos
- VMM
- IoT
- 스마트 디스플레이
- 탁상시계
- k8s
- ACASIS
- 가상컴퓨터
- Kubernetes
- Thunderbolt3
- TRACKPOINT
- 외장SSD
- talos linux
- lenovo
- 원격
- USB4.0
- synology
- Today
- Total
테크믈리에의 리뷰 공간
OPNsense 설정기 1. HA-Proxy를 이용한 Reverse Proxy 구축 본문
- 서론 -
현재 사내에는 K8S 환경, 회사 홈페이지가 떠있는 서버, VPN 등 다양한 서비스가 돌아가고 있으며, 이를 외부 노출 용도인지 아닌지 등에 따라 다수의 DNS를 운용하고 있다.
하지만 외부로 나가는 통로는 메인 공유기 단 하나 뿐이라 단일 공용 IP에 다수의 DNS를 물려야했기에 원래는 상시 켜져있는 서버 중 한 대에 Nginx Proxy Manager를 도커로 올려 사용 중이었다.
NPM은 원래라면 Nginx나 HA-Proxy에 복잡한 설정파일들을 적용해가며 해야할 작업을 간단한 마우스 클릭만으로 할 수 있게 해주었기 때문에 매우 편했지만 설치된 서버가 꺼지는 경우 나머지 서버에서 동작하는 서비스까지 전부 내려간다는 문제점이 있었다.
이러한 이유 때문에 방화벽 도입의 이유로 대표님께 OPNsense를 기반으로 한 자작 공유기를 사용할 것을 건의드렸고 이게 받아들여져 Hardkernel 사의 Odroid H4 Plus를 활용하여 최대한 저렴하고 저전력으로 자작 공유기를 맞추게 되었다.
원래는 여기에 Nginx를 기반으로 하여 Reverse Proxy를 올리고자 하였지만, 참고하기 위해 보는 모든 글마다 Nginx 및 Firewall 설정법이 다 다른데다가 아무리 따라하거나 과정들을 섞어봐도 쉽게 정상적으로 동작하는 방법을 찾기 어려웠다. 때문에 차선책으로 HA-Proxy를 사용하게 되었다.
참고한 글은 다음과 같다.
https://forum.opnsense.org/index.php?topic=23339.0
참고로, ACME client를 통해 SSL 인증서를 발급받아 등록하거나 혹은 갖고 있는 SSL 인증서 파일을 등록하는 방법은 다음 글에서 다루도록 할 예정이니 만약 HTTPS 서버의 Reverse Proxy를 원한다면 다음 글을 먼저 읽고 오도록 하자. 혹은 위의 참조 글들을 읽어보도록 하자.
- HA Proxy 설치 및 기본 시스템 설정 -
1. 우선은 당연하겠지만 HA-Proxy를 OPNsense에 설치해야한다.
설치는 System - Firmware - Plugins에서 haproxy를 검색하여 할 수 있고, 까는 김에 겸사 겸사 on-acme-client도 설치하여 두도록 하자.
ACME Client는 추후 Let's Encrypt를 통해 SSL 인증서를 발급받는데 사용할 것이다.
2. 설치하고 나면 Services 항목에 HAProxy가 추가되어있을 것이다. Settings - Global Parameters로 이동하여 Cipher List와 Cipher Suites에 아래 값들을 복사해 넣고 Bind options는 prefer-client-ciphers로 지정하여 두자. (아마 필수 작업은 아닐 수도 있다. 참고 글 중 첫번 째 글에서 하라고 되어 있는 과정인데, SSL 인증서 등 보안 방면은 크게 잘 아는 편은 아니기 때문에 이 작업 관련해서 잘 아시는 분이 댓글 달아주시면 좋을 것 같다.)
Cipher List: ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES256-GCM-SHA384
Cipher Suites: TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256
3. 그 다음에는 System - Settings - Administraion으로 이동하여 TCP Port를 80, 443 외의 것으로 변경해주도록 하자. 변경 후에는 OPNSense 관리자 페이지 진입을 위해서 <IP>:<변경된 포트>로 접속해야할 것이다.
4. Reverse Proxy를 수행하기 위해서는 HA-Proxy가 80, 443 포트로 들어오는 패킷을 다룰 수 있어야한다. Firewall - Aliases로 들어가 Alias를 위와 같이 하나 생성해주도록 하자.
5. Firewall - Rules - WAN에서 새로운 룰을 하나 추가하는데, Action은 Pass, Interface는 WAN, Direction은 in, Protocol은 TCP로 지정하여 주고 Source는 any, Destination은 WAN address로 하여 from과 to 모두 방금 생성한 Alias로 지정해주도록 하자.
- HA Proxy의 Reverse Proxy 설정 -
1. HA-Proxy에서 Revese Proxy를 설정하기 위해 첫번째로 필요한 건 Real Servers에다가 내부 네트워크에 있는 Reverse Proxy 대상이 될 서비스의 주소를 등록하는 것이다. Services - HAProxy - Settings - Real Servers - Real Servers로 이동하여 새로운 서버를 등록해주도록 한다. 이 때, 중요한 세팅값은 아래와 같다.
Name or Prefix: 본인이 알아볼 수 있도록 해당 서버의 별칭을 지어주도록 하자.
FQDN or IP: Reverse Proxy 대상이 될 서비스가 떠있는 서버의 내부 IP를 적어주도록 하자. (ex: 192.168.0.17)
Port: Reverse Proxy 대상이 될 서비스의 포트를 적어주도록 하자.
SSL: 만약 HTTPS를 적용할 예정이라면 SSL을 체크해주도록 하자.
Verify SSL Certificate: 만약 ACME Clients에서 관리가 되는 인증서거나 본인이 별도 CA 인증서 파일을 갖고 있다면 체크 후 SSL Verify CA에서 해당 CA를 지정해줘도 괜찮다. 하지만 귀찮거나 CA가 없는 경우에는 옵션을 체크해제 하여도 무방하다.
2. 그 다음으로는 Services - HAProxy - Settings - Virtual Services - Backend Pools로 들어가 새로운 풀을 하나 생성해주도록 하자. 중요한 세팅값은 다음과 같다.
Name: 앞선 경우와 마찬가지로 본인이 알아볼 수 있도록 별칭을 하나 지어주도록 하자.
Servers: 해당 Backend Pool에 연결될 Real Server들을 지정하도록 하자. 여러개 지정하면 Load-Balancing이 된다.
X-Forwarded-For header: 리버스 프록시 후 원래 접근하려던 IP를 식별하기 위해선 체크해주도록 하자.
3. Services - HAProxy - Settings - Rules & Checks - Conditions로 가서 새로운 Condition을 하나 생성하자.
이 때 Condition Type를 어떤거로 지정하느냐에 따라서 다양한 작업이 가능하다.
Host starts with / Host ends with / Host contains 등: subdomain 등 공통된 string이 포함된 주소를 묶어 관리할 수 있다.
Host matches: 정확하게 매칭되는 Host만 지정하여 관리할 수 있다.
Path starts with / Path ends with 등: 같은 호스트 내에서도 특정 경로만 지정하여 다른 서버로 보내고 싶을 때 사용한다.
4. Services - HAProxy - Settings - Rules & Checks - Rules에서 새로운 Rule을 하나 생성한다.
이것 역시 Test Type이나 Logical operator for conditions는 본인의 시나리오에 맞게 사용하면 된다. Select conditions는 앞서 3에서 생성한 condition을 지정하고 Execute function을 Use specified Backend Pool로 지정 후 Use backend pool에서 앞서 2에서 생성한 backend pool을 지정한다면 해당 condition에 부합하는 모든 패킷들은 backend pool로 넘어간 다음 real server로 전달된다.
만약 HTTPS로 강제 리다이렉트를 시키는 동작을 원한다면 추가 Rule을 생성하여 Select conditions에는 해당하는 condition들을 지정한 다음 Logical operator for conditions에는 OR을 넣고 Execute function은 http-request-redirect로 지정 후 HTTP Redirect 파라미터에 scheme https code 301을 넣어주면 된다.
5. Services - HAProxy - Settings - Virtual Services - Public Services 에서 새로운 Public Service를 두개 생성한다.
하나는 HTTPS용 하나는 HTTP용인데, 중요한 세팅값들은 다음과 같다.
Listen Addresses: (HTTPS의 경우) 0.0.0.0:443 / (HTTP의 경우) 0.0.0.0:80
Enable SSL offloading: (HTTPS의 경우) 체크 / (HTTP의 경우) 체크 해제
Certificates: (HTTPS의 경우에만 필요한 SSL 인증서들 지정)
Cipher List 및 Cipher Suites: (HTTPS의 경우에만 기본 설정 부분에 적힌 값을 그대로 넣어주자)
Enable HSTS: (HTTPS의 경우에만 선택)
Rules: 해당 Public Service와 관련되어 있는 룰들을 전부 선택해주도록 하자.
6. 마지막으로 Services - HAProxy - Settings -Settings - Service에서 Enable HAProxy를 체크해주면 완료다.
'프로그래밍|소프트웨어' 카테고리의 다른 글
OPNsense 설정기 2. SSL 인증서 관리 (0) | 2024.10.29 |
---|---|
K8S 환경에 CloudNativePG를 사용하여 PostgreSQL Cluster 구축하기 (0) | 2024.10.28 |
Synology VMM 우분투 구축기 4. Code-Server 구축 (1) | 2021.09.23 |
Synology VMM 우분투 구축기 3. VNC 서버 구축 (16) | 2021.09.23 |
Synology VMM 우분투 구축기 2. Lubuntu 설치 (0) | 2021.09.23 |