'vpn'에 해당되는 글 2건

  1. 2016.04.11 openvpn id, pw 인증 설정
  2. 2015.03.21 OpenVPN 설치 및 사용 (2)
2016.04.11 01:15

사용자별 인증서 발급이 보안에 더 좋기는 한데, 일일이 발급 하기도 귀차니즘으로 인하여

최근에 ID, PW 인증으로 바꾸면서 이에 대해 정리 하고자 한다.



앞의 OpenVPN 설치 부분 참고.


여기서는 바뀔부분만 정리한다.



server.conf

 client-cert-not-required
 plugin /usr/lib/openvpn/openvpn-auth-pam.so login

- 위 2줄 추가 한다.


client.ovpn

 ;ca ca.crt
 ;cert haebi.crt
 ;key haebi.key

- 인증서 부분 주석 처리 (세미콜론 ; 을 붙이면 된다)


 auth-user-pass
 
 <ca>
 -----BEGIN CERTIFICATE-----
 ...

 -----END CERTIFICATE-----
 </ca>

- auth-user-pass 추가

- <ca> ~ </ca> 안에 ca.crt 부분의 BEGIN ~ END 부분 통째로 복사 & 붙여넣기 하면 된다.


그리고 이 파일을 web 서버를 통해 공유 하면 편리하게 사용할 수 있다.


open 파일을 OpenVPN 앱에서 열기

프로파일 추가

ID, PW 입력 후 로그인~


여기서 입력하는 ID, PW는 리눅스 시스템의 ID, PW 이다.


예)

useradd -s /bin/false userid

passwd userid


디폴트 쉘을 /bin/false 로 설정하면 쉘 로그인을 차단 할 수 있다.

(단순 vpn 인증 용도로 쓰기위한 계정 생성 시 사용)



Posted by 해비
2015.03.21 10:03


이 글은 OpenVPN 을 설치 하여 모든 트래픽을 VPN서버로 우회 하여 사용하는 것을 목적으로 설명합니다.


서버로 Rasbian (Raspberry Pi), 클라이언트는 iOS 의 OpenVPN App을 사용했습니다.

(안드로이드에도 구글 플레이스토어에 동일한 앱이 있습니다)



[진행 순서]

1. 서버 설치

2. 인증서 생성

3. 서버 설정

    3-1. server.conf

    3-2. conf 파일명 설정

4. 클라이언트 접속설정

5. 연결

6. 마무리 작업

7. 방화벽 설정 [추가 2015.04.10]




('#'은 root 권한을 의미 합니다.)


1. 서버 설치

# sudo apt-get install openvpn






2. 인증서 생성

1

 # cp /usr/share/doc/openvpn/examples/easy-rsa/2.0/* /etc/openvpn

2

 # cd /etc/openvpn

3

 # source vars

4

 # ./clean-all

5

 # ./build-ca

6

 # ./build-key-server server

7

 # ./build-key haebi

8

 # ./build-dh


- 1. 필요한 설정파일들을 /etc/openvpn 으로 복사합니다.

- 2. 현재 워킹 디렉토리 이동

- 3. 인증서 생성에 필요한 환경변수 등록

- 4. 새로 생성할 것이므로 /etc/openvpn/keys 의 내용을 모두 제거 (진행 중 잘못된 경우에 필요함)

- 5. CA 인증서 생성. (대충 엔터키만 눌러주시면 됩니다)

- 6. 서버 인증서 생성. (엔터키 눌러주다가 y? 라고 묻는 부분에 반드시 y 입력 후 엔터. y는 2번 물어봅니다.)

- 7. 사용자 인증서 생성. (OpenVPN에 접속할 사용자 수 만큼 생성합니다.)

- 8. 디피헬먼 암호화를 위한 키 생성


추후 사용자 인증서가 추가로 필요한 경우, [3번]과 [7번]을 반복해 주시면 되겠습니다.

4번 ./clean-all 해서 다 날려버리면 처음부터 다시 작업 & 기존 사용자의 인증서까지 무효가 됩니다. <-- 조심!!






3. 서버 설정

3-1. server.conf

1

 # cp /usr/share/doc/openvpn/examples/sample-config-files/server.conf.gz /etc/openvpn/

2

 # gunzip server.conf.gz


- 1. 서버 설정파일을 /etc/openvpn 으로 복사.

