OpenVPNããã®èšèã§ãããã§ããã ãã«ããã©ãããã©ãŒã ãé«åºŠã«èšå®å¯èœãªãç¡æã®ãªãŒãã³ãœãŒã¹VPNãµãŒããŒãããã¯ãå®éã«ã¯å
éšäŒæ¥ãããã¯ãŒã¯ãžã®ã¢ã¯ã»ã¹ãæŽçããããã®äºå®äžã®æšæºã§ãã ã»ãšãã©ã®ç®¡çè
ã¯ãããã©ã«ãèšå®ãŸãã¯ããŸããŸãªHOW-TOã§åºã説æãããŠããäžè¬çãªæ§æã§äœ¿çšããŸãã ããããOpenVPNã¯äžèŠãããšåçŽãªããã«åçŽã§ããïŒ ãã®èšäºã§ã¯ãç®ã«èŠããªãOpenVPNã®å
éšã¡ã«ããºã ãæ€èšããŸããããã¯ããã®æ©èœã®èãæ¹ãæ ¹æ¬çã«å€ãããã®ã§ãã
OpenVPNãµãŒããŒã¯ãããŸããŸãªãªãã¬ãŒãã£ã³ã°ã·ã¹ãã çšã®ãœãŒã¹ã³ãŒããŸãã¯ããã«ã€ã³ã¹ããŒã«ã§ããã³ã³ãã€ã«æžã¿ããã±ãŒãžãšããŠé
åžãããŸãã OpenSSLã¯ãæå·åãæäŸããã©ã€ãã©ãªãšããŠäœ¿çšãããŸãã
ã¯ã©ã€ã¢ã³ãããµãŒããŒã«æ¥ç¶ãããããããã³ãµãŒããŒéã§æ¥ç¶ããããã®ã»ãšãã©ã®æ§æã§ã¯ãå
éšãã©ãã£ãã¯ã®ã»ãã¥ãªãã£ã確ä¿ããããã«ãå€æ°ã®ç§å¯ããŒãŸãã¯ç§å¯/å
¬éããŒã䜿çšããŸãã MultiPoint-to-SinglePointã¢ãŒãã®äŒæ¥ãããã¯ãŒã¯ã§ã¯ãéåžžãPKI蚌ææ©é¢ã䜿çšãããŸããããã¯ã easy-rsaãŸãã¯XCAããŒã¹ã®ããããã䜿çšããŠç°¡åã«æ§ç¯ã§ããŸãã ãã€ã³ãããŒãã€ã³ãã®ãµãŒããŒééä¿¡ã§ã¯ãäž»ã«å
±æããŒæ§æã䜿çšãããŸãã åºæ¬çãªãããç¥ãããã¡ã«ããºã ãšæ©èœãæãåºããŠãã ããã
äž»èŠãªã¡ã«ããºã ãšæ©èœ
蚌ææžèªèšŒ
ããã«ã€ããŠèšå€§ãªéã®ããã¥ã¡ã³ããæžãããŠããŸãã ãã€ã³ãã¯ç°¡åã§ãã ãŠãŒã¶ãŒèšŒææžãçºè¡ããèªèšŒå±ãäœæãããŠããŸãã 蚌ææ©é¢ã®å©ããåããŠããŠãŒã¶ãŒãOpenVPNãµãŒããŒã«æ¥ç¶ããããã®å¶åŸ¡ãæäŸãããŸãã 蚌ææžã®æå¹æéãåããã倱å¹ãããšããŠãŒã¶ãŒã¢ã¯ã»ã¹ããããã¯ãããŸãã 蚌ææžãšå
±ã«çºè¡ããããã¹ã¯ãŒããèšå®ãããç§å¯ããŒã¯ãå
éšãªãœãŒã¹ãžã®äžæ£ãªæ¥ç¶ã«å¯Ÿããã»ãã¥ãªãã£ãæäŸããŸãã
ãã©ã€ããŒããã€ã³ãããŒãã€ã³ãããŒ
1人ã®ãŠãŒã¶ãŒ/ãµãŒããŒã®ã¿ãäŒç€Ÿã®ãªãœãŒã¹ã«æ¥ç¶ãããšããç¹ã§ã¯ãç§å¯éµã䜿çšããã¹ããŒã ã䜿çšãããŸãã ãã¹ãã®1ã€ã§ããŒãçæããããµãŒããŒãšã¯ã©ã€ã¢ã³ãéã§å
±æãããŸãã
ã¯ã©ã€ã¢ã³ããšãµãŒããŒéã®ããã³ãã·ã§ã€ã¯ããã³ãã·ã§ã€ã¯ã®ã»ãã¥ãªãã£ã®ããã®æ¥ç¶ã®ãã¹ãŠã®ã±ãŒã¹ã§ãDiffie-Hellmannãããã³ã«ã䜿çšãããŸãã
å€éšãŠãŒã¶ãŒèªèšŒ
ç¬èªã®PKIã䜿çšããã¹ããŒã ã®ä»£ããã«ããŠãŒã¶ãŒæ¥ç¶ã®å¶åŸ¡ãç°¡çŽ åããããã«ãlogin / passwordã«ããå€éšãŠãŒã¶ãŒèªèšŒã䜿çšããã¹ããŒã ã䜿çšã§ããŸã ã ãã®ã¹ããŒã ã¯ããã¡ã€ã³ãã°ã€ã³/ãã¹ã¯ãŒããªã©ã§ãŠãŒã¶ãŒãèªèšŒããã®ã«äŸ¿å©ã§ãã ãµãŒããŒã«æ¥ç¶ããããã«ããµãŒããŒèšŒææžãšHARDENING OPENVPN SECURITYãã±ãã眲åããŒãã¯ã©ã€ã¢ã³ãæ§æãã¡ã€ã«ã«è¿œå ãããŸãã
ã¯ã©ã€ã¢ã³ãæ§æã®äŸ
dev tun proto udp # IP OpenVPN remote 172.16.111.166 # Port port 1200 client resolv-retry infinite tls-client key-direction 1 auth SHA1 cipher BF-CBC #comp-lzo persist-key persist-tun # auth-user-pass c:/temp/pass.txt # # just create a file with name pass.txt # and put to it two lines # ------------- #username #password # ------------- #auth-user-pass verb 3 <ca> -----BEGIN CERTIFICATE----- MIIE5jCCA86gAwIBAgIJAOt3kFH7PxA0MA0GCSqGSIb3DQEBCwUAMIGjMQswCQYD .... -----END CERTIFICATE----- </ca> <tls-auth> -----BEGIN OpenVPN Static key V1----- 83ddd29fa82212f3059d85a41490134c .... a4f2c7df3a22364a49093bca102dedeb -----END OpenVPN Static key V1----- </tls-auth>
ãã¡ã€ã«ãä»ããã¯ã©ã€ã¢ã³ãèªèšŒçšã®ãµãŒããŒæ§æã®äžéš
å¥ã®èªèšŒæ¹æ³ã䜿çšãã
verify-client-cert none #client-cert-not-required username-as-common-name tls-server tls-auth /usr/local/etc/openvpn/ssl/tlsauth.key key-direction 0 tls-timeout 120 auth SHA1 cipher BF-CBC auth-user-pass-verify /usr/local/etc/openvpn/auth/auth-static-file.pl via-file
ãã®ã¹ããŒã ã¯äŸ¿å©ã§ãããéåžžã«å®å
šã§ã¯ãããŸããã
PAM
ã»ãã¥ãªãã£ã匷åããããã«ãå€éšã·ã¹ãã ã§ãã°ã€ã³/ãã¹ã¯ãŒãæ€èšŒãæäŸãããã©ã°ã€ã³ã䜿çšã§ããŸãã æãäžè¬çãªæ¹æ³ã¯ãã·ã¹ãã PAMïŒãã©ã°å¯èœèªèšŒã¢ãžã¥ãŒã«ïŒã§ãã
OpenVPNæ§æãã¡ã€ã«ã«è¡ãè¿œå ããŸã
plugin /usr/share/openvpn/plugin/lib/openvpn-auth-pam.so login
ã«ãŒãã£ã³ã°
ãªããªã ãµãŒããŒã®äž»ãªã¿ã¹ã¯ã¯ããªã¢ãŒããŠãŒã¶ãŒ/ãµãŒããŒãå
éšãªãœãŒã¹ã«ã¢ã¯ã»ã¹ã§ããããã«ããããšã§ãããµãŒããŒã䜿çšãããšãã¯ã©ã€ã¢ã³ããããµãŒããŒãžãããã³ãµãŒããŒããã¯ã©ã€ã¢ã³ããžã®éçã«ãŒãã£ã³ã°ã決å®ã§ããŸãã å
éšãªãœãŒã¹ãžã®ã¯ã©ã€ã¢ã³ãã¢ã¯ã»ã¹ã®èŠ³ç¹ãããDHCPãšãã£ã¬ã¯ãã£ããã«ãŒãããŸãã¯ãããã·ã¥ã«ãŒããã䜿çšãããµãŒããŒã§ã¯ãå
éšãããã¯ãŒã¯ã«ãŒããã¯ã©ã€ã¢ã³ãã«è»¢éã§ããŸãã ã¯ã©ã€ã¢ã³ãåŽã®ãªã¢ãŒããããã¯ãŒã¯ã«ã€ããŠãµãŒããŒèªäœã«éç¥ããã«ã¯ããclient config dirãïŒccdïŒã䜿çšããŸããããã¯ããirouteããã£ã¬ã¯ãã£ãã䜿çšããŠããµãŒããŒã®ã«ãŒãã£ã³ã°ããŒãã«ã«ååšããå¿
èŠãããã¯ã©ã€ã¢ã³ãå
éšãããã¯ãŒã¯ã®ãªã¹ããèšè¿°ã§ããã¡ã«ããºã ã§ãã
ãã®ãéåžžã®ãåºã䜿çšãããŠããæ©èœãçµäºãããšãç¹å®ã®ã±ãŒã¹ããšã«ããŒã«ã«ã«ã¹ã¿ãã€ãºãéå§ãããŸãã
è¿œå ã®OpenVPNæ©èœ
誰ããèããããšããããããããªãããå®éã«ã¯èŠãã䜿ã£ããããŠããªãOpenVPNã®è¿œå æ©èœãæ€èšããŠãã ããã
ãããã¯ãŒã¯ã»ãã¥ãªãã£/ãã±ãããã£ã«ã¿ãªã³ã°
ãªããªã OpenVPNã¯ãã©ãã£ãã¯ãã«ãŒãã£ã³ã°ããŸããçžäºã«æä»çãª2ã€ã®åäœã¢ãŒãããããŸãã æåã®ã¢ãŒãã¯OpenVPNãµãŒããŒå
ã®ã«ãŒãã£ã³ã°ã§ããã2çªç®ã®ã¢ãŒãã¯ã€ã³ã¿ãŒãã§ã€ã¹éæ žã«ãŒãã£ã³ã°ã§ãã æåã®ã±ãŒã¹ã§ã¯ãOpenVPNãã¯ã©ã€ã¢ã³ã/ãããã¯ãŒã¯éã®ãã±ããã®ã¹ã€ããã³ã°ãšãã£ã«ã¿ãªã³ã°ãæ
åœãã2çªç®ã®ã±ãŒã¹ã§ã¯ããã¹ãã§ãµããŒããããã·ã¹ãã ãã±ãããã£ã«ã¿ãŒïŒpfãiptablesãªã©ïŒãæ
åœããŸãã
OpenVPNã«ã¯ããŠãŒã¶ãŒãšãããã¯ãŒã¯éã®æ¥ç¶ãèš±å¯ãŸãã¯åé¢ã§ãããã±ãããã£ã«ã¿ãŒãçµã¿èŸŒãŸããŠããããšãç¥ã£ãŠãã人ã¯ã»ãšãã©ããŸããã
ã¯ããã¯ãã ããªãã¯ãããæ£ããèªã¿ãŸãã OpenVPNã«ã¯ãç¬èªã®çµã¿èŸŒã¿ãã±ãããã£ã«ã¿ãŒããããŸãã ãã©ãã£ãã¯ããã£ã«ã¿ãªã³ã°ããæ©èœã¯ã2010幎ã«å®è£
ãããŸãã ã
OpenVPNãã±ãããã£ã«ã¿ãŒã¯ ã管çã€ã³ã¿ãŒãã§ã€ã¹ãŸãã¯OpenVPNã«æ¥ç¶ããããã©ã°ã€ã³ã®ãããããä»ããŠå¶åŸ¡ãããŸãã
ãã©ãã£ãã¯ã«ãŒã«ã¯ãã¡ã€ã«ãä»ããŠç®¡çãããŸãã ãã¡ã€ã«åœ¢åŒã¯ã·ã³ãã«ã§ãã
[CLIENTS DROP|ACCEPT] {+|-}common_name1 {+|-}common_name2 . . . [SUBNETS DROP|ACCEPT] {+|-}subnet1 {+|-}subnet2 . . . [END]
ãããã¯ãã£ã¬ã¯ãã£ãïŒACCEPT / DENYïŒã¯ããããã¯å
ã§æå®ãããŠããªããã¹ãŠã®ã¯ã©ã€ã¢ã³ãã«ããã©ã«ãã¢ã¯ã·ã§ã³ãèšå®ããŸãã
ããšãã°ãã¯ã©ã€ã¢ã³ãuser2ã®ãã¡ã€ã«
[CLIENTS DROP] +user1 [SUBNETS DROP] [END]
ãã¹ãŠã®ãŠãŒã¶ãŒãšãããã¯ãŒã¯ãžã®ãã©ãã£ãã¯ããããã¯ããŸãããclient1åŽãžã®ãã©ãã£ãã¯ã¯èš±å¯ããŸãã user1ããã©ãã£ãã¯ãuser2ã«è»¢éããèš±å¯ãæ瀺çã«èšè¿°ããŠããªãå Žåããã©ãã£ãã¯ã¯äžæ¹åã®user2-> user1ã«ã®ã¿ç§»åããŸãã
ãŸãã¯å¥ã®äŸã
ããŒã«ã«ãããã¯ãŒã¯äžã«ãããŠãŒã¶ãŒãšDNSãµãŒããŒããã³ãããã¯ãŒã¯192.168.0.0/24ã®ãã¹ãåç·éã®ã¢ã¯ã»ã¹ãé€ããã¹ãŠãç¡å¹ã«ããŸã
[CLIENTS DROP] +user1 +user2 [SUBNETS DROP] +10.150.0.1 +10.150.1.1 +192.168.0.0/24 [END]
ãã£ã«ã¿ãªã³ã°ã¡ã«ããºã ã¯ãæ§æãã¡ã€ã«ãä»ããŠããŸãã¯ãã©ã°ãOPENVPN_PLUGIN_ENABLE_PFãããèšå®ããããã©ã°ã€ã³ãæ¥ç¶ãããšãã«ã¢ã¯ãã£ãã«ãªããŸãã
ãã®æ©äŒã«ã€ããŠã¯åŸã§èª¬æããŸãã
ãã©ãã£ãã¯ãã£ã«ã¿ãªã³ã°ã®2çªç®ã®ã¢ãŒãã¯ãã·ã¹ãã ã«çµã¿èŸŒãŸãããã±ãããã£ã«ã¿ãŒã§ãã æå¹ã«ããã«ã¯ãæ§æã«ãã¯ã©ã€ã¢ã³ãããã¯ã©ã€ã¢ã³ãããã£ã¬ã¯ãã£ããå«ããªãã§ãã ããã ã¯ã©ã€ã¢ã³ãã®æ¥ç¶/åææã«å¿
èŠãªã«ãŒã«ã®ãªã³/ãªããèªååãããšãã芳ç¹ããã¯ãã«ãŒã«ã®ãªã¹ãã§åå¥ã®æ¿å
¥ã䜿çšããã®ãæã䟿å©ã§ããããã¯ãIptablesïŒLinuxïŒã®CHAINSãŸãã¯PFã®ã¢ã³ã«ãŒïŒFreeBSDïŒã®ããããã§å®è£
ãããŸãã ã«ãŒã«ã®ã¢ã¯ãã£ãå/éã¢ã¯ãã£ãåã¯ãéåžžããµãŒããŒæ§æãã¡ã€ã«å
ã®client-connect / client-disconnectãã£ã¬ã¯ãã£ããä»ããŠè¡ããããŠãŒã¶ãŒãæ¥ç¶/åæãããšãã«å¯Ÿå¿ããã¹ã¯ãªãããåŒã³åºããŸãã
é«åºŠãªPAMèªèšŒ
æ¡åŒµPAMèªèšŒãšã¯ããŠãŒã¶ãŒãã°ã€ã³ãšãã¹ã¯ãŒãæ€èšŒã®ããžãã¯ãå€æŽããããšã§ãã ããã¯ãå€éšãœãŒã¹ã®ããŒã¿ã®èªã¿åããšæ€èšŒãæäŸããOpenVPNã®é©åãªãã©ã°ã€ã³ãã€ã³ã¹ããŒã«ããããã¹ã¯ãªãããã¹ã¯ãªããã«èš±å¯ããã·ã¹ãã ã«ã©ã€ãã©ãªãæ¥ç¶ããããšã«ãã£ãŠå®çŸãããŸãã ãã®ãããªã©ã€ãã©ãªã®1ã€ãpam_pythonã§ã ãããã¯ãPythonã¹ã¯ãªãããä»ããŠãã°ã€ã³/ãã¹ã¯ãŒãæ€èšŒããžãã¯ãã¹ã¯ãªããåããã®ã«åœ¹ç«ã¡ãŸãã
䜿çšããå ŽåããŠãŒã¶ãŒç¢ºèªæååã¯æ¬¡ã®ããã«å€æŽãããŸãã
plugin openvpn-plugin-auth-pam.so pam_python login USERNAME password PASSWORD domain mydomain.com
ãå
éšãPAMã¯ãã·ã¹ãã ãšãŠãŒã¶ãŒãŸãã¯å€éšã©ã€ãã©ãªãšã®ãã€ã¢ãã°ã§ããããããããã®ãã€ã¢ãã°ãå¶åŸ¡ã§ããŸãã ããšãã°ã OTPããŒã¯ã³ãã·ã¹ãã ã«æ¥ç¶ããŸã ã LinOTPã©ã€ãã©ãªã¯åã«äŸãšããŠåãäžããããŠããŸãã ã©ããã§ãã¹ãäžã«èªåã§æžããã©ã€ãã©ãªã倱ã£ã¯\ ïŒãïŒ /¯
ãŸããäŸã¯ãpam_pythonããšããåèªã§ç°¡åã«ã°ãŒã°ã«æ€çŽ¢ãããŸãã
å€éšPAMã¢ãžã¥ãŒã«ã䜿çšããå Žåã®äž»ãªåé¡ã¯ãåŒã³åºãããPythonãŸãã¯ã·ã¹ãã pamãä»ããŠåŒã³åºãããä»ã®ã¹ã¯ãªããå
ã§OpenVPNã»ãã·ã§ã³ç°å¢ãååŸã§ããªãããšã§ãã ã€ãŸã ã¹ã¯ãªããã¯ãå²ãåœãŠãããŠãããã°ã€ã³/ãã¹ã¯ãŒãããã§ãã¯ããããã®æ©èœã®ã¿ãæäŸããŸãã
é
延èªèšŒ
OpenVPNãµãŒããŒã¯ããããããé
延ãèªèšŒããµããŒãããŠããŸãã ãé
延ãèªèšŒã¯ãèªèšŒãµãŒãã¹ããã°ã€ã³/ãã¹ã¯ãŒã確èªèŠæ±ããªã¢ã«ã¿ã€ã ã§åŠçã§ããªãå Žåã«äœ¿çšãããŸãã
OpenVPNãã©ã°ã€ã³
ããã¯å¥ã®ãã©ã¬ã«ãŠãããŒã¹ã§ããããããã«ã€ããŠã¯èªèããŠããå ŽåããããŸãããæ··ä¹±ãçããŠããããã䜿çšããããšãæããããšããããŸããã å®éãOpenVPNã®æ©èœãã©ã°ã€ã³ãäœæããã«ã¯ãCã§ããã°ã©ãã³ã°ããå¿
èŠããããŸãã ã·ã³ãã«ãªãã©ã°ã€ã³ã®äŸã¯OpenVPNãœãŒã¹ããªãŒã«å«ãŸããŠããŸããããšãã°ã OpenVPNããã®ã¡ãœããåŒã³åºãã瀺ããã©ã°ã€ã³ããããŸã ã
OpenVPNãããã©ã°ã€ã³ãã©ã®ããã«æ©èœããããç解ããŠã¿ãŸãããã
ãã©ã°ã€ã³ãæäœããããã«äœ¿çšãããé¢æ°ãšãã©ã¡ãŒã¿ãŒã¯å¥ã®ãã¡ã€ã«ã«èšè¿°ãããŠããŸã
ãã©ã°ã€ã³ã®äž»ãªã¿ã¹ã¯ã¯ãOpenVPNãµãŒããŒã«ãã£ãŠåæåããããšãããã©ã°ã€ã³ã«ãã£ãŠãµããŒããããæ©èœã®ãªã¹ãã転éããæ©èœã®ãããããåŒã³åºããšãã«ããµãŒããŒãç解ããæ£ããå¿çã³ãŒããè¿ãããšã§ãã
#define OPENVPN_PLUGIN_FUNC_SUCCESS 0 #define OPENVPN_PLUGIN_FUNC_ERROR 1 #define OPENVPN_PLUGIN_FUNC_DEFERRED 2
åã°ã«ãŒãã«ã€ããŠè©³ãã説æããŸãã ãŠãŒã¶ãŒã®ãã¹ã¯ãŒãèªèšŒã«åºã¥ããŠäœæ¥ã®ããžãã¯ãæ€èšããŸãã
ãµãŒããŒãèµ·åãããšãæ§æãã¡ã€ã«ãèªã¿åã£ãåŸããµãŒããŒã¯OPENVPN_PLUGIN_UPããã³OPENVPN_PLUGIN_ROUTE_UPé¢æ°ãåŒã³åºããŸãã åŒã³åºãããé¢æ°ã®å¯å€ç°å¢ã§ã¯ãå®è¡äžã®ãµãŒããŒã®äž»èŠãªãã©ã¡ãŒã¿ãŒã転éãããŸãã
OPENVPN_PLUGIN_UP { "route_netmask_1":"255.255.0.0", "daemon_start_time":"1545994898", "ifconfig_remote":"10.150.0.2", "local_1":"172.16.100.139", "script_context":"init", "config":"/usr/local/etc/openvpn/server150.conf", "link_mtu":"1622", "ifconfig_local":"10.150.0.1", "tun_mtu":"1500", "verb":"2", "daemon_pid":"626", "route_vpn_gateway":"10.150.0.2", "proto_1":"udp", "daemon_log_redirect":"1", "daemon":"1", "route_net_gateway":"172.16.100.1", "dev_type":"tun", "route_gateway_1":"10.150.0.2", "remote_port_1":"1200", "dev":"tun150", "pluginid":"0", "local_port_1":"1200", "route_network_1":"10.150.0.0" }
OPENVPN_PLUGIN_ROUTE_UP { "route_netmask_1":"255.255.0.0", "daemon_start_time":"1545994898", "redirect_gateway":"0", "ifconfig_remote":"10.150.0.2", "local_1":"172.16.100.139", "script_context":"init", "config":"/usr/local/etc/openvpn/server150.conf", "link_mtu":"1622", "ifconfig_local":"10.150.0.1", "tun_mtu":"1500", "verb":"2", "daemon_pid":"626", "route_vpn_gateway":"10.150.0.2", "proto_1":"udp", "daemon_log_redirect":"1", "daemon":"1", "route_net_gateway":"172.16.100.1", "dev_type":"tun", "route_gateway_1":"10.150.0.2", "remote_port_1":"1200", "dev":"tun150", "pluginid":"2", "local_port_1":"1200", "route_network_1":"10.150.0.0" }
ãããã®æ©èœã¯ããµãŒããŒèµ·åæãŸãã¯æ§æå€æŽæã®ã¢ã©ãŒãã«äœ¿çšã§ããŸãã
ã¯ã©ã€ã¢ã³ããæ¥ç¶ãããšããOpenVPNã¯å
éšãã±ãããã£ã«ã¿ãŒãã¢ã¯ãã£ãã«ããæ©èœãèŠæ±ããŸãã
OPENVPN_PLUGIN_ENABLE_PF { "route_netmask_1":"255.255.0.0", "daemon_start_time":"1545994898", "redirect_gateway":"0", "ifconfig_remote":"10.150.0.2", "local_1":"172.16.100.139", "script_context":"init", "config":"/usr/local/etc/openvpn/server150.conf", "link_mtu":"1622", "pf_file":"/tmp/openvpn_pf_b7a18ca8fac838679ca87ada6b8a356.tmp", "ifconfig_local":"10.150.0.1", "tun_mtu":"1500", "verb":"2", "daemon_pid":"626", "route_vpn_gateway":"10.150.0.2", "proto_1":"udp", "route_net_gateway":"172.16.100.1", "daemon":"1", "daemon_log_redirect":"1", "dev_type":"tun", "route_gateway_1":"10.150.0.2", "remote_port_1":"1200", "dev":"tun150", "pluginid":"11", "local_port_1":"1200", "route_network_1":"10.150.0.0" }
ãã³ããããããããã«ãpf_fileå€æ°ãçŸããŸããã ãã®ãã¡ã€ã«ã«ã¯ãåŠçäžã®çŸåšã®ã»ãã·ã§ã³ã®å
éšãã±ãããã£ã«ã¿ãŒã®ã«ãŒã«ãå«ãŸããŠããå¿
èŠããããŸãã
次ã«ãOPENVPN_PLUGIN_AUTH_USER_PASS_VERIFYé¢æ°ã§ãŠãŒã¶ãŒã®ãŠãŒã¶ãŒåãšãã¹ã¯ãŒãããã§ãã¯ãããŸã
OPENVPN_PLUGIN_AUTH_USER_PASS_VERIFY { "route_netmask_1":"255.255.0.0", "route_gateway_1":"10.150.0.2", "IV_NCP":"2", "IV_COMP_STUB":"1", "daemon_start_time":"1545994898", "IV_LZ4":"1", "redirect_gateway":"0", "ifconfig_remote":"10.150.0.2", "untrusted_port":"1200", "IV_LZ4v2":"1", "local_1":"172.16.100.139", "script_context":"init", "untrusted_ip":"172.16.111.168", "config":"/usr/local/etc/openvpn/server150.conf", "username":"fa56bf61-90da-11e8-bf33-005056a12a82-1234568", "link_mtu":"1622", "pf_file":"/tmp/openvpn_pf_b7a18ca8fac838679ca87ada6b8a356.tmp", "ifconfig_local":"10.150.0.1", "tun_mtu":"1500", "auth_control_file":"/tmp/openvpn_acf_a3d0650a43b88ca1b5f305ce2c8f682.tmp", "daemon":"1", "IV_COMP_STUBv2":"1", "verb":"2", "IV_PLAT":"win", "daemon_pid":"626", "password":"12312312312312", "route_vpn_gateway":"10.150.0.2", "proto_1":"udp", "route_net_gateway":"172.16.100.1", "IV_PROTO":"2", "daemon_log_redirect":"1", "dev_type":"tun", "IV_VER":"2.4.3", "IV_LZO":"1", "remote_port_1":"1200", "dev":"tun150", "pluginid":"5", "local_port_1":"1200", "IV_TCPNL":"1", "route_network_1":"10.150.0.0" }
ããã¯ãå¯å€ç°å¢ã®ãã¹ã¯ãŒããå¹³æã§ååšããå¯äžã®å Žæã§ãã
ãã®é¢æ°ã®çµæã¯ã3ã€ã®å¯èœãªçãã«ãªãã¯ãã§ãã
#define OPENVPN_PLUGIN_FUNC_SUCCESS 0 #define OPENVPN_PLUGIN_FUNC_ERROR 1 #define OPENVPN_PLUGIN_FUNC_DEFERRED 2
ãµãŒããŒãå¿çOPENVPN_PLUGIN_FUNC_DEFERREDãåä¿¡ãããšããé
延ãèªèšŒã®ã¡ã«ããºã ãåäœããŸãã ã芧ã®ããã«ãå€æ°ãauth_control_fileããå€æ°ç°å¢ã«çŸããŸããããã®å€æ°ã®å
容ã«ã¯ãèªèšŒã·ã¹ãã ããã®å¿çãæåŸ
ããããã¡ã€ã«ã®ååãå«ãŸããŠããŸãã çãã¯ãæå®ããããã¡ã€ã«ã«çœ®ãããæå0ïŒã¢ã¯ã»ã¹ãèš±å¯ããïŒã1ïŒã¢ã¯ã»ã¹ãæåŠããïŒã§ãã ãµãŒããŒãã©ã¡ãŒã¿ãhand-windowãã¯ããµãŒããŒãå¿çãåŸ
æ©ããã¿ã€ã ã¢ãŠããç§åäœã§æ±ºå®ããŸãã åŸ
æ©äžãä»ã®ã¯ã©ã€ã¢ã³ãããã®ãã©ãã£ãã¯ã¯äžæãããŸããã
ãã¹ã¯ãŒãèªèšŒã䜿çšããŠããããã蚌ææžæ€èšŒé¢æ°OPENVPN_PLUGIN_TLS_VERIFYã¯åŒã³åºãããŸããã 代ããã«ãOPENVPN_PLUGIN_TLS_FINALãããã«åŒã³åºãããã»ãã·ã§ã³ã®ç¢ºç«ã確èªãããŸãã
OPENVPN_PLUGIN_TLS_FINAL { "route_netmask_1":"255.255.0.0", "route_gateway_1":"10.150.0.2", "IV_NCP":"2", "IV_COMP_STUB":"1", "daemon_start_time":"1545994898", "IV_LZ4":"1", "redirect_gateway":"0", "ifconfig_remote":"10.150.0.2", "untrusted_port":"1200", "IV_LZ4v2":"1", "local_1":"172.16.100.139", "script_context":"init", "untrusted_ip":"172.16.111.168", "config":"/usr/local/etc/openvpn/server150.conf", "username":"fa56bf61-90da-11e8-bf33-005056a12a82-1234568", "link_mtu":"1622", "pf_file":"/tmp/openvpn_pf_b7a18ca8fac838679ca87ada6b8a356.tmp", "ifconfig_local":"10.150.0.1", "tun_mtu":"1500", "auth_control_file":"/tmp/openvpn_acf_a3d0650a43b88ca1b5f305ce2c8f682.tmp", "daemon":"1", "IV_COMP_STUBv2":"1", "verb":"2", "IV_PLAT":"win", "daemon_pid":"626", "route_vpn_gateway":"10.150.0.2", "proto_1":"udp", "route_net_gateway":"172.16.100.1", "IV_PROTO":"2", "daemon_log_redirect":"1", "dev_type":"tun", "IV_VER":"2.4.3", "IV_LZO":"1", "remote_port_1":"1200", "dev":"tun150", "pluginid":"10", "local_port_1":"1200", "IV_TCPNL":"1", "route_network_1":"10.150.0.0" }
次ã«ãOPENVPN_PLUGIN_IPCHANGEåŒã³åºããåŒã³åºãããŸããããã¯ãã¯ã©ã€ã¢ã³ãã®IPã¢ãã¬ã¹ãå€æŽããåã«åŒã³åºãããŸãã
OPENVPN_PLUGIN_IPCHANGE { "route_netmask_1":"255.255.0.0", "route_gateway_1":"10.150.0.2", "trusted_ip":"172.16.111.168", "link_mtu":"1622", "IV_COMP_STUB":"1", "daemon_start_time":"1547319280", "IV_LZ4":"1", "redirect_gateway":"0", "common_name":"fa56bf61-90da-11e8-bf33-005056a12a82-1234568", "ifconfig_remote":"10.150.0.2", "IV_NCP":"2", "untrusted_port":"1200", "IV_LZ4v2":"1", "local_1":"172.16.100.139", "script_context":"init", "untrusted_ip":"172.16.111.168", "config":"/usr/local/etc/openvpn/server150.conf", "username":"fa56bf61-90da-11e8-bf33-005056a12a82-1234568", "trusted_port":"1200", "pf_file":"/tmp/openvpn_pf_4fcad505693b33f97c4fe105df8681cb.tmp", "ifconfig_local":"10.150.0.1", "tun_mtu":"1500", "auth_control_file":"/tmp/openvpn_acf_321bb12075dc0e1b5440d227220bac5d.tmp", "daemon":"1", "IV_COMP_STUBv2":"1", "verb":"3", "IV_PLAT":"win", "daemon_pid":"52435", "route_vpn_gateway":"10.150.0.2", "proto_1":"udp", "route_net_gateway":"172.16.100.1", "IV_PROTO":"2", "daemon_log_redirect":"1", "dev_type":"tun", "IV_VER":"2.4.3", "IV_LZO":"1", "remote_port_1":"1200", "dev":"tun150", "pluginid":"3", "local_port_1":"1200", "IV_TCPNL":"1", "route_network_1":"10.150.0.0" }
OPENVPN_PLUGIN_CLIENT_CONNECT_V2é¢æ°ã¯ãå
éšDHCPãµãŒããŒã«ãã£ãŠIPã¢ãã¬ã¹ãèšå®ããããšåŒã³åºãããŸãã
OPENVPN_PLUGIN_CLIENT_CONNECT_V2 { "route_netmask_1":"255.255.0.0", "route_gateway_1":"10.150.0.2", "trusted_ip":"172.16.111.168", "link_mtu":"1622", "IV_COMP_STUB":"1", "daemon_start_time":"1547319280", "IV_LZ4":"1", "dev":"tun150", "common_name":"fa56bf61-90da-11e8-bf33-005056a12a82-1234568", "time_ascii":"Sat Jan 12 18:54:48 2019", "ifconfig_remote":"10.150.0.2", "IV_NCP":"2", "untrusted_port":"1200", "IV_LZ4v2":"1", "local_1":"172.16.100.139", "script_context":"init", "untrusted_ip":"172.16.111.168", "config":"/usr/local/etc/openvpn/server150.conf", "username":"fa56bf61-90da-11e8-bf33-005056a12a82-1234568", "trusted_port":"1200", "pf_file":"/tmp/openvpn_pf_4fcad505693b33f97c4fe105df8681cb.tmp", "ifconfig_local":"10.150.0.1", "tun_mtu":"1500", "auth_control_file":"/tmp/openvpn_acf_321bb12075dc0e1b5440d227220bac5d.tmp", "daemon":"1", "IV_COMP_STUBv2":"1", "verb":"3", "IV_PLAT":"win", "daemon_pid":"52435", "time_unix":"1547319288", "redirect_gateway":"0", "route_vpn_gateway":"10.150.0.2", "proto_1":"udp", "route_net_gateway":"172.16.100.1", "IV_PROTO":"2", "daemon_log_redirect":"1", "dev_type":"tun", "IV_VER":"2.4.3", "IV_LZO":"1", "remote_port_1":"1200", "ifconfig_pool_local_ip":"10.150.0.5", "pluginid":"9", "ifconfig_pool_remote_ip":"10.150.0.6", "local_port_1":"1200", "IV_TCPNL":"1", "route_network_1":"10.150.0.0" }
å€æ°ç°å¢ã§ã¯ããã³ãã«ãã©ã¡ãŒã¿ãifconfig_pool_local_ipãããã³ãifconfig_pool_remote_ipããå«ãå€æ°ã衚瀺ãããŸãã
OpenVPNãµãŒããŒãIPã¢ãã¬ã¹ã®æ¥ç¶ãšããããžã®ã«ãŒããåŠç¿ãããšãOPENVPN_PLUGIN_LEARN_ADDRESSé¢æ°ãåŒã³åºãããŸãã ãã®æ©èœãçµäºãããšããã¡ã€ã«ãããã±ãããã£ã«ã¿ãŒèšå®ãé©çšããæé ãã¢ã¯ãã£ãã«ãªããŸãã ãã®å Žåã®ç°å¢å€æ°OPENVPN_PLUGIN_LEARN_ADDRESSã¯ããã§ãŒãºOPENVPN_PLUGIN_CLIENT_CONNECT_V2ã«å¯Ÿå¿ããŠããŸãã
fa56bf61-.../172.16.111.168:1200 ----- pf_check_reload : struct pf_context ----- fa56bf61-.../172.16.111.168:1200 enabled=1 fa56bf61-.../172.16.111.168:1200 filename='/tmp/openvpn_pf_343330698e4acdea34c8a8c7fb87d861.tmp' fa56bf61-.../172.16.111.168:1200 file_last_mod=1547319124 fa56bf61-.../172.16.111.168:1200 n_check_reload=1 fa56bf61-.../172.16.111.168:1200 reload=[1,15,1547319125] fa56bf61-.../172.16.111.168:1200 ----- struct pf_set ----- fa56bf61-.../172.16.111.168:1200 kill=0 fa56bf61-.../172.16.111.168:1200 ----- struct pf_subnet_set ----- fa56bf61-.../172.16.111.168:1200 default_allow=ACCEPT fa56bf61-.../172.16.111.168:1200 ----- struct pf_cn_set ----- fa56bf61-.../172.16.111.168:1200 default_allow=DROP fa56bf61-.../172.16.111.168:1200 12345678-90da-11e8-bf33-005056a12a82-1234567 ACCEPT fa56bf61-.../172.16.111.168:1200 fa56bf61-90da-11e8-bf33-005056a12a82-1234567 ACCEPT fa56bf61-.../172.16.111.168:1200 ---------- fa56bf61-.../172.16.111.168:1200 fa56bf61-90da-11e8-bf33-005056a12a82-1234567 ACCEPT fa56bf61-.../172.16.111.168:1200 12345678-90da-11e8-bf33-005056a12a82-1234567 ACCEPT fa56bf61-.../172.16.111.168:1200 --------------------
ã¯ã©ã€ã¢ã³ããåæããããšãOPENVPN_PLUGIN_CLIENT_DISCONNECTé¢æ°ãåŒã³åºãããŸãã
OPENVPN_PLUGIN_CLIENT_DISCONNECT { "route_netmask_1":"255.255.0.0", "route_gateway_1":"10.150.0.2", "trusted_ip":"172.16.111.168", "link_mtu":"1622", "IV_COMP_STUB":"1", "daemon_start_time":"1547319280", "IV_LZ4":"1", "dev":"tun150", "common_name":"fa56bf61-90da-11e8-bf33-005056a12a82-1234568", "time_ascii":"Sat Jan 12 18:54:48 2019", "bytes_received":"30893", "IV_NCP":"2", "untrusted_port":"1200", "ifconfig_remote":"10.150.0.2", "IV_LZ4v2":"1", "local_1":"172.16.100.139", "script_context":"init", "untrusted_ip":"172.16.111.168", "config":"/usr/local/etc/openvpn/server150.conf", "username":"fa56bf61-90da-11e8-bf33-005056a12a82-1234568", "trusted_port":"1200", "pf_file":"/tmp/openvpn_pf_4fcad505693b33f97c4fe105df8681cb.tmp", "ifconfig_local":"10.150.0.1", "tun_mtu":"1500", "auth_control_file":"/tmp/openvpn_acf_4bdddbada2885cde42cd3cb1b85d77e5.tmp", "daemon":"1", "IV_COMP_STUBv2":"1", "verb":"3", "IV_PLAT":"win", "daemon_pid":"52435", "time_unix":"1547319288", "redirect_gateway":"0", "route_vpn_gateway":"10.150.0.2", "proto_1":"udp", "route_net_gateway":"172.16.100.1", "IV_PROTO":"2", "daemon_log_redirect":"1", "time_duration":"3781", "dev_type":"tun", "IV_VER":"2.4.3", "IV_LZO":"1", "bytes_sent":"22684", "remote_port_1":"1200", "ifconfig_pool_local_ip":"10.150.0.5", "pluginid":"7", "ifconfig_pool_remote_ip":"10.150.0.6", "local_port_1":"1200", "IV_TCPNL":"1", "route_network_1":"10.150.0.0" }
å¯å€ç°å¢ã§ã¯ãæ¥ç¶æéãšãŠãŒã¶ãŒãã©ãã£ãã¯ãè¿œå ãããŸãã
ã芧ã®ããã«ãããŸããŸãªåŒã³åºãã®ããŒã¿ãè±å¯ã§ãããããCããã°ã©ãã³ã°èšèªïŒC ++ïŒã§ãã©ã°ã€ã³ãäœæããã³ãããã°ããã®ã¯ããªãæéãããããŸãã
æ©èœãæ¡åŒµããããã«ãæåã«å
éšãããžã§ã¯ãã®ãå¥è·¡ããäœæããããããããªãã¯ãã¡ã€ã³ã«å
¥ããããšã«ããŸãã:)
OpenVPNã®ãœãŒã¹ã³ãŒããšé«åºŠã«ç¹æ®åããããã©ã°ã€ã³ã®ããŸããŸãªäŸãé·ãéèªãã åŸãã»ãã·ã§ã³åŠçããžãã¯ã®ããã°ã©ãã³ã°èšèªãšããŠPythonã䜿çšãããããžã§ã¯ããäœæãããŸããã ã³ãŒãã¯OpenVPNã«ãã©ã°ã€ã³ããCèšèªã®ãã©ã°ã€ã³ã§ãããPythonã®c-apiãªãã¡ã¬ã³ã¹ãä»ããŠã¢ãžã¥ãŒã«ãžã®ãã©ã°ã€ã³ãžã®ãã¹ãŠã®ãªã¯ãšã¹ããéä¿¡ããŸãã
OpenVPNãã©ã°ã€ã³Pythonãããã·
Pythonã¢ãžã¥ãŒã«ã¯ãªãã§ããïŒ
pythonãã¡ã€ã«ãçŽæ¥æäœããPython c-apiãªãã¡ã¬ã³ã¹ã¯ãpythonã©ã€ãã©ãªã®ããŒãã§ã¯æ£ããæ©èœããŸããã
ã©ã®ããã«æ©èœããŸããïŒ
ãã©ã°ã€ã³ãOpenVPNã§åæåããããšããã©ã°ã€ã³ã¯æäŸå¯èœãªãã¹ãŠã®æ©èœã®ãã¹ã¯ããããªã¹ããè¿ããŸãã 次ã®æ¥ç¶ãã§ãŒãºãŸãã¯å
éšã€ãã³ããçºçãããšãOpenVPNã¯ãã©ã°ã€ã³ãã察å¿ããé¢æ°ãåŒã³åºããŸãã ãã©ã°ã€ã³ã¯ãé¢æ°ã«æž¡ãããç°å¢å€æ°ãšãã©ã¡ãŒã¿ãŒãæ§é ã«å€æããpythonãåæåããæ§é ã察å¿ããpythonã¢ãžã¥ãŒã«ããã·ãŒãžã£ã«æž¡ããŸãã ããã·ãŒãžã£ã¯ããã©ã°ã€ã³ã«3ã€ã®åçã®1ã€ãè¿ããŸãïŒ0-æåã1-ãšã©ãŒã2-é
延ïŒã å¿çã¯OpenVPNã«ãã£ãŠå€æãããŠè¿ãããŸãã
ãã¹ãŠã®ã¢ãžã¥ãŒã«åŒã³åºãã¯ãã¹ããŒãã¬ã¹ãã§ããããšã«æ³šæããŠãã ãããããã¯ãããã·ãŒãžã£ãä»ã®åŒã³åºãã§ä»¥åã«äœãèµ·ãã£ãããèŠããŠããããç¥ããªãããšãæå³ããŸãã OpenVPNãããã©ã°ã€ã³ã«æž¡ãããå€æ°ç°å¢ã«ã®ã¿éäžã§ããŸãã
pythonã¢ãžã¥ãŒã«å
ã§ã¯ãå¿
èŠãªã©ã€ãã©ãªãšãªãœãŒã¹ãæ¥ç¶ããããšã«ãããä»»æã®ããžãã¯ãå®è£
ã§ããŸãã ãã§ãã¯ã®é床ãããããªãå Žåã¯ããä¿çã確èªã䜿çšããŸãã
ãµãŒãã¹ã«æ¥ç¶ããŠãããŠãŒã¶ãŒã®ã°ã«ãŒãåã䜿çšãããšãpf_fileãä»ããŠããŠãŒã¶ãŒãšä»ã®ãªãœãŒã¹éã®ãããã¯ãŒã¯çžäºäœçšãéåžžã«åŸ®èª¿æŽã§ããŸãã 次ã«ãç£èŠã®ããã«ãã©ã°ã€ã³ãæ¥ç¶ããããšã«ãããOpenVPN管çã€ã³ã¿ãŒãã§ãŒã¹ãä»ããŠã¯ã©ã€ã¢ã³ãã»ãã·ã§ã³ãåžžã«ç®¡çããããšãå¯èœã«ãªããŸãã
ãããžã§ã¯ãã®ãã¹ãäžã«ãjwtããŒã¯ã³ãšäŒŒãŠããŸããããµã€ãºãå°ãããã¹ã¯ãŒãçæã¡ã«ããºã ãéçºãããŸããã
ãã€ã³ãã¯ç°¡åã§ãã ããŒã¯ã³ã«ã¯ãã¯ã©ã€ã¢ã³ãèå¥åãšã¢ã¯ã»ã¹ã®æå¹æéãå«ãŸããŠããŸãã ããŒã¯ã³ã«çœ²åããã«ã¯ãç§å¯éµã§HMAC_SHA1ã䜿çšãããŸãã ããŒã¯ã³ã«çœ²åãããšãããã¹ãã³ã³ãã³ãã¯çœ²åã«ãã£ãŠç Žæããbase64ã«å€æãããŸãã ãããã£ãŠãããŒã¯ã³ã®ãã·ãŒã«ããååŸãããŸãã å°å°ãããããŒã¯ã³ããŠãŒã¶ãŒã®ãã¹ã¯ãŒããšããŠäœ¿çšãããŸãã ããŒã¿ãããã¯ã®äžæ£ãªå€æŽãçºçããå Žåãxorãç Žæããxorãç Žæããå Žåã眲åæ€èšŒã¯ç ŽæããŸãã ç§å¯éµããªããšã眲åãå€æŽã§ããŸããã
ãã¹ã¯ãŒãã®æéãæåã§å¶åŸ¡ããããªãå Žåã¯ããã®ãããªããŒã¯ã³ãçæããå€éšãµãŒãã¹ãåŒã³åºããã«ãã©ã°ã€ã³å
ã§æå¹æ§ã確èªããŸãã ãã®ã¹ããŒã ã¯ãç¹å®ã®æéã®ã»ãã·ã§ã³ãã¹ã¯ãŒãçæã«éåžžã«äŸ¿å©ã§ãã åæã«ãããŒã¯ã³ã®å
容ãå€éšå¶åŸ¡ã·ã¹ãã ã«è»¢éã§ããããŒã¯ã³ã®æå¹æéãåãããšãŠãŒã¶ãŒãåæããããã«æ§æãããŸãã
ãã®èšäºã®æ
å ±ãã圹ã«ç«ãŠã°å¹žãã§ãã
èªãã§ãããŠããããšãã
ã質åãããå Žåã¯ãã§ããããšã«ãçãããŸãã
©Aborche 2019