#!/bin/bash
# Dette script er lavet til oprettelse af firewall
##############################################################################
# Betegnelse af netvaerk & maskiner mm
##############################################################################
### Netvaerk ###
LAN="172.16.0.0/24"
ETH_LAN="eth0"
WAN="192.168.0.199"
ETH_WAN="eth1"
DMZ="172.16.10.0/24"
ETH_DMZ="eth2"
WRL="172.16.1.0/24"
ETH_WRL="eth3"
LO="127.0.0.1/8"
ETH_LO="lo"
### Maskiner ###
ATLANTIS="172.16.10.10"
HERCULES="172.16.0.2"
##############################################################################
# Selve opsaetningen af diverse kaeder mm
##############################################################################
# Disable routing inden regler starter
echo > /proc/sys/net/ipv4/ip_forward
# Regler og policies flushes
echo " Flushing rules and policies"
iptables -t filter -F
iptables -t nat -F
iptables -t mangle -F
iptables -P INPUT DROP
iptables -P OUTPUT DROP
iptables -P FORWARD DROP
echo " Done...."
# Laver de nye kaeder
echo "Making the new chains"
iptables -N lo
iptables -F lo
iptables -N lan
iptables -F lan
iptables -N wan
iptables -F wan
iptables -N dmz
iptables -F dmz
iptables -N wrl
iptables -F wrl
echo " Done...."
# Laver de nye forwarderkaeder
echo "Making FORWARD chains"
# Fra WAN til andre interfaces
iptables -N wantodmz
iptables -F wantodmz
iptables -N wantolan
iptables -F wantolan
iptables -N wantowrl
iptables -F wantowrl
# Fra LAN til andre interfaces
iptables -N lantodmz
iptables -F lantodmz
iptables -N lantowan
iptables -F lantowan
iptables -N lantowrl
iptables -F lantowrl
# Fra DMZ til andre interfaces
iptables -N dmztolan
iptables -F dmztolan
iptables -N dmztowan
iptables -F dmztowan
iptables -N dmztowrl
iptables -F dmztowrl
# Fra WRL til andre interfaces
iptables -N wrltodmz
iptables -F wrltodmz
iptables -N wrltowan
iptables -F wrltowan
iptables -N wrltolan
iptables -F wrltolan
echo " Done...."
# Flusher NAT POSTROUTING PREROUTING
echo "Flushing NAT - POSTROUTING & PREROUTING"
iptables -t nat -F POSTROUTING
iptables -t nat -F PREROUTING
echo " Done.... NAT module finished"
# Sikrer lokal kommunikation
echo "Setting up local chain"
iptables -A lo -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
echo " Done.... Local chain is up and running"
# Setting up lan chain
echo "Setting up LAN chain"
# Sikrer mod IP-spoffing
iptables -A lan -s $WAN -j DROP
iptables -A lan -s $LO -j DROP
iptables -A lan -s $DMZ -j DROP
iptables -A lan -s $WRL -j DROP
iptables -A lan -s $LAN -j DROP
# Accepterer alt andet trafik
iptables -A lan -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A lan -j LOG --log-prefix "FW LAN:"
iptables -A lan -j DROP
echo " Done....LAN chain is running"
# Setting up WAN chain
echo "Setting up WAN chain"
# Sikrer imod Ip_spoofing
iptables -A wan -s $WAN -j DROP
iptables -A wan -s $DMZ -j DROP
iptables -A wan -s $LAN -j DROP
iptables -A wan -s $LO -j DROP
iptables -A wan -s $WRL -j DROP
# Accepterer alt andet trafik
iptables -A wan -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A wan -j LOG --log-prefix "FW WAN:"
iptables -A wan -j DROP
echo " Done....WAN chain is running"
# Setting up DMZ chain
echo "Setting up DMZ chain"
# Sikrer imod IP_spoofing
iptables -A dmz -s $WAN -j DROP
iptables -A dmz -s $LAN -j DROP
iptables -A dmz -s $WRL -j DROP
iptables -A dmz -s $LO -j DROP
iptables -A dmz -s $DMZ -j DROP
# Accepterer alle andre forbindelser
iptables -A dmz -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A dmz -j LOG --log-prefix "FW DMZ:"
iptables -A dmz -j DROP
echo " Done....DMZ chain is running"
# Setting up WRL chain
echo "Setting up WRL chain"
# Sikrer imod Ip_spoofing
iptables -A wrl -s $WAN -j DROP
iptables -A wrl -s $LO -j DROP
iptables -A wrl -s $LAN -j DROP
iptables -A wrl -s $DMZ -j DROP
iptables -A wrl -s $WRL -j DROP
# Accepterer alle andre forbindelser
iptables -A wrl -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A wrl -j LOG --log-prefix "FW WRL:"
iptables -A wrl -j DROP
echo " Done....WRL chain is running"
##############################################################################
# Selve firewall reglerne
##############################################################################
echo "Setting up DMZ portfarwarding"
# SSH
iptables -t nat -A PREROUTING -i $ETH_WAN -d $WAN -p tcp --dport 22 -j DNAT --to-destination $ATANLTIS:22
iptables -A wantodmz -d $ATLANTIS -p tcp --dport 22 -j ACCEPT
# SMTP
iptables -t nat -A PREROUTING -i $ETH_WAN -d $WAN -p tcp --dport 25 -j DNAT --to-destination $ATLANTIS:25
iptables -A wantodmz -d $ATLANTIS -p tcp --dport 25 -j ACCEPT
# HTTP
iptables -t nat -A PREROUTING -i $ETH_WAN -d $WAN -p tcp --dport 80 -j DNAT --to-destination $ATLANTIS:80
iptables -A wantodmz -d $ATLANTIS -p tcp --dport 80 -j ACCEPT
# IMAP
iptables -t nat -A PREROUTING -i $ETH_WAN -d $WAN -p tcp --dport 143 -j DNAT --to-destination $ATALNTIS:143
iptables -A wantodmz -d $ATLANTIS -p tcp --dport 143 -j ACCEPT
echo " Done.... DMZ portforwarding is up and running"
# Setting up hide NAT
echo "Setting up masquerading - NAT chains"
# NAT from LAN to WAN
iptables -t nat -A POSTROUTING -s $LAN -o $ETH_WAN -j SNAT --to-source $WAN
iptables -t nat -A POSTROUTING -s $DMZ -o $ETH_WAN -j SNAT --to-source $WAN
iptables -t nat -A POSTROUTING -s $WRL -o $ETH_WAN -j SNAT --to-source $WAN
echo " Done....NAT chains are up and running"
# Selve reglerne for firewallen
echo "Setting up the rules"
# Packets from DMZ to WAN
iptables -A dmztowan --source $ATLANTIS -p tcp --dport 25 -j ACCEPT
iptables -A dmztowan -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A dmztowan -j LOG --log-prefix "FW DMZTOWAN:"
iptables -A dmztowan -j DROP
# Packets from WAN to DMZ
iptables -A wantodmz -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A wantodmz -j LOG --log-prefix "FW WANTODMZ:"
iptables -A wantodmz -j DROP
# packets from DMZ to LAN
iptables -A dmztolan --source $WAN -d $LAN -p tcp --dport 25 -j ACCEPT
iptables -A dmztolan -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A dmztolan -j LOG --log-prefix "FW DMZTOLAN:"
iptables -A dmztolan -j DROP
# packets from LAN to DMZ
iptables -A lantodmz -s $LAN -d $DMZ -p tcp --dport 80 -j ACCEPT
iptables -A lantodmz -s $LAN -d $DMZ -p tcp --dport 22 -j ACCEPT
iptables -A lantodmz -s $LAN -d $DMZ -p tcp --dport 25 -j ACCEPT
iptables -A lantodmz -s $LAN -d $DMZ -p tcp --dport 143 -j ACCEPT
# Logning af trafik
iptables -A lantodmz -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A lantodmz -j LOG --log-prefix "FW LANTODMZ:"
iptables -A lantodmz -j DROP
# Packets FROM WRL to DMZ
iptables -A wrltodmz -s $WRL -d $DMZ -p tcp --dport 80 -j ACCEPT
iptables -A wrltodmz -s $WRL -d $DMZ -p tcp --dport 22 -j ACCEPT
iptables -A wrltodmz -s $WRL -d $DMZ -p tcp --dport 25 -j ACCEPT
iptables -A wrltodmz -s $WRL -d $DMZ -p tcp --dport 143 -j ACCEPT
# Logning af trafik
iptables -A wrltodmz -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A wrltodmz -j LOG --log-prefix "FW WRLTODMZ:"
iptables -A wrltodmz -j DROP
# Packets from LAN to WAN
iptables -A lantowan -s $LAN -p tcp --dport 80 -j ACCEPT
iptables -A lantowan -s $LAN -p tcp --dport 443 -j ACCEPT
iptables -A lantowan -s $LAN -p tcp --dport 21 -j ACCEPT
iptables -A lantowan -s $LAN -p tcp --dport 22 -j ACCEPT
iptables -A lantowan -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A lantowan -j LOG --log-prefix "FW LANTOWAN:"
iptables -A lantowan -j DROP
# Packets from WAN to LAN
iptables -A wantolan -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A wantolan -j LOG --log-prefix "FW WANTOLAN PORTFWD:"
iptables -A wantolan -j DROP
# Packets from WRL to WAN
iptables -A wrltowan -s $WRL -p tcp --dport 80 -j ACCEPT
iptables -A wrltowan -s $WRL -p tcp --dport 443 -j ACCEPT
iptables -A wrltowan -s $WRL -p tcp --dport 21 -j ACCEPT
iptables -A wrltowan -s $WRL -p tcp --dport 22 -j ACCEPT
iptables -A wrltowan -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A wrltowan -j LOG --log-prefix "FW WRLTOWAN:"
iptables -A wrltowan -j DROP
# Packets from WAN to WRL
iptables -A wantowrl -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A wantowrl -j LOG --log-prefix "FW WANTOWRL PORTFWD:"
iptables -A wantowrl -j DROP
echo " Done....Firewall rules is up and running"
# Loading the different modules
echo "Loading the modules"
/sbin/modprobe iptable_nat
/sbin/modprobe ip_nat_ftp
/sbin/modprobe ip_conntrack_ftp
echo " Done...."
# Activating the chains
echo "Activating the chains"
iptables -A INPUT -i $ETH_LAN -j lan
iptables -A INPUT -i $ETH_WAN -j wan
iptables -A INPUT -i $ETH_DMZ -j dmz
iptables -A INPUT -i $ETH_WRL -j wrl
iptables -A INPUT -i $ETH_LO -j lo
iptables -A FORWARD -i $ETH_WAN -o $ETH_DMZ -j wantodmz
iptables -A FORWARD -i $ETH_WAN -o $ETH_LAN -j wantolan
iptables -A FORWARD -i $ETH_WAN -o $ETH_WRL -j wantowrl
iptables -A FORWARD -i $ETH_LAN -o $ETH_DMZ -j lantodmz
iptables -A FORWARD -i $ETH_LAN -o $ETH_WAN -j lantowan
iptables -A FORWARD -i $ETH_LAN -o $ETH_WRL -j lantowrl
iptables -A FORWARD -i $ETH_DMZ -o $ETH_WAN -j dmztowan
iptables -A FORWARD -i $ETH_DMZ -o $ETH_LAN -j dmztolan
iptables -A FORWARD -i $ETH_DMZ -o $ETH_WRL -j dmztowrl
iptables -A FORWARD -i $ETH_WRL -o $ETH_WAN -j wrltowan
iptables -A FORWARD -i $ETH_WRL -o $ETH_LAN -j wrltolan
iptables -A FORWARD -i $ETH_WRL -o $ETH_DMZ -j wrltodmz
echo "Done.... activating the chains"