Reverse Proxy 서버로 Nginx를 사용하고, Application Server 로 tomcat / spring boot 를 사용 시, https 요청에 대해 웹앱에서 발생되는 redirection을 무조건 http로 처리하게 된다.
https/http 2개의 포트를 동시에 열어서 http를 https 로 자동 redirection 하는 경우에는 문제를 못 느끼지만 http(80) port를 열지 않고 https(443) port만 열어서 운영을 하게 될 경우 웹앱의 redirection 은 모두 connect 에러가 발생되게 된다.
해결방법
인터넷을 검색해 보면 여러가지 해결 방법이 나오는데 나의 경우에는 일반적인 방법이 실제로 되지 않았다.
실행 환경은 Nginx v1.20.1 / Tomcat 10.1.13 / OpenJDK 17.0.6 이었다.
해결을 위해서는 nginx.conf 와 spring boot 의 application.properties 2군데에 설정을 추가해 줘야 한다.
debconf: unable to initialize frontend: Dialog
debconf: (No usable dialog-like program is installed, so the dialog based frontend cannot be used. at /usr/share/perl5/Debconf/FrontEnd/Dialog.pm line 76.)
debconf: falling back to frontend: Readline
VPN 서비스는 외국에서 한국의 서비스를 이용하거나, mVOIP 사용량 제한을 우회하기 위해 많이 사용됩니다. 이번에 중국에 지인이 있어서 중국의 만리 방화벽을 뚫을 수 있는 VPN 서비스를 찾다 보니 일반 공유기가 지원하는 L2TP 또는 PPTP등의 VPN 서비스는 만리 방화벽에 막혀서 안된다고 합니다. 그래서 가능한 방법을 찾아보니 IKEv2 VPN은 가능하다고 하는데 놀고 있는 Orange Pi 에 올려서 서비스를 해 보고자 방법을 찾아 공유를 합니다. Orange Pi 여서 Armbian 기준이며, id/password 방식을 사용하려면 mschapv2 플러그인이 필요한데 armbian 기본 패키지에서는 제공이 안되서 소스 컴파일 하여 설치를 하였습니다. Raspbian 에서도 잘 될 것으로 보이며, Raspbian 에서는 apt 설치 패키지에 mschapv2 플러그인이 있다면 설치 패키지를 사용하는 편이 시간이 절약될 것으로 보입니다.
1. Letsencrypt 인증서 발급
Ikev2 서버를 사용자 id/password 를 이용하여 접속하기 위해서는 인증서가 필요합니다. 무료인증서인 Let's Encrypt 인증서를 발급 받습니다.
아래 명령으로 Strongswan Server를 소스에서 컴파일 하여 설치합니다.. 설치되는 위치는 /usr/local/strongswan 입니다.
# tar xvzf ../down/strongswan-5.8.0.tar.gz
# cd strongswan-5.8.0
# ./configure --prefix=/usr/local/strongswan --sysconfdir=/etc --enable-openssl --enable-eap-mschapv2 --enable-md4
# make
# make install
5. 인증서 파일 링크
아래의 명령과 같이 1에서 발급 받은 인증서를 해당위치로 링크해 줍니다. 3군데 위치로 심볼릭 링크(또는 복사)해 주어야 하며, 아래에서 your.domain.name 부분을 자신의 도메인으로 수정해야 합니다.
파일을 아래와 같이 수정합니다. 2번째 줄 부터 id/pass 설정이며, 콜론(:) 좌측이 id, 콜론 우측의 "" 부분이 패스워드입니다.
: RSA "privkey.pem"
alice : EAP "myPassword"
tom : EAP "tomPassword"
6.3 /etc/iptables.sav 파일 수정 (iptables 포워딩 설정)
포트 포워딩을 위해 iptables 저장 파일을 수정해 줍니다.
# Generated by iptables-save v1.6.1 on Mon Mar 4 21:22:51 2019
*nat
:PREROUTING ACCEPT [10:797]
:INPUT ACCEPT [1:104]
:OUTPUT ACCEPT [2:304]
:POSTROUTING ACCEPT [2:304]
-A POSTROUTING -s 10.10.1.0/24 -o eth0 -j MASQUERADE
-A POSTROUTING -o eth0 -j MASQUERADE
COMMIT
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [116:14048]
-A INPUT -i lo -j ACCEPT
-A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A INPUT -i eth0 -p tcp -m tcp --dport 80 -j ACCEPT
-A INPUT -i eth0 -p tcp -m tcp --dport 443 -j ACCEPT
-A INPUT -i eth0 -p tcp -m tcp --dport 22 -j ACCEPT
# for strongswan
-A INPUT -i eth0 -p udp -m udp --dport 500 -j ACCEPT
-A INPUT -i eth0 -p udp -m udp --dport 4500 -j ACCEPT
-A INPUT -i eth0 -j DROP
COMMIT
*mangle
:PREROUTING ACCEPT [207:17257]
:INPUT ACCEPT [207:17257]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [116:14048]
:POSTROUTING ACCEPT [116:14048]
#-A PREROUTING -m conntrack --ctstate INVALID -j DROP
COMMIT
위에서 -A POSTROUTING -s 10.10.1.0/24 -o eth0 -j MASQUERADE 부분의 10.10.1.0/24 를 /etc/ipsec.conf 에서 설정한 주소와 동일하게 맞춰 줘야 합니다. 중간 부분의 # for strongswan 부분이 strongswan 에서 사용하는 포트입니다. 공유기를 사용할 경우 500번과 4500번 포트를 별도로 포트포워딩해 주어야 합니다.
파일 저장이 끝나면 아래 명령으로 iptables 에 변경 내용을 적용합니다.
iptables-restore < /etc/iptables.sav
6.4 ip 포워딩 기능을 활성화 해 줍니다.
/etc/sysctl.conf 파일에 net.ipv4.ip_forward=1 을 추가해 줍니다. 저장 후 아래의 명령어를 입력해서 적용합니다. # sysctl -p