Network

openvpn-monitor 구성하기

silentbrain 2022. 2. 4. 16:25

https://github.com/furlongm/openvpn-monitor

 

운영중인 openvpn 서버를 모니터링 하기위해 도구를 찾아보니 웹UI로 그럴듯하게 보여주는 도구가 있었다. 다만 그냥 가이드 따라해보면 자잘하게 막히는게 많아서 구성 방법 별도 정리함

  • ubuntu 18.04(Bionic)에서 시도
  • openvpn server구성 완료 상태
  • openvpn management 설정하기
    • openvpn server 설정 파일의 마지막 줄에 추가(일반적인 파일 경로 :  /etc/openvpn/server/server.conf )
      management 127.0.0.1 5555 pw-file
    • 끝의 'pw-file'은 openvpn management console에 접속하기 위한 암호가 들어 있는 파일 이름으로 server.conf가 있는 파일 경로에 위치시킨다. pw-file은 다른 내용은 전혀 필요 없고 맨 첫 줄에 암호만 들어가 있으면 됨
    • openvpn restart  : sudo systemctl restart openvpn.service
  • openvpn management 정상설정 확인 : telnet 으로 접속해서 pw-file에 설정한 암호로 정상 접속 되면 됨
  • 필요 패키지 설치 (Install option 중 pip + gunicorn 기반임)
    • sudo apt -y install geoip-database geoip-database-extra
    • python3 기반
      • sudo pip install openvpn-monitor gunicorn
  • 코드 다운로드 및 설정
    • 코드 자체는 필요 없지만 국가 이미지와 설정 파일 샘플을 위해 필요
      git clone https://github.com/furlongm/openvpn-monitor.git
    • 다운로드한 코드내 openvpn-monitor.conf 파일을 수정
      [openvpn-monitor]
      site=사이트이름
      #사이트에 로고를 넣으려면 ./images 폴더 밑에 넣어주고 파일이름을 설정한다.
      logo=logo.jpg
      #VPN 서버가 위치한 위경도를 적어주자
      latitude=37.466 
      longitude=-114.012
      maps=True
      maps_height=500
      geoip_data=/usr/share/GeoIP/GeoLite2-City.mmdb
      datetime_format=%d/%m/%Y %H:%M:%S

      [VPN1]
      host=127.0.0.1
      port=5555
      name=Staff VPN
      password=#아까pw-file에 설정한 암호!
      show_disconnect=False
    • 중요한 부분은 geoip_data=/usr/share/GeoIP/GeoLite2-City.mmdb 설정 부분으로 사이트내 필요 패키지를 모두 구성하더라도 "WARNING: No compatible geoip1 or geoip2 data/libraries found." 오류가 발생한다. 이를 수정하기 위해 아래 절차를 수행
      • https://dev.maxmind.com/geoip/geolite2-free-geolocation-data?lang=en 사이트에 가입해서 geoip data를 확보한다.
      • 가입 후 GeoIP2 / GeoLite2 > Download Files > Download Databases 에서 GeoLite2 City 파일을 다운로드 받아서 압축을 풀면 "GeoLite2-City.mmdb" 파일이 나온다. 이것을 위에서 수정한 openvpn-monitor.conf  파일의 geoip_data 경로에 넣어준다.
    • 테스트는 git clone한 코드 루트 경로에 위치한 openvpn-monitor.py 파일을 실행해서 확인할 수 있다.
      • 테스트 실행 : python3 openvpn-monitor.py
      • 위와 같이 실행하면 만약 필요한 파이선 패키지등이 부족할 경우 경고와 오류를 출력한다. 이것을 모두 설치해준다. (예, geoip2 ipaddr ipaddress ip_address 등등) 폴더내 requirements.txt 파일도 있으니 참고(pip install -r requirements.txt 파일로 설치 가능)
    • 정상적인 구동이 완료되면 아래 명령으로 실행
      sudo gunicorn openvpn-monitor -b 0.0.0.0:80 --chdir 코드클론한경로 

    • 서버가 구동되면 브라우져를 통해 서버 IP에 접속가능 : http://VPN서버IP
    • 접속에 이슈가 있다면 방화벽 정책을 주의깊게 확인해보자