#!/bin/bash ######################## ## Defining Variables ## ######################## # Path to IPTABLES executable IPT="/sbin/iptables" # Interface Card Connected to Local Network NETWORK="eth0" # Interface Card Connected to Internet INTERNET="eth1" # Loopback Interface LOOPBACK="lo" # IP Addreses of Server SERVER_IP="10.10.1.2" # Local Network IP Range / Subnet LOC_IP="10.0.0.0/8" # INTERNAL Broadcast LOC_BCAST=10.255.255.255 # IP On The Internet Interface NET_IP="192.168.1.45" # SSH Port SSH_PORT="22" # FTP on the Network FTP_IP="10.10.1.2" # FTP Port FTP_PORT="21" # Primiry DNS Server P_DNS="203.135.0.70" # Alternate DNS Server A_DNS="203.135.1.117" # PATH To Directory Containing PORT and MAC Files DIR="/files" # PATH to FILE Containing List of PORTs PORT="/files/port" # Path to File Containing List of MAC Addresses MAC="/files/macs" ######################### ### Flushing IPTABLES ### ######################### $IPT -F $IPT -X $IPT -t nat -F $IPT -t nat -X $IPT -t mangle -F $IPT -t mangle -X ######################### ### Loading Modules ### ######################### modprobe ip_tables modprobe iptable_nat modprobe ip_conntrack modprobe ip_conntrack_ftp modprobe ip_nat_ftp modprobe ipt_LOG modprobe ipt_MARK modprobe ipt_MASQUERADE modprobe ipt_REDIRECT modprobe ipt_REJECT modprobe ipt_TOS modprobe ipt_limit modprobe ipt_mac modprobe ipt_mark modprobe ipt_multiport modprobe ipt_state modprobe ipt_tos modprobe iptable_mangle ######################################## ### Setting Default Policies to Drop ### ######################################## $IPT -P INPUT DROP $IPT -P FORWARD ACCEPT $IPT -P OUTPUT ACCEPT echo Default Policies Set To Drop #################################### ### Setting Needed PROC Settings ### #################################### #echo 1 > /proc/sys/net/ipv4/ip_forward #################################### ### MAC & IP Addresses Filtering ### #################################### rm -f $DIR/mac.addresses cat $MAC | awk '{ print $1 }' >> $DIR/mac1 cat $DIR/mac1 | sed "s/#.*//" > $DIR/mac2 cat $DIR/mac2 | sed "/^ /d;/^$/d;" > $DIR/mac.addresses rm -f $DIR/mac1 rm -f $DIR/mac2 rm -f $DIR/port.lst cat $PORT | awk '{ print $1 }' >> $DIR/port1 cat $DIR/port1 | sed "s/#.*//" > $DIR/port2 cat $DIR/port2 | sed "/^ /d;/^$/d;" > $DIR/port.lst rm -f $DIR/port1 rm -f $DIR/port2 ############################## ### Setting IPTABLES Rules ### ############################## for MACS in `cat $DIR/mac.addresses` do MACSS=`echo $MACS |cut -d"|" -f1` IP=`echo $MACS |cut -d"|" -f2` for PORTS in `cat $DIR/port.lst` do $IPT -A INPUT -s $IP -p tcp --dport $PORTS -m mac --mac-source $MACSS -j ACCEPT $IPT -A INPUT -s $IP -p udp --dport $PORTS -m mac --mac-source $MACSS -j ACCEPT $IPT -A FORWARD -s $IP -p tcp --dport $PORTS -m mac --mac-source $MACSS -j ACCEPT $IPT -A FORWARD -s $IP -p udp --dport $PORTS -m mac --mac-source $MACSS -j ACCEPT done done echo ----------------------------------------------- echo ---- MAC and IP Address Filtering Complete ---- echo ----------------------------------------------- ############################### ### Rules for ICMP Protocol ### ############################### $IPT -A INPUT -i $NETWORK -s $LOC_IP -d $P_DNS -p icmp -j ACCEPT $IPT -A INPUT -i $NETWORK -s $LOC_IP -d $A_DNS -p icmp -j ACCEPT $IPT -A INPUT -i $NETWORK -s $LOC_IP -d $SERVER_IP -p icmp --icmp-type echo-request -j ACCEPT $IPT -A INPUT -i $NETWORK -s $LOC_IP -d ! $LOC_IP -p icmp --icmp-type echo-request -j DROP $IPT -A INPUT -i $NETWORK -d $SERVER_IP -p icmp --icmp-type echo-request -j REJECT --reject-with icmp-host-unreachable $IPT -A INPUT -p icmp -s $LOC_IP -d $LOC_BCAST -j DROP #################################### ### Droping All Packets ### #################################### $IPT -A FORWARD -i $NETWORK -j DROP $IPT -A INPUT -i $NETWORK -j DROP ######################################### ### MAC Addresses Filtering Completed ### ######################################### $IPT -t nat -A PREROUTING -i $INTERNET -p tcp --dport 20:21 -j DNAT --to-destination $FTP_IP:$FTP_PORT ##################### ### Rules for FTP ### ##################### $IPT -A INPUT -i $NETWORK -s 0.0.0.0 -d 0.0.0.0 -p tcp --dport 20:21 -j ACCEPT $IPT -A INPUT -i $NETWORK -s 0.0.0.0 -d 0.0.0.0 -p tcp --dport 1024:65535 -j ACCEPT $IPT -A INPUT -i $NETWORK -p tcp -s 0/0 -d $LOC_IP --dport 20:21 -m state --state NEW,ESTABLISHED -j ACCEPT $IPT -A INPUT -i $NETWORK -p tcp -s 0/0 -d $LOC_IP --dport 20:21 -m state --state ESTABLISHED,RELATED -j ACCEPT $IPT -A INPUT -i $NETWORK -p tcp -s 0/0 -d $LOC_IP --dport 1024:65535 -m state --state NEW,ESTABLISHED -j ACCEPT $IPT -A INPUT -i $NETWORK -p tcp -s 0/0 -d $LOC_IP --dport 1024:65535 -m state --state ESTABLISHED,RELATED -j ACCEPT $IPT -A INPUT -i $NETWORK -s 0.0.0.0 -d $LOC_IP -m state --state ESTABLISHED,RELATED -j ACCEPT $IPT -t nat -A POSTROUTING -o $INTERNET -p tcp --dport 21 -j MASQUERADE $IPT -t nat -A POSTROUTING -o $INTERNET -p tcp --dport 20 -j MASQUERADE ######################### ### SSH From Internet ### ######################### $IPT -A INPUT -i $INTERNET -p tcp --dport $SSH_PORT -j ACCEPT $IPT -A INPUT -i $INTERNET -p udp --dport $SSH_PORT -j ACCEPT ######################################################## ### Redirecting HTTP Traffic to Squid Proxy Server. ### ######################################################## $IPT -t nat -A PREROUTING -i $NETWORK -s $LOC_IP -p tcp --dport 80 -j REDIRECT --to-port 8080 $IPT -t nat -A PREROUTING -i $NETWORK -s $LOC_IP -p udp --dport 80 -j REDIRECT --to-port 8080 ################################################# ### MASQUERADE All packets that are Marked. ### ################################################# $IPT -t nat -A POSTROUTING -p all -s $LOC_IP -o $INTERNET -j MASQUERADE ############################################### ### No Restriction for Loopback Interface ### ############################################### $IPT -A INPUT -i $LOOPBACK -j ACCEPT $IPT -A OUTPUT -o $LOOPBACK -j ACCEPT ######################################################################## ### Droping Packets coming from internet claming to be from Network ### ######################################################################## $IPT -A INPUT -i $INTERNET -s 172.16.0.8/16 -d 172.16.0.1/16 -p tcp --dport 10000 -j ACCEPT $IPT -A INPUT -i $INTERNET -s 172.16.0.8/16 -d 172.16.0.1/16 -p udp --dport 10000 -j ACCEPT $IPT -A INPUT -i $INTERNET -s $LOC_IP -j DROP $IPT -A INPUT -i $INTERNET -d 127.0.0.0/8 -j DROP ####################################################### ### Accepting Extablished and Related Connections ### ####################################################### $IPT -I INPUT -i $NETWORK -p tcp -m state --state ESTABLISHED,RELATED -j ACCEPT $IPT -A OUTPUT -o $NETWORK -p tcp -m state --state RELATED,ESTABLISHED -j ACCEPT $IPT -A INPUT -i $INTERNET -m state --state RELATED,ESTABLISHED -j ACCEPT $IPT -A OUTPUT -o $INTERNET -m state --state NEW,RELATED,ESTABLISHED -j ACCEPT ############################################ ### Droping Invalid and Unknown Packets ### ############################################ $IPT -A FORWARD -m state --state INVALID -j DROP $IPT -A INPUT -i $INTERNET -m state --state INVALID -j DROP $IPT -A INPUT -i $INTERNET -p tcp --tcp-flags ALL NONE -j DROP $IPT -A INPUT -i $INTERNET -p tcp --tcp-flags SYN,FIN SYN,FIN -j DROP $IPT -A INPUT -i $INTERNET -p tcp --tcp-flags SYN,RST SYN,RST -j DROP $IPT -A INPUT -i $INTERNET -p tcp --tcp-flags FIN,RST FIN,RST -j DROP $IPT -A INPUT -i $INTERNET -p tcp --tcp-flags ACK,FIN FIN -j DROP $IPT -A INPUT -i $INTERNET -p tcp --tcp-flags ACK,PSH PSH -j DROP $IPT -A INPUT -i $INTERNET -p tcp --tcp-flags ACK,URG URG -j DROP $IPT -t nat -A PREROUTING -i $NETWORK -p tcp --syn -s $LOC_IP --dport 80 -j DROP echo echo ----------------------------------------------- echo ---------- Firewall Up And Running ------------ echo ----------------------------------------------- ############################################# ### End Of Firewall ### #############################################