openvpn.sh 27 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853
  1. #!/bin/bash
  2. #25/01/2021
  3. clear
  4. clear
  5. msg -bar
  6. SCPdir="/etc/VPS-MX" && [[ ! -d ${SCPdir} ]] && exit 1
  7. SCPfrm="${SCPdir}/herramientas" && [[ ! -d ${SCPfrm} ]] && exit
  8. SCPinst="${SCPdir}/protocolos" && [[ ! -d ${SCPinst} ]] && exit
  9. SCPidioma="${SCPdir}/idioma" && [[ ! -e ${SCPidioma} ]] && touch ${SCPidioma}
  10. #timedatectl set-timezone UTC
  11. # Detect Debian users running the script with "sh" instead of bash
  12. if readlink /proc/$$/exe | grep -q "dash"; then
  13. echo "Este script se utiliza con bash"
  14. exit
  15. fi
  16. if [[ "$EUID" -ne 0 ]]; then
  17. echo "Sorry, solo funciona como root"
  18. exit
  19. fi
  20. if [[ ! -e /dev/net/tun ]]; then
  21. echo "El TUN device no esta disponible
  22. Necesitas habilitar TUN antes de usar este script"
  23. exit
  24. fi
  25. if [[ -e /etc/debian_version ]]; then
  26. OS=debian
  27. GROUPNAME=nogroup
  28. RCLOCAL='/etc/rc.local'
  29. elif [[ -e /etc/centos-release || -e /etc/redhat-release ]]; then
  30. OS=centos
  31. GROUPNAME=nobody
  32. RCLOCAL='/etc/rc.d/rc.local'
  33. else
  34. echo "Tu sistema operativo no esta disponible para este script"
  35. exit
  36. fi
  37. agrega_dns () {
  38. msg -ama " Escriba el HOST DNS que desea Agregar"
  39. read -p " [NewDNS]: " SDNS
  40. cat /etc/hosts|grep -v "$SDNS" > /etc/hosts.bak && mv -f /etc/hosts.bak /etc/hosts
  41. if [[ -e /etc/opendns ]]; then
  42. cat /etc/opendns > /tmp/opnbak
  43. mv -f /tmp/opnbak /etc/opendns
  44. echo "$SDNS" >> /etc/opendns
  45. else
  46. echo "$SDNS" > /etc/opendns
  47. fi
  48. [[ -z $NEWDNS ]] && NEWDNS="$SDNS" || NEWDNS="$NEWDNS $SDNS"
  49. unset SDNS
  50. }
  51. mportas () {
  52. unset portas
  53. portas_var=$(lsof -V -i -P -n | grep -v "ESTABLISHED" |grep -v "COMMAND")
  54. while read port; do
  55. var1=$(echo $port | awk '{print $1}') && var2=$(echo $port | awk '{print $9}' | awk -F ":" '{print $2}')
  56. [[ "$(echo -e $portas|grep "$var1 $var2")" ]] || portas+="$var1 $var2\n"
  57. done <<< "$portas_var"
  58. i=1
  59. echo -e "$portas"
  60. }
  61. dns_fun () {
  62. case $1 in
  63. 3)dns[$2]='push "dhcp-option DNS 1.0.0.1"';;
  64. 4)dns[$2]='push "dhcp-option DNS 1.1.1.1"';;
  65. 5)dns[$2]='push "dhcp-option DNS 9.9.9.9"';;
  66. 6)dns[$2]='push "dhcp-option DNS 1.1.1.1"';;
  67. 7)dns[$2]='push "dhcp-option DNS 80.67.169.40"';;
  68. 8)dns[$2]='push "dhcp-option DNS 80.67.169.12"';;
  69. 9)dns[$2]='push "dhcp-option DNS 84.200.69.80"';;
  70. 10)dns[$2]='push "dhcp-option DNS 84.200.70.40"';;
  71. 11)dns[$2]='push "dhcp-option DNS 208.67.222.222"';;
  72. 12)dns[$2]='push "dhcp-option DNS 208.67.220.220"';;
  73. 13)dns[$2]='push "dhcp-option DNS 8.8.8.8"';;
  74. 14)dns[$2]='push "dhcp-option DNS 8.8.4.4"';;
  75. 15)dns[$2]='push "dhcp-option DNS 77.88.8.8"';;
  76. 16)dns[$2]='push "dhcp-option DNS 77.88.8.1"';;
  77. 17)dns[$2]='push "dhcp-option DNS 176.103.130.130"';;
  78. 18)dns[$2]='push "dhcp-option DNS 176.103.130.131"';;
  79. esac
  80. }
  81. meu_ip () {
  82. if [[ -e /etc/VPS-MX/MEUIPvps ]]; then
  83. echo "$(cat /etc/VPS-MX/MEUIPvps)"
  84. else
  85. MEU_IP=$(ip addr | grep 'inet' | grep -v inet6 | grep -vE '127\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}' | grep -o -E '[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}' | head -1)
  86. MEU_IP2=$(wget -qO- ipv4.icanhazip.com)
  87. [[ "$MEU_IP" != "$MEU_IP2" ]] && echo "$MEU_IP2" || echo "$MEU_IP"
  88. echo "$MEU_IP" > /etc/VPS-MX/MEUIPvps
  89. fi
  90. }
  91. IP="$(meu_ip)"
  92. instala_ovpn2 () {
  93. msg -bar3
  94. clear
  95. msg -bar
  96. msg -tit
  97. echo -e "\033[1;32m INSTALADOR DE OPENVPN | VPS-MX By @Kalix1"
  98. msg -bar
  99. # OpenVPN setup and first user creation
  100. echo -e "\033[1;97mSe necesitan ciertos parametros para configurar OpenVPN."
  101. echo "Configuracion por default solo presiona ENTER."
  102. echo "Primero, cual es la IPv4 que quieres para OpenVPN"
  103. echo "Detectando..."
  104. msg -bar
  105. # Autodetect IP address and pre-fill for the user
  106. IP=$(ip addr | grep 'inet' | grep -v inet6 | grep -vE '127\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}' | grep -oE '[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}' | head -1)
  107. read -p "IP address: " -e -i $IP IP
  108. # If $IP is a private IP address, the server must be behind NAT
  109. if echo "$IP" | grep -qE '^(10\.|172\.1[6789]\.|172\.2[0-9]\.|172\.3[01]\.|192\.168)'; then
  110. echo
  111. echo "Este servidor esta detras de una red NAT?"
  112. read -p "IP Publica / hostname: " -e PUBLICIP
  113. fi
  114. msg -bar
  115. msg -ama "Que protocolo necesitas para las conexiones OpenVPN?"
  116. msg -bar
  117. echo " 1) UDP (recomendada)"
  118. echo " 2) TCP"
  119. msg -bar
  120. read -p "Protocolo [1-2]: " -e -i 1 PROTOCOL
  121. case $PROTOCOL in
  122. 1)
  123. PROTOCOL=udp
  124. ;;
  125. 2)
  126. PROTOCOL=tcp
  127. ;;
  128. esac
  129. msg -bar
  130. msg -ama "Que puerto necesitas en OpenVPN (Default 1194)?"
  131. msg -bar
  132. read -p "Puerto: " -e -i 1194 PORT
  133. msg -bar
  134. msg -ama "Cual DNS usaras en tu VPN?"
  135. msg -bar
  136. echo " 1) Actuales en el VPS"
  137. echo " 2) 1.1.1.1"
  138. echo " 3) Google"
  139. echo " 4) OpenDNS"
  140. echo " 5) Verisign"
  141. msg -bar
  142. read -p "DNS [1-5]: " -e -i 1 DNS
  143. #CIPHER
  144. msg -bar
  145. msg -ama " Elija que codificacion desea para el canal de datos:"
  146. msg -bar
  147. echo " 1) AES-128-CBC"
  148. echo " 2) AES-192-CBC"
  149. echo " 3) AES-256-CBC"
  150. echo " 4) CAMELLIA-128-CBC"
  151. echo " 5) CAMELLIA-192-CBC"
  152. echo " 6) CAMELLIA-256-CBC"
  153. echo " 7) SEED-CBC"
  154. echo " 8) NONE"
  155. msg -bar
  156. while [[ $CIPHER != @([1-8]) ]]; do
  157. read -p " Cipher [1-7]: " -e -i 1 CIPHER
  158. done
  159. case $CIPHER in
  160. 1) CIPHER="cipher AES-128-CBC";;
  161. 2) CIPHER="cipher AES-192-CBC";;
  162. 3) CIPHER="cipher AES-256-CBC";;
  163. 4) CIPHER="cipher CAMELLIA-128-CBC";;
  164. 5) CIPHER="cipher CAMELLIA-192-CBC";;
  165. 6) CIPHER="cipher CAMELLIA-256-CBC";;
  166. 7) CIPHER="cipher SEED-CBC";;
  167. 8) CIPHER="cipher none";;
  168. esac
  169. msg -bar
  170. msg -ama " Estamos listos para configurar su servidor OpenVPN"
  171. msg -bar
  172. read -n1 -r -p "Presiona cualquier tecla para continuar..."
  173. if [[ "$OS" = 'debian' ]]; then
  174. apt-get update
  175. apt-get install openvpn iptables openssl ca-certificates -y
  176. else
  177. #
  178. yum install epel-release -y
  179. yum install openvpn iptables openssl ca-certificates -y
  180. fi
  181. # Get easy-rsa
  182. EASYRSAURL='https://github.com/OpenVPN/easy-rsa/releases/download/v3.0.8/EasyRSA-3.0.8.tgz'
  183. wget -O ~/easyrsa.tgz "$EASYRSAURL" 2>/dev/null || curl -Lo ~/easyrsa.tgz "$EASYRSAURL"
  184. tar xzf ~/easyrsa.tgz -C ~/
  185. mv ~/EasyRSA-3.0.8/ /etc/openvpn/
  186. mv /etc/openvpn/EasyRSA-3.0.8/ /etc/openvpn/easy-rsa/
  187. chown -R root:root /etc/openvpn/easy-rsa/
  188. rm -f ~/easyrsa.tgz
  189. cd /etc/openvpn/easy-rsa/
  190. #
  191. ./easyrsa init-pki
  192. ./easyrsa --batch build-ca nopass
  193. ./easyrsa gen-dh
  194. ./easyrsa build-server-full server nopass
  195. EASYRSA_CRL_DAYS=3650 ./easyrsa gen-crl
  196. #
  197. cp pki/ca.crt pki/private/ca.key pki/dh.pem pki/issued/server.crt pki/private/server.key pki/crl.pem /etc/openvpn
  198. #
  199. chown nobody:$GROUPNAME /etc/openvpn/crl.pem
  200. #
  201. openvpn --genkey --secret /etc/openvpn/ta.key
  202. #
  203. echo "port $PORT
  204. proto $PROTOCOL
  205. dev tun
  206. sndbuf 0
  207. rcvbuf 0
  208. ca ca.crt
  209. cert server.crt
  210. key server.key
  211. dh dh.pem
  212. auth SHA512
  213. tls-auth ta.key 0
  214. topology subnet
  215. server 10.8.0.0 255.255.255.0
  216. ifconfig-pool-persist ipp.txt" > /etc/openvpn/server.conf
  217. echo 'push "redirect-gateway def1 bypass-dhcp"' >> /etc/openvpn/server.conf
  218. # DNS
  219. case $DNS in
  220. 1)
  221. #
  222. #
  223. if grep -q "127.0.0.53" "/etc/resolv.conf"; then
  224. RESOLVCONF='/run/systemd/resolve/resolv.conf'
  225. else
  226. RESOLVCONF='/etc/resolv.conf'
  227. fi
  228. #
  229. grep -v '#' $RESOLVCONF | grep 'nameserver' | grep -E -o '[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}' | while read line; do
  230. echo "push \"dhcp-option DNS $line\"" >> /etc/openvpn/server.conf
  231. done
  232. ;;
  233. 2)
  234. echo 'push "dhcp-option DNS 1.1.1.1"' >> /etc/openvpn/server.conf
  235. echo 'push "dhcp-option DNS 1.0.0.1"' >> /etc/openvpn/server.conf
  236. ;;
  237. 3)
  238. echo 'push "dhcp-option DNS 8.8.8.8"' >> /etc/openvpn/server.conf
  239. echo 'push "dhcp-option DNS 8.8.4.4"' >> /etc/openvpn/server.conf
  240. ;;
  241. 4)
  242. echo 'push "dhcp-option DNS 208.67.222.222"' >> /etc/openvpn/server.conf
  243. echo 'push "dhcp-option DNS 208.67.220.220"' >> /etc/openvpn/server.conf
  244. ;;
  245. 5)
  246. echo 'push "dhcp-option DNS 64.6.64.6"' >> /etc/openvpn/server.conf
  247. echo 'push "dhcp-option DNS 64.6.65.6"' >> /etc/openvpn/server.conf
  248. ;;
  249. esac
  250. echo "keepalive 10 120
  251. ${CIPHER}
  252. user nobody
  253. group $GROUPNAME
  254. persist-key
  255. persist-tun
  256. status openvpn-status.log
  257. verb 3
  258. crl-verify crl.pem" >> /etc/openvpn/server.conf
  259. updatedb
  260. PLUGIN=$(locate openvpn-plugin-auth-pam.so | head -1)
  261. [[ ! -z $(echo ${PLUGIN}) ]] && {
  262. echo "client-to-client
  263. client-cert-not-required
  264. username-as-common-name
  265. plugin $PLUGIN login" >> /etc/openvpn/server.conf
  266. }
  267. #
  268. echo 'net.ipv4.ip_forward=1' > /etc/sysctl.d/30-openvpn-forward.conf
  269. #
  270. echo 1 > /proc/sys/net/ipv4/ip_forward
  271. if pgrep firewalld; then
  272. #
  273. #
  274. #
  275. #
  276. firewall-cmd --zone=public --add-port=$PORT/$PROTOCOL
  277. firewall-cmd --zone=trusted --add-source=10.8.0.0/24
  278. firewall-cmd --permanent --zone=public --add-port=$PORT/$PROTOCOL
  279. firewall-cmd --permanent --zone=trusted --add-source=10.8.0.0/24
  280. #
  281. firewall-cmd --direct --add-rule ipv4 nat POSTROUTING 0 -s 10.8.0.0/24 ! -d 10.8.0.0/24 -j SNAT --to $IP
  282. firewall-cmd --permanent --direct --add-rule ipv4 nat POSTROUTING 0 -s 10.8.0.0/24 ! -d 10.8.0.0/24 -j SNAT --to $IP
  283. else
  284. #
  285. if [[ "$OS" = 'debian' && ! -e $RCLOCAL ]]; then
  286. echo '#!/bin/sh -e
  287. exit 0' > $RCLOCAL
  288. fi
  289. chmod +x $RCLOCAL
  290. #
  291. iptables -t nat -A POSTROUTING -s 10.8.0.0/24 ! -d 10.8.0.0/24 -j SNAT --to $IP
  292. sed -i "1 a\iptables -t nat -A POSTROUTING -s 10.8.0.0/24 ! -d 10.8.0.0/24 -j SNAT --to $IP" $RCLOCAL
  293. if iptables -L -n | grep -qE '^(REJECT|DROP)'; then
  294. #
  295. #
  296. #
  297. iptables -I INPUT -p $PROTOCOL --dport $PORT -j ACCEPT
  298. iptables -I FORWARD -s 10.8.0.0/24 -j ACCEPT
  299. iptables -I FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT
  300. sed -i "1 a\iptables -I INPUT -p $PROTOCOL --dport $PORT -j ACCEPT" $RCLOCAL
  301. sed -i "1 a\iptables -I FORWARD -s 10.8.0.0/24 -j ACCEPT" $RCLOCAL
  302. sed -i "1 a\iptables -I FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT" $RCLOCAL
  303. fi
  304. fi
  305. #
  306. if sestatus 2>/dev/null | grep "Current mode" | grep -q "enforcing" && [[ "$PORT" != '1194' ]]; then
  307. #
  308. if ! hash semanage 2>/dev/null; then
  309. yum install policycoreutils-python -y
  310. fi
  311. semanage port -a -t openvpn_port_t -p $PROTOCOL $PORT
  312. fi
  313. #
  314. if [[ "$OS" = 'debian' ]]; then
  315. #
  316. if pgrep systemd-journal; then
  317. systemctl restart openvpn@server.service
  318. else
  319. /etc/init.d/openvpn restart
  320. fi
  321. else
  322. if pgrep systemd-journal; then
  323. systemctl restart openvpn@server.service
  324. systemctl enable openvpn@server.service
  325. else
  326. service openvpn restart
  327. chkconfig openvpn on
  328. fi
  329. fi
  330. #
  331. if [[ "$PUBLICIP" != "" ]]; then
  332. IP=$PUBLICIP
  333. fi
  334. #
  335. echo "# OVPN_ACCESS_SERVER_PROFILE=VPS-MX
  336. client
  337. dev tun
  338. proto $PROTOCOL
  339. sndbuf 0
  340. rcvbuf 0
  341. remote $IP $PORT
  342. resolv-retry infinite
  343. nobind
  344. persist-key
  345. persist-tun
  346. remote-cert-tls server
  347. auth SHA512
  348. ${CIPHER}
  349. setenv opt block-outside-dns
  350. key-direction 1
  351. verb 3
  352. auth-user-pass" > /etc/openvpn/client-common.txt
  353. msg -bar
  354. msg -ama " Ahora crear una SSH para generar el (.ovpn)!"
  355. msg -bar
  356. echo -e "\033[1;32m Configuracion Finalizada!"
  357. msg -bar
  358. }
  359. instala_ovpn () {
  360. parametros_iniciais () {
  361. #Verifica o Sistema
  362. [[ "$EUID" -ne 0 ]] && echo " Lo siento, usted necesita ejecutar esto como ROOT" && exit 1
  363. [[ ! -e /dev/net/tun ]] && echo " TUN no esta Disponible" && exit 1
  364. if [[ -e /etc/debian_version ]]; then
  365. OS="debian"
  366. VERSION_ID=$(cat /etc/os-release | grep "VERSION_ID")
  367. IPTABLES='/etc/iptables/iptables.rules'
  368. [[ ! -d /etc/iptables ]] && mkdir /etc/iptables
  369. [[ ! -e $IPTABLES ]] && touch $IPTABLES
  370. SYSCTL='/etc/sysctl.conf'
  371. [[ "$VERSION_ID" != 'VERSION_ID="7"' ]] && [[ "$VERSION_ID" != 'VERSION_ID="8"' ]] && [[ "$VERSION_ID" != 'VERSION_ID="9"' ]] && [[ "$VERSION_ID" != 'VERSION_ID="14.04"' ]] && [[ "$VERSION_ID" != 'VERSION_ID="16.04"' ]] && [[ "$VERSION_ID" != 'VERSION_ID="18.04"' ]] && [[ "$VERSION_ID" != 'VERSION_ID="17.10"' ]] && {
  372. echo " Su vercion de Debian / Ubuntu no Soportada."
  373. while [[ $CONTINUE != @(y|Y|s|S|n|N) ]]; do
  374. read -p "Continuar ? [y/n]: " -e CONTINUE
  375. done
  376. [[ "$CONTINUE" = @(n|N) ]] && exit 1
  377. }
  378. else
  379. msg -ama " Parece que no estas ejecutando este instalador en un sistema Debian o Ubuntu"
  380. msg -bar
  381. return 1
  382. fi
  383. #Pega Interface
  384. NIC=$(ip -4 route ls | grep default | grep -Po '(?<=dev )(\S+)' | head -1)
  385. }
  386. add_repo () {
  387. #INSTALACAO E UPDATE DO REPOSITORIO
  388. # Debian 7
  389. if [[ "$VERSION_ID" = 'VERSION_ID="7"' ]]; then
  390. echo "deb http://build.openvpn.net/debian/openvpn/stable wheezy main" > /etc/apt/sources.list.d/openvpn.list
  391. wget -q -O - https://swupdate.openvpn.net/repos/repo-public.gpg | apt-key add - > /dev/null 2>&1
  392. # Debian 8
  393. elif [[ "$VERSION_ID" = 'VERSION_ID="8"' ]]; then
  394. echo "deb http://build.openvpn.net/debian/openvpn/stable jessie main" > /etc/apt/sources.list.d/openvpn.list
  395. wget -q -O - https://swupdate.openvpn.net/repos/repo-public.gpg | apt-key add - > /dev/null 2>&1
  396. # Ubuntu 14.04
  397. elif [[ "$VERSION_ID" = 'VERSION_ID="14.04"' ]]; then
  398. echo "deb http://build.openvpn.net/debian/openvpn/stable trusty main" > /etc/apt/sources.list.d/openvpn.list
  399. wget -q -O - https://swupdate.openvpn.net/repos/repo-public.gpg | apt-key add - > /dev/null 2>&1
  400. # Ubuntu 16.04
  401. elif [[ "$VERSION_ID" = 'VERSION_ID="16.04"' ]]; then
  402. echo "deb http://build.openvpn.net/debian/openvpn/stable xenial main" > /etc/apt/sources.list.d/openvpn.list
  403. wget -q -O - https://swupdate.openvpn.net/repos/repo-public.gpg | apt-key add - > /dev/null 2>&1
  404. # Ubuntu 18.04
  405. elif [[ "$VERSION_ID" = 'VERSION_ID="18.04"' ]]; then
  406. apt-get remove openvpn -y > /dev/null 2>&1
  407. rm -rf /etc/apt/sources.list.d/openvpn.list > /dev/null 2>&1
  408. echo "deb http://build.openvpn.net/debian/openvpn/stable bionic main" > /etc/apt/sources.list.d/openvpn.list
  409. wget -q -O - https://swupdate.openvpn.net/repos/repo-public.gpg | apt-key add - > /dev/null 2>&1
  410. fi
  411. }
  412. coleta_variaveis () {
  413. echo -e "\033[1;32m INSTALADOR DE OPENVPN | VPS-MX By @Kalix1"
  414. msg -bar
  415. msg -ne " Confirme su IP"; read -p ": " -e -i $IP ip
  416. msg -bar
  417. msg -ama " Que puerto desea usar?"
  418. msg -bar
  419. while true; do
  420. read -p " Port: " -e -i 1194 PORT
  421. [[ $(mportas|grep -w "$PORT") ]] || break
  422. echo -e "\033[1;33m Este puerto esta en uso\033[0m"
  423. unset PORT
  424. done
  425. msg -bar
  426. echo -e "\033[1;31m Que protocolo desea para las conexiones OPENVPN?"
  427. echo -e "\033[1;31m A menos que UDP este bloqueado, no utilice TCP (es mas lento)"
  428. #PROTOCOLO
  429. while [[ $PROTOCOL != @(UDP|TCP) ]]; do
  430. read -p " Protocol [UDP/TCP]: " -e -i TCP PROTOCOL
  431. done
  432. [[ $PROTOCOL = "UDP" ]] && PROTOCOL=udp
  433. [[ $PROTOCOL = "TCP" ]] && PROTOCOL=tcp
  434. #DNS
  435. msg -bar
  436. msg -ama " Que DNS desea utilizar?"
  437. msg -bar
  438. echo " 1) Usar DNS de sistema "
  439. echo " 2) Cloudflare"
  440. echo " 3) Quad"
  441. echo " 4) FDN"
  442. echo " 5) DNS.WATCH"
  443. echo " 6) OpenDNS"
  444. echo " 7) Google DNS"
  445. echo " 8) Yandex Basic"
  446. echo " 9) AdGuard DNS"
  447. msg -bar
  448. while [[ $DNS != @([1-9]) ]]; do
  449. read -p " DNS [1-9]: " -e -i 1 DNS
  450. done
  451. #CIPHER
  452. msg -bar
  453. msg -ama " Elija que codificacion desea para el canal de datos:"
  454. msg -bar
  455. echo " 1) AES-128-CBC"
  456. echo " 2) AES-192-CBC"
  457. echo " 3) AES-256-CBC"
  458. echo " 4) CAMELLIA-128-CBC"
  459. echo " 5) CAMELLIA-192-CBC"
  460. echo " 6) CAMELLIA-256-CBC"
  461. echo " 7) SEED-CBC"
  462. msg -bar
  463. while [[ $CIPHER != @([1-7]) ]]; do
  464. read -p " Cipher [1-7]: " -e -i 1 CIPHER
  465. done
  466. case $CIPHER in
  467. 1) CIPHER="cipher AES-128-CBC";;
  468. 2) CIPHER="cipher AES-192-CBC";;
  469. 3) CIPHER="cipher AES-256-CBC";;
  470. 4) CIPHER="cipher CAMELLIA-128-CBC";;
  471. 5) CIPHER="cipher CAMELLIA-192-CBC";;
  472. 6) CIPHER="cipher CAMELLIA-256-CBC";;
  473. 7) CIPHER="cipher SEED-CBC";;
  474. esac
  475. msg -bar
  476. msg -ama " Estamos listos para configurar su servidor OpenVPN"
  477. msg -bar
  478. read -n1 -r -p " Enter para Continuar ..."
  479. tput cuu1 && tput dl1
  480. }
  481. parametros_iniciais # BREVE VERIFICACAO
  482. coleta_variaveis # COLETA VARIAVEIS PARA INSTALAÇÃO
  483. add_repo # ATUALIZA REPOSITÓRIO OPENVPN E INSTALA OPENVPN
  484. # Cria Diretorio
  485. [[ ! -d /etc/openvpn ]] && mkdir /etc/openvpn
  486. # Install openvpn
  487. echo -ne " \033[1;31m[ ! ] apt-get update"
  488. apt-get update -q > /dev/null 2>&1 && echo -e "\033[1;32m [OK]" || echo -e "\033[1;31m [FAIL]"
  489. echo -ne " \033[1;31m[ ! ] apt-get install openvpn curl openssl"
  490. apt-get install -qy openvpn curl > /dev/null 2>&1 && apt-get install openssl ca-certificates -y > /dev/null 2>&1 && echo -e "\033[1;32m [OK]" || echo -e "\033[1;31m [FAIL]"
  491. SERVER_IP="$(meu_ip)" # IP Address
  492. [[ -z "${SERVER_IP}" ]] && SERVER_IP=$(ip a | awk -F"[ /]+" '/global/ && !/127.0/ {print $3; exit}')
  493. echo -ne " \033[1;31m[ ! ] Generating Server Config" # Gerando server.con
  494. (
  495. case $DNS in
  496. 1)
  497. i=0
  498. grep -v '#' /etc/resolv.conf | grep 'nameserver' | grep -E -o '[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}' | while read line; do
  499. dns[$i]="push \"dhcp-option DNS $line\""
  500. done
  501. [[ ! "${dns[@]}" ]] && dns[0]='push "dhcp-option DNS 8.8.8.8"' && dns[1]='push "dhcp-option DNS 8.8.4.4"'
  502. ;;
  503. 2)dns_fun 3 && dns_fun 4;;
  504. 3)dns_fun 5 && dns_fun 6;;
  505. 4)dns_fun 7 && dns_fun 8;;
  506. 5)dns_fun 9 && dns_fun 10;;
  507. 6)dns_fun 11 && dns_fun 12;;
  508. 7)dns_fun 13 && dns_fun 14;;
  509. 8)dns_fun 15 && dns_fun 16;;
  510. 9)dns_fun 17 && dns_fun 18;;
  511. esac
  512. echo 01 > /etc/openvpn/ca.srl
  513. while [[ ! -e /etc/openvpn/dh.pem || -z $(cat /etc/openvpn/dh.pem) ]]; do
  514. openssl dhparam -out /etc/openvpn/dh.pem 2048 &>/dev/null
  515. done
  516. while [[ ! -e /etc/openvpn/ca-key.pem || -z $(cat /etc/openvpn/ca-key.pem) ]]; do
  517. openssl genrsa -out /etc/openvpn/ca-key.pem 2048 &>/dev/null
  518. done
  519. chmod 600 /etc/openvpn/ca-key.pem &>/dev/null
  520. while [[ ! -e /etc/openvpn/ca-csr.pem || -z $(cat /etc/openvpn/ca-csr.pem) ]]; do
  521. openssl req -new -key /etc/openvpn/ca-key.pem -out /etc/openvpn/ca-csr.pem -subj /CN=OpenVPN-CA/ &>/dev/null
  522. done
  523. while [[ ! -e /etc/openvpn/ca.pem || -z $(cat /etc/openvpn/ca.pem) ]]; do
  524. openssl x509 -req -in /etc/openvpn/ca-csr.pem -out /etc/openvpn/ca.pem -signkey /etc/openvpn/ca-key.pem -days 365 &>/dev/null
  525. done
  526. cat > /etc/openvpn/server.conf <<EOF
  527. server 10.8.0.0 255.255.255.0
  528. verb 3
  529. duplicate-cn
  530. key client-key.pem
  531. ca ca.pem
  532. cert client-cert.pem
  533. dh dh.pem
  534. keepalive 10 120
  535. persist-key
  536. persist-tun
  537. comp-lzo
  538. float
  539. push "redirect-gateway def1 bypass-dhcp"
  540. ${dns[0]}
  541. ${dns[1]}
  542. user nobody
  543. group nogroup
  544. ${CIPHER}
  545. proto ${PROTOCOL}
  546. port $PORT
  547. dev tun
  548. status openvpn-status.log
  549. EOF
  550. updatedb
  551. PLUGIN=$(locate openvpn-plugin-auth-pam.so | head -1)
  552. [[ ! -z $(echo ${PLUGIN}) ]] && {
  553. echo "client-to-client
  554. client-cert-not-required
  555. username-as-common-name
  556. plugin $PLUGIN login" >> /etc/openvpn/server.conf
  557. }
  558. ) && echo -e "\033[1;32m [OK]" || echo -e "\033[1;31m [FAIL]"
  559. echo -ne " \033[1;31m[ ! ] Generating CA Config" # Generate CA Config
  560. (
  561. while [[ ! -e /etc/openvpn/client-key.pem || -z $(cat /etc/openvpn/client-key.pem) ]]; do
  562. openssl genrsa -out /etc/openvpn/client-key.pem 2048 &>/dev/null
  563. done
  564. chmod 600 /etc/openvpn/client-key.pem
  565. while [[ ! -e /etc/openvpn/client-csr.pem || -z $(cat /etc/openvpn/client-csr.pem) ]]; do
  566. openssl req -new -key /etc/openvpn/client-key.pem -out /etc/openvpn/client-csr.pem -subj /CN=OpenVPN-Client/ &>/dev/null
  567. done
  568. while [[ ! -e /etc/openvpn/client-cert.pem || -z $(cat /etc/openvpn/client-cert.pem) ]]; do
  569. openssl x509 -req -in /etc/openvpn/client-csr.pem -out /etc/openvpn/client-cert.pem -CA /etc/openvpn/ca.pem -CAkey /etc/openvpn/ca-key.pem -days 365 &>/dev/null
  570. done
  571. ) && echo -e "\033[1;32m [OK]" || echo -e "\033[1;31m [FAIL]"
  572. teste_porta () {
  573. msg -bar
  574. echo -ne " \033[1;31m$(fun_trans ${id} "Verificando"):"
  575. sleep 1s
  576. [[ ! $(mportas | grep "$1") ]] && {
  577. echo -e "\033[1;33m [FAIL]\033[0m"
  578. } || {
  579. echo -e "\033[1;32m [Pass]\033[0m"
  580. return 1
  581. }
  582. }
  583. msg -bar
  584. echo -e "\033[1;33m Ahora Necesitamos un Proxy SQUID o PYTHON-OPENVPN"
  585. echo -e "\033[1;33m Si no existe un proxy en la puerta, un proxy Python sera abierto!"
  586. msg -bar
  587. while [[ $? != "1" ]]; do
  588. read -p " Confirme el Puerto(Proxy) " -e -i 80 PPROXY
  589. teste_porta $PPROXY
  590. done
  591. cat > /etc/openvpn/client-common.txt <<EOF
  592. # OVPN_ACCESS_SERVER_PROFILE=VPS-MX
  593. client
  594. nobind
  595. dev tun
  596. redirect-gateway def1 bypass-dhcp
  597. remote-random
  598. remote ${SERVER_IP} ${PORT} ${PROTOCOL}
  599. http-proxy ${SERVER_IP} ${PPROXY}
  600. $CIPHER
  601. comp-lzo yes
  602. keepalive 10 20
  603. float
  604. auth-user-pass
  605. EOF
  606. # Iptables
  607. if [[ ! -f /proc/user_beancounters ]]; then
  608. INTIP=$(ip a | awk -F"[ /]+" '/global/ && !/127.0/ {print $3; exit}')
  609. N_INT=$(ip a |awk -v sip="$INTIP" '$0 ~ sip { print $7}')
  610. iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o $N_INT -j MASQUERADE
  611. iptables -t nat -A POSTROUTING -s 10.8.0.0/24 ! -d 10.8.0.0/24 -j SNAT --to $SERVER_IP
  612. else
  613. iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -j SNAT --to-source $SERVER_IP
  614. fi
  615. iptables-save > /etc/iptables.conf
  616. cat > /etc/network/if-up.d/iptables <<EOF
  617. #!/bin/sh
  618. iptables-restore < /etc/iptables.conf
  619. EOF
  620. chmod +x /etc/network/if-up.d/iptables
  621. # Enable net.ipv4.ip_forward
  622. sed -i 's|#net.ipv4.ip_forward=1|net.ipv4.ip_forward=1|' /etc/sysctl.conf
  623. echo 1 > /proc/sys/net/ipv4/ip_forward
  624. # Regras de Firewall
  625. if pgrep firewalld; then
  626. if [[ "$PROTOCOL" = 'udp' ]]; then
  627. firewall-cmd --zone=public --add-port=$PORT/udp
  628. firewall-cmd --permanent --zone=public --add-port=$PORT/udp
  629. elif [[ "$PROTOCOL" = 'tcp' ]]; then
  630. firewall-cmd --zone=public --add-port=$PORT/tcp
  631. firewall-cmd --permanent --zone=public --add-port=$PORT/tcp
  632. fi
  633. firewall-cmd --zone=trusted --add-source=10.8.0.0/24
  634. firewall-cmd --permanent --zone=trusted --add-source=10.8.0.0/24
  635. fi
  636. if iptables -L -n | grep -qE 'REJECT|DROP'; then
  637. if [[ "$PROTOCOL" = 'udp' ]]; then
  638. iptables -I INPUT -p udp --dport $PORT -j ACCEPT
  639. elif [[ "$PROTOCOL" = 'tcp' ]]; then
  640. iptables -I INPUT -p tcp --dport $PORT -j ACCEPT
  641. fi
  642. iptables -I FORWARD -s 10.8.0.0/24 -j ACCEPT
  643. iptables -I FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT
  644. iptables-save > $IPTABLES
  645. fi
  646. if hash sestatus 2>/dev/null; then
  647. if sestatus | grep "Current mode" | grep -qs "enforcing"; then
  648. if [[ "$PORT" != '1194' ]]; then
  649. if ! hash semanage 2>/dev/null; then
  650. yum install policycoreutils-python -y
  651. fi
  652. if [[ "$PROTOCOL" = 'udp' ]]; then
  653. semanage port -a -t openvpn_port_t -p udp $PORT
  654. elif [[ "$PROTOCOL" = 'tcp' ]]; then
  655. semanage port -a -t openvpn_port_t -p tcp $PORT
  656. fi
  657. fi
  658. fi
  659. fi
  660. #Liberando DNS
  661. msg -bar
  662. msg -ama " Ultimo Paso, Configuraciones DNS"
  663. msg -bar
  664. while [[ $DDNS != @(n|N) ]]; do
  665. echo -ne "\033[1;33m"
  666. read -p " Agergar HOST DNS [S/N]: " -e -i n DDNS
  667. [[ $DDNS = @(s|S|y|Y) ]] && agrega_dns
  668. done
  669. [[ ! -z $NEWDNS ]] && {
  670. sed -i "/127.0.0.1[[:blank:]]\+localhost/a 127.0.0.1 $NEWDNS" /etc/hosts
  671. for DENESI in $(echo $NEWDNS); do
  672. sed -i "/remote ${SERVER_IP} ${PORT} ${PROTOCOL}/a remote ${DENESI} ${PORT} ${PROTOCOL}" /etc/openvpn/client-common.txt
  673. done
  674. }
  675. msg -bar
  676. # REINICIANDO OPENVPN
  677. if [[ "$OS" = 'debian' ]]; then
  678. if pgrep systemd-journal; then
  679. sed -i 's|LimitNPROC|#LimitNPROC|' /lib/systemd/system/openvpn\@.service
  680. sed -i 's|/etc/openvpn/server|/etc/openvpn|' /lib/systemd/system/openvpn\@.service
  681. sed -i 's|%i.conf|server.conf|' /lib/systemd/system/openvpn\@.service
  682. #systemctl daemon-reload
  683. (
  684. systemctl restart openvpn
  685. systemctl enable openvpn
  686. ) > /dev/null 2>&1
  687. else
  688. /etc/init.d/openvpn restart > /dev/null 2>&1
  689. fi
  690. else
  691. if pgrep systemd-journal; then
  692. (
  693. systemctl restart openvpn@server.service
  694. systemctl enable openvpn@server.service
  695. ) > /dev/null 2>&1
  696. else
  697. (
  698. service openvpn restart
  699. chkconfig openvpn on
  700. ) > /dev/null 2>&1
  701. fi
  702. fi
  703. service squid restart &>/dev/null
  704. service squid3 restart &>/dev/null
  705. apt-get install ufw -y > /dev/null 2>&1
  706. for ufww in $(mportas|awk '{print $2}'); do
  707. ufw allow $ufww > /dev/null 2>&1
  708. done
  709. #Restart OPENVPN
  710. (
  711. killall openvpn 2>/dev/null
  712. systemctl stop openvpn@server.service > /dev/null 2>&1
  713. service openvpn stop > /dev/null 2>&1
  714. sleep 0.1s
  715. cd /etc/openvpn > /dev/null 2>&1
  716. screen -dmS ovpnscr openvpn --config "server.conf" > /dev/null 2>&1
  717. ) > /dev/null 2>&1
  718. echo -e "\033[1;32m Openvpn configurado con EXITO!"
  719. msg -bar
  720. msg -ama " Ahora crear una SSH para generar el (.ovpn)!"
  721. msg -bar
  722. return 0
  723. }
  724. edit_ovpn_host () {
  725. msg -bar3
  726. msg -ama " CONFIGURACION HOST DNS OPENVPN"
  727. msg -bar
  728. while [[ $DDNS != @(n|N) ]]; do
  729. echo -ne "\033[1;33m"
  730. read -p " Agregar host [S/N]: " -e -i n DDNS
  731. [[ $DDNS = @(s|S|y|Y) ]] && agrega_dns
  732. done
  733. [[ ! -z $NEWDNS ]] && sed -i "/127.0.0.1[[:blank:]]\+localhost/a 127.0.0.1 $NEWDNS" /etc/hosts
  734. msg -bar
  735. msg -ama " Es Necesario el Reboot del Servidor Para"
  736. msg -ama " Para que las configuraciones sean efectudas"
  737. msg -bar
  738. }
  739. fun_openvpn () {
  740. [[ -e /etc/openvpn/server.conf ]] && {
  741. unset OPENBAR
  742. [[ $(mportas|grep -w "openvpn") ]] && OPENBAR="\033[1;32m ONLINE" || OPENBAR="\033[1;31m OFFLINE"
  743. msg -ama " OPENVPN YA ESTA INSTALADO"
  744. msg -bar
  745. echo -e "\033[1;32m [1] >\033[1;36m DESINSTALAR OPENVPN"
  746. echo -e "\033[1;32m [2] >\033[1;36m EDITAR CONFIGURACION CLIENTE \033[1;31m(MEDIANTE NANO)"
  747. echo -e "\033[1;32m [3] >\033[1;36m EDITAR CONFIGURACION SERVIDOR \033[1;31m(MEDIANTE NANO)"
  748. echo -e "\033[1;32m [4] >\033[1;36m CAMBIAR HOST DE OPENVPN"
  749. echo -e "\033[1;32m [5] >\033[1;36m INICIAR O PARAR OPENVPN - $OPENBAR"
  750. msg -bar
  751. while [[ $xption != @([0|1|2|3|4|5]) ]]; do
  752. echo -ne "\033[1;33m $(fun_trans "Opcion"): " && read xption
  753. tput cuu1 && tput dl1
  754. done
  755. case $xption in
  756. 1)
  757. clear
  758. msg -bar
  759. echo -ne "\033[1;97m"
  760. read -p "QUIERES DESINTALAR OPENVPN? [Y/N]: " -e REMOVE
  761. msg -bar
  762. if [[ "$REMOVE" = 'y' || "$REMOVE" = 'Y' ]]; then
  763. PORT=$(grep '^port ' /etc/openvpn/server.conf | cut -d " " -f 2)
  764. PROTOCOL=$(grep '^proto ' /etc/openvpn/server.conf | cut -d " " -f 2)
  765. if pgrep firewalld; then
  766. IP=$(firewall-cmd --direct --get-rules ipv4 nat POSTROUTING | grep '\-s 10.8.0.0/24 '"'"'!'"'"' -d 10.8.0.0/24 -j SNAT --to ' | cut -d " " -f 10)
  767. #
  768. firewall-cmd --zone=public --remove-port=$PORT/$PROTOCOL
  769. firewall-cmd --zone=trusted --remove-source=10.8.0.0/24
  770. firewall-cmd --permanent --zone=public --remove-port=$PORT/$PROTOCOL
  771. firewall-cmd --permanent --zone=trusted --remove-source=10.8.0.0/24
  772. firewall-cmd --direct --remove-rule ipv4 nat POSTROUTING 0 -s 10.8.0.0/24 ! -d 10.8.0.0/24 -j SNAT --to $IP
  773. firewall-cmd --permanent --direct --remove-rule ipv4 nat POSTROUTING 0 -s 10.8.0.0/24 ! -d 10.8.0.0/24 -j SNAT --to $IP
  774. else
  775. IP=$(grep 'iptables -t nat -A POSTROUTING -s 10.8.0.0/24 ! -d 10.8.0.0/24 -j SNAT --to ' $RCLOCAL | cut -d " " -f 14)
  776. iptables -t nat -D POSTROUTING -s 10.8.0.0/24 ! -d 10.8.0.0/24 -j SNAT --to $IP
  777. sed -i '/iptables -t nat -A POSTROUTING -s 10.8.0.0\/24 ! -d 10.8.0.0\/24 -j SNAT --to /d' $RCLOCAL
  778. if iptables -L -n | grep -qE '^ACCEPT'; then
  779. iptables -D INPUT -p $PROTOCOL --dport $PORT -j ACCEPT
  780. iptables -D FORWARD -s 10.8.0.0/24 -j ACCEPT
  781. iptables -D FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT
  782. sed -i "/iptables -I INPUT -p $PROTOCOL --dport $PORT -j ACCEPT/d" $RCLOCAL
  783. sed -i "/iptables -I FORWARD -s 10.8.0.0\/24 -j ACCEPT/d" $RCLOCAL
  784. sed -i "/iptables -I FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT/d" $RCLOCAL
  785. fi
  786. fi
  787. if sestatus 2>/dev/null | grep "Current mode" | grep -q "enforcing" && [[ "$PORT" != '1194' ]]; then
  788. semanage port -d -t openvpn_port_t -p $PROTOCOL $PORT
  789. fi
  790. if [[ "$OS" = 'debian' ]]; then
  791. apt-get remove --purge -y openvpn
  792. else
  793. yum remove openvpn -y
  794. fi
  795. rm -rf /etc/openvpn
  796. rm -f /etc/sysctl.d/30-openvpn-forward.conf
  797. msg -bar
  798. echo "OpenVPN removido!"
  799. msg -bar
  800. else
  801. msg -bar
  802. echo "Desinstalacion abortada!"
  803. msg -bar
  804. fi
  805. return 0;;
  806. 2)
  807. nano /etc/openvpn/client-common.txt
  808. return 0;;
  809. 3)
  810. nano /etc/openvpn/server.conf
  811. return 0;;
  812. 4)edit_ovpn_host;;
  813. 5)
  814. [[ $(mportas|grep -w openvpn) ]] && {
  815. /etc/init.d/openvpn stop > /dev/null 2>&1
  816. killall openvpn &>/dev/null
  817. systemctl stop openvpn@server.service &>/dev/null
  818. service openvpn stop &>/dev/null
  819. #ps x |grep openvpn |grep -v grep|awk '{print $1}' | while read pid; do kill -9 $pid; done
  820. } || {
  821. cd /etc/openvpn
  822. screen -dmS ovpnscr openvpn --config "server.conf" > /dev/null 2>&1
  823. cd $HOME
  824. }
  825. msg -ama " Procedimiento Hecho con Exito"
  826. msg -bar
  827. return 0;;
  828. 0)
  829. return 0;;
  830. esac
  831. exit
  832. }
  833. [[ -e /etc/squid/squid.conf ]] && instala_ovpn2 && return 0
  834. [[ -e /etc/squid3/squid.conf ]] && instala_ovpn2 && return 0
  835. instala_ovpn2 || return 1
  836. }
  837. fun_openvpn