checkvpn.sh 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129
  1. #!/bin/bash
  2. #########################################################################
  3. # Check VPN connection including users #
  4. # Created by DoIT-PM #
  5. # ver 0.3 #
  6. #########################################################################
  7. #---------------------------- VARIABLES --------------------------------#
  8. BDA="23"
  9. TIM=$(date +%H)
  10. DAY=$(date +%d)
  11. DAB=$(date +%y%m%d)
  12. DAT=$(date +%b" "%_d)
  13. WEB="/opt/librenms/html/admin/vpn"
  14. test -f /var/log/messages && LOG="/var/log/messages"
  15. test -f /var/log/syslog && LOG="/var/log/syslog"
  16. REP="/tmp/vpn.rep"
  17. test -d $WEB || mkdir $WEB
  18. test -f $REP && rm -rf $REP
  19. #---------------------------- COLLECTION -------------------------------#
  20. collect(){
  21. echo -e "- \e[1;32mExtracting\e[0m data from [\e[1;33m$DAT\e[0m]"
  22. echo "-------- ---------------- ------------ ----------------" > $REP
  23. echo "TIME VPN-PROFILE USER-NAME IP-ADDRESS" >> $REP
  24. echo "-------- ---------------- ------------ ----------------" >> $REP
  25. cat $LOG | grep "$DAT" | grep "ASA-6-113039" | awk '{print $3,$8,$10,$12}' | sed 's/</ /g' | sed 's/>/ /g' >> $REP
  26. echo "-------- ---------------- ------------ ----------------" >> $REP
  27. }
  28. #----------------------------- BIG-DATA --------------------------------#
  29. bigdata(){
  30. if [ "$TIM" -eq "$BDA" ];
  31. then
  32. echo -e "- \e[1;32mAdding\e[0m day data to BigData"
  33. cat $REP | grep "^[0-9]" > $WEB/vpn.tmp
  34. sed -i "s/^/$DAB /" $WEB/vpn.tmp
  35. cat $WEB/vpn.tmp >> $WEB/vpn.rep
  36. echo "------ -------- ---------------- ------------ ----------------" > $WEB/vpn.clr
  37. echo "DATE TIME VPN-PROFILE USER-NAME IP-ADDRESS" >> $WEB/vpn.clr
  38. echo "------ -------- ---------------- ------------ ----------------" >> $WEB/vpn.clr
  39. cat $WEB/vpn.rep | awk '!seen[$0]++' | sort >> $WEB/vpn.clr
  40. echo "------ -------- ---------------- ------------ ----------------" >> $WEB/vpn.clr
  41. cat $WEB/vpn.clr | column -t > $WEB/vpn.txt
  42. else
  43. echo -e "- \e[1;31mNOT\e[0m right time for updating BigData"
  44. fi
  45. }
  46. #---------------------------- WEB-REPORT -------------------------------#
  47. webrep(){
  48. echo -e "- \e[1;32mBuilding\e[0m webreport [\e[1;35m$WEB/menu.html\e[0m]"
  49. cat > $WEB/menu.html << EOF
  50. <!DOCTYPE html>
  51. <html>
  52. <head>
  53. <style>
  54. table, td, th {
  55. border: 1px solid #ddd;
  56. text-align: center;
  57. vertical-align: middle;
  58. }
  59. table {
  60. border-collapse: collapse;
  61. width: 100%;
  62. }
  63. th, td {
  64. padding: 5px;
  65. }
  66. </style>
  67. </head>
  68. <title></title>
  69. <body>
  70. <table>
  71. <TD align="center">
  72. <form action="search.php" method="post">
  73. <input type="text" name="search" placeholder="Type username or ..." size="60">
  74. <input type="submit" name="submit" value="Search" />
  75. </form>
  76. </TD>
  77. </table>
  78. <table>
  79. EOF
  80. cat $WEB/vpn.clr | egrep -v "\---|ADDRESS" | awk '{print $1","$2,$3,$4,$5}' > $WEB/vpn.tab
  81. cat /tmp/vpn.rep | egrep -v "\---|ADDRESS" > /tmp/vpn.tab
  82. sed -i "s/^/$DAB,/" /tmp/vpn.tab
  83. cat /tmp/vpn.tab | egrep -v "\---|ADDRESS" >> $WEB/vpn.tab
  84. cat $WEB/vpn.tab | sed 's/,/ /g' | column -t > $WEB/vpn.src
  85. LST=$(cat $WEB/vpn.tab | awk '{print $1}')
  86. #NUMG=$(cat $WEB/vpn.tab | awk '{print $2}' | sort | uniq | wc -l)
  87. #NUMU=$(cat $WEB/vpn.tab | awk '{print $3}' | sort | uniq | wc -l)
  88. for i in $LST;
  89. do
  90. DATE=$(cat $WEB/vpn.tab | grep -w "$i" | sed 's/,/ /g' | awk '{print $1}')
  91. TIME=$(cat $WEB/vpn.tab | grep -w "$i" | sed 's/,/ /g' | awk '{print $2}')
  92. GROUP=$(cat $WEB/vpn.tab | grep -w "$i" | awk '{print $2}')
  93. USER=$(cat $WEB/vpn.tab | grep -w "$i" | awk '{print $3}')
  94. ADDRESS=$(cat $WEB/vpn.tab | grep -w "$i" | awk '{print $4}')
  95. cat >> $WEB/menu.html <<EOF
  96. <tr>
  97. <td width="20%">$DATE</td>
  98. <td width="20%">$TIME</td>
  99. <td width="20%">$GROUP</td>
  100. <td width="20%">$USER</td>
  101. <td width="20%">$ADDRESS</td>
  102. </tr>
  103. EOF
  104. done
  105. cat >> $WEB/menu.html <<\EOF
  106. </table>
  107. </body>
  108. </html>
  109. EOF
  110. #sed -i "s/NUMG/$NUMG/g" $WEB/menu.html
  111. #sed -i "s/NUMU/$NUMU/g" $WEB/menu.html
  112. }
  113. #------------------------------- CORE ----------------------------------#
  114. clear
  115. collect
  116. bigdata
  117. webrep
  118. cat $REP | column -t
  119. USR=$(cat $REP | awk '{print $3}' | egrep -v "USER|\---" | sort | uniq | wc -l)
  120. VPN=$(cat $REP | egrep -v "USER|\---" | sort | wc -l)
  121. echo -e "- Summary today VPN access: [\e[1;33m$VPN\e[0m]"
  122. echo -e "- Unique today VPN users: [\e[1;33m$USR\e[0m]"
  123. echo -e "- Report summary: [\e[1;35m$WEB/vpn.txt\e[0m]"