freedombone-app-vpn 21KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604
  1. #!/bin/bash
  2. #
  3. # .---. . .
  4. # | | |
  5. # |--- .--. .-. .-. .-.| .-. .--.--. |.-. .-. .--. .-.
  6. # | | (.-' (.-' ( | ( )| | | | )( )| | (.-'
  7. # ' ' --' --' -' - -' ' ' -' -' -' ' - --'
  8. #
  9. # Freedom in the Cloud
  10. #
  11. # VPN functions
  12. # https://www.digitalocean.com/community/tutorials/how-to-set-up-an-openvpn-server-on-debian-8
  13. # https://jamielinux.com/blog/force-all-network-traffic-through-openvpn-using-iptables/
  14. # http://www.farrellf.com/projects/software/2016-05-04_Running_a_VPN_Server_with_OpenVPN_and_Stunnel/index_.php
  15. #
  16. # License
  17. # =======
  18. #
  19. # Copyright (C) 2014-2017 Bob Mottram <bob@freedombone.net>
  20. #
  21. # This program is free software: you can redistribute it and/or modify
  22. # it under the terms of the GNU Affero General Public License as published by
  23. # the Free Software Foundation, either version 3 of the License, or
  24. # (at your option) any later version.
  25. #
  26. # This program is distributed in the hope that it will be useful,
  27. # but WITHOUT ANY WARRANTY; without even the implied warranty of
  28. # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  29. # GNU Affero General Public License for more details.
  30. #
  31. # You should have received a copy of the GNU Affero General Public License
  32. # along with this program. If not, see <http://www.gnu.org/licenses/>.
  33. VARIANTS='full full-vim'
  34. IN_DEFAULT_INSTALL=0
  35. SHOW_ON_ABOUT=0
  36. OPENVPN_SERVER_NAME="server"
  37. OPENVPN_KEY_FILENAME='client.ovpn'
  38. VPN_COUNTRY_CODE="US"
  39. VPN_AREA="Apparent Free Speech Zone"
  40. VPN_LOCATION="Freedomville"
  41. VPN_ORGANISATION="Freedombone"
  42. VPN_UNIT="Freedombone Unit"
  43. STUNNEL_PORT=3439
  44. VPN_TLS_PORT=553
  45. vpn_variables=(MY_EMAIL_ADDRESS
  46. DEFAULT_DOMAIN_NAME
  47. MY_USERNAME
  48. VPN_COUNTRY_CODE
  49. VPN_AREA
  50. VPN_LOCATION
  51. VPN_ORGANISATION
  52. VPN_UNIT
  53. VPN_TLS_PORT)
  54. function logging_on_vpn {
  55. echo -n ''
  56. }
  57. function logging_off_vpn {
  58. echo -n ''
  59. }
  60. function install_interactive_vpn {
  61. read_config_param VPN_TLS_PORT
  62. if [ ! $VPN_TLS_PORT ]; then
  63. VPN_TLS_PORT=553
  64. fi
  65. VPN_DETAILS_COMPLETE=
  66. while [ ! $VPN_DETAILS_COMPLETE ]
  67. do
  68. data=$(tempfile 2>/dev/null)
  69. trap "rm -f $data" 0 1 2 5 15
  70. dialog --backtitle $"Freedombone Configuration" \
  71. --title $"VPN Configuration" \
  72. --form $"\nPlease enter your VPN details. Changing the port to 443 will help defend against censorship but will prevent other web apps from running." 12 65 1 \
  73. $"TLS port:" 1 1 "$(grep 'VPN_TLS_PORT' temp.cfg | awk -F '=' '{print $2}')" 1 12 4 4 \
  74. 2> $data
  75. sel=$?
  76. case $sel in
  77. 1) exit 1;;
  78. 255) exit 1;;
  79. esac
  80. tlsport=$(cat $data | sed -n 1p)
  81. if [ ${#tlsport} -gt 1 ]; then
  82. if [[ "$tlsport" != *' '* && "$tlsport" != *'.'* ]]; then
  83. VPN_TLS_PORT="$tlsport"
  84. VPN_DETAILS_COMPLETE="yes"
  85. write_config_param "VPN_TLS_PORT" "$VPN_TLS_PORT"
  86. fi
  87. fi
  88. done
  89. APP_INSTALLED=1
  90. }
  91. function vpn_change_tls_port {
  92. EXISTING_VPN_TLS_PORT=$VPN_TLS_PORT
  93. data=$(tempfile 2>/dev/null)
  94. trap "rm -f $data" 0 1 2 5 15
  95. dialog --title $"VPN Configuration" \
  96. --backtitle $"Freedombone Control Panel" \
  97. --inputbox $'Change TLS port' 10 50 $VPN_TLS_PORT 2>$data
  98. sel=$?
  99. case $sel in
  100. 0)
  101. tlsport=$(<$data)
  102. if [ ${#tlsport} -gt 0 ]; then
  103. if [[ "$tlsport" != "$EXISTING_VPN_TLS_PORT" ]]; then
  104. clear
  105. VPN_TLS_PORT=$tlsport
  106. write_config_param "VPN_TLS_PORT" "$VPN_TLS_PORT"
  107. sed -i "s|accept =.*|accept = $VPN_TLS_PORT|g" /etc/stunnel/stunnel.conf
  108. sed -i "s|accept =.*|accept = $VPN_TLS_PORT|g" /etc/stunnel/stunnel-client.conf
  109. for d in /home/*/ ; do
  110. USERNAME=$(echo "$d" | awk -F '/' '{print $3}')
  111. if [ -f /home/$USERNAME/stunnel-client.conf ]; then
  112. cp /etc/stunnel/stunnel-client.conf /home/$USERNAME/stunnel-client.conf
  113. chown $USERNAME:$USERNAME /home/$USERNAME/stunnel-client.conf
  114. fi
  115. done
  116. if [ $VPN_TLS_PORT -eq 443 ]; then
  117. systemctl stop nginx
  118. systemctl disable nginx
  119. else
  120. systemctl enable nginx
  121. systemctl restart nginx
  122. fi
  123. systemctl restart stunnel
  124. dialog --title $"VPN Configuration" \
  125. --msgbox $"TLS port changed to $VPN_TLS_PORT" 6 60
  126. fi
  127. fi
  128. ;;
  129. esac
  130. }
  131. function vpn_regenerate_client_keys {
  132. data=$(tempfile 2>/dev/null)
  133. trap "rm -f $data" 0 1 2 5 15
  134. dialog --title $"Regenerate VPN keys for a user" \
  135. --backtitle $"Freedombone Control Panel" \
  136. --inputbox $'username' 10 50 2>$data
  137. sel=$?
  138. case $sel in
  139. 0)
  140. USERNAME=$(<$data)
  141. if [ ${#USERNAME} -gt 0 ]; then
  142. if [ -d /home/$USERNAME ]; then
  143. clear
  144. create_user_vpn_key $USERNAME
  145. dialog --title $"Regenerate VPN keys for a user" \
  146. --msgbox $"VPN keys were regenerated for $USERNAME" 6 60
  147. fi
  148. fi
  149. ;;
  150. esac
  151. }
  152. function configure_interactive_vpn {
  153. read_config_param VPN_TLS_PORT
  154. while true
  155. do
  156. data=$(tempfile 2>/dev/null)
  157. trap "rm -f $data" 0 1 2 5 15
  158. dialog --backtitle $"Freedombone Control Panel" \
  159. --title $"VPN Configuration" \
  160. --radiolist $"Choose an operation:" 13 70 3 \
  161. 1 $"Change TLS port (currently $VPN_TLS_PORT)" off \
  162. 2 $"Regenerate keys for a user" off \
  163. 3 $"Exit" on 2> $data
  164. sel=$?
  165. case $sel in
  166. 1) return;;
  167. 255) return;;
  168. esac
  169. case $(cat $data) in
  170. 1) vpn_change_tls_port;;
  171. 2) vpn_regenerate_client_keys;;
  172. 3) break;;
  173. esac
  174. done
  175. }
  176. function reconfigure_vpn {
  177. echo -n ''
  178. }
  179. function upgrade_vpn {
  180. echo -n ''
  181. }
  182. function backup_local_vpn {
  183. for d in /home/*/ ; do
  184. USERNAME=$(echo "$d" | awk -F '/' '{print $3}')
  185. if [ -f /home/$USERNAME/$OPENVPN_KEY_FILENAME ]; then
  186. cp /home/$USERNAME/$OPENVPN_KEY_FILENAME /etc/openvpn/easy-rsa/keys/${USERNAME}_${OPENVPN_KEY_FILENAME}
  187. fi
  188. done
  189. function_check backup_directory_to_usb
  190. backup_directory_to_usb /etc/openvpn/easy-rsa/keys vpn
  191. }
  192. function restore_local_vpn {
  193. temp_restore_dir=/root/tempvpn
  194. restore_directory_from_usb $temp_restore_dir vpn
  195. if [ -d ${temp_restore_dir} ]; then
  196. cp -r ${temp_restore_dir}/* /etc/openvpn/easy-rsa/keys
  197. rm -rf ${temp_restore_dir}
  198. for d in /home/*/ ; do
  199. USERNAME=$(echo "$d" | awk -F '/' '{print $3}')
  200. if [ -f /etc/openvpn/easy-rsa/keys/${USERNAME}_${OPENVPN_KEY_FILENAME} ]; then
  201. cp /etc/openvpn/easy-rsa/keys/${USERNAME}_${OPENVPN_KEY_FILENAME} /home/$USERNAME/$OPENVPN_KEY_FILENAME
  202. chown $USERNAME:$USERNAME /home/$USERNAME/$OPENVPN_KEY_FILENAME
  203. fi
  204. done
  205. fi
  206. }
  207. function backup_remote_vpn {
  208. for d in /home/*/ ; do
  209. USERNAME=$(echo "$d" | awk -F '/' '{print $3}')
  210. if [ -f /home/$USERNAME/$OPENVPN_KEY_FILENAME ]; then
  211. cp /home/$USERNAME/$OPENVPN_KEY_FILENAME /etc/openvpn/easy-rsa/keys/${USERNAME}_${OPENVPN_KEY_FILENAME}
  212. fi
  213. done
  214. function_check backup_directory_to_friend
  215. backup_directory_to_friend /etc/openvpn/easy-rsa/keys vpn
  216. }
  217. function restore_remote_vpn {
  218. temp_restore_dir=/root/tempvpn
  219. restore_directory_from_friend $temp_restore_dir vpn
  220. if [ -d ${temp_restore_dir} ]; then
  221. cp -r ${temp_restore_dir}/* /etc/openvpn/easy-rsa/keys
  222. rm -rf ${temp_restore_dir}
  223. for d in /home/*/ ; do
  224. USERNAME=$(echo "$d" | awk -F '/' '{print $3}')
  225. if [ -f /etc/openvpn/easy-rsa/keys/${USERNAME}_${OPENVPN_KEY_FILENAME} ]; then
  226. cp /etc/openvpn/easy-rsa/keys/${USERNAME}_${OPENVPN_KEY_FILENAME} /home/$USERNAME/$OPENVPN_KEY_FILENAME
  227. chown $USERNAME:$USERNAME /home/$USERNAME/$OPENVPN_KEY_FILENAME
  228. fi
  229. done
  230. fi
  231. }
  232. function remove_vpn {
  233. systemctl stop stunnel
  234. systemctl disable stunnel
  235. rm /etc/systemd/system/stunnel.service
  236. systemctl stop openvpn
  237. if [ $VPN_TLS_PORT -ne 443 ]; then
  238. firewall_remove VPN-TLS $VPN_TLS_PORT
  239. else
  240. systemctl enable nginx
  241. systemctl restart nginx
  242. fi
  243. apt-get -yq remove --purge fastd openvpn easy-rsa
  244. apt-get -yq remove stunnel4
  245. if [ -d /etc/openvpn ]; then
  246. rm -rf /etc/openvpn
  247. fi
  248. firewall_disable_vpn
  249. echo 0 > /proc/sys/net/ipv4/ip_forward
  250. sed -i 's|net.ipv4.ip_forward=.*|net.ipv4.ip_forward=0|g' /etc/sysctl.conf
  251. remove_completion_param install_vpn
  252. # remove any client keys
  253. for d in /home/*/ ; do
  254. USERNAME=$(echo "$d" | awk -F '/' '{print $3}')
  255. if [ -f /home/$USERNAME/$OPENVPN_KEY_FILENAME ]; then
  256. shred -zu /home/$USERNAME/$OPENVPN_KEY_FILENAME
  257. fi
  258. rm /home/$USERNAME/stunnel*
  259. done
  260. userdel -f vpn
  261. groupdel -f vpn
  262. if [ -d /etc/stunnel ]; then
  263. rm -rf /etc/stunnel
  264. fi
  265. }
  266. function create_user_vpn_key {
  267. username=$1
  268. if [ ! -d /home/$username ]; then
  269. return
  270. fi
  271. echo $"Creating VPN key for $username"
  272. cd /etc/openvpn/easy-rsa
  273. if [ -f /etc/openvpn/easy-rsa/keys/$username.crt ]; then
  274. rm /etc/openvpn/easy-rsa/keys/$username.crt
  275. fi
  276. if [ -f /etc/openvpn/easy-rsa/keys/$username.key ]; then
  277. rm /etc/openvpn/easy-rsa/keys/$username.key
  278. fi
  279. if [ -f /etc/openvpn/easy-rsa/keys/$username.csr ]; then
  280. rm /etc/openvpn/easy-rsa/keys/$username.csr
  281. fi
  282. sed -i 's| --interact||g' build-key
  283. ./build-key "$username"
  284. if [ ! -f /etc/openvpn/easy-rsa/keys/$username.crt ]; then
  285. echo $'VPN user cert not generated'
  286. exit 783528
  287. fi
  288. user_cert=$(cat /etc/openvpn/easy-rsa/keys/$username.crt)
  289. if [ ${#user_cert} -lt 10 ]; then
  290. cat /etc/openvpn/easy-rsa/keys/$username.crt
  291. echo $'User cert generation failed'
  292. exit 634659
  293. fi
  294. if [ ! -f /etc/openvpn/easy-rsa/keys/$username.key ]; then
  295. echo $'VPN user key not generated'
  296. exit 682523
  297. fi
  298. user_key=$(cat /etc/openvpn/easy-rsa/keys/$username.key)
  299. if [ ${#user_key} -lt 10 ]; then
  300. cat /etc/openvpn/easy-rsa/keys/$username.key
  301. echo $'User key generation failed'
  302. exit 285838
  303. fi
  304. user_vpn_cert_file=/home/$username/$OPENVPN_KEY_FILENAME
  305. if [ ! -f /usr/share/doc/openvpn/examples/sample-config-files/client.conf ]; then
  306. echo $'No VPN client template found'
  307. exit 429823
  308. fi
  309. cp /usr/share/doc/openvpn/examples/sample-config-files/client.conf $user_vpn_cert_file
  310. sed -i "s|remote .*|remote $DEFAULT_DOMAIN_NAME $STUNNEL_PORT|g" $user_vpn_cert_file
  311. sed -i 's|;user .*|user nobody|g' $user_vpn_cert_file
  312. sed -i 's|;group .*|group nobody|g' $user_vpn_cert_file
  313. sed -i 's|ca ca.crt|;ca ca.crt|g' $user_vpn_cert_file
  314. sed -i 's|cert client.crt|;cert client.crt|g' $user_vpn_cert_file
  315. sed -i 's|key client.key|;key client.key|g' $user_vpn_cert_file
  316. sed -i 's|tls-auth ta.key|;tls-auth ta.key|g' $user_vpn_cert_file
  317. sed -i 's|;proto tcp|proto tcp|g' $user_vpn_cert_file
  318. sed -i 's|proto udp|;proto udp|g' $user_vpn_cert_file
  319. echo '<ca>' >> $user_vpn_cert_file
  320. cat /etc/openvpn/ca.crt >> $user_vpn_cert_file
  321. echo '</ca>' >> $user_vpn_cert_file
  322. echo '<cert>' >> $user_vpn_cert_file
  323. cat /etc/openvpn/easy-rsa/keys/$username.crt >> $user_vpn_cert_file
  324. echo '</cert>' >> $user_vpn_cert_file
  325. echo '<key>' >> $user_vpn_cert_file
  326. cat /etc/openvpn/easy-rsa/keys/$username.key >> $user_vpn_cert_file
  327. echo '</key>' >> $user_vpn_cert_file
  328. chown $username:$username $user_vpn_cert_file
  329. # keep a backup
  330. cp $user_vpn_cert_file /etc/openvpn/easy-rsa/keys/$username.ovpn
  331. #rm /etc/openvpn/easy-rsa/keys/$username.crt
  332. #rm /etc/openvpn/easy-rsa/keys/$username.csr
  333. shred -zu /etc/openvpn/easy-rsa/keys/$username.key
  334. echo $"VPN key created at $user_vpn_cert_file"
  335. }
  336. function add_user_vpn {
  337. new_username="$1"
  338. new_user_password="$2"
  339. create_user_vpn_key $new_username
  340. if [ -f /etc/stunnel/stunnel.pem ]; then
  341. cp /etc/stunnel/stunnel.pem /home/$new_username/stunnel.pem
  342. chown $new_username:$new_username /home/$new_username/stunnel.pem
  343. fi
  344. if [ -f /etc/stunnel/stunnel.p12 ]; then
  345. cp /etc/stunnel/stunnel.p12 /home/$new_username/stunnel.p12
  346. chown $new_username:$new_username /home/$new_username/stunnel.p12
  347. fi
  348. cp /etc/stunnel/stunnel-client.conf /home/$new_username/stunnel-client.conf
  349. chown $new_username:$new_username /home/$new_username/stunnel-client.conf
  350. }
  351. function remove_user_vpn {
  352. new_username="$1"
  353. }
  354. function install_stunnel {
  355. apt-get -yq install stunnel4
  356. cd /etc/stunnel
  357. openssl req -x509 -nodes -days 3650 -sha256 \
  358. -subj "/O=$VPN_ORGANISATION/OU=$VPN_UNIT/C=$VPN_COUNTRY_CODE/ST=$VPN_AREA/L=$VPN_LOCATION/CN=$HOSTNAME" \
  359. -newkey rsa:2048 -keyout key.pem \
  360. -out cert.pem
  361. if [ ! -f key.pem ]; then
  362. echo $'stunnel key not created'
  363. exit 793530
  364. fi
  365. if [ ! -f cert.pem ]; then
  366. echo $'stunnel cert not created'
  367. exit 204587
  368. fi
  369. chmod 400 key.pem
  370. chmod 640 cert.pem
  371. cat key.pem cert.pem >> stunnel.pem
  372. chmod 640 stunnel.pem
  373. openssl pkcs12 -export -out stunnel.p12 -inkey key.pem -in cert.pem -passout pass:
  374. if [ ! -f stunnel.p12 ]; then
  375. echo $'stunnel pkcs12 not created'
  376. exit 639353
  377. fi
  378. chmod 640 stunnel.p12
  379. echo 'chroot = /var/lib/stunnel4' > stunnel.conf
  380. echo 'pid = /stunnel4.pid' >> stunnel.conf
  381. echo 'setuid = stunnel4' >> stunnel.conf
  382. echo 'setgid = stunnel4' >> stunnel.conf
  383. echo 'socket = l:TCP_NODELAY=1' >> stunnel.conf
  384. echo 'socket = r:TCP_NODELAY=1' >> stunnel.conf
  385. echo 'cert = /etc/stunnel/stunnel.pem' >> stunnel.conf
  386. echo '[openvpn]' >> stunnel.conf
  387. echo "accept = $VPN_TLS_PORT" >> stunnel.conf
  388. echo 'connect = localhost:1194' >> stunnel.conf
  389. echo 'cert = /etc/stunnel/stunnel.pem' >> stunnel.conf
  390. sed -i 's|ENABLED=.*|ENABLED=1|g' /etc/default/stunnel4
  391. echo '[openvpn]' > stunnel-client.conf
  392. echo 'client = yes' >> stunnel-client.conf
  393. echo "accept = $STUNNEL_PORT" >> stunnel-client.conf
  394. echo "connect = $DEFAULT_DOMAIN_NAME:$VPN_TLS_PORT" >> stunnel-client.conf
  395. echo 'cert = /etc/stunnel/stunnel.pem' >> stunnel-client.conf
  396. echo '[Unit]' > /etc/systemd/system/stunnel.service
  397. echo 'Description=SSL tunnel for network daemons' >> /etc/systemd/system/stunnel.service
  398. echo 'Documentation=man:stunnel https://www.stunnel.org/docs.html' >> /etc/systemd/system/stunnel.service
  399. echo 'DefaultDependencies=no' >> /etc/systemd/system/stunnel.service
  400. echo 'After=network.target' >> /etc/systemd/system/stunnel.service
  401. echo 'After=syslog.target' >> /etc/systemd/system/stunnel.service
  402. echo '' >> /etc/systemd/system/stunnel.service
  403. echo '[Install]' >> /etc/systemd/system/stunnel.service
  404. echo 'WantedBy=multi-user.target' >> /etc/systemd/system/stunnel.service
  405. echo 'Alias=stunnel.target' >> /etc/systemd/system/stunnel.service
  406. echo '' >> /etc/systemd/system/stunnel.service
  407. echo '[Service]' >> /etc/systemd/system/stunnel.service
  408. echo 'Type=forking' >> /etc/systemd/system/stunnel.service
  409. echo 'RuntimeDirectory=stunnel' >> /etc/systemd/system/stunnel.service
  410. echo 'EnvironmentFile=-/etc/stunnel/stunnel.conf' >> /etc/systemd/system/stunnel.service
  411. echo 'ExecStart=/usr/bin/stunnel /etc/stunnel/stunnel.conf' >> /etc/systemd/system/stunnel.service
  412. echo 'ExecStop=/usr/bin/killall -9 stunnel' >> /etc/systemd/system/stunnel.service
  413. echo 'RemainAfterExit=yes' >> /etc/systemd/system/stunnel.service
  414. if [ $VPN_TLS_PORT -eq 443 ]; then
  415. systemctl stop nginx
  416. systemctl disable nginx
  417. else
  418. systemctl enable nginx
  419. systemctl restart nginx
  420. fi
  421. systemctl enable stunnel
  422. systemctl daemon-reload
  423. systemctl start stunnel
  424. cp /etc/stunnel/stunnel.pem /home/$MY_USERNAME/stunnel.pem
  425. cp /etc/stunnel/stunnel.p12 /home/$MY_USERNAME/stunnel.p12
  426. cp /etc/stunnel/stunnel-client.conf /home/$MY_USERNAME/stunnel-client.conf
  427. chown $MY_USERNAME:$MY_USERNAME /home/$MY_USERNAME/stunnel*
  428. }
  429. function install_vpn {
  430. apt-get -yq install fastd openvpn easy-rsa
  431. if [ ! -f /usr/share/doc/openvpn/examples/sample-config-files/server.conf.gz ]; then
  432. echo $'Example openvpn server config not found'
  433. exit 783953
  434. fi
  435. groupadd vpn
  436. useradd -r -s /bin/false -g vpn vpn
  437. # server configuration
  438. gunzip -c /usr/share/doc/openvpn/examples/sample-config-files/server.conf.gz > /etc/openvpn/server.conf
  439. sed -i "s|;push \"redirect-gateway|push \"redirect-gateway|g" /etc/openvpn/server.conf
  440. sed -i 's|;push "dhcp-option|push "dhcp-option|g' /etc/openvpn/server.conf
  441. sed -i 's|;user no.*|user vpn|g' /etc/openvpn/server.conf
  442. sed -i 's|;group no.*|group vpn|g' /etc/openvpn/server.conf
  443. sed -i 's|;max-clients.*|max-clients 2|g' /etc/openvpn/server.conf
  444. sed -i 's|;proto tcp|proto tcp|g' /etc/openvpn/server.conf
  445. sed -i 's|proto udp|;proto udp|g' /etc/openvpn/server.conf
  446. sed -i 's|explicit-exit-notify.*|explicit-exit-notify 0|g' /etc/openvpn/server.conf
  447. sed -i 's|tls-auth|;tls-auth|g' /etc/openvpn/server.conf
  448. echo 1 > /proc/sys/net/ipv4/ip_forward
  449. sed -i 's|# net.ipv4.ip_forward|net.ipv4.ip_forward|g' /etc/sysctl.conf
  450. sed -i 's|#net.ipv4.ip_forward|net.ipv4.ip_forward|g' /etc/sysctl.conf
  451. sed -i 's|net.ipv4.ip_forward.*|net.ipv4.ip_forward=1|g' /etc/sysctl.conf
  452. cp -r /usr/share/easy-rsa/ /etc/openvpn
  453. if [ ! -d /etc/openvpn/easy-rsa/keys ]; then
  454. mkdir /etc/openvpn/easy-rsa/keys
  455. fi
  456. # keys configuration
  457. sed -i "s|export KEY_COUNTRY.*|export KEY_COUNTRY=\"US\"|g" /etc/openvpn/easy-rsa/vars
  458. sed -i "s|export KEY_PROVINCE.*|export KEY_PROVINCE=\"TX\"|g" /etc/openvpn/easy-rsa/vars
  459. sed -i "s|export KEY_CITY.*|export KEY_CITY=\"Dallas\"|g" /etc/openvpn/easy-rsa/vars
  460. sed -i "s|export KEY_ORG.*|export KEY_ORG=\"$PROJECT_NAME\"|g" /etc/openvpn/easy-rsa/vars
  461. sed -i "s|export KEY_EMAIL.*|export KEY_EMAIL=\"$MY_EMAIL_ADDRESS\"|g" /etc/openvpn/easy-rsa/vars
  462. sed -i "s|export KEY_OU=.*|export KEY_OU=\"MoonUnit\"|g" /etc/openvpn/easy-rsa/vars
  463. sed -i "s|export KEY_NAME.*|export KEY_NAME=\"$OPENVPN_SERVER_NAME\"|g" /etc/openvpn/easy-rsa/vars
  464. # generate host keys
  465. if [ ! -f /etc/openvpn/dh2048.pem ]; then
  466. openssl dhparam -out /etc/openvpn/dh2048.pem 2048
  467. fi
  468. cd /etc/openvpn/easy-rsa
  469. . ./vars
  470. ./clean-all
  471. vpn_openssl_version='1.0.0'
  472. if [ ! -f openssl-${vpn_openssl_version}.cnf ]; then
  473. echo $"openssl-${vpn_openssl_version}.cnf was not found"
  474. exit 7392353
  475. fi
  476. cp openssl-${vpn_openssl_version}.cnf openssl.cnf
  477. if [ -f /etc/openvpn/easy-rsa/keys/${OPENVPN_SERVER_NAME}.crt ]; then
  478. rm /etc/openvpn/easy-rsa/keys/${OPENVPN_SERVER_NAME}.crt
  479. fi
  480. if [ -f /etc/openvpn/easy-rsa/keys/${OPENVPN_SERVER_NAME}.key ]; then
  481. rm /etc/openvpn/easy-rsa/keys/${OPENVPN_SERVER_NAME}.key
  482. fi
  483. if [ -f /etc/openvpn/easy-rsa/keys/${OPENVPN_SERVER_NAME}.csr ]; then
  484. rm /etc/openvpn/easy-rsa/keys/${OPENVPN_SERVER_NAME}.csr
  485. fi
  486. sed -i 's| --interact||g' build-key-server
  487. sed -i 's| --interact||g' build-ca
  488. ./build-ca
  489. ./build-key-server $OPENVPN_SERVER_NAME
  490. if [ ! -f /etc/openvpn/easy-rsa/keys/${OPENVPN_SERVER_NAME}.crt ]; then
  491. echo $'OpenVPN crt not found'
  492. exit 7823352
  493. fi
  494. server_cert=$(cat /etc/openvpn/easy-rsa/keys/${OPENVPN_SERVER_NAME}.crt)
  495. if [ ${#server_cert} -lt 10 ]; then
  496. cat /etc/openvpn/easy-rsa/keys/${OPENVPN_SERVER_NAME}.crt
  497. echo $'Server cert generation failed'
  498. exit 3284682
  499. fi
  500. if [ ! -f /etc/openvpn/easy-rsa/keys/${OPENVPN_SERVER_NAME}.key ]; then
  501. echo $'OpenVPN key not found'
  502. exit 6839436
  503. fi
  504. if [ ! -f /etc/openvpn/easy-rsa/keys/ca.key ]; then
  505. echo $'OpenVPN ca not found'
  506. exit 7935203
  507. fi
  508. cp /etc/openvpn/easy-rsa/keys/{$OPENVPN_SERVER_NAME.crt,$OPENVPN_SERVER_NAME.key,ca.crt} /etc/openvpn
  509. create_user_vpn_key $MY_USERNAME
  510. firewall_enable_vpn
  511. if [ $VPN_TLS_PORT -ne 443 ]; then
  512. firewall_add VPN-TLS $VPN_TLS_PORT tcp
  513. fi
  514. systemctl start openvpn
  515. install_stunnel
  516. APP_INSTALLED=1
  517. }
  518. # NOTE: deliberately there is no "exit 0"