본문 바로가기

네트워크,보안

Openvpn -Monitor 사용법 및 튜닝

제가 사용하고 있는 툴을 이미 사용하시는분이 있어서 사용법은 이분걸 그대로 베겼습니다.

다만 여기에 추가되는 기능을 추가했습니다

 

 

해당 프로그램을 받아서 테스트 해 본 결과 TUN에서는 잘 돌아가는데 TAP에는 안돌아가는것을 확인했습니다.

클라이언트가 안보여서 접속 대수만 나오는 상황이었습니다.

 

소스코드를 분석하여 TAP 도 그럭저럭 잘 나오게 하는 방법을 찾아 공유합니다.

원인은 TAP의 경우 로컬 IP Address 가 나오지 않는데, 이를 강제로 출력시켜 모든 데이터를 나오는 것 처럼 표시하는 것이 원리입니다.

먼저 335째줄 근처에 i=0을 추가하여 포 문 밖에서 변수를 지정합니다. 이는 각 로컬 IP Address에 강제로 어떤 값을 변화하여 채우기 위함입니다. 다르니깐 중복되어 표시가 되질 않더군요

 

   330         geoip_version = self.geoip_version
    331         client_section = False
    332         routes_section = False
    333         sessions = {}
    334         client_session = {}
    335         i=0
    336         for line in data.splitlines():
    337             parts = deque(line.split('\t'))
    338             if args.debug:
    339                 debug("=== begin split line on parse status \n{0!s}\n=== end split line on parse status".format(parts))
    340 

 

중간에 429째줄에는 원래 빈 칸 '' 이 되어있는데 이 부분이 유니크한 스트링이 들어가야하는것이 핵심입니다.

이 부분에 String + 변수를 넣어 유니크한 값을 만들어줍니다.

재주가 있다면 해당 변수에 I 가 아닌  IP 주소를 넣어도 무방합니다만, 제 상식으로는 서버에 있지도 않은 IP주소를 찾아 넣을 방법이 없더군요.

 

    426                 if local_ipv4:
    427                     session['local_ip'] = ip_address(local_ipv4)
    428                 else:
    429                     session['local_ip'] = "TAP_IP"+str(i);
    430                 if version.major == 2 and version.minor >= 4:

 

 

포 문 의 아래쪽에는 i를 더하는 코드를 추가합니다.

 

 

    447             if routes_section:
    448                 local_ip = parts[1]
    449                 last_seen = parts[5]
    450                 if local_ip in sessions:
    451                     sessions[local_ip]['last_seen'] = get_date(last_seen, uts=True)
    452             i=i+1
    453         if args.debug:
    454             if sessions:

 

이렇게 하면 

이렇게 잘 나옵니다.

 

 

아래는 Openvpn-monitor 의 일반 사용법입니다.

출처 : https://dejavuqa.tistory.com/250 

Tongchun 2018. 9. 5. 17:23님 감사합니다. ^^

--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

 

 

현재 VPN에 접속하고 있는 세션을 확인하고 싶어 찾아보던 중 괜찮은 툴이 있어 설치해 봅니다.

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

 

웹 서버로 지원되는 툴입니다.

바로 설치해 봅시다.

 

구성은 apache로 하겠습니다. openvpn-monitor는 openven 서버에 설치합니다.

 

제일먼저 openvpn-monitor가 사용하는 패키지들을 설치해 줍니다.

1

 

 

$ sudo apt-get -y install python-geoip python-ipaddr python-humanize python-bottle python-semantic-version apache2 libapache2-mod-wsgi git wget geoip-database-extra

 

 

그리고 /var/www/html로 이동해 openvpn-monitor를 다운받습니다.

1

2

 

 

$ cd /var/www/html

$ sudo git clone https://github.com/furlongm/openvpn-monitor.git

 

 

apache2와 openvpn-monitor를 연결해 줍니다.

1

 

 

$ sudo bash -c 'echo "WSGIScriptAlias /openvpn-monitor /var/www/html/openvpn-monitor/openvpn-monitor.py" > /etc/apache2/conf-available/openvpn-monitor.conf'

 

 

apache2의 환경설정도 잡아줍니다.

1

 

 

$ sudo a2enconf openvpn-monitor

 

 

 

openvpn의 데이터를 apache 서버가 받아 웹으로 보여주게 됩니다.

openvpn의 server.conf 파일에 management 설정을 추가합니다.

server.conf 파일을 열고...

1

 

 

$ sudo vim /etc/openvpn/server.conf

 

 

마지막 라인에 아래와 같이 추가합니다.

management <openvpn 서버의 내부 IP> 5555

1

2

 

 

# openvpn-monitor

management 192.168.0.185 5555

 

 

server.conf 파일을 저장하고 openvpn을 재시작 해줍니다.

1

 

 

$ sudo systemctl restart openvpn@server

 

 

참고로 management 설정을 추가하면 telnet으로 openvpn의 상태 점검을 할 수 있습니다.

telnet 192.168.0.185 5555

 

이번에는 openven-monitor의 설정을 잡을 차례입니다.

sample 설정파일을 복사해 새로 만들어 줍니다.

1

2

 

 

$ cd /var/www/html/openvpn-monitor

$ sudo cp openvpn-monitor.conf.example openvpn-monitor.conf

 

 

openvpn-monitor.conf 파일을 열고 아래와 같이 수정합니다.

1

 

 

$ sudo vim openvpn-monitor.conf

 

 

수정해야 할 것은 site 명, 회사의 좌표(위도, 경도), datetime도 우리가 보기좋게 바꿔주고, 

host는 openvpn 서버의 ip로 수정합니다.

1

2

3

4

5

6

7

8

9

10

11

12

13

14

 

 

[openvpn-monitor]

site=nGle

#logo=logo.jpg

latitude=37.411293

longitude=127.094373

maps=True

geoip_data=/usr/share/GeoIP/GeoIPCity.dat

datetime_format=%Y-%m-%d %H:%M:%S

[VPN1]

host=192.168.0.185

port=5555

name=Staff VPN

show_disconnect=False

 

 

openvpn-monitor.conf 파일을 저장하고 나옵니다.

 

이제 apache 서버를 재시작 해줍니다.

1

 

 

$ sudo systemctl restart apache2

 

 

reboot 후에도 자동으로 실행되도록 설정도 해줍니다.

1

 

 

$ sudo systemctl enable apache2

 

 

바로 웹서버를 열면 보이지 않을 겁니다. 방화벽 설정이 되어 있거든요.

방화벽에 80 포트와 5555 포트도 추가해 줍니다.

1

2

 

 

$ sudo ufw allow 80

$ sudo ufw allow 5555

 

 

추가했다면 방화벽을 재실행 합니다.

1

2

 

 

$ sudo ufw disable

$ sudo ufw enable

 

 

자, 이제 설정이 완료되었습니다.

브라우저를 열고 아래와 같이 접속합니다.

http://<openvpn-monitor ip>/openvpn-monitor

 

저는 먼저 tongchun 계정으로 VPN에 접속했으며 아래와 같이 보입니다.