swolf

gc_unifi_dynamic_dns_update.sh

Sep 23rd, 2018
196
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Bash 3.74 KB | None | 0 0
  1. #!/bin/bash
  2. #set -x
  3. unset DYNHOSTS
  4. unset DYNIP
  5. unset HOST_NAME
  6.  
  7. ##Add "*/5 * * * * /usr/local/bin/dyn_dns_update.sh > /dev/null 2>&1" to run every 5 mins
  8. ##Add your dynamic host separated by a space##
  9. DYNHOSTS="dynamic.host.one dynamic.host.two"
  10.  
  11. ##############################
  12. ##Don't Edit Below this line##
  13. ##############################
  14.  
  15. ## only root can run this script
  16. if [ "$(id -u)" != "0" ]; then
  17.    echo "Error: This script must be run as root -- Exiting Script"
  18.    exit 1
  19. fi
  20.  
  21. # Install DNS Utils #
  22. if ! dpkg -l | grep dnsutils >/dev/null 2>&1 ; then
  23.     apt-get update -qq
  24.     apt-get install dnsutils -y -qq
  25. fi
  26.  
  27. # Add chain(s) to INPUT/OUTPUT filter if they do not exist
  28. if ! /sbin/iptables -C INPUT -i lo -j ACCEPT >/dev/null 2>&1 ; then
  29.     /sbin/iptables -A INPUT -i lo -j ACCEPT
  30. fi
  31.  
  32. if ! /sbin/iptables -C INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT >/dev/null 2>&1 ; then
  33.     /sbin/iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
  34. fi
  35.  
  36. if ! /sbin/iptables -C INPUT -p tcp --dport 22 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT >/dev/null 2>&1 ; then
  37.     /sbin/iptables -A INPUT -p tcp --dport 22 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
  38. fi
  39.  
  40. if ! /sbin/iptables -C INPUT -s 10.128.0.0/9 -j ACCEPT >/dev/null 2>&1 ; then
  41.     /sbin/iptables -A INPUT -s 10.128.0.0/9 -j ACCEPT
  42. fi
  43.    
  44.  
  45. # Set default chain policies
  46. if [ "`/sbin/iptables -L | grep OUTPUT |  awk '{ print $4 }' | sed 's/.$//'`" != "ACCEPT" ]  ; then
  47.     /sbin/iptables -P OUTPUT ACCEPT
  48. fi
  49. if [ "`/sbin/iptables -L | grep FORWARD |  awk '{ print $4 }' | sed 's/.$//'`" != "DROP" ]  ; then
  50.     /sbin/iptables -P FORWARD DROP
  51. fi
  52. if [ "`/sbin/iptables -L | grep INPUT |  awk '{ print $4 }' | sed 's/.$//'`" != "DROP" ]  ; then
  53.     /sbin/iptables -P INPUT DROP
  54. fi
  55.  
  56. # Update Dynamic Host
  57. for HOST_NAME in $DYNHOSTS; do
  58.         DYNIP=$(host $HOST_NAME | grep -iE "[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+" |cut -f4 -d' '|head -n 1)
  59.  
  60.         # Exit if invalid IP address is returned
  61.         case $DYNIP in
  62.                 0.0.0.0 )
  63.                         exit 1 ;;
  64.                 255.255.255.255 )
  65.                         exit 1 ;;
  66.         esac
  67.  
  68.         # Exit if IP address not in proper format
  69.         if ! [[ $DYNIP =~               (([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5]) ]]; then
  70.                 exit 1
  71.         fi
  72.  
  73.         # If chain for remote doesn't exist, create it
  74.         if ! /sbin/iptables -L $HOST_NAME -n >/dev/null 2>&1 ; then
  75.             /sbin/iptables -N $HOST_NAME >/dev/null 2>&1
  76.         fi
  77.        
  78.         # Check IP address to see if the chain matches first; skip rest of script if update is not needed
  79.         if ! /sbin/iptables -C $HOST_NAME -s $DYNIP -p tcp --dport 8080 -j ACCEPT >/dev/null 2>&1 ; then
  80.  
  81.                 # Flush old rules
  82.                 /sbin/iptables -F $HOST_NAME >/dev/null 2>&1
  83.  
  84.                 #Add new rule
  85.                 /sbin/iptables -I $HOST_NAME -s $DYNIP -p tcp --dport 8443 -j ACCEPT
  86.                 /sbin/iptables -I $HOST_NAME -s $DYNIP -p tcp --dport 8080 -j ACCEPT
  87.                 /sbin/iptables -I $HOST_NAME -s $DYNIP -p tcp --dport 8880 -j ACCEPT
  88.                 /sbin/iptables -I $HOST_NAME -s $DYNIP -p tcp --dport 8843 -j ACCEPT
  89.                 /sbin/iptables -I $HOST_NAME -s $DYNIP -p tcp --dport 6789 -j ACCEPT
  90.                 /sbin/iptables -I $HOST_NAME -s $DYNIP -p tcp --dport 443 -j ACCEPT
  91.                 /sbin/iptables -I $HOST_NAME -s $DYNIP -p tcp --dport 80 -j ACCEPT
  92.                 /sbin/iptables -I $HOST_NAME -s $DYNIP -p udp --dport 3478 -j ACCEPT
  93.  
  94.                
  95.         fi
  96.        
  97.         # Add chain to INPUT filter if it doesn't exist
  98.         if ! /sbin/iptables -C INPUT -t filter -j $HOST_NAME >/dev/null 2>&1 ; then
  99.              /sbin/iptables -A INPUT -t filter -j $HOST_NAME
  100.         fi
  101.  
  102. done
Add Comment
Please, Sign In to add comment