openvpn.sh 28 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858
  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"
  416. read -p ": " -e -i $IP ip
  417. msg -bar
  418. msg -ama " Que puerto desea usar?"
  419. msg -bar
  420. while true; do
  421. read -p " Port: " -e -i 1194 PORT
  422. [[ $(mportas | grep -w "$PORT") ]] || break
  423. echo -e "\033[1;33m Este puerto esta en uso\033[0m"
  424. unset PORT
  425. done
  426. msg -bar
  427. echo -e "\033[1;31m Que protocolo desea para las conexiones OPENVPN?"
  428. echo -e "\033[1;31m A menos que UDP este bloqueado, no utilice TCP (es mas lento)"
  429. #PROTOCOLO
  430. while [[ $PROTOCOL != @(UDP|TCP) ]]; do
  431. read -p " Protocol [UDP/TCP]: " -e -i TCP PROTOCOL
  432. done
  433. [[ $PROTOCOL = "UDP" ]] && PROTOCOL=udp
  434. [[ $PROTOCOL = "TCP" ]] && PROTOCOL=tcp
  435. #DNS
  436. msg -bar
  437. msg -ama " Que DNS desea utilizar?"
  438. msg -bar
  439. echo " 1) Usar DNS de sistema "
  440. echo " 2) Cloudflare"
  441. echo " 3) Quad"
  442. echo " 4) FDN"
  443. echo " 5) DNS.WATCH"
  444. echo " 6) OpenDNS"
  445. echo " 7) Google DNS"
  446. echo " 8) Yandex Basic"
  447. echo " 9) AdGuard DNS"
  448. msg -bar
  449. while [[ $DNS != @([1-9]) ]]; do
  450. read -p " DNS [1-9]: " -e -i 1 DNS
  451. done
  452. #CIPHER
  453. msg -bar
  454. msg -ama " Elija que codificacion desea para el canal de datos:"
  455. msg -bar
  456. echo " 1) AES-128-CBC"
  457. echo " 2) AES-192-CBC"
  458. echo " 3) AES-256-CBC"
  459. echo " 4) CAMELLIA-128-CBC"
  460. echo " 5) CAMELLIA-192-CBC"
  461. echo " 6) CAMELLIA-256-CBC"
  462. echo " 7) SEED-CBC"
  463. msg -bar
  464. while [[ $CIPHER != @([1-7]) ]]; do
  465. read -p " Cipher [1-7]: " -e -i 1 CIPHER
  466. done
  467. case $CIPHER in
  468. 1) CIPHER="cipher AES-128-CBC" ;;
  469. 2) CIPHER="cipher AES-192-CBC" ;;
  470. 3) CIPHER="cipher AES-256-CBC" ;;
  471. 4) CIPHER="cipher CAMELLIA-128-CBC" ;;
  472. 5) CIPHER="cipher CAMELLIA-192-CBC" ;;
  473. 6) CIPHER="cipher CAMELLIA-256-CBC" ;;
  474. 7) CIPHER="cipher SEED-CBC" ;;
  475. esac
  476. msg -bar
  477. msg -ama " Estamos listos para configurar su servidor OpenVPN"
  478. msg -bar
  479. read -n1 -r -p " Enter para Continuar ..."
  480. tput cuu1 && tput dl1
  481. }
  482. parametros_iniciais # BREVE VERIFICACAO
  483. coleta_variaveis # COLETA VARIAVEIS PARA INSTALAÇÃO
  484. add_repo # ATUALIZA REPOSITÓRIO OPENVPN E INSTALA OPENVPN
  485. # Cria Diretorio
  486. [[ ! -d /etc/openvpn ]] && mkdir /etc/openvpn
  487. # Install openvpn
  488. echo -ne " \033[1;31m[ ! ] apt-get update"
  489. apt-get update -q >/dev/null 2>&1 && echo -e "\033[1;32m [OK]" || echo -e "\033[1;31m [FAIL]"
  490. echo -ne " \033[1;31m[ ! ] apt-get install openvpn curl openssl"
  491. 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]"
  492. SERVER_IP="$(meu_ip)" # IP Address
  493. [[ -z "${SERVER_IP}" ]] && SERVER_IP=$(ip a | awk -F"[ /]+" '/global/ && !/127.0/ {print $3; exit}')
  494. echo -ne " \033[1;31m[ ! ] Generating Server Config" # Gerando server.con
  495. (
  496. case $DNS in
  497. 1)
  498. i=0
  499. 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
  500. dns[$i]="push \"dhcp-option DNS $line\""
  501. done
  502. [[ ! "${dns[@]}" ]] && dns[0]='push "dhcp-option DNS 8.8.8.8"' && dns[1]='push "dhcp-option DNS 8.8.4.4"'
  503. ;;
  504. 2) dns_fun 3 && dns_fun 4 ;;
  505. 3) dns_fun 5 && dns_fun 6 ;;
  506. 4) dns_fun 7 && dns_fun 8 ;;
  507. 5) dns_fun 9 && dns_fun 10 ;;
  508. 6) dns_fun 11 && dns_fun 12 ;;
  509. 7) dns_fun 13 && dns_fun 14 ;;
  510. 8) dns_fun 15 && dns_fun 16 ;;
  511. 9) dns_fun 17 && dns_fun 18 ;;
  512. esac
  513. echo 01 >/etc/openvpn/ca.srl
  514. while [[ ! -e /etc/openvpn/dh.pem || -z $(cat /etc/openvpn/dh.pem) ]]; do
  515. openssl dhparam -out /etc/openvpn/dh.pem 2048 &>/dev/null
  516. done
  517. while [[ ! -e /etc/openvpn/ca-key.pem || -z $(cat /etc/openvpn/ca-key.pem) ]]; do
  518. openssl genrsa -out /etc/openvpn/ca-key.pem 2048 &>/dev/null
  519. done
  520. chmod 600 /etc/openvpn/ca-key.pem &>/dev/null
  521. while [[ ! -e /etc/openvpn/ca-csr.pem || -z $(cat /etc/openvpn/ca-csr.pem) ]]; do
  522. openssl req -new -key /etc/openvpn/ca-key.pem -out /etc/openvpn/ca-csr.pem -subj /CN=OpenVPN-CA/ &>/dev/null
  523. done
  524. while [[ ! -e /etc/openvpn/ca.pem || -z $(cat /etc/openvpn/ca.pem) ]]; do
  525. openssl x509 -req -in /etc/openvpn/ca-csr.pem -out /etc/openvpn/ca.pem -signkey /etc/openvpn/ca-key.pem -days 365 &>/dev/null
  526. done
  527. cat >/etc/openvpn/server.conf <<EOF
  528. server 10.8.0.0 255.255.255.0
  529. verb 3
  530. duplicate-cn
  531. key client-key.pem
  532. ca ca.pem
  533. cert client-cert.pem
  534. dh dh.pem
  535. keepalive 10 120
  536. persist-key
  537. persist-tun
  538. comp-lzo
  539. float
  540. push "redirect-gateway def1 bypass-dhcp"
  541. ${dns[0]}
  542. ${dns[1]}
  543. user nobody
  544. group nogroup
  545. ${CIPHER}
  546. proto ${PROTOCOL}
  547. port $PORT
  548. dev tun
  549. status openvpn-status.log
  550. EOF
  551. updatedb
  552. PLUGIN=$(locate openvpn-plugin-auth-pam.so | head -1)
  553. [[ ! -z $(echo ${PLUGIN}) ]] && {
  554. echo "client-to-client
  555. client-cert-not-required
  556. username-as-common-name
  557. plugin $PLUGIN login" >>/etc/openvpn/server.conf
  558. }
  559. ) && echo -e "\033[1;32m [OK]" || echo -e "\033[1;31m [FAIL]"
  560. echo -ne " \033[1;31m[ ! ] Generating CA Config" # Generate CA Config
  561. (
  562. while [[ ! -e /etc/openvpn/client-key.pem || -z $(cat /etc/openvpn/client-key.pem) ]]; do
  563. openssl genrsa -out /etc/openvpn/client-key.pem 2048 &>/dev/null
  564. done
  565. chmod 600 /etc/openvpn/client-key.pem
  566. while [[ ! -e /etc/openvpn/client-csr.pem || -z $(cat /etc/openvpn/client-csr.pem) ]]; do
  567. openssl req -new -key /etc/openvpn/client-key.pem -out /etc/openvpn/client-csr.pem -subj /CN=OpenVPN-Client/ &>/dev/null
  568. done
  569. while [[ ! -e /etc/openvpn/client-cert.pem || -z $(cat /etc/openvpn/client-cert.pem) ]]; do
  570. 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
  571. done
  572. ) && echo -e "\033[1;32m [OK]" || echo -e "\033[1;31m [FAIL]"
  573. teste_porta() {
  574. msg -bar
  575. echo -ne " \033[1;31m$(fun_trans ${id} "Verificando"):"
  576. sleep 1s
  577. [[ ! $(mportas | grep "$1") ]] && {
  578. echo -e "\033[1;33m [FAIL]\033[0m"
  579. } || {
  580. echo -e "\033[1;32m [Pass]\033[0m"
  581. return 1
  582. }
  583. }
  584. msg -bar
  585. echo -e "\033[1;33m Ahora Necesitamos un Proxy SQUID o PYTHON-OPENVPN"
  586. echo -e "\033[1;33m Si no existe un proxy en la puerta, un proxy Python sera abierto!"
  587. msg -bar
  588. while [[ $? != "1" ]]; do
  589. read -p " Confirme el Puerto(Proxy) " -e -i 80 PPROXY
  590. teste_porta $PPROXY
  591. done
  592. cat >/etc/openvpn/client-common.txt <<EOF
  593. # OVPN_ACCESS_SERVER_PROFILE=VPS-MX
  594. client
  595. nobind
  596. dev tun
  597. redirect-gateway def1 bypass-dhcp
  598. remote-random
  599. remote ${SERVER_IP} ${PORT} ${PROTOCOL}
  600. http-proxy ${SERVER_IP} ${PPROXY}
  601. $CIPHER
  602. comp-lzo yes
  603. keepalive 10 20
  604. float
  605. auth-user-pass
  606. EOF
  607. # Iptables
  608. if [[ ! -f /proc/user_beancounters ]]; then
  609. INTIP=$(ip a | awk -F"[ /]+" '/global/ && !/127.0/ {print $3; exit}')
  610. N_INT=$(ip a | awk -v sip="$INTIP" '$0 ~ sip { print $7}')
  611. iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o $N_INT -j MASQUERADE
  612. iptables -t nat -A POSTROUTING -s 10.8.0.0/24 ! -d 10.8.0.0/24 -j SNAT --to $SERVER_IP
  613. else
  614. iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -j SNAT --to-source $SERVER_IP
  615. fi
  616. iptables-save >/etc/iptables.conf
  617. cat >/etc/network/if-up.d/iptables <<EOF
  618. #!/bin/sh
  619. iptables-restore < /etc/iptables.conf
  620. EOF
  621. chmod +x /etc/network/if-up.d/iptables
  622. # Enable net.ipv4.ip_forward
  623. sed -i 's|#net.ipv4.ip_forward=1|net.ipv4.ip_forward=1|' /etc/sysctl.conf
  624. echo 1 >/proc/sys/net/ipv4/ip_forward
  625. # Regras de Firewall
  626. if pgrep firewalld; then
  627. if [[ "$PROTOCOL" = 'udp' ]]; then
  628. firewall-cmd --zone=public --add-port=$PORT/udp
  629. firewall-cmd --permanent --zone=public --add-port=$PORT/udp
  630. elif [[ "$PROTOCOL" = 'tcp' ]]; then
  631. firewall-cmd --zone=public --add-port=$PORT/tcp
  632. firewall-cmd --permanent --zone=public --add-port=$PORT/tcp
  633. fi
  634. firewall-cmd --zone=trusted --add-source=10.8.0.0/24
  635. firewall-cmd --permanent --zone=trusted --add-source=10.8.0.0/24
  636. fi
  637. if iptables -L -n | grep -qE 'REJECT|DROP'; then
  638. if [[ "$PROTOCOL" = 'udp' ]]; then
  639. iptables -I INPUT -p udp --dport $PORT -j ACCEPT
  640. elif [[ "$PROTOCOL" = 'tcp' ]]; then
  641. iptables -I INPUT -p tcp --dport $PORT -j ACCEPT
  642. fi
  643. iptables -I FORWARD -s 10.8.0.0/24 -j ACCEPT
  644. iptables -I FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT
  645. iptables-save >$IPTABLES
  646. fi
  647. if hash sestatus 2>/dev/null; then
  648. if sestatus | grep "Current mode" | grep -qs "enforcing"; then
  649. if [[ "$PORT" != '1194' ]]; then
  650. if ! hash semanage 2>/dev/null; then
  651. yum install policycoreutils-python -y
  652. fi
  653. if [[ "$PROTOCOL" = 'udp' ]]; then
  654. semanage port -a -t openvpn_port_t -p udp $PORT
  655. elif [[ "$PROTOCOL" = 'tcp' ]]; then
  656. semanage port -a -t openvpn_port_t -p tcp $PORT
  657. fi
  658. fi
  659. fi
  660. fi
  661. #Liberando DNS
  662. msg -bar
  663. msg -ama " Ultimo Paso, Configuraciones DNS"
  664. msg -bar
  665. while [[ $DDNS != @(n|N) ]]; do
  666. echo -ne "\033[1;33m"
  667. read -p " Agergar HOST DNS [S/N]: " -e -i n DDNS
  668. [[ $DDNS = @(s|S|y|Y) ]] && agrega_dns
  669. done
  670. [[ ! -z $NEWDNS ]] && {
  671. sed -i "/127.0.0.1[[:blank:]]\+localhost/a 127.0.0.1 $NEWDNS" /etc/hosts
  672. for DENESI in $(echo $NEWDNS); do
  673. sed -i "/remote ${SERVER_IP} ${PORT} ${PROTOCOL}/a remote ${DENESI} ${PORT} ${PROTOCOL}" /etc/openvpn/client-common.txt
  674. done
  675. }
  676. msg -bar
  677. # REINICIANDO OPENVPN
  678. if [[ "$OS" = 'debian' ]]; then
  679. if pgrep systemd-journal; then
  680. sed -i 's|LimitNPROC|#LimitNPROC|' /lib/systemd/system/openvpn\@.service
  681. sed -i 's|/etc/openvpn/server|/etc/openvpn|' /lib/systemd/system/openvpn\@.service
  682. sed -i 's|%i.conf|server.conf|' /lib/systemd/system/openvpn\@.service
  683. #systemctl daemon-reload
  684. (
  685. systemctl restart openvpn
  686. systemctl enable openvpn
  687. ) >/dev/null 2>&1
  688. else
  689. /etc/init.d/openvpn restart >/dev/null 2>&1
  690. fi
  691. else
  692. if pgrep systemd-journal; then
  693. (
  694. systemctl restart openvpn@server.service
  695. systemctl enable openvpn@server.service
  696. ) >/dev/null 2>&1
  697. else
  698. (
  699. service openvpn restart
  700. chkconfig openvpn on
  701. ) >/dev/null 2>&1
  702. fi
  703. fi
  704. service squid restart &>/dev/null
  705. service squid3 restart &>/dev/null
  706. apt-get install ufw -y >/dev/null 2>&1
  707. for ufww in $(mportas | awk '{print $2}'); do
  708. ufw allow $ufww >/dev/null 2>&1
  709. done
  710. #Restart OPENVPN
  711. (
  712. killall openvpn 2>/dev/null
  713. systemctl stop openvpn@server.service >/dev/null 2>&1
  714. service openvpn stop >/dev/null 2>&1
  715. sleep 0.1s
  716. cd /etc/openvpn >/dev/null 2>&1
  717. screen -dmS ovpnscr openvpn --config "server.conf" >/dev/null 2>&1
  718. ) >/dev/null 2>&1
  719. echo -e "\033[1;32m Openvpn configurado con EXITO!"
  720. msg -bar
  721. msg -ama " Ahora crear una SSH para generar el (.ovpn)!"
  722. msg -bar
  723. return 0
  724. }
  725. edit_ovpn_host() {
  726. msg -bar3
  727. msg -ama " CONFIGURACION HOST DNS OPENVPN"
  728. msg -bar
  729. while [[ $DDNS != @(n|N) ]]; do
  730. echo -ne "\033[1;33m"
  731. read -p " Agregar host [S/N]: " -e -i n DDNS
  732. [[ $DDNS = @(s|S|y|Y) ]] && agrega_dns
  733. done
  734. [[ ! -z $NEWDNS ]] && sed -i "/127.0.0.1[[:blank:]]\+localhost/a 127.0.0.1 $NEWDNS" /etc/hosts
  735. msg -bar
  736. msg -ama " Es Necesario el Reboot del Servidor Para"
  737. msg -ama " Para que las configuraciones sean efectudas"
  738. msg -bar
  739. }
  740. fun_openvpn() {
  741. [[ -e /etc/openvpn/server.conf ]] && {
  742. unset OPENBAR
  743. [[ $(mportas | grep -w "openvpn") ]] && OPENBAR="\033[1;32m ONLINE" || OPENBAR="\033[1;31m OFFLINE"
  744. msg -ama " OPENVPN YA ESTA INSTALADO"
  745. msg -bar
  746. echo -e "\033[1;32m [1] >\033[1;36m DESINSTALAR OPENVPN"
  747. echo -e "\033[1;32m [2] >\033[1;36m EDITAR CONFIGURACION CLIENTE \033[1;31m(MEDIANTE NANO)"
  748. echo -e "\033[1;32m [3] >\033[1;36m EDITAR CONFIGURACION SERVIDOR \033[1;31m(MEDIANTE NANO)"
  749. echo -e "\033[1;32m [4] >\033[1;36m CAMBIAR HOST DE OPENVPN"
  750. echo -e "\033[1;32m [5] >\033[1;36m INICIAR O PARAR OPENVPN - $OPENBAR"
  751. msg -bar
  752. while [[ $xption != @([0|1|2|3|4|5]) ]]; do
  753. echo -ne "\033[1;33m $(fun_trans "Opcion"): " && read xption
  754. tput cuu1 && tput dl1
  755. done
  756. case $xption in
  757. 1)
  758. clear
  759. msg -bar
  760. echo -ne "\033[1;97m"
  761. read -p "QUIERES DESINTALAR OPENVPN? [Y/N]: " -e REMOVE
  762. msg -bar
  763. if [[ "$REMOVE" = 'y' || "$REMOVE" = 'Y' ]]; then
  764. PORT=$(grep '^port ' /etc/openvpn/server.conf | cut -d " " -f 2)
  765. PROTOCOL=$(grep '^proto ' /etc/openvpn/server.conf | cut -d " " -f 2)
  766. if pgrep firewalld; then
  767. 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)
  768. #
  769. firewall-cmd --zone=public --remove-port=$PORT/$PROTOCOL
  770. firewall-cmd --zone=trusted --remove-source=10.8.0.0/24
  771. firewall-cmd --permanent --zone=public --remove-port=$PORT/$PROTOCOL
  772. firewall-cmd --permanent --zone=trusted --remove-source=10.8.0.0/24
  773. 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
  774. 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
  775. else
  776. 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)
  777. iptables -t nat -D POSTROUTING -s 10.8.0.0/24 ! -d 10.8.0.0/24 -j SNAT --to $IP
  778. sed -i '/iptables -t nat -A POSTROUTING -s 10.8.0.0\/24 ! -d 10.8.0.0\/24 -j SNAT --to /d' $RCLOCAL
  779. if iptables -L -n | grep -qE '^ACCEPT'; then
  780. iptables -D INPUT -p $PROTOCOL --dport $PORT -j ACCEPT
  781. iptables -D FORWARD -s 10.8.0.0/24 -j ACCEPT
  782. iptables -D FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT
  783. sed -i "/iptables -I INPUT -p $PROTOCOL --dport $PORT -j ACCEPT/d" $RCLOCAL
  784. sed -i "/iptables -I FORWARD -s 10.8.0.0\/24 -j ACCEPT/d" $RCLOCAL
  785. sed -i "/iptables -I FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT/d" $RCLOCAL
  786. fi
  787. fi
  788. if sestatus 2>/dev/null | grep "Current mode" | grep -q "enforcing" && [[ "$PORT" != '1194' ]]; then
  789. semanage port -d -t openvpn_port_t -p $PROTOCOL $PORT
  790. fi
  791. if [[ "$OS" = 'debian' ]]; then
  792. apt-get remove --purge -y openvpn
  793. else
  794. yum remove openvpn -y
  795. fi
  796. rm -rf /etc/openvpn
  797. rm -f /etc/sysctl.d/30-openvpn-forward.conf
  798. msg -bar
  799. echo "OpenVPN removido!"
  800. msg -bar
  801. else
  802. msg -bar
  803. echo "Desinstalacion abortada!"
  804. msg -bar
  805. fi
  806. return 0
  807. ;;
  808. 2)
  809. nano /etc/openvpn/client-common.txt
  810. return 0
  811. ;;
  812. 3)
  813. nano /etc/openvpn/server.conf
  814. return 0
  815. ;;
  816. 4) edit_ovpn_host ;;
  817. 5)
  818. [[ $(mportas | grep -w openvpn) ]] && {
  819. /etc/init.d/openvpn stop >/dev/null 2>&1
  820. killall openvpn &>/dev/null
  821. systemctl stop openvpn@server.service &>/dev/null
  822. service openvpn stop &>/dev/null
  823. #ps x |grep openvpn |grep -v grep|awk '{print $1}' | while read pid; do kill -9 $pid; done
  824. } || {
  825. cd /etc/openvpn
  826. screen -dmS ovpnscr openvpn --config "server.conf" >/dev/null 2>&1
  827. cd $HOME
  828. }
  829. msg -ama " Procedimiento Hecho con Exito"
  830. msg -bar
  831. return 0
  832. ;;
  833. 0)
  834. return 0
  835. ;;
  836. esac
  837. exit
  838. }
  839. [[ -e /etc/squid/squid.conf ]] && instala_ovpn2 && return 0
  840. [[ -e /etc/squid3/squid.conf ]] && instala_ovpn2 && return 0
  841. instala_ovpn2 || return 1
  842. }
  843. fun_openvpn