Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/bin/bash
- #set -x
- ##Add your dynamic host separated by a space##
- DYNHOSTS="dynamic.host.number1 dynamic.host.number2"
- ##############################
- ##Don't Edit Below this line##
- ##############################
- unset DYNHOSTS
- unset DYNIP
- unset HOST_NAME
- ## only root can run this script
- if [ "$(id -u)" != "0" ]; then
- echo "Error: This script must be run as root -- Exiting Script"
- exit 1
- fi
- # Install DNS Utils #
- if ! dpkg -l | grep dnsutils >/dev/null 2>&1 ; then
- apt-get update
- apt-get install dnsutils -y
- fi
- # Add chain(s) to INPUT/OUTPUT filter if they do not exist
- if ! /sbin/iptables -C INPUT -p tcp -m multiport --dports 8443 -j f2b-unifi-controller >/dev/null 2>&1 ; then
- /sbin/iptables -A INPUT -p tcp -m multiport --dports 8443 -j f2b-unifi-controller
- fi
- if ! /sbin/iptables -C INPUT -p tcp -m multiport --dports 22 -j f2b-sshd >/dev/null 2>&1 ; then
- /sbin/iptables -A INPUT -p tcp -m multiport --dports 22 -j f2b-sshd
- fi
- if ! /sbin/iptables -C f2b-sshd -j RETURN >/dev/null 2>&1 ; then
- /sbin/iptables -A f2b-sshd -j RETURN
- fi
- if ! /sbin/iptables -C f2b-unifi-controller -j RETURN >/dev/null 2>&1 ; then
- /sbin/iptables -A f2b-unifi-controller -j RETURN
- fi
- if ! /sbin/iptables -C INPUT -i lo -j ACCEPT >/dev/null 2>&1 ; then
- /sbin/iptables -A INPUT -i lo -j ACCEPT
- fi
- if ! iptables -C OUTPUT -o lo -j ACCEPT >/dev/null 2>&1 ; then
- /sbin/iptables -A OUTPUT -o lo -j ACCEPT
- fi
- if ! /sbin/iptables -C INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT >/dev/null 2>&1 ; then
- /sbin/iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
- fi
- # Set default chain policies
- if [ "`sudo iptables -L | grep OUTPUT | awk '{ print $4 }' | sed 's/.$//'`" != "ACCEPT" ] ; then
- /sbin/iptables -P OUTPUT ACCEPT
- fi
- if [ "`sudo iptables -L | grep FORWARD | awk '{ print $4 }' | sed 's/.$//'`" != "DROP" ] ; then
- /sbin/iptables -P FORWARD DROP
- fi
- if [ "`sudo iptables -L | grep INPUT | awk '{ print $4 }' | sed 's/.$//'`" != "DROP" ] ; then
- /sbin/iptables -P INPUT DROP
- fi
- # Update Dynamic Host
- for HOST_NAME in $DYNHOSTS; do
- DYNIP=$(host $HOST_NAME | grep -iE "[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+" |cut -f4 -d' '|head -n 1)
- # Exit if invalid IP address is returned
- case $DYNIP in
- 0.0.0.0 )
- exit 1 ;;
- 255.255.255.255 )
- exit 1 ;;
- esac
- # Exit if IP address not in proper format
- 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
- exit 1
- fi
- # If chain for remote doesn't exist, create it
- if ! /sbin/iptables -L $HOST_NAME -n >/dev/null 2>&1 ; then
- /sbin/iptables -N $HOST_NAME >/dev/null 2>&1
- fi
- # Check IP address to see if the chain matches first; skip rest of script if update is not needed
- if ! /sbin/iptables -C $HOST_NAME -s $DYNIP -j ACCEPT >/dev/null 2>&1 ; then
- # Flush old rules
- /sbin/iptables -F $HOST_NAME >/dev/null 2>&1
- #Add new rule
- /sbin/iptables -I $HOST_NAME -s $DYNIP -j ACCEPT
- # Add chain to INPUT filter if it doesn't exist
- if ! /sbin/iptables -C INPUT -t filter -j $HOST_NAME >/dev/null 2>&1 ; then
- /sbin/iptables -t filter -I INPUT -j $HOST_NAME
- fi
- fi
- done
Advertisement
Add Comment
Please, Sign In to add comment