#!/bin/bash
echo "Starting firewall"
LOGLIMIT=20
IPTABLES=/sbin/iptables
# alle alten Regeln entfernen
echo "Loesche alte Regeln"
$IPTABLES -F
$IPTABLES -X
$IPTABLES -t nat -F
# Erstelle neue Ketten
echo "Erstelle neue Ketten..."
$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 ###
echo ""Aendere proc-Einstellungen"
# auf Broadcast-Pings nicht antworten
echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts
# halt die Klappe bei komischen ICMP Nachrichten
echo 0 > /proc/sys/net/ipv4/icmp_ignore_bogus_error_responses
# Kicke den ganzen IP Spoofing Shit
# (Source-Validierung anschalten)
echo 1 > /proc/sys/net/ipv4/conf/all/rp_filter
# Setze Default-TTL auf 61 (Default fuer Linux ist 64)
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-Pakete, 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
### MAIN PART ###
echo "Erstelle neue Regeln"
$IPTABLES -P INPUT DROP
$IPTABLES -P FORWARD DROP
$IPTABLES -P OUTPUT ACCEPT
$IPTABLES -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
$IPTABLES -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
# im Loopback koennen wir jedem trauen
$IPTABLES -A INPUT -i lo -j ACCEPT
# erlaube Pings
$IPTABLES -A INPUT -p icmp --icmp-type echo-request -j ACCEPT
# azureus
$IPTABLES -A INPUT -m state --state NEW -p tcp --dport <hier-tcp-port-eintragen> -j ACCEPT
$IPTABLES -A INPUT -m state --state NEW -p udp --dport <hier-udp-port-eintragen> -j ACCEPT
# limewire
$IPTABLES -A INPUT -m state --state NEW -p tcp --dport <hier-tcp-port-eintragen> -j ACCEPT
$IPTABLES -A INPUT -m state --state NEW -p udp --dport <hier-udp-port-eintragen> -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
exit 0