- 2. 압축해제



# vim server.conf

1

 port 1194

2

 proto udp

3

 dev tun

4

 ca /etc/openvpn/keys/ca.crt

5

 cert /etc/openvpn/keys/server.crt

6

 key /etc/openvpn/keys/server.key  # This file should be kept secret

7

 dh /etc/openvpn/keys/dh1024.pem

8

 server 10.8.0.0 255.255.255.0

9

 push "route 10.8.0.0 255.255.255.0"

10

 push "redirect-gateway def1"

11

 push "dhcp-option DNS 10.8.0.1"

12

 push "dhcp-option DNS 168.126.63.1"


- 1. 포트설정

- 2. 프로토콜 설정 tcp 또는 udp 중에서 선택

- 3. tun 디바이스 사용. (tap 도 있는데 차이점은 모르겠다. 그냥 디폴트로 이거 쓰자)

- 4. CA 인증서 경로 지정

- 5. 서버 인증서 경로 지정

- 6. 서버 개인키 경로 지정

      (이 파일은 비밀리에 지켜져야 한다. 라고 되어있죠? 유출되지 않도록 각별히 신경을 써 줍니다^^)

- 7. 디피헬먼 키 경로 지정

- 8. VPN 서버가 사용할 IP 대역 설정

- 9. 라우팅 경로 설정

     (VPN서버 네트워크의 상위 레벨에 여러 서브넷이 존재하는 경우, 여기서 등록해줘야 접근이 가능한가 봅니다.)

- 10. 패킷의 리 다이렉션 설정. (중요!)

     (이 옵션이 있으면 접속된 클라이언트의 모든 트래픽이 VPN을 거쳐 갑니다. 인터넷은 기존연결로 가고 내부 망 접속만 하고자 한다면 설정하지 않습니다.)

- 11 ~ 12. DNS 설정입니다.

      (모든 패킷을 리다이렉션 하는 경우에, 12번 라인이 없으면 인터넷이 안됩니다. 12번의 DNS 주소는 꼭 저 주소일 필요는 없습니다. 사용하는 다른 DNS 주소가 있다는 그것을 기입합니다.)




3-2. conf 파일명 설정

# vim /etc/default/openvpn

1

 AUTOSTART="openvpn"


- 1. openvpn config 파일명이 openvpn 임을 /etc/init.d/openvpn 에게 알려줍니다.

     ( 이제 /etc/init.d/openvpn start 하게 되면, /etc/openvpn/openvpn.conf 파일을 찾아서 읽게 됩니다.)



# mv server.conf openvpn.conf

- config 파일명을 변경하여 준다.



서버시작

# /etc/init.d/openvpn restart


- 만약 서버 로그가 보고 싶다면, stop 시키고 아래의 명령을 실행하면 실시간 로그를 확인할 수 있습니다.

openvpn --config /etc/openvpn/openvpn.conf 






4. 클라이언트 접속설정

# cp /usr/share/doc/openvpn/examples/sample-config-files/client.conf /etc/openvpn

- 클라이언트 접속 설정 샘플을 복사합니다.



# vim /etc/openvpn/client.conf

1

 client

2

 dev tun

3

 proto udp

4

 remote 0.0.0.0 1194

5

 ca ca.crt

6

 cert haebi.crt

7

 key haebi.key


- 1. client 모드임을 의미. (서버 설정파일에는 server 이라고 되어있다)

- 2. tun 디바이스 사용

- 3. udp 프로토콜 사용

- 4. 서버 접속 주소, 포트 설정 (0.0.0.0 대신 서버 IP나 도메인을 적는다)

- 5. ca 인증서 파일명 설정

- 6. 사용자 인증서 파일명 설정

- 7. 사용자 개인키 파일명 설정


2~4번 항목은 서버와 동일하게 설정해야 합니다.

5번은 서버의 ca 인증서와 동일한 것이어야 합니다.


현재 클라이언트 설정에 필요한 Key의 위치

 /etc/openvpn/keys/ca.crt

 /etc/openvpn/keys/haebi.crt

 /etc/openvpn/keys/haebi.key

 /etc/openvpn/client.conf






5. 연결

앱스토어에 OpenVPN 으로 검색하면 어플이 나옵니다.

제작자가 OpenVpn Technologies 라고 된것으로 다운 받습니다.




iTunes 에 연결 후, OpenVPN 앱의 도큐먼트에 4개 파일을 넣어줍니다.

ca.crt

haebi.crt

haebi.key

client.ovpn


(client.ovpn 은 client.conf 파일명을 변경한 것 입니다)


앱을 실행하면 + 버튼이 생기고 눌러서 추가하면 저 4개 파일이 사라지면서 설정이 추가 됩니다.


인 / 아웃 용량까지 제공하므로, 간에 데이터 사용량 측정? 도 가능하겠군요~호호호...(???)


팁 한가지 : 서버측 말고 클라이언트 측 로고를 볼수 있는 방법... 조기 위에 Connected 옆에 우측에 꺽쇠괄호 보이죠?

저거 누르면 클라이언트측 로그가 주욱~~~ 나옵니다




연결은 됐는데 인터넷이 안되면...?

NAT설정, ipforward 설정이 필요하다.


NAT 설정

# iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE


ipforward 허용 설정

# vim /etc/sysctl.conf

 net.ipv4.ip_forward=1






6. 마무리 작업

이 설정을 재부팅 시에도 그대로 될수 있도록 하겠다.

openvpn은 알아서 시작하는데 nat 설정이 날아가 버려서 문제가 되었다.


그래서 찾아본 해결책이 외국 포럼에서 본것으로 iptables-save 로 현재 상태를 저장하고, 부팅시 불러오는 방법


# iptables-save > /etc/iptables.conf 

- 일단 현재 nat 상태를 저장한다.



# vim /etc/network/interfaces

 iface eth0 inet dhcp

    pre-up iptables-restore < /etc/iptables.conf

- eth0 바로 아래부분에 iptables-restore 를 적용해 준다.






7. 방화벽 설정

iptables를 활용하여 방화벽 규칙을 적용한다. [추가 2015.04.10][변경1 2015.04.22]

iptables -P INPUT ACCEPT
iptables -F

iptables -A INPUT -p tcp --tcp-flags ALL NONE -j DROP
iptables -A INPUT -p tcp ! --syn -m state --state NEW -j DROP
iptables -A INPUT -p tcp --tcp-flags ALL ALL -j DROP


iptables -A INPUT -i lo -j ACCEPT


iptables -A INPUT -p tcp -m tcp --dport 22 -j ACCEPT


iptables -A INPUT -p tcp -m tcp --dport 1194 -j ACCEPT



iptables -I INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT



iptables -A INPUT -m limit --limit 5/min -j LOG --log-prefix "iptables denied: " --log-level 7
iptables -P INPUT DROP


iptables -P OUTPUT ACCEPT


iptables -nL



iptables -t nat -F
iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE
iptables -t nat -nL

- 차단된 접속시도는 /var/log/syslog 에 "iptables denied:" 으로 시작하는 로그가 쌓이게 된다.

- iptables -nL, iptables -t nat -nL 은 현재 규칙을 화면에 표시하여 주는 역할을 한다.

- INPUT (들어오는) 규칙은 기본적으로 DROP (갖다버림) 이며, -j ACCEPT 에 명시된 항목만 허용한다.



부팅시 이 방화벽 규칙을 유지 시키기 위해서 아래 작업을 추가한다.

# sudo iptables-save > iptables.conf

# sudo cp iptables.conf /etc/



#sudo vim /etc/network/interfaces

 auto lo

iface lo inet loopback
iface eth0 inet dhcp
pre-up iptables-restore < /etc/iptables.conf

- eth0 아래에 iptables-restore 명령으로 방화벽 규칙을 적용 시켜준다.






[변경사항]

- 2015.04.22 : iptables 설정 중 deny 로그 남기는 부분의 설정 위치에 대한 오류가 있어 정정합니다.






[참고]

https://www.debian-administration.org/article/445/Getting_IPTables_to_survive_a_reboot

http://www.joinc.co.kr/modules/moniwiki/wiki.php/Site/System_management/VPN/OpenVPN

https://openvpn.net/index.php/open-source/documentation/howto.html


openvpn.net 의 링크에서 Routing all client traffic (including web-traffic) through the VPN 항목을 찾아 보면

모든 트래픽 보내기에 대한 설정 예시와 함께 상세한 설명이 있다.





Posted by 해비