#!/bin/bash
echo "Starting firewall and routing"
LOGLIMIT=20
IPTABLES=/usr/sbin/iptables
case "$1" in
start)
# alle alten Regeln entfernen
echo "Loesche alte Regeln"
$IPTABLES -F
$IPTABLES -X
### MAIN PART ###
# Default-Policy auf DROP setzen
echo "Setze Default-Policy auf DROP"
$IPTABLES -P INPUT DROP
$IPTABLES -P FORWARD DROP
# Output muss natuerlich erlaubt sein
$IPTABLES -P OUTPUT ACCEPT
# Routing aktivieren
echo 1 > /proc/sys/net/ipv4/ip_forward
$IPTABLES -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
$IPTABLES -A FORWARD -m state --state ESTABLISHED,RELATED,NEW -j ACCEPT
$IPTABLES -t nat -A POSTROUTING -o <interface-zum-internet> -j MASQUERADE
### ERSTELLE NEUE KETTEN ###
echo "Erstelle neue Ketten"
# Chain to log and reject a port by ICMP port unreachable
$IPTABLES -N LOGREJECT
$IPTABLES -A LOGREJECT -m limit --limit $LOGLIMIT/minute -j LOG --log-prefix "FIREWALL REJECT " --log-level notice --log-ip-options --log-tcp-options
$IPTABLES -A LOGREJECT -j REJECT --reject-with icmp-port-unreachable
### PROC MANIPULATION ###
# auf Broadcast-Pings nicht antworten
echo "Unterbinde Broadcast-Pings"
echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts
# halt die Klappe bei komischen ICMP Nachrichten
echo "Aktiviere Bogus ICMP Message Protection"
echo 0 > /proc/sys/net/ipv4/icmp_ignore_bogus_error_responses
# aktiviere SYN Flood Protection
echo "Aktiviere SYN FLOOD Protection"
echo 1 > /proc/sys/net/ipv4/tcp_syncookies
# Kicke den ganzen IP Spoofing Shit
# (Source-Validierung anschalten)
echo "Unterbinde IP Spoofing Attacken"
echo 1 > /proc/sys/net/ipv4/conf/all/rp_filter
# Setze Default-TTL auf 61 (Default fuer Linux ist 64)
echo "Setze Default-TTL auf 61"
echo 61 > /proc/sys/net/ipv4/ip_default_ttl
# sende RST-Pakete wenn der Buffer voll ist
echo 1 > /proc/sys/net/ipv4/tcp_abort_on_overflow
# warte max. 30 secs auf ein FIN/ACK
echo 30 > /proc/sys/net/ipv4/tcp_fin_timeout
# unterbreche Verbindungsaufbau nach 3 SYN-Paketen
# Default ist 6
echo 3 > /proc/sys/net/ipv4/tcp_syn_retries
# unterbreche Verbindungsaufbau nach 3 SYN/ACK-Paketen
# Default ist 6
echo 3 > /proc/sys/net/ipv4/tcp_synack_retries
# im Loopback (127.0.0.1) koennen wir jedem trauen
$IPTABLES -A INPUT -i lo -j ACCEPT
# erlaube Pings
$IPTABLES -A INPUT -p icmp --icmp-type echo-request -j ACCEPT
#erlaube Anfragen nur fuer das lokale netzwerk auf dem router
echo "Erlaube Anfragen im lokalen Netzwerk"
$IPTABLES -A INPUT -i <interface-zum-lan> -j ACCEPT
# Alle TCP Packete, die bis hier hin kommen, werden
# geloggt und rejected
# Der Rest wird eh per Default Policy gedroppt...
# $IPTABLES -A INPUT -p tcp -j LOGREJECT
# $IPTABLES -A FORWARD -p tcp -j LOGREJECT
;;
*)
echo "Usage: `basename $0` {start}" >&2
exit 64
;;
esac
exit 0