Advertisement
Guest User

Untitled

a guest
Sep 10th, 2018
140
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Bash 6.02 KB | None | 0 0
  1. #! /bin/bash
  2. # $PROG: s3proxy.sh
  3. # $description: install HTTPS/SSL proxy on [NAT IPv4 Share|Dedicated IPv4] VPS(OpenVZ)
  4. #       Stunnel4 + 3proxy with user authentication
  5. # $Usage: $0 {-n|-s}
  6. #     -n : NAT IPv4 Share VPS   -s : Dedicated IPv4 VPS
  7. # Works on Debian 7/8 and Ubuntu 14.04/15.04
  8. # Public domain use as your own risk!
  9.  
  10. trap cleanup INT
  11.  
  12. cleanup(){
  13.     kill $(ps aux | grep 3proxy | grep -v grep | awk '{print $2}') 2> /dev/null
  14.     rm -rf "$HOME/3proxy"
  15.     rm -rf /usr/local/etc/3proxy/ 2> /dev/null
  16.     update-rc.d -f 3proxyinit remove 2> /dev/null
  17.     rm -f /etc/init.d/3proxyinit 2> /dev/null
  18.     mv -f /etc/default/stunnel4.bak /etc/default/stunnel4 2> /dev/null
  19.     rm -f "$HOME/publickey.pem" 2> /dev/null
  20.     rm -f "$HOME/privatekey.pem" 2> /dev/null
  21.     rm -f "$HOME/publickey.crt" 2> /dev/null
  22.     rm -f /etc/stunnel/stunnel.conf 2> /dev/null
  23.     apt-get purge stunnel4 -y
  24.     exit 1
  25. }
  26.  
  27. export PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
  28. export LANGUAGE=C
  29. export LC_ALL=C
  30.  
  31. [ $UID -ne 0 ] && {
  32.     echo "This script must be executed by root." >&2
  33.     exit 1
  34. }
  35.  
  36. [ $(pwd) != "/root" ] && cd "$HOME"
  37.  
  38. myip=$(wget -qO - v4.ifconfig.co)
  39.  
  40. 3proxy_install(){
  41.     git clone https://github.com/z3APA3A/3proxy.git ;
  42.     [ $? -eq 0 ] || {
  43.         echo "Clone 3proxy.git failed.exiting..." >&2 ;
  44.         exit 1 ;
  45.     }
  46.     cd 3proxy/ || {
  47.         echo "Cannot change to 3proxy directory." >&2 ;
  48.         exit 1 ;
  49.     }
  50.     make -f Makefile.Linux ;
  51.     [ $? -eq 0 ] && cd src/ ;
  52.     mkdir -p /usr/local/etc/3proxy/bin/ ;
  53.     install 3proxy /usr/local/etc/3proxy/bin/3proxy ;
  54.     install mycrypt /usr/local/etc/3proxy/bin/mycrypt ;
  55.     touch /usr/local/etc/3proxy/3proxy.cfg ;
  56.     mkdir -p /usr/local/etc/3proxy/log/ ;
  57.     chown -R root:root /usr/local/etc/3proxy/ ;
  58.     chown -R 65535 /usr/local/etc/3proxy/log/ ;
  59.     touch /usr/local/etc/3proxy/3proxy.pid ;
  60.     chown 65535 /usr/local/etc/3proxy/3proxy.pid ;
  61.     local cfg
  62.     cfg="/usr/local/etc/3proxy/3proxy.cfg"
  63.     cat >"$cfg"<<EOF
  64. nscache 65536
  65. nserver 8.8.8.8
  66. nserver 8.8.4.4
  67. timeouts 1 5 30 60 180 1800 15 60
  68. daemon
  69. pidfile 3proxy.pid
  70. config 3proxy.cfg
  71. monitor 3proxy.cfg
  72. log log/3proxy.log D
  73. logformat "L%d-%m-%Y %H:%M:%S %z %N.%p %E %U %C:%c %R:%r %O %I %h %T"
  74. rotate 30
  75. allow * * * 80-88,8080-8088
  76. allow * * * 443,8443
  77. allow * * * 5222,5223,5228
  78. allow * * * 465,587,995
  79. proxy -i127.0.0.1 -a -p3128
  80. flush
  81. chroot /usr/local/etc/3proxy/
  82. setgid 65535
  83. setuid 65535
  84. auth strong
  85. users ${username}:CL:${pass}
  86.  
  87. EOF
  88.  
  89.     cd /etc/init.d/ || {
  90.         echo "Cannot change to /etc/init.d/ directory." >&2 ;
  91.         exit 1 ;
  92.     }
  93.     cat >3proxyinit<<EOF
  94. #! /bin/sh
  95. #
  96. ### BEGIN INIT INFO
  97. # Provides: 3Proxy
  98. # Required-Start: \$remote_fs \$syslog
  99. # Required-Stop: \$remote_fs \$syslog
  100. # Default-Start: 2 3 4 5
  101. # Default-Stop: 0 1 6
  102. # Short-Description: Initialize 3proxy server
  103. # Description: starts 3proxy
  104. ### END INIT INFO
  105.  
  106. cd /usr/local/etc/3proxy/
  107. case "\$1" in
  108.     start)  echo "Starting 3Proxy" ;
  109.         /usr/local/etc/3proxy/bin/3proxy /usr/local/etc/3proxy/3proxy.cfg
  110.          ;;
  111.      stop)  echo "Stopping 3Proxy" ;
  112.         kill \`ps aux | grep 3proxy | grep -v grep | awk '{print \$2}'\`
  113.         ;;
  114.         *)  echo Usage: \\\$0 "{start|stop}" ;
  115.         exit 1 ;
  116.         ;;
  117. esac
  118. exit 0
  119.  
  120. EOF
  121.  
  122.     if [ -e 3proxyinit ] ; then
  123.         bash -n 3proxyinit > /dev/null 2>&1 ;
  124.         [ $? -eq 0 ] && {
  125.             chmod +x 3proxyinit ;
  126.             update-rc.d 3proxyinit defaults ;
  127.         } || {
  128.             echo "3proxyinit script is something wrong." >&2 ;
  129.             exit 1 ;
  130.         }
  131.         cd "$HOME" ;
  132.         /etc/init.d/3proxyinit start ;
  133.     else
  134.         echo "3proxyinit script is not exist." >&2 ;
  135.         exit 1
  136.     fi
  137. }
  138.  
  139. username_gen(){
  140.     local uletter digit ulength dlength i username pick
  141.     uletter="ABCDEFGHIJKLMNOPQRSTUVWXYZ"
  142.     digit="123456789"
  143.     ulength=${#uletter}
  144.     dlength=${#digit}
  145.     for ((i=1 ; i<=2 ; i++)) ; do
  146.         pick=${uletter:$((RANDOM%ulength-1)):1}${digit:$((RANDOM%dlength-1)):1}
  147.         username="$username$pick"
  148.     done
  149.     echo "$username"
  150. }
  151.  
  152. password_gen(){
  153.         local matrix pw count pick i howmany
  154.     howmany=10
  155.         matrix="123456789aAbBcCdDeEfFgGhHiIjJkKLmMnNpPqQrRsStTuUvVwWxXyYzZ"
  156.         count="${#matrix}"
  157.         for ((i=1 ; i<=howmany ;i++)) ; do
  158.                 pick=${matrix:$((RANDOM%count-1)):1}
  159.                 pw="$pw$pick"
  160.         done
  161.         echo "$pw"
  162. }
  163.  
  164. gen_self_cert(){
  165.     openssl genrsa -out privatekey.pem 2048
  166.     openssl req -new -x509 -key privatekey.pem -subj \
  167.     "/C=CN/ST=MyTunnel/L=Mytunnel/O=$myip/CN=$myip" \
  168.     -out publickey.pem -days 1095
  169. }
  170.  
  171. stunnel_install(){
  172.     apt-get install stunnel4 -y
  173.     gen_self_cert
  174.     [ $? -eq 0 ] && {
  175.         cat privatekey.pem publickey.pem > /etc/stunnel/stunnel.pem
  176.         cat publickey.pem > publickey.crt
  177. }
  178.  
  179.     cat >stunnel.conf<<EOF
  180. client = no
  181. debug = 7
  182. output = /var/log/stunnel4/stunnel.log
  183. [3proxy]
  184. accept = $port
  185. connect = 127.0.0.1:3128
  186. cert = /etc/stunnel/stunnel.pem
  187.  
  188. EOF
  189.  
  190.     mv -f stunnel.conf /etc/stunnel/
  191.     cp -f /etc/default/stunnel4 /etc/default/stunnel4.bak
  192.     sed -i 's/^ENABLED=0$/ENABLED=1/' /etc/default/stunnel4
  193.     service stunnel4 restart
  194. }
  195.  
  196. username=$(username_gen)
  197. pass=$(password_gen)
  198.  
  199. case "$1" in
  200.     -n) flag=0 ;;
  201.     -s) flag=1 ;;
  202.      *) echo "Usage: ${0##*/} {-n|-s}" >&2 ;
  203.         echo "-n : install HTTPS/SSL proxy on NAT IPv4 Share VPS." >&2 ;
  204.         echo "-s : install HTTPS/SSL proxy on Dedicated IPv4 VPS." >&2 ;
  205.         exit 1
  206.             ;;
  207. esac
  208.  
  209. if [ $flag -eq 0 ] ; then
  210.     internal_ip=$(ifconfig venet0:0 \
  211.         | awk -F: '$2 ~ /[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+/{print $2}' \
  212.         | cut -d" " -f1)
  213.     port=${internal_ip##*.}20
  214. else
  215.     pick=($(for i in {18801..18999} ;do echo $i ;done))
  216.     count=${#pick[@]}
  217.     port=${pick[$((RANDOM%count-1))]}  
  218. fi
  219.  
  220. apt-get update && apt-get upgrade -y
  221. apt-get install openssl git build-essential libssl-dev -y
  222. 3proxy_install
  223. stunnel_install
  224.  
  225. if netstat -nlp | grep -iq '3proxy' && netstat -nlp | grep -iq 'stunnel4'
  226.     then
  227.         echo "HTTPS/SSL Proxy is running."
  228.         echo "Copy publickey.crt and import to browser."
  229.         echo ""
  230.         echo "Public IP: $myip"
  231.         echo "Port: $port"
  232.         echo "User: $username"
  233.         echo "Password: $pass"
  234.         echo ""
  235.         echo "Enjoy."
  236.     else
  237.         echo "Install HTTPS/SSL proxy failed." >&2
  238.         cleanup
  239. fi
  240. exit 0
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement