Weiter zum Inhalt

Firewall Grundgerüst

Diese Shellscript stellt eine einfache Firewallkonfiguration zur Verfügung. Die Grundregel des Scripts ist “Was nicht erlaubt ist, ist verboten”. Diese Script geht von der Voraussetzung aus, das diese Maschine die Internetverbindung herstellt, also Router und Firewall darstellt.

Erlaubt ist:

  1. … alles was vom Internet über Port 22 (ssh) hereinkommt. Das ermöglicht eine Fernwartung über einen entfernten Host.
  2. … alles was vom LAN Interface reinkommt und als Quell IP Adresse aus dem LAN Bereich kommt.
  3. … alles was über das LAN Interface mit einer Ziel IP Adresse aus dem LAN Bereich ins LAN geht.
  4. … alles was über das WAN Interface mit einer Ziel IP Adresse die nicht aus dem LAN Bereich komt ins Internet geht.
  5. … alles was über des LAN Interface ins Internet soll und als Quell IP Adresse aus dem LAN Bereich kommt.

Die letzte Regel aktiviert die Source Network Address Translation (SNAT) , bzw deren Einwahläquivalent Masquerading.


#! /bin/sh
#
# basic firewall script
#
# Autor: Frank Matthieß
#
#

IPT=/sbin/iptables
LANNET=10.0.0.0/24
LAN=eth0
WAN=ppp0

#
# drop all packets, which are not accepted
#
for CH in INPUT OUTPUT FORWARD;
do
${IPT} -P ${CH} DROP
done

#
# accept all from and to loopback interface
#
${IPT} -I INPUT -i lo -j ACCEPT
${IPT} -I OUTPUT -o lo -j ACCEPT

#
# create firewall chain for icmp packets
#
# All, but type 5 and 9, are accepted
# icmp isdn't evil!
#
# icmp type 5: redirect messages
# icmp type 9: router advertisment
#
${IPT} -N icmp-rules
${IPT} -A icmp-rules -m icmp --icmp-type 5 -j DROP
${IPT} -A icmp-rules -m icmp --icmp-type 9 -j DROP
${IPT} -A icmp-rules -j ACCEPT

#
# All icmp pakets are running through "icmp-rules" chain
#
for CH in INPUT OUTPUT FORWARD;
do
${IPT} -A ${CH} -p icmp -j icmp-rules
done

#
# Activate stateful inspection firewall for all standard chains
#
# Drop all invalid pakets and accept all packets from runninig connections
#
for CH in INPUT OUTPUT FORWARD;
do
${IPT} -A ${CH} -m state --state INVALID -j DROP
${IPT} -A ${CH} -m state --state RELATED,ESTABLISHED -j ACCEPT
done

###################################################################
#
# Form here you are able to allow some kind of traffic
#
###################################################################
#
# All rules for incomming connections
#

#
# Accept ssh connetion from wan to this machine. You should restrict the ssh acces via
# /etc/hosts.allow to certain networks or hosts.
#
${IPT} -A INPUT -i ${WAN} --dport 22 -j ACCEPT

#
# Accept all from lan interface with source address from lan
#
${IPT} -A INPUT -i ${LAN} -s ${LANNET} -j ACCEPT

###################################################################
#
# All rules for outgoing connections
#
#
# Accept all to lan interface with destination address from lan
#
${IPT} -A OUTPUT -o ${LAN} -d ${LANNET} -j ACCEPT

#
# Accept all to wan interface with destination address not from lan
#
${IPT} -A OUTPUT -o ${WAN} -d ! ${LANNET} -j ACCEPT

###################################################################
#
# All rules for forwarding connections
#
#
# Accept all traffic from lan to internet with source address from lan
#
${IPT} -A FORWARD -i ${LAN} -o ${WAN} -s ${LANNET} -j ACCEPT

#
# Activate ip masquerading for lan to internet traffic
#
${IPT} -A POSTROUTING -i ${LAN} -o ${WAN} -s ${LANNET} -j MASQUERADE

# vim:sts=4:sw=4:tw=100:wrap:ai: