All pastes #807150 Raw Edit

Untitled

public text v1 · immutable
·published 2007-12-06 08:29 UTC
rendered paste body
#!/bin/sh 
#set -x 

######################## 
## Defining Variables ## 
######################## 

# Path to IPTABLES executable 
IPT="/sbin/iptables" 

# Interface Card Connected to Local Network 
NETWORK="eth1" 

# Interface Card Connected to Internet 
INTERNET="eth0" 

# Loopback Interface 
LOOPBACK="lo" 

# IP Addreses of Server
SERVER_IP="192.168.1.3"

# Local Network IP Range / Subnet 
LOC_IP="192.168.1.0/24" 

# INTERNAL Broadcast 
LOC_BCAST=192.168.1.255

# IP On The Internet Interface 
NET_IP="192.168.101.128" 

# DHCP Server IP 
#DHCP_SERVER="192.168.1.1" 

# SSH Port
SSH_PORT="22"

# FTP on the Network
FTP_IP="192.168.1.3"

# FTP Port
FTP_PORT="21"

# Primiry DNS Server 
P_DNS="192.168.1.3" 

# Alternate DNS Server
A_DNS="192.168.1.3"

# Path To Directory Containing MAC Addresses 
MACDIR="/macs"

# Path To File Containing MAC Addresses
MACFILE="/macs/allowed.macs"

# Path To File Containging IP Addresses
#IPFILE="/macs/allowed.ips"


#########################
### Flushing IPTABLES ###
#########################

$IPT -F
$IPT -X
$IPT -t nat -F
$IPT -t nat -X
$IPT -t mangle -F
$IPT -t mangle -X


########################################
### 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

##############################
### Setting IPTABLES Rules ###
##############################


###############################
### MAC Addresses Filtering ###
###############################

rm -f $MACDIR/mac.addresses
cat $MACFILE | awk '{ print $1 }' >> $MACDIR/mac1
cat $MACDIR/mac1 | sed "s/#.*//" > $MACDIR/mac2
cat $MACDIR/mac2 | sed "/^ /d;/^$/d;" > $MACDIR/mac.addresses
rm -f $MACDIR/mac1
rm -f $MACDIR/mac2


#rm -f $MACDIR/ip.adresses
#cat $IPFILE | awk '{ print $1 }' >> $MACDIR/ip1
#cat $MACDIR/ip1 | sed "s/#.*//" > $MACDIR/ip2
#cat $MACDIR/ip2 | sed "/^ /d;/^$/d;" > $MACDIR/ip.addresses
#rm -f $MACDIR/ip1
#rm -f $MACDIR/ip2

echo -----------------------------------------------
echo Marking Packets from Known MAC and IP Addresses
echo -----------------------------------------------

cat $MACDIR/mac.addresses | while read MACS
do
$IPT -t mangle -A PREROUTING -i $NETWORK -m mac --mac-source $MACS -j MARK --set-mark 1
done
$IPT -t mangle -A PREROUTING -i $NETWORK -s 10.0.0.10 -j MARK --set-mark 1
#cat $MACDIR/ip.addresses | while read IPS
#do
#$IPT -t mangle -A PREROUTING -i $NETWORK -s $IPS -j MARK --set-mark 1
#done

echo -----------------------------------------------
echo ---- MAC and IP Address Filtering Complete ----
echo -----------------------------------------------


$IPT -A INPUT -i $NETWORK -d $SERVER_IP -m mark --mark 1 -p icmp --icmp-type echo-request -j REJECT --reject-with icmp-host-unreachable
$IPT -A INPUT -i $NETWORK -s $LOC_IP -d $SERVER_IP -m mark ! --mark 1 -p icmp --icmp-type echo-request -j REJECT --reject-with icmp-net-unreachable

#########################################
### 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 -m mark --mark 1 -j MASQUERADE
$IPT -t nat -A POSTROUTING -o $INTERNET -p tcp --dport 20 -m mark --mark 1 -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


################################
### Accepting Marked Packets ###
################################


$IPT -A INPUT -i $NETWORK -d $SERVER_IP -m mark --mark 1 -p icmp --icmp-type echo-request -j REJECT --reject-with icmp-host-unreachable
$IPT -A INPUT -i $NETWORK -m mark --mark 1 -j ACCEPT
$IPT -A FORWARD -i $NETWORK -m mark --mark 1 -j ACCEPT


####################################
### Droping All Unmarked Packets ###
####################################


$IPT -A FORWARD -i $NETWORK -m mark ! --mark 1 -j DROP
$IPT -A INPUT -i $NETWORK -m mark ! --mark 1 -j DROP


########################################################
### Accepting Voice/CAM Request for Marked Packets.  ###
########################################################


$IPT -t nat -A PREROUTING -m mark --mark 1 -i $NETWORK -p tcp --dport 5000:5010 -j ACCEPT
$IPT -t nat -A PREROUTING -m mark --mark 1 -i $NETWORK -p udp --dport 5000:5010 -j ACCEPT
$IPT -t nat -A PREROUTING -m mark --mark 1 -i $NETWORK -p tcp --dport 5100 -j ACCEPT


#######################################################
### Droping Voice/CAM Traffic which is not Marked.  ###
#######################################################


$IPT -t nat -A PREROUTING -i $NETWORK -m mark ! --mark 1 -p tcp --dport 5000:5010 -j DROP
$IPT -t nat -A PREROUTING -m mark ! --mark 1 -i NETWORK -p tcp --dport 5100 -j DROP


################################
### Accepting DHCP Request.  ###
################################


#$IPT -A INPUT -i $NETWORK -p udp -s $DHCP_SERVER --sport 67 -d 255.255.255.255 --dport 68 -j ACCEPT
#$IPT -A OUTPUT -o $NETWORK -p udp -s 255.255.255.255 --sport 68 -d $DHCP_SERVER --dport 67 -j ACCEPT


##############################
### Accepting DNS Requests ###
##############################

#$IPT -A INPUT -i $NETWORK -p tcp -s $LOC_IP --sport 53 -d $SERVER_IP --dport 53 -j ACCEPT
#$IPT -A INPUT -i $NETWORK -p udp -s $LOC_IP --sport 53 -d $SERVER_IP --dport 53 -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 -m mark --mark 1 -o $INTERNET -j MASQUERADE


###############################
### 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 ! $LOC_IP -p icmp --icmp-type echo-request -j DROP
#$IPT -A INPUT -i $NETWORK -s $LOC_IP -d $SERVER_IP -m mark --mark 1 -p icmp --icmp-type echo-request -j REJECT --reject-with icmp-host-unreachable
$IPT -A INPUT -i $NETWORK -d $SERVER_IP -m mark --mark 1 -p icmp --icmp-type echo-request -j REJECT --reject-with icmp-host-unreachable
$IPT -A INPUT -i $NETWORK -s $LOC_IP -d $SERVER_IP -m mark ! --mark 1 -p icmp --icmp-type echo-request -j REJECT --reject-with icmp-net-unreachable
$IPT -A INPUT -p icmp -s $LOC_IP -d $LOC_BCAST -j DROP


###############################################
###  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 --dport 10000 -j ACCEPT
$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


$IPT -A INPUT -i $NETWORK -j ACCEPT
$IPT -A OUTPUT -o $NETWORK -j ACCEPT


#######################################################
###  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 -m mark ! --mark 1 -j DROP