ocserv.sh 8.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178
  1. #!/bin/bash
  2. # Script by MoeClub.org
  3. [ $EUID -ne 0 ] && echo "Error:This script must be run as root!" && exit 1
  4. os_ver="$(dpkg --print-architecture)"
  5. [ -n "$os_ver" ] || exit 1
  6. deb_ver="$(cat /etc/issue |grep -io 'Ubuntu.*\|Debian.*' |sed -r 's/(.*)/\L\1/' |grep -o '[0-9.]*')"
  7. if [ "$deb_ver" == "7" ]; then
  8. ver='wheezy' && url='archive.debian.org' && urls='archive.debian.org'
  9. elif [ "$deb_ver" == "8" ]; then
  10. ver='jessie' && url='archive.debian.org' && urls='deb.debian.org'
  11. elif [ "$deb_ver" == "9" ]; then
  12. ver='stretch' && url='deb.debian.org' && urls='deb.debian.org'
  13. else
  14. exit 1
  15. fi
  16. if [ "$deb_ver" == "9" ]; then
  17. bash <(wget --no-check-certificate -qO- 'https://raw.githubusercontent.com/MoeClub/BBR/master/install.sh')
  18. wget --no-check-certificate -qO '/tmp/tcp_bbr.ko' 'https://moeclub.org/attachment/LinuxSoftware/bbr/tcp_bbr.ko'
  19. cp -rf /tmp/tcp_bbr.ko /lib/modules/4.14.153/kernel/net/ipv4
  20. sed -i '/^net\.core\.default_qdisc/d' /etc/sysctl.conf
  21. sed -i '/^net\.ipv4\.tcp_congestion_control/d' /etc/sysctl.conf
  22. while [ -z "$(sed -n '$p' /etc/sysctl.conf)" ]; do sed -i '$d' /etc/sysctl.conf; done
  23. sed -i '$a\net.core.default_qdisc=fq\nnet.ipv4.tcp_congestion_control=bbr\n\n' /etc/sysctl.conf
  24. fi
  25. echo "deb http://${url}/debian ${ver} main" >/etc/apt/sources.list
  26. echo "deb-src http://${url}/debian ${ver} main" >>/etc/apt/sources.list
  27. echo "deb http://${urls}/debian-security ${ver}/updates main" >>/etc/apt/sources.list
  28. echo "deb-src http://${urls}/debian-security ${ver}/updates main" >>/etc/apt/sources.list
  29. apt-get update
  30. DEBIAN_FRONTEND=noninteractive apt-get install -y unzip p7zip-full gawk curl dnsmasq nload dnsutils iftop netcat
  31. DEBIAN_FRONTEND=noninteractive apt-get install -y dbus init-system-helpers libc6 libev4 libgssapi-krb5-2 libhttp-parser2.1 liblz4-1 libnl-3-200 libnl-route-3-200 liboath0 libopts25 libpcl1 libprotobuf-c1 libsystemd0 libtalloc2 gnutls-bin ssl-cert
  32. DEBIAN_FRONTEND=noninteractive apt-get install -y ethtool
  33. if [ "$deb_ver" != "9" ]; then
  34. DEBIAN_FRONTEND=noninteractive apt-get install -y libgnutls-deb0-28 libnettle4
  35. else
  36. DEBIAN_FRONTEND=noninteractive apt-get install -y ocserv
  37. DEBIAN_FRONTEND=noninteractive apt-get --fix-broken install
  38. fi
  39. mkdir -p /tmp
  40. ifname=`cat /proc/net/dev |grep ":" |cut -d":" -f1| sed "s/[[:space:]]//g" |grep -v '^lo\|^sit\|^stf\|^gif\|^dummy\|^vmnet\|^vir\|^gre\|^ipip\|^ppp\|^bond\|^tun\|^tap\|^ip6gre\|^ip6tnl\|^teql\|^ocserv' |head -n1`
  41. [ -z "$ifname" ] && echo "Not found interface." && exit 1
  42. PublicIP="$(wget --no-check-certificate -qO- http://checkip.amazonaws.com)"
  43. command -v iftop >>/dev/null 2>&1
  44. [[ $? -eq '0' ]] && {
  45. cat >/root/.iftoprc<<EOF
  46. interface: ${ifname}
  47. dns-resolution: no
  48. port-resolution: no
  49. show-bars: yes
  50. port-display: on
  51. link-local: no
  52. use-bytes: yes
  53. sort: 2s
  54. line-display: one-line-sent
  55. show-totals: yes
  56. log-scale: yes
  57. EOF
  58. }
  59. [[ -f /etc/dnsmasq.conf ]] && {
  60. cat >/etc/dnsmasq.conf<<EOF
  61. except-interface=${ifname}
  62. conf-dir=/etc/dnsmasq.d,*.conf
  63. dhcp-range=192.168.8.2,192.168.8.254,255.255.255.0,24h
  64. dhcp-option-force=option:router,192.168.8.1
  65. dhcp-option-force=option:dns-server,192.168.8.1
  66. dhcp-option-force=option:netbios-ns,192.168.8.1
  67. listen-address=127.0.0.1,192.168.8.1
  68. domain-needed
  69. bind-dynamic
  70. all-servers
  71. bogus-priv
  72. no-negcache
  73. no-resolv
  74. no-hosts
  75. no-poll
  76. cache-size=10000
  77. server=208.67.220.220#5353
  78. EOF
  79. }
  80. if [ "$deb_ver" != "9" ]; then
  81. wget --no-check-certificate -qO "/tmp/libradcli4_1.2.6-3~bpo8+1_${os_ver}.deb" "https://moeclub.org/attachment/DebianPackage/ocserv/libradcli4_1.2.6-3~bpo8+1_${os_ver}.deb"
  82. wget --no-check-certificate -qO "/tmp/ocserv_0.11.6-1~bpo8+2_${os_ver}.deb" "https://moeclub.org/attachment/DebianPackage/ocserv/ocserv_0.11.6-1~bpo8+2_${os_ver}.deb"
  83. dpkg -i /tmp/libradcli4_*.deb
  84. dpkg -i /tmp/ocserv_*.deb
  85. fi
  86. [ -e /etc/ocserv ] && rm -rf /etc/ocserv
  87. mkdir -p /etc/ocserv
  88. mkdir -p /etc/ocserv/group
  89. mkdir -p /etc/ocserv/template
  90. wget --no-check-certificate -qO "/etc/ocserv/group/Default" "https://raw.githubusercontent.com/MoeClub/Note/master/AnyConnect/ocserv/group/Default"
  91. wget --no-check-certificate -qO "/etc/ocserv/group/NoRoute" "https://raw.githubusercontent.com/MoeClub/Note/master/AnyConnect/ocserv/group/NoRoute"
  92. wget --no-check-certificate -qO "/etc/ocserv/group/Route" "https://raw.githubusercontent.com/MoeClub/Note/master/AnyConnect/ocserv/group/Route"
  93. wget --no-check-certificate -qO "/etc//ocserv/template/ca.tmpl" "https://raw.githubusercontent.com/MoeClub/Note/master/AnyConnect/ocserv/template/ca.tmpl"
  94. wget --no-check-certificate -qO "/etc/ocserv/template/user.tmpl" "https://raw.githubusercontent.com/MoeClub/Note/master/AnyConnect/ocserv/template/user.tmpl"
  95. wget --no-check-certificate -qO "/etc/ocserv/template/client.sh" "https://raw.githubusercontent.com/MoeClub/Note/master/AnyConnect/ocserv/template/client.sh"
  96. wget --no-check-certificate -qO "/etc/ocserv/iptables.rules" "https://raw.githubusercontent.com/MoeClub/Note/master/AnyConnect/ocserv/iptables.rules"
  97. wget --no-check-certificate -qO "/etc/ocserv/ocserv.conf" "https://raw.githubusercontent.com/MoeClub/Note/master/AnyConnect/ocserv/ocserv.conf"
  98. wget --no-check-certificate -qO "/etc/ocserv/ocserv.d" "https://raw.githubusercontent.com/MoeClub/Note/master/AnyConnect/ocserv/ocserv.d"
  99. wget --no-check-certificate -qO "/etc/ocserv/profile.xml" "https://raw.githubusercontent.com/MoeClub/Note/master/AnyConnect/ocserv/profile.xml"
  100. # Diffie-Hellman
  101. certtool --generate-dh-params --outfile /etc/ocserv/dh.pem
  102. # CA
  103. openssl genrsa -out /etc/ocserv/template/ca-key.pem 2048
  104. certtool --generate-self-signed --hash SHA256 --load-privkey /etc/ocserv/template/ca-key.pem --template /etc/ocserv/template/ca.tmpl --outfile /etc/ocserv/template/ca-cert.pem
  105. cp -rf /etc/ocserv/template/ca-cert.pem /etc/ocserv/ca.cert.pem
  106. # Server
  107. # server cert file: /etc/ocserv/server.cert.pem
  108. # server cert key file: /etc/ocserv/server.key.pem
  109. # Default User
  110. ## openssl passwd Moeclub
  111. echo "MoeClub:Default:zeGEF25ZQQfDo" >/etc/ocserv/ocpasswd
  112. chown -R root:root /etc/ocserv
  113. chmod -R a+x /etc/ocserv
  114. [[ -f /etc/crontab ]] && [[ -f /etc/ocserv/iptables.rules ]] && {
  115. sed -i '/\/etc\/ocserv/d' /etc/crontab
  116. while [ -z "$(sed -n '$p' /etc/crontab)" ]; do sed -i '$d' /etc/crontab; done
  117. sed -i "\$a\@reboot root bash /etc/ocserv/iptables.rules\n" /etc/crontab
  118. sed -i "\$a\@reboot root bash /etc/ocserv/ocserv.d >>/dev/null 2>&1 &\n\n\n" /etc/crontab
  119. }
  120. [[ -f /etc/init.d/ocserv ]] && {
  121. sed -i 's/^#[[:space:]]*Required-Start:.*/# Required-Start:\t\$all/' /etc/init.d/ocserv
  122. sed -i 's/^#[[:space:]]*Required-Stop:.*/# Required-Stop:\t\$all/' /etc/init.d/ocserv
  123. }
  124. [[ -f /etc/ocserv/group/NoRoute ]] && sed -i 's/^no-route = .*\/255.255.255.255/no-route = '${PublicIP}'\/255.255.255.255/' /etc/ocserv/group/NoRoute
  125. find /lib/systemd/system -name 'ocserv*' -delete
  126. # Sysctl
  127. sed -i '/^net\.ipv4\.ip_forward/d' /etc/sysctl.conf
  128. while [ -z "$(sed -n '$p' /etc/sysctl.conf)" ]; do sed -i '$d' /etc/sysctl.conf; done
  129. sed -i '$a\net.ipv4.ip_forward = 1\n\n' /etc/sysctl.conf
  130. # Limit
  131. if [[ -f /etc/security/limits.conf ]]; then
  132. LIMIT='262144'
  133. sed -i '/^\(\*\|root\).*\(hard\|soft\).*\(memlock\|nofile\)/d' /etc/security/limits.conf
  134. while [ -z "$(sed -n '$p' /etc/security/limits.conf)" ]; do sed -i '$d' /etc/security/limits.conf; done
  135. echo -ne "*\thard\tnofile\t${LIMIT}\n*\tsoft\tnofile\t${LIMIT}\nroot\thard\tnofile\t${LIMIT}\nroot\tsoft\tnofile\t${LIMIT}\n" >>/etc/security/limits.conf
  136. echo -ne "*\thard\tmemlock\t${LIMIT}\n*\tsoft\tmemlock\t${LIMIT}\nroot\thard\tmemlock\t${LIMIT}\nroot\tsoft\tmemlock\t${LIMIT}\n\n\n" >>/etc/security/limits.conf
  137. fi
  138. # SSH
  139. #[ -f /etc/ssh/sshd_config ] && sed -i "s/^#\?Port .*/Port 9527/g" /etc/ssh/sshd_config;
  140. [ -f /etc/ssh/sshd_config ] && sed -i "s/^#\?PermitRootLogin.*/PermitRootLogin yes/g" /etc/ssh/sshd_config;
  141. [ -f /etc/ssh/sshd_config ] && sed -i "s/^#\?PasswordAuthentication.*/PasswordAuthentication yes/g" /etc/ssh/sshd_config;
  142. # SSH Ciphers
  143. [ -f /etc/ssh/sshd_config ] && sed -i "/^KexAlgorithms/d" /etc/ssh/sshd_config;
  144. echo "KexAlgorithms [email protected],ecdh-sha2-nistp521,ecdh-sha2-nistp384,ecdh-sha2-nistp256,diffie-hellman-group-exchange-sha256" >>/etc/ssh/sshd_config;
  145. [ -f /etc/ssh/sshd_config ] && sed -i "/^Ciphers/d" /etc/ssh/sshd_config;
  146. echo "Ciphers [email protected],[email protected]" >>/etc/ssh/sshd_config;
  147. [ -f /etc/ssh/sshd_config ] && sed -i "/^MACs/d" /etc/ssh/sshd_config;
  148. echo "MACs [email protected],[email protected],[email protected],hmac-sha2-512,hmac-sha2-256,[email protected]" >>/etc/ssh/sshd_config;
  149. # Timezone
  150. cp -f /usr/share/zoneinfo/PRC /etc/localtime
  151. echo "Asia/Shanghai" >/etc/timezone
  152. read -n 1 -p "Press <ENTER> to reboot..."
  153. ## Rebot Now
  154. reboot