ctl.sh 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101
  1. #!/bin/bash
  2. ARG=`echo "$1" |sed 's/^\s$//' |sed 's/[a-z]/\u&/g'`
  3. ConfigPath="$(dirname `readlink -f "$0"`)"
  4. Config="${ConfigPath}/ocserv.conf"
  5. [ -f "$Config" ] || exit 1
  6. TCP=`cat "${Config}" |grep '^#\?tcp-port' |cut -d"=" -f2 |grep -o '[0-9]*' |head -n1`
  7. UDP=`cat "${Config}" |grep '^#\?udp-port' |cut -d"=" -f2 |grep -o '[0-9]*' |head -n1`
  8. NET=`cat "${Config}" |grep '^ipv4-network' |cut -d"=" -f2 |grep -o '[0-9\.]*' |head -n1`
  9. function GetAddress(){
  10. echo `wget --no-check-certificate --timeout=3 --no-cache -4 -qO- "http://checkip.amazonaws.com" |grep -o '[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}' |head -n1`
  11. }
  12. function IPTABLES(){
  13. RULE=`echo "$1" |sed 's/^\s*//' |sed 's/\s*$//'`
  14. echo "$RULE" |grep -q "^iptables "
  15. [ $? -eq 0 ] || return 1
  16. CHECK=`echo "$RULE" |sed 's/-I\|-A/-C/'`
  17. ${CHECK} >>/dev/null 2>&1
  18. [ $? -eq 1 ] && ${RULE}
  19. return 0
  20. }
  21. function GenPasswd(){
  22. echo -ne "\nUserName\tPassword\tGROUP\n\n"
  23. RawPasswd="${1:-MoeClub}"
  24. if [ `echo "${RawPasswd}" |grep -o ':' |grep -c ':'` == "2" ]; then
  25. echo "${RawPasswd}" |grep -q '^-' && echo -n >${ConfigPath}/ocpasswd
  26. User=`echo "${RawPasswd}"| cut -d':' -f1 |sed 's/[[:space:]]//g' |tr -d '-'`
  27. UserPasswd=`echo "${RawPasswd}"| cut -d':' -f2 |sed 's/[[:space:]]//g'`
  28. UserGroup=`echo "${RawPasswd}"| cut -d':' -f3 |sed 's/[[:space:]]//g'`
  29. [ -n "$User" ] && [ -n "$UserPasswd" ] && [ -n "$UserGroup" ] || { echo -ne "ERROR: Invalid ARG\n" && return 1; }
  30. [ -f "${ConfigPath}/group/${UserGroup}" ] || { echo -ne "ERROR: Invalid Group\n" && return 1; }
  31. SaltPasswd=`openssl passwd ${UserPasswd}`
  32. echo -ne "${User}\t\t${UserPasswd}\t\t${UserGroup}\n"
  33. echo -ne "${User}:${UserGroup}:${SaltPasswd}\n" >>${ConfigPath}/ocpasswd
  34. else
  35. echo -n >${ConfigPath}/ocpasswd
  36. UserPasswd=`openssl passwd ${RawPasswd}`
  37. for GroupName in `find "${ConfigPath}/group" -type f`
  38. do
  39. [ -n "$GroupName" ] || continue
  40. User=`basename "$GroupName"`
  41. [ -n "$User" ] || continue
  42. echo -ne "${User}\t\t${RawPasswd}\t\t${User}\n"
  43. echo -ne "${User}:${User}:${UserPasswd}\n" >>${ConfigPath}/ocpasswd
  44. done
  45. fi
  46. chmod 755 ${ConfigPath}/ocpasswd
  47. }
  48. if [ "$ARG" == "CHECK" ]; then
  49. TCPHEX=`printf '%04X\n' "${TCP}"`
  50. cat /proc/net/tcp |grep -q "^\s*[0-9]\+:\s*[0-9A-Za-z]\+:${TCPHEX}\s*[0-9A-Za-z]\+:[0-9A-Za-z]\+\s*0A\s*"
  51. [ "$?" -eq 0 ] && exit 0 || exit 1
  52. elif [ "$ARG" == "INIT" ]; then
  53. Address="$(GetAddress)"
  54. [ -n "$Address" ] || Address="0.0.0.0"
  55. bash "${ConfigPath}/template/client.sh" -i "$Address"
  56. [ "$?" -eq 0 ] || exit 1
  57. chown -R root:root "${ConfigPath}"
  58. chmod -R 755 "${ConfigPath}"
  59. if [ -d "/etc/systemd/system" ] && [ -f "${ConfigPath}/ocserv.service" ]; then
  60. systemctl stop ocserv.service >/dev/null 2>&1
  61. systemctl disable ocserv.service >/dev/null 2>&1
  62. cp -rf "${ConfigPath}/ocserv.service" "/etc/systemd/system/ocserv.service"
  63. chmod 755 "/etc/systemd/system/ocserv.service"
  64. systemctl daemon-reload >/dev/null 2>&1
  65. systemctl enable ocserv.service >/dev/null 2>&1
  66. systemctl start ocserv.service >/dev/null 2>&1
  67. fi
  68. GenPasswd;
  69. echo -e "\nPassword File: ${ConfigPath}/ocpasswd"
  70. echo -e "\nSet Password Command:\n\tbash ${ConfigPath}/ctl.sh passwd <PASSWORD>\n"
  71. echo -e "\nInitialization Complete! \n"
  72. exit 0
  73. elif [ "$ARG" == "PASSWD" ]; then
  74. [ -n "$2" ] && GenPasswd "$2" && exit 0 || exit 1
  75. fi
  76. Ether=`ip route show default |head -n1 |sed 's/.*dev\s*\([0-9a-zA-Z]\+\).*/\1/g'`
  77. [ -n "$Ether" ] || exit 1
  78. [ -f "${ConfigPath}/group/NoRoute" ] && Address="$(GetAddress)" && [ -n "$Address" ] && sed -i "s/^no-route\s*=\s*.*\/255.255.255.255/no-route = ${Address}\/255.255.255.255/" "${ConfigPath}/group/NoRoute"
  79. IPTABLES "iptables -t nat -A POSTROUTING -o ${Ether} -j MASQUERADE"
  80. [ -n "$NET" ] && IPTABLES "iptables -I FORWARD -d ${NET}/24 -j ACCEPT"
  81. [ -n "$NET" ] && IPTABLES "iptables -I FORWARD -s ${NET}/24 -j ACCEPT"
  82. IPTABLES "iptables -I FORWARD -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu"
  83. [ -n "$NET" ] && IPTABLES "iptables -I OUTPUT -d ${NET}/24 -j ACCEPT"
  84. [ -n "$NET" ] && IPTABLES "iptables -I INPUT -s ${NET}/24 -j ACCEPT"
  85. [ -n "$TCP" ] && [ "$TCP" -gt "0" ] && IPTABLES "iptables -I INPUT -p tcp --dport ${TCP} -j ACCEPT"
  86. [ -n "$UDP" ] && [ "$UDP" -gt "0" ] && IPTABLES "iptables -I INPUT -p udp --dport ${UDP} -j ACCEPT"
  87. [ `cat /proc/sys/net/ipv4/ip_forward` != "1" ] && echo "1" >/proc/sys/net/ipv4/ip_forward
  88. exit 0