About OpenVPN Configuration Step by Step guide
What is the VPN? Virtual Private Network fundamentally, a VPN is a set of tools which allow networks at different locations to be securely connected, using a public network as the transport layer. VPNs use cryptography to provide protections against eavesdropping and active attacks. VPNs are most commonly used today for telecommuting and linking branch offices via secure WANs. the VPN concept was to produce the virtual dedicated circuit, pump it over the internet, and use cryptography to make it secure. 2008 년 10 월 26 일제 12 회 LUG 세미나 2
VPN Topology 2008 년 10 월 26 일제 12 회 LUG 세미나 3
What VPN does? Confidentiality(Encryption) Using shared secret key(generated by Diffie- Hellman(DH) Key Exchange) DES, 3DES, RC4/5, AES Integrity(Message Authentication) Hash(MD5, SHA) HMAC(Using Hashed Message Authentication Code) MAC(Message Authentication Code) Authentication(User Authentication) Preshared-key, Kerberos, Digital Signature, X.509 2008 년 10 월 26 일제 12 회 LUG 세미나 4
Security Mechanism IPSec(IP Security) the first standard for secure networking. network level security(kernel space operation) too complex so that users must spend much time to learn it connection problem in NAT SSL VPN developed to provide application-level security rather than network level security runs in user space, simplifying implementation and administration. there s no problem in NAT 2008 년 10 월 26 일제 12 회 LUG 세미나 5
Operation mode of VPN Site to Site VPN server to server, gateway to gateway, tunnel mode static key(preshared key) digital signature Remote Access VPN client to server, client to gateway, transport mode static key digital signature digital signature & ID/PW Client to Client VPN 2008 년 10 월 26 일제 12 회 LUG 세미나 6
Why OpenVPN? SSL-Based not IPSec variation of SSL-based VPN that is capable of running over UDP OpenSource VPN Solution open standard, Good security, stable operation multi platform support Windows, unix, freebsd, linux, especially can be used with embedded linux windows GUI client Readable & Understandable Configuration 2008 년 10 월 26 일제 12 회 LUG 세미나 7
Network Topology 2008 년 10 월 26 일제 12 회 LUG 세미나 8
Minimum Preperation Linux System 3set(debian, centos,...) OpenVPN Server WindowsXP system 5set OpenVPN Client DD-WRT Supported Router http://www.dd-wrt.com ASUS WL-500GP V2 If you only one computer, you can make and use all above systems with virtualizetion solution like vmware (don't know sure is it possible on virtualserver) 2008 년 10 월 26 일제 12 회 LUG 세미나 9
Installation of OpenVPN Install as binary package don't waste time Debian apt-get update apt-get install openvpn CentOS should install rpmforge package before installing openvpn http://dag.wieers.com/rpm/package/rpmforge-release yum update yum install -y openvpn 2008 년 10 월 26 일제 12 회 LUG 세미나 10
Configuration OpenVPN STEP STEP1 : make config files make config files in /etc/openvpn config files should have conf (linux) or ovpn (windows) file extension each VPN connection should their config file STEP2 : start openvpn & confirm make sure the vpn network adapter is loaded make sure the vpn port is opened properly make sure routing tables are added properly ping test between client & packet capture 2008 년 10 월 26 일제 12 회 LUG 세미나 11
Site to Site VPN 2008 년 10 월 26 일제 12 회 LUG 세미나 12
1. Shared Key 2008 년 10 월 26 일제 12 회 LUG 세미나 13
Make Shared Key & Distribute Make Shared Secret Key in Seoul seoul:/etc/openvpn# openvpn --genkey --secret static.key Distribute Key transfer key to jeonju & daegu # secret key key made by openvpn # 2048 bit OpenVPN static key # -----BEGIN OpenVPN Static key V1----- 7fe502eb27b8ad93455a72ff1bccccb9 c4481d2a7034892f48e5d94b70f61ba5 77f9395a3388451c29a2bf8afe3e50ee 6223dc019ad4110830209234edf66f61 df1ad0984b2841376c85e97721b22954 78cccda1273e75807ebf8ba31f76b18f 1a0fcd79c70c7b02b807b9fe1fb2bf47 9a01897da5fbc3df46b19fb6822543a4 f4a7e8ab25d5e56024da126665d03547 d658477221aabe4bf91ef1ce9b5c434f bf5fe66967d3c4f806e2949fb6333a66 394b07e5de5a07d32a37b3f5a4350f5c 59c630eae1302a4a3e28407b925cf761 4b9bcf9320b4e35940618ad7fc2ee940 3f976d3f2cd5c5ba36ef132811dfed88 92941b7fb512479e2d9867a716d71297 -----END OpenVPN Static key V1----- 2008 년 10 월 26 일제 12 회 LUG 세미나 14
Seoul-Jeonju Config dev tun0 port 1194 ifconfig 10.1.0.1 10.1.0.2 route 10.10.2.0 255.255.255.0 secret static.key verb 4 comp-lzo keepalive 15 60 ping-timer-rem persist-tun persist-key user nobody group nogroup daemon status /var/log/openvpn/statickey_jeonju-status.log log /var/log/openvpn/statickey_jeonju.log log-append /var/log/openvpn/statickey_jeonju.log 2008년 10월 26일제12회 LUG 세미나 15
Seoul-Daegu Config dev tun1 port 1194 ifconfig 10.1.0.5 10.1.0.6 route 10.10.3.0 255.255.255.0 secret static.key verb 4 comp-lzo keepalive 15 60 ping-timer-rem persist-tun persist-key user nobody group nogroup daemon status /var/log/openvpn/statickey_daegu-status.log log /var/log/openvpn/statickey_daegu.log log-append /var/log/openvpn/statickey_daegu.log 2008년 10월 26일제12회 LUG 세미나 16
Config File Parameter dev tun0 # vpn 통신에 tun0 디바이스를사용한다. port 1194 # udp 1194 포트를이용해통신을한다.( 기본 udp 통신이다.) ifconfig 10.1.0.1 10.1.0.2 # tun0 의아이피를 10.1.0.1로설정하고, 상대편아이피는 # 10.1.0.2로지정한다. 상대측에서도동일하게설정되어야 # 한다. route 10.10.2.0 255.255.255.0 # tun0 디바이스를통해서 10.10.2.0/24의네트워크로 # 향하는라우팅경로를설정한다. secret static.key # 인증에사용할공유비밀키를지정한다. verb 4 # 로그레벨을지정한다. ( 기본값은 1이다.) # 0 : No output except fatal errors. # 1 to 4 : Normal usage range. # 5 : Output R and W characters to the console for each packet # read and write, uppercase is used for TCP/UDP packets and lower # case is used for TUN/TAP packets. # 6 to 11 : Debug info range (see errlevel.h for additional # information on debug levels). comp-lzo # 압축알고리즘을사용하여서로간에통신을한다. 2008 년 10 월 26 일제 12 회 LUG 세미나 17
Config File Parameter cont' keepalive 15 60 # 15초마다 ping을발송해서 60초동안응답이없으면원격지 # 네트워크가다운된것으로파악해서 restart한다. 네트워크환경에 # 따라서적절히선택한다. ping-timer-rem # daemon 모드로작동하면서상대편에서접근할때까지 ping 클럭을 # 계산하지않는다. persist-tun # ping-reset시에 TUN/TAP 디바이스를재시작하지않도록한다. persist-key # ping-reset 혹은 openvpn 재시작시키를다시읽어들이지않도록한다. user nobody # openvpn 데몬을 nobody 사용자권한으로실행시킨다. group nogroup # openvpn 데몬을 nogroup 그룹권한으로실행시킨다. # 사용자와그룹의권한을최소화시켜서보안을강화시킨다. daemon # 데몬모드로작동시켜서중요한정보들을로그파일에저장하도록한다. status /var/log/openvpn/statickey_jeonju-status.log # vpn 통계가저장된다. log /var/log/openvpn/statickey_jeonju.log # vpn 로그저장 log-append /var/log/openvpn/statickey_jeonju.log # 기존의로그에추가한다. 2008 년 10 월 26 일제 12 회 LUG 세미나 18
Jeonju Config Example remote 192.168.1.120 dev tun port 1194 ifconfig 10.1.0.2 10.1.0.1 route 10.0.0.0 255.0.0.0 secret static.key verb 4 comp-lzo keepalive 15 60 ping-timer-rem persist-tun persist-key user nobody group nogroup daemon status /var/log/openvpn/statickey_seoul-status.log log /var/log/openvpn/statickey_seoul.log log-append /var/log/openvpn/statickey_seoul.log 2008년 10월 26일제12회 LUG 세미나 19
Daegu Config Example remote 192.168.1.120 dev tun port 1195 ifconfig 10.1.0.6 10.1.0.5 route 10.0.0.0 255.0.0.0 secret static.key verb 4 comp-lzo keepalive 15 60 ping-timer-rem persist-tun persist-key user nobody group nogroup daemon status /var/log/openvpn/statickey_seoul-status.log log /var/log/openvpn/statickey_seoul.log log-append /var/log/openvpn/statickey_seoul.log 2008년 10월 26일제12회 LUG 세미나 20
Start OpenVPN Seoul seoul:~# /etc/init.d/openvpn start Starting virtual private network daemon: statickey-jeonju(ok) statickey-daegu(ok). Jeonju jeonju:~# /etc/init.d/openvpn start Starting virtual private network daemon: statickey-jeonju(ok). Daegu daegu:~# /etc/init.d/openvpn start Starting virtual private network daemon: statickey-daegu(ok). 2008 년 10 월 26 일제 12 회 LUG 세미나 21
VPN Interface of Seoul tun0 Link encap:unspec HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00 inet addr:10.1.0.1 P-t-P:10.1.0.2 Mask:255.255.255.255 UP POINTOPOINT RUNNING NOARP MULTICAST MTU:1500 Metric:1 RX packets:0 errors:0 dropped:0 overruns:0 frame:0 TX packets:0 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:100 RX bytes:0 (0.0 b) TX bytes:0 (0.0 b) tun1 Link encap:unspec HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00 inet addr:10.1.0.5 P-t-P:10.1.0.6 Mask:255.255.255.255 UP POINTOPOINT RUNNING NOARP MULTICAST MTU:1500 Metric:1 RX packets:0 errors:0 dropped:0 overruns:0 frame:0 TX packets:0 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:100 RX bytes:0 (0.0 b) TX bytes:0 (0.0 b) 2008 년 10 월 26 일제 12 회 LUG 세미나 22
VPN Port of Seoul seoul:~# netstat -putln Active Internet connections (only servers) Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 1985/sshd udp 0 0 0.0.0.0:1194 0.0.0.0:* 3362/openvpn udp 0 0 0.0.0.0:1195 0.0.0.0:* 3353/openvpn udp 0 0 0.0.0.0:6000 0.0.0.0:* 3344/openvpn 2008 년 10 월 26 일제 12 회 LUG 세미나 23
Routing Table of Seoul seoul:/var/log/openvpn# netstat -nr Kernel IP routing table Destination Gateway Genmask Flags MSS Window irtt Iface 10.1.0.6 0.0.0.0 255.255.255.255 UH 0 0 0 tun1 10.1.0.2 0.0.0.0 255.255.255.255 UH 0 0 0 tun0 10.10.2.0 10.1.0.2 255.255.255.0 UG 0 0 0 tun0 10.10.3.0 10.1.0.6 255.255.255.0 UG 0 0 0 tun1 192.168.1.0 0.0.0.0 255.255.255.0 U 0 0 0 eth1 10.10.1.0 0.0.0.0 255.255.255.0 U 0 0 0 eth2 10.100.1.0 0.0.0.0 255.255.255.0 U 0 0 0 tap0 0.0.0.0 192.168.1.1 0.0.0.0 UG 0 0 0 eth1 2008 년 10 월 26 일제 12 회 LUG 세미나 24
VPN Interface of Jeonju tun0 Link encap:unspec HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00 inet addr:10.1.0.2 P-t-P:10.1.0.1 Mask:255.255.255.255 UP POINTOPOINT RUNNING NOARP MULTICAST MTU:1500 Metric:1 RX packets:0 errors:0 dropped:0 overruns:0 frame:0 TX packets:0 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:100 RX bytes:0 (0.0 b) TX bytes:0 (0.0 b) 2008 년 10 월 26 일제 12 회 LUG 세미나 25
Routing Table & Port of Jeonju jeonju:~# netstat -nr Kernel IP routing table Destination Gateway Genmask Flags MSS Window irtt Iface 10.1.0.1 0.0.0.0 255.255.255.255 UH 0 0 0 tun0 10.10.2.0 0.0.0.0 255.255.255.0 U 0 0 0 eth2 192.168.1.0 0.0.0.0 255.255.255.0 U 0 0 0 eth1 10.0.0.0 10.1.0.1 255.0.0.0 UG 0 0 0 tun0 0.0.0.0 192.168.1.1 0.0.0.0 UG 0 0 0 eth1 jeonju:~# netstat -putln Active Internet connections (only servers) Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 6987/sshd udp 0 0 0.0.0.0:1194 0.0.0.0:* 7834/openvpn 2008 년 10 월 26 일제 12 회 LUG 세미나 26
VPN Interface of Daegu tun0 Link encap:unspec HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00 inet addr:10.1.0.6 P-t-P:10.1.0.5 Mask:255.255.255.255 UP POINTOPOINT RUNNING NOARP MULTICAST MTU:1500 Metric:1 RX packets:0 errors:0 dropped:0 overruns:0 frame:0 TX packets:0 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:100 RX bytes:0 (0.0 b) TX bytes:0 (0.0 b) 2008 년 10 월 26 일제 12 회 LUG 세미나 27
Routing Table & Port of Daegu daegu:~# netstat -nr Kernel IP routing table Destination Gateway Genmask Flags MSS Window irtt Iface 10.1.0.5 0.0.0.0 255.255.255.255 UH 0 0 0 tun0 10.10.3.0 0.0.0.0 255.255.255.0 U 0 0 0 eth2 192.168.1.0 0.0.0.0 255.255.255.0 U 0 0 0 eth1 10.0.0.0 10.1.0.5 255.0.0.0 UG 0 0 0 tun0 0.0.0.0 192.168.1.1 0.0.0.0 UG 0 0 0 eth1 daegu:~# netstat -putln Active Internet connections (only servers) Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 2929/sshd udp 0 0 0.0.0.0:1195 0.0.0.0:* 2990/openvpn 2008 년 10 월 26 일제 12 회 LUG 세미나 28
Seoul-Jeonju(A-B) Ping Test C:\>ping 10.10.2.10 # from seoul client to jeonju client Pinging 10.10.2.10 with 32 bytes of data: Reply from 10.10.2.10: bytes=32 time=55ms TTL=126 Reply from 10.10.2.10: bytes=32 time=1ms TTL=126 Reply from 10.10.2.10: bytes=32 time=1ms TTL=126 Reply from 10.10.2.10: bytes=32 time=15ms TTL=126 Ping statistics for 10.10.2.10: Packets: Sent = 4, Received = 4, Lost = 0 (0% loss), Approximate round trip times in milli-seconds: Minimum = 1ms, Maximum = 55ms, Average = 18ms 2008 년 10 월 26 일제 12 회 LUG 세미나 29
Seoul-Daegu(A-C) Ping Test C:\>ping 10.10.3.10 # from seoul client to daegu client Pinging 10.10.3.10 with 32 bytes of data: Reply from 10.10.3.10: bytes=32 time=51ms TTL=126 Reply from 10.10.3.10: bytes=32 time=1ms TTL=126 Reply from 10.10.3.10: bytes=32 time=10ms TTL=126 Reply from 10.10.3.10: bytes=32 time=1ms TTL=126 Ping statistics for 10.10.3.10: Packets: Sent = 4, Received = 4, Lost = 0 (0% loss), Approximate round trip times in milli-seconds: Minimum = 1ms, Maximum = 51ms, Average = 15ms 2008 년 10 월 26 일제 12 회 LUG 세미나 30
Jeonju-Daegu(B-C) Ping Test C:\>ping 10.10.3.10 ==> from jeonju client to daegu client Pinging 10.10.3.10 with 32 bytes of data: Reply from 10.10.3.10: bytes=32 time=5ms TTL=125 Reply from 10.10.3.10: bytes=32 time=17ms TTL=125 Reply from 10.10.3.10: bytes=32 time=1ms TTL=125 Reply from 10.10.3.10: bytes=32 time=3ms TTL=125 Ping statistics for 10.10.3.10: Packets: Sent = 4, Received = 4, Lost = 0 (0% loss), Approximate round trip times in milli-seconds: Minimum = 1ms, Maximum = 17ms, Average = 6ms 2008 년 10 월 26 일제 12 회 LUG 세미나 31
Packet Capture - encryption 2008 년 10 월 26 일제 12 회 LUG 세미나 32
Packet Capture - non encryption 2008 년 10 월 26 일제 12 회 LUG 세미나 33
2. Digital Signature (X.509 Certificate) 2008 년 10 월 26 일제 12 회 LUG 세미나 34
Make Certificates with OpenSSL openssl req nodes new x509 keyout seoul.key out seoul.csr openssl ca out seoul.crt in seoul.csr seoul 인증서 openssl req -nodes -new -x509 -keyout seoul.key -out seoul.csr -nodes : 개인키에암호를설정하지않는다.(-no des) -new : 새로운인증서를새로작성한다. -x509 : x.509 인증서를작성한다. -keyout : 생성되는개인키를지정한다. -out : 생성되는요청서를지정한다. 요청서에는공개키가포함되어있으며, 인증기관의개인키로서명을하면인증서로완성된다. openssl ca -out seoul.crt -in seoul.csr 인증기관의개인키로요청서에서명을하고 seoul.crt 인증서를생성한다. openssl req nodes new x509 keyout jeonju.key out jeonju.csr openssl ca out jeonju.crt in jeonju.csr openssl req nodes new x509 keyout daegu.key out daegu.csr openssl ca out daegu.crt in daegu.csr oopenssl dhparam out dh1024.pem 1024 jeonju 인증서 daegu 인증서 Diffie-Hellman 키교환암호키 2008 년 10 월 26 일제 12 회 LUG 세미나 35
Seoul-Jeonju Config dev tun0 proto udp port 1194 ifconfig 10.0.0.1 10.0.0.2 route 10.10.2.0 255.255.255.0 verb 7 comp-lzo keepalive 15 60 ping-timer-rem daemon ca keys/ca.crt cert keys/server.crt key keys/server.key dh keys/dh1024.pem tls-server user nobody group nogroup persist-key persist-tun status /var/log/openvpn/seoul-jeonjustatus.log log /var/log/openvpn/seoul-jeonju.log log-append /var/log/openvpn/seoul-jeonju.log 2008 년 10 월 26 일제 12 회 LUG 세미나 36
Seoul-Daegu Config dev tun1 proto udp port 1195 ifconfig 10.0.0.5 10.0.0.6 route 10.10.3.0 255.255.255.0 verb 7 comp-lzo keepalive 15 60 ping-timer-rem daemon ca keys/ca.crt cert keys/server.crt key keys/server.key dh keys/dh1024.pem tls-server user nobody group nogroup persist-key persist-tun status /var/log/openvpn/seoul-daegustatus.log log /var/log/openvpn/seoul-daegu.log log-append /var/log/openvpn/seoul-daegu.log 2008 년 10 월 26 일제 12 회 LUG 세미나 37
VPN Parameter dev tun0 # vpn 통신에 tun0 디바이스를사용한다. proto udp # udp 프로토콜을사용한다. port 1194 # udp 1194 포트를이용해통신을한다. # openvpn 은기본적으로 udp 프로토콜을이용한다. ifconfig 10.0.0.1 10.0.0.2 # tun0 의아이피를 10.0.0.1로설정하고, # 상대편아이피는10.0.0.2로지정한다. # 상대측에서도동일하게설정되어야한다. route 10.10.2.0 255.255.255.0 # tun0 디바이스를통해서 10.10.2.0/24의 # 네트워크로향하는라우팅경로를설정한다. ca keys/ca.crt cert keys/server.crt key keys/server.key dh keys/dh1024.pem # 루트인증서지정 # 서버인증서지정 # 서버개인키지정 # 키교환알고리즘지정 tls-server # 인증서기반의 VPN 에서서로간의키교환을위한역할을지정하는데, # 본예제에서는 seoul 을 tls-server 로지정하고 jeonju, daegu 는 # tls-client 로지정한다. daemon # 데몬모드로작동시켜서중요한정보들을로그파일에저장하도록한다. 2008 년 10 월 26 일제 12 회 LUG 세미나 38
VPN Parameter cont verb 7 # 로그레벨을지정한다. ( 기본값은 1 이다.) # 0 -- No output except fatal errors. # 1 to 4 -- Normal usage range. # 5 -- Output R and W characters to the console for each packet # read and write, uppercase is used for TCP/UDP packets and lower # case is used for TUN/TAP packets. # 6 to 11 -- Debug info range (see errlevel.h for additional in # formation on debug levels). comp-lzo # 압축알고리즘을사용해서통신을한다. keepalive 15 60 ping-timer-rem # 15 초마다 ping 을발송해서 60 초동안응답이없으면원격지 # 네트워크가다운된것으로파악해서 restart 한다. # 네트워크환경에따라서적절히선택한다. # daemon 모드로작동하면서상대편에서접근할때까지 # ping 클럭을계산하지않는다. user nobody # openvpn 데몬을 nobody 사용자권한으로실행시킨다. group nogroup # openvpn 데몬을 nogroup 그룹권한으로실행시킨다. # 사용자와그룹의권한을최소화시켜서보안을강화시킨다. 2008 년 10 월 26 일제 12 회 LUG 세미나 39
VPN Parameter cont persist-tun persist-key # ping-reset 시에 TUN/TAP 디바이스를재시작하지 # 않도록한다. # ping-reset 혹은 openvpn 재시작시키를다시읽어들이지 # 않도록한다. status /var/log/openvpn/statickey_jeonju-status.log # vpn 통계가저장된다. log /var/log/openvpn/statickey_jeonju.log # vpn 로그저장 log-append /var/log/openvpn/statickey_jeonju.log # 기존의로그에추가한다. 2008 년 10 월 26 일제 12 회 LUG 세미나 40
Jeonju Config Example remote 192.168.1.120 # VPN 서버를지정한다. proto udp port 1194 dev tun0 ifconfig 10.0.0.2 10.0.0.1 route 10.0.0.0 255.0.0.0 verb 7 comp-lzo keepalive 15 60 ping-timer-rem daemon ca keys/ca.crt cert keys/jeonju.crt key keys/jeonju.key tls-client # 인증서기반의 VPN에서키교환시 # 클라이언트로설정한다. user nobody group nogroup persist-key persist-tun status /var/log/openvpn/openvpn-status.log log /var/log/openvpn/openvpn.log log-append /var/log/openvpn/openvpn.log 2008 년 10 월 26 일제 12 회 LUG 세미나 41
Daegu Config Example remote 192.168.1.120 proto udp port 1195 dev tun0 ifconfig 10.0.0.6 10.0.0.5 route 10.0.0.0 255.0.0.0 verb 7 comp-lzo keepalive 15 60 ping-timer-rem daemon ca keys/ca.crt cert keys/daegu.crt key keys/daegu.key tls-client user nobody group nogroup persist-key persist-tun status /var/log/openvpn/openvpn-status.log log /var/log/openvpn/openvpn.log log-append /var/log/openvpn/openvpn.log 2008 년 10 월 26 일제 12 회 LUG 세미나 42
Firewall & Packet Forwarding iptables -I INPUT -p udp -dport 1194 -j ACCEPT # 1194번으로들어오는 udp 트래픽허용 iptables -I INPUT -p udp -dport 1195 -j ACCEPT # 1195번으로들어오는 udp 트래픽허용 iptables -I INPUT -i tun+ -j ACCEPT # tun(0,1,2,...) 디바이스로들어오는트래픽허용 iptables -I OUTPUT -o tun+ -j ACCEPT # tun(0,1,2,...) 디바이스로나가는트래픽허용 iptables -I INPUT -i tap+ -j ACCEPT # tap(0,1,2,...) 디바이스로들어오는트래픽허용 iptables -I OUTPUT -o tap+ -j ACCEPT # tap(0,1,2,...) 디바이스로나가는트래픽허용 - iptables 방화벽정책을설정하고, VPN 통신과관련된모든트래픽을허용 sysctl -w net.ipv4.ip_forward=1 또는, echo 1 > /proc/sys/net/ipv4/ip_forward - VPN 서버가패킷을전달할수있도록패킷포워딩기능을활성화 VPN 서버는각내부네트워크에대한게이트웨이 ( 라우터 ) 역할을하므로반드시패킷포워딩기능이가능해야함. - sysctl 시스템유틸리티를이용하거나 echo 명령어를이용해서직접커널파라미터를수정한다. 2008 년 10 월 26 일제 12 회 LUG 세미나 43
Remote Access VPN 2008 년 10 월 26 일제 12 회 LUG 세미나 44
1. X.509 Certificate 2008 년 10 월 26 일제 12 회 LUG 세미나 45
Install OpenVPN GUI downloading from http://www.openvpn.se NOTICE 1. config file should exist $install_dir\config directory 2. There're sample config files in $install_dir\sample directory 3. config file extension is 'ovpn'('ovpn' is windows openvpn config file extension) during installation we should install 'tap' device. Make Client Certificate openssl req -nodes -new -x509 -keyout testuser.key -out testuser.csr openssl ca -out testuser.crt -in testuser.csr 2008 년 10 월 26 일제 12 회 LUG 세미나 46
Server Configuration dev tap0 proto udp port 6000 keepalive 15 60 daemon mode server ifconfig 10.100.1.1 255.255.255.0 ifconfig-pool 10.100.1.51 10.100.1.100 push "route 10.0.0.0 255.0.0.0" push "route-gateway 10.100.1.1" push "dhcp-option DNS 10.10.1.200" client-to-client max-clients 20 verb 7 comp-lzo ping-timer-rem tls-server ca keys/ca.crt cert keys/server.crt key keys/server.key dh keys/dh1024.pem user nobody group nogroup persist-key persist-tun status /var/log/openvpn/remoteaccess-status.log log /var/log/openvpn/remoteaccess.log log-append /var/log/openvpn/remoteaccess.log 2008 년 10 월 26 일제 12 회 LUG 세미나 47
Server VPN Parameter dev tap0 # VPN 통신에 tap0 디바이스를사용한다. proto udp # udp 프로토콜을사용한다. port 6000 # 6000번포트를사용해서 VPN 통신을한다. keepalive 15 60 # 15초마다 ping을발송해서 60초동안응답이없으면원격지 # 네트워크가다운된것으로파악해서 restart한다. 네트워크환경에 # 따라서적절히선택한다. daemon # daemon 모드로실행시켜서모든에러나출력메시지들을로그에저장한다. mode server # openvpn 은 site-to-site에서봤듯이기본이 point-to-point 방식이다. # remote access 와같이다중클라이언트를지원하기위해서는 server # 모드를선택한다. ifconfig 10.100.1.1 255.255.255.0 # tap0 디바이스의아이피주소를설정한다. ifconfig-pool 10.100.1.51 10.100.1.100 # 접속하는클라이언트에할당할 ip 영역 ( 풀 ) 을 # 설정한다. 클라이언트는 10.100.1.51부터 100까지 # 차례로 ip를할당받는다. 2008년 10월 26일제12회 LUG 세미나 48
Server VPN Parameter cont push "route 10.0.0.0 255.0.0.0" # 클라이언트의라우팅경로정책을설정한다. push "route-gateway 10.100.1.1" # 클라이언트의라우팅게이트웨이를설정한다. push "dhcp-option DNS 10.10.1.200" # 클라이언트의 DNS 아이피를설정한다. client-to-client # 접속한클라이언트간통신을가능하게한다. max-clients 20 # 동시에접속가능한클라이언트의갯수를지정한다. verb 7 # 로그레벨을 7로설정한다. comp-lzo # 압축알고리즘을사용하여통신을수행한다. ping-timer-rem # 클라이언트가접속할때까지는 ping timer 를작동시키지않는다. tls-server # 서버모드의 vpn 에서인증서기반의인증을수행하기위해서설정한다. ca keys/ca.crt # 루트인증서지정 cert keys/server.crt # 서버인증서지정 key keys/server.key # 서버의개인키지정 dh keys/dh1024.pem # 키교환알고리즘지정 2008 년 10 월 26 일제 12 회 LUG 세미나 49
Server VPN Parameter cont user nobody # 서버의실행유저권한을 nobody로설정한다. group nogroup # 서버의실행그룹권한을 nogroup으로설정한다. persist-key # 재시작시키를다시읽지않는다. persist-tun status /var/log/openvpn/remoteaccess-status.log log /var/log/openvpn/remoteaccess.log log-append /var/log/openvpn/remoteaccess.log 2008 년 10 월 26 일제 12 회 LUG 세미나 50
Client Configuration remote 192.168.1.120 # 접속할서버의주소를지정한다. port 6000 # 서버의포트를지정한다. proto udp # udp 프로토콜을사용한다. dev tap0 # 통신에사용할디바이스로는 tap0를사용한다. dev-node "tap0" # tap0 디바이스의이름을지정한다. client # 클라이언트로지정한다. comp-lzo # 압축알고리즘을사용하여통신을수행한다. persist-key persist-tun ca ca.crt cert testuser.crt key testuser.key Verb 7 2008 년 10 월 26 일제 12 회 LUG 세미나 51
Start OpenVPN Server(OpenVPN) seoul:/etc/openvpn# /etc/init.d/openvpn start Starting virtual private network daemon: remoteaccess(ok) seoul-daegu(ok) seoul-jeonju(ok). Client(OpenVPN GUI) 태스크바의 OpenVPN GUI 아이콘을마우스우측버튼으로선택하고 Connect 버튼을클릭한다. VPN 접속에성공하면아이콘은녹색으로변한다. 2008 년 10 월 26 일제 12 회 LUG 세미나 52
VPN Interface of Server tap0 Link encap:ethernet HWaddr FA:D4:C6:DF:3E:1F inet addr:10.100.1.1 Bcast:10.100.1.255 Mask:255.255.255.0 inet6 addr: fe80::f8d4:c6ff:fedf:3e1f/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:69 errors:0 dropped:0 overruns:0 frame:0 TX packets:12 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:100 RX bytes:9921 (9.6 KiB) TX bytes:848 (848.0 b) 2008 년 10 월 26 일제 12 회 LUG 세미나 53
VPN Interface of Client C:\>ipconfig /all Ethernet adapter tap0: Connection-specific DNS Suffix. : Description........... : TAP-Win32 Adapter V8 Physical Address......... : 00-FF-08-69-01-75 Dhcp Enabled........... : Yes Autoconfiguration Enabled.... : Yes IP Address............ : 10.100.1.51 Subnet Mask........... : 255.255.255.0 Default Gateway......... : DHCP Server........... : 10.100.1.0 DNS Servers........... : 10.10.1.200 2008 년 10 월 26 일제 12 회 LUG 세미나 54
Routing Table of Client C:\>route print Network Destination Netmask Gateway Interface Metric 0.0.0.0 0.0.0.0 192.168.1.1 192.168.1.16 10 10.0.0.0 255.0.0.0 10.100.1.1 10.100.1.51 1 10.100.1.0 255.255.255.0 10.100.1.51 10.100.1.51 30 10.100.1.51 255.255.255.255 127.0.0.1 127.0.0.1 30 10.255.255.255 255.255.255.255 10.100.1.51 10.100.1.51 30 127.0.0.0 255.0.0.0 127.0.0.1 127.0.0.1 1 192.168.1.0 255.255.255.0 192.168.1.16 192.168.1.16 10 192.168.1.16 255.255.255.255 127.0.0.1 127.0.0.1 10 192.168.1.255 255.255.255.255 192.168.1.16 192.168.1.16 10 224.0.0.0 240.0.0.0 10.100.1.51 10.100.1.51 30 224.0.0.0 240.0.0.0 192.168.1.16 192.168.1.16 10 255.255.255.255 255.255.255.255 10.100.1.51 10.100.1.51 1 255.255.255.255 255.255.255.255 192.168.1.16 192.168.1.16 1 Default Gateway: 192.168.1.1 2008 년 10 월 26 일제 12 회 LUG 세미나 55
Ping Test C:\>ping 10.10.1.10 Pinging 10.10.1.10 with 32 bytes of data: Reply from 10.10.1.10: bytes=32 time=16ms TTL=127 Reply from 10.10.1.10: bytes=32 time=19ms TTL=127 Reply from 10.10.1.10: bytes=32 time=2ms TTL=127 Reply from 10.10.1.10: bytes=32 time=4ms TTL=127 Ping statistics for 10.10.1.10: Packets: Sent = 4, Received = 4, Lost = 0 (0% loss), Approximate round trip times in milli-seconds: Minimum = 2ms, Maximum = 19ms, Average = 10ms 2008 년 10 월 26 일제 12 회 LUG 세미나 56
Network Topology Configuration 2008 년 10 월 26 일제 12 회 LUG 세미나 57
VPN Interface of Seoul tap0 Link encap:ethernet HWaddr FA:D4:C6:DF:3E:1F inet addr:10.100.1.1 Bcast:10.100.1.255 Mask:255.255.255.0 inet6 addr: fe80::f8d4:c6ff:fedf:3e1f/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:88 errors:0 dropped:0 overruns:0 frame:0 TX packets:12 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:100 RX bytes:14107 (13.7 KiB) TX bytes:848 (848.0 b) tun0 Link encap:unspec HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00 inet addr:10.1.0.1 P-t-P:10.1.0.2 Mask:255.255.255.255 UP POINTOPOINT RUNNING NOARP MULTICAST MTU:1500 Metric:1 RX packets:0 errors:0 dropped:0 overruns:0 frame:0 TX packets:0 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:100 RX bytes:0 (0.0 b) TX bytes:0 (0.0 b) 2008 년 10 월 26 일제 12 회 LUG 세미나 58
VPN Interface of Seoul cont tun1 Link encap:unspec HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00 inet addr:10.1.0.5 P-t-P:10.1.0.6 Mask:255.255.255.255 UP POINTOPOINT RUNNING NOARP MULTICAST MTU:1500 Metric:1 RX packets:0 errors:0 dropped:0 overruns:0 frame:0 TX packets:0 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:100 RX bytes:0 (0.0 b) TX bytes:0 (0.0 b) # Brief of VPN Interface tap0 Link encap:ethernet HWaddr FA:D4:C6:DF:3E:1F inet addr:10.100.1.1 Bcast:10.100.1.255 Mask:255.255.255.0 tun0 Link encap:unspec HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00 inet addr:10.1.0.1 P-t-P:10.1.0.2 Mask:255.255.255.255 tun1 Link encap:unspec HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00 inet addr:10.1.0.5 P-t-P:10.1.0.6 Mask:255.255.255.255 2008 년 10 월 26 일제 12 회 LUG 세미나 59
Routing Table of Seoul seoul:~# netstat -nr Kernel IP routing table Destination Gateway Genmask Flags MSS Window irtt Iface 10.1.0.6 0.0.0.0 255.255.255.255 UH 0 0 0 tun1 10.1.0.2 0.0.0.0 255.255.255.255 UH 0 0 0 tun0 10.10.2.0 10.1.0.2 255.255.255.0 UG 0 0 0 tun0 10.10.3.0 10.1.0.6 255.255.255.0 UG 0 0 0 tun1 192.168.1.0 0.0.0.0 255.255.255.0 U 0 0 0 eth1 10.10.1.0 0.0.0.0 255.255.255.0 U 0 0 0 eth2 10.100.1.0 0.0.0.0 255.255.255.0 U 0 0 0 tap0 0.0.0.0 192.168.1.1 0.0.0.0 UG 0 0 0 eth1 2008 년 10 월 26 일제 12 회 LUG 세미나 60
Routing Table of Client C:\>route print Network Destination Netmask Gateway Interface Metric 0.0.0.0 0.0.0.0 192.168.1.1 192.168.1.16 10 10.0.0.0 255.0.0.0 10.100.1.1 10.100.1.51 1 10.100.1.0 255.255.255.0 10.100.1.51 10.100.1.51 30 10.100.1.51 255.255.255.255 127.0.0.1 127.0.0.1 30 10.255.255.255 255.255.255.255 10.100.1.51 10.100.1.51 30 127.0.0.0 255.0.0.0 127.0.0.1 127.0.0.1 1 192.168.1.0 255.255.255.0 192.168.1.16 192.168.1.16 10 192.168.1.16 255.255.255.255 127.0.0.1 127.0.0.1 10 192.168.1.255 255.255.255.255 192.168.1.16 192.168.1.16 10 224.0.0.0 240.0.0.0 10.100.1.51 10.100.1.51 30 224.0.0.0 240.0.0.0 192.168.1.16 192.168.1.16 10 255.255.255.255 255.255.255.255 10.100.1.51 10.100.1.51 1 255.255.255.255 255.255.255.255 192.168.1.16 192.168.1.16 1 Default Gateway: 192.168.1.1 2008년 10월 26일 제12회 LUG 세미나 61
Ping Test(D-A) C:\>ping 10.10.1.10 Pinging 10.10.1.10 with 32 bytes of data: Reply from 10.10.1.10: bytes=32 time=3ms TTL=127 tls-client Reply from 10.10.1.10: bytes=32 time=2ms TTL=127 Reply from 10.10.1.10: bytes=32 time=2ms TTL=127 Reply from 10.10.1.10: bytes=32 time=3ms TTL=127 Ping statistics for 10.10.1.10: Packets: Sent = 4, Received = 4, Lost = 0 (0% loss), Approximate round trip times in milli-seconds: Minimum = 2ms, Maximum = 3ms, Average = 2ms 2008 년 10 월 26 일제 12 회 LUG 세미나 62
Ping Test cont (D-B) C:\>ping 10.10.2.10 Pinging 10.10.2.10 with 32 bytes of data: Reply from 10.10.2.10: bytes=32 time=4ms TTL=126 tls-client Reply from 10.10.2.10: bytes=32 time=2ms TTL=126 Reply from 10.10.2.10: bytes=32 time=2ms TTL=126 Reply from 10.10.2.10: bytes=32 time=3ms TTL=126 Ping statistics for 10.10.2.10: Packets: Sent = 4, Received = 4, Lost = 0 (0% loss), Approximate round trip times in milli-seconds: Minimum = 2ms, Maximum = 4ms, Average = 2ms 2008 년 10 월 26 일제 12 회 LUG 세미나 63
Ping Test cont (D-C) C:\>ping 10.10.3.10 Pinging 10.10.3.10 with 32 bytes of data: Reply from 10.10.3.10: bytes=32 time=2ms TTL=126 Reply from 10.10.3.10: bytes=32 time=2ms TTL=126 Reply from 10.10.3.10: bytes=32 time=2ms TTL=126 Reply from 10.10.3.10: bytes=32 time=3ms TTL=126 Ping statistics for 10.10.3.10: Packets: Sent = 4, Received = 4, Lost = 0 (0% loss), Approximate round trip times in milli-seconds: Minimum = 2ms, Maximum = 3ms, Average = 2ms 2008 년 10 월 26 일제 12 회 LUG 세미나 64
Troubleshooting 인증서기반의 vpn 이실패하면, 설정파일을제대로설정했는지먼저확인한다. ( 대부분설정파일에서문제가발생한다.) 로그를확인해서 openvpn 커뮤니티검색을통해문제점의원인을파악하도록한다. openvpn 설정파일의로그레벨 (verb 옵션 ) 을높여서가급적상세한정보를얻도록한다. 시스템의시간설정이정확한지확인하고, 시간대를통일한다. ( 다른지역에떨어져있다하더라도시간대를통일한다.) 해결이잘되지않는경우인증서를새로만들어서배포하면문제가쉽게해결되는경우가있다. 2008 년 10 월 26 일제 12 회 LUG 세미나 65
Reference Webpage & online 교 http://www.openvpn.net(openvpn homepage) http://www.openvpn.se(openvpn GUI homepage) http://www.dd-wrt.com(dd-wrt homepage) http://www.kldp.org(openssl howto 참조 ) http://www.openssl.org(openssl manual 참조 ) openvpn manpage Book 네트워크보안프로토콜 ( 교학사, 윤종호저 ) 리눅스서버보안관리실무 ( 수퍼유저코리아, 홍석범저 ) 2008 년 10 월 26 일제 12 회 LUG 세미나 66