IPTables Beispiele


Iptables Beispielskripte zum nutzen und / oder weiterentwickeln.


#!/bin/bash

####  Local Firewall-Script IPTABLES ####

### BEGIN INIT INFO
# Provides:          firewall
# Required-Start:    networking $local_fw.sh
# Required-Stop:     $local_fw.sh
# Should-Start:
# Should-Stop:
# Default-Start:     S
# Default-Stop:      0 6
# Short-Description: IPTables firewall script
### END INIT INFO

# -------- Variablen-Definition -------- #
IPT="/sbin/iptables"
INET="eth0"
# Pfad zu modprobe
#MODPROBE="/sbin/modprobe"
#LN="192.168.0.0/24"


# ---------------------- Logging Optionen --------------------- #
LOG="LOG --log-level debug --log-tcp-sequence --log-tcp-options"
LOG="$LOG --log-ip-options"
 

# ----------- Voreinstellung für Limits ------------ #
RLIMIT="-m limit --limit 3/s --limit-burst 30"
 

# --------------- Standard Richtlinien ------------- # 
# Alles Standardmäßig Verbieten.
$IPT -P INPUT DROP
$IPT -P FORWARD DROP
$IPT -P OUTPUT DROP
 

$IPT -t nat -P PREROUTING ACCEPT
$IPT -t nat -P OUTPUT ACCEPT
$IPT -t nat -P POSTROUTING ACCEPT
 
$IPT -t mangle -P PREROUTING ACCEPT
$IPT -t mangle -P INPUT ACCEPT
$IPT -t mangle -P FORWARD ACCEPT
$IPT -t mangle -P OUTPUT ACCEPT
$IPT -t mangle -P POSTROUTING ACCEPT
 

# ----------- Alle Regelketten löschen -------- #
$IPT -F
$IPT -t nat -F
$IPT -t mangle -F
 
$IPT -X
$IPT -t nat -X
$IPT -t mangle -X
 
$IPT -Z
$IPT -t nat -Z
$IPT -t mangle -Z
 
 
#----------------- Benutzerdefinierte Ketten ------------------ #
# Pakete Loggen, dann erlauben.
$IPT -N ACCEPTLOG
$IPT -A ACCEPTLOG -j $LOG $RLIMIT --log-prefix "ACCEPT "
$IPT -A ACCEPTLOG -j ACCEPT
 
# Pakete Loggen, dann verwerfen.
$IPT -N DROPLOG
$IPT -A DROPLOG -j $LOG $RLIMIT --log-prefix "DROP "
$IPT -A DROPLOG -j DROP
 
# Pakete Loggen, dann verbieten.
$IPT -N REJECTLOG
$IPT -A REJECTLOG -j $LOG $RLIMIT --log-prefix "REJECT "
$IPT -A REJECTLOG -p tcp -j REJECT --reject-with tcp-reset
$IPT -A REJECTLOG -j REJECT


# ---------------------------------------------------------------------------------------------------- #
# Sonderfall zum erlauben von 0.0.0.0 Sourcen für UPnP zum nutzen des IGMP Netzwerkprotokolls
# zur Registrierung von Clients mit Medien-Server und Router.
# In diesem Fall zur Nutzung von Mediatomb. Weitere Freigaben zu Mediatomb befinden sich weiter unten.
#$IPT -A INPUT -i $INET -s 0.0.0.0/32 -d 224.0.0.1/32 -p igmp -j ACCEPT
# ---------------------------------------------------------------------------------------------------- #


# Nur folgende ICMP Typen erlauben.
# (destination-unreachable, time-exceeded, and parameter-problem).
$IPT -N RELATED_ICMP
$IPT -A RELATED_ICMP -p icmp --icmp-type destination-unreachable -j ACCEPT
$IPT -A RELATED_ICMP -p icmp --icmp-type time-exceeded -j ACCEPT
$IPT -A RELATED_ICMP -p icmp --icmp-type parameter-problem -j ACCEPT
$IPT -A RELATED_ICMP -j DROPLOG
 
# Multi-PING abhärten.
$IPT  -A INPUT -p icmp -m limit --limit 1/s --limit-burst 2 -j ACCEPT
$IPT  -A OUTPUT -p icmp -j ACCEPT


# -------- Nur die minimalen ICMP Parameter erlauben, den Rest blockieren. ---------- #
 
# Alle festen ICMP Verbindungen erlauben.
$IPT -A INPUT -p icmp -m state --state ESTABLISHED -j ACCEPT $RLIMIT
$IPT -A OUTPUT -p icmp -m state --state ESTABLISHED -j ACCEPT $RLIMIT
 
# Alle zusammenhängende ICMP Verbindungen erlauben, den Rest verbieten.
$IPT -A INPUT -p icmp -m state --state RELATED -j RELATED_ICMP $RLIMIT
$IPT -A OUTPUT -p icmp -m state --state RELATED -j RELATED_ICMP $RLIMIT
 
# Erlauben von eingehenden Ping anfragen und Limit setzen.
$IPT -A INPUT -p icmp --icmp-type echo-request -j ACCEPT $RLIMIT
 
# Erlauben von ausgehenden Ping anfragen und Limit setzen.
$IPT -A OUTPUT -p icmp --icmp-type echo-request -j ACCEPT $RLIMIT
 
# Alle anderen ICMP Anfragen blockieren.
$IPT -A INPUT -p icmp -j DROPLOG
$IPT -A OUTPUT -p icmp -j DROPLOG
$IPT -A FORWARD -p icmp -j DROPLOG

# Alle ICMP Anfragen verbieten.
#$IPT -A INPUT -p icmp -j LOG --log-prefix "FW: BLOCK: ICMP (PING)" --log-level warning
#$IPT -A INPUT -p icmp -j DROP

 
# Localhost Verbindungen erlauben.
$IPT -A INPUT -i lo -j ACCEPT
$IPT -A OUTPUT -o lo -j ACCEPT
 
# Eingehende, schon bestehende Verbindungen akzeptieren.
$IPT -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
 
# Ausgehende, schon bestehende Verbindungen akzeptieren.
$IPT -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT


# Ungültige eingehende Pakete blockieren.
$IPT -A INPUT -m state --state INVALID -j DROP
 
# Ungültige ausgehende Pakete blockieren.
$IPT -A OUTPUT -m state --state INVALID -j DROP
 
# Wird NAT genutzt, werden üngültige Pakete akzeptiert - alles andere blockiert.
$IPT -A FORWARD -m state --state INVALID -j DROP


# -------------- Erlaubte Eingehende/Ausgehende Verbindungen, den Rest blockieren. ----------------- #
 
# Erlaube ausgehende DNS Anfragen. 
$IPT -A OUTPUT -m state --state NEW -p udp --dport 53 -j ACCEPT
$IPT -A OUTPUT -m state --state NEW -p tcp --dport 53 -j ACCEPT
# Erlaube eingehende DNS Anfragen.
$IPT -A INPUT -m state --state NEW -p udp --dport 53 -j ACCEPT
$IPT -A INPUT -m state --state NEW -p tcp --dport 53 -j ACCEPT

# Erlaube ausgehende HTTP Anfragen.
$IPT -A OUTPUT -m state --state NEW -p tcp --dport 80 -j ACCEPT
# Erlaube eingehende HTTP Anfragen.
$IPT -A INPUT -m state --state NEW -p tcp --dport 80 -j ACCEPT

# Erlaube ausgehende HTTPS Anfragen.
$IPT -A OUTPUT -m state --state NEW -p tcp --dport 443 -j ACCEPT
# Erlaube eingehende HTTPS Anfragen.
$IPT -A INPUT -m state --state NEW -p tcp --dport 443 -j ACCEPT

# Erlaube ausgehende SMTP Anfragen.
#$IPT -A OUTPUT -m state --state NEW -p tcp --dport 25 -j ACCEPT
# Erlaube eingehende SMTP Anfragen.
#$IPT -A INPUT -m state --state NEW -p tcp --dport 25 -j ACCEPT
# Erlaube eingehende POP3 Anfragen.
#$IPT -A INPUT -m state --state NEW -p tcp --dport 110 -j ACCEPT

# Erlaube ausgehende SMTPS Anfragen.
#$IPT -A OUTPUT -m state --state NEW -p tcp --dport 465 -j ACCEPT
# Erlaube eingehende IMAP4 Anfragen. 
#$IPT -A INPUT -m state --state NEW -p tcp --dport 143 -j ACCEPT

# Erlaube ausgehende "submission" (RFC 2476) Anfragen. 
#$IPT -A OUTPUT -m state --state NEW -p tcp --dport 587 -j ACCEPT
 
# Erlaube ausgehende POP3S Anfragen.
#$IPT -A OUTPUT -m state --state NEW -p tcp --dport 995 -j ACCEPT
# Erlaube eingehende POP3S Anfragen. 
#$IPT -A INPUT -m state --state NEW -p tcp --dport 995 -j ACCEPT

# Erlaube ausgehende SSH Anfragen.
#$IPT -A OUTPUT -m state --state NEW -p tcp --dport 22 -j ACCEPT
# Erlaube eingehende SSH Anfragen.
#$IPT -A INPUT -m state --state NEW -p tcp --dport 22 -j ACCEPT

# Erlaube ausgehende FTP Anfragen.
#$IPT -A OUTPUT -m state --state NEW -p tcp --dport 21 -j ACCEPT
# Erlaube eingehende FTP Anfragen. 
#$IPT -A INPUT -m state --state NEW -p tcp --dport 21 -j ACCEPT

# Erlaube ausgehende NTP Anfragen.
$IPT -A OUTPUT -m state --state NEW -p udp --dport 123 -j ACCEPT
 
# Erlaube ausgehende WHOIS Anfragen.
$IPT -A OUTPUT -m state --state NEW -p tcp --dport 43 -j ACCEPT
 
# Erlaube ausgehende CVS Anfragen.
#$IPT -A OUTPUT -m state --state NEW -p tcp --dport 2401 -j ACCEPT
 
# Erlaube ausgehende MySQL Anfragen.
#$IPT -A OUTPUT -m state --state NEW -p tcp --dport 3306 -j ACCEPT
# Erlaube eingehende MySQL Anfragen.
#$IPT -A INPUT -m state --state NEW -p tcp --dport 3306 -j ACCEPT

# Erlaube ausgehende SVN Anfragen.
# $IPT -A OUTPUT -m state --state NEW -p tcp --dport 3690 -j ACCEPT
 
# Erlaube ausgehende Mumble Anfragen.
#$IPT -A OUTPUT -m state --state NEW -p tcp --dport 64738 -j ACCEPT
#$IPT -A OUTPUT -m state --state NEW -p udp --dport 64738 -j ACCEPT
# Erlaube eingehende Mumble-Anfragen.
#$IPT -A INPUT -m state --state NEW -p tcp --dport 64738 -j ACCEPT
#$IPT -A INPUT -m state --state NEW -p udp --dport 64738 -j ACCEPT


# ----------------- Erlaube mediatomb die Verbindung ins Locale Netzwerk -------------------- #
$IPT -A INPUT -p tcp -m tcp -s 192.168.178.0/24 --dport 1900 -j ACCEPT
$IPT -A INPUT -p udp -m udp -s 192.168.178.0/24 --dport 1900 -j ACCEPT
$IPT -A OUTPUT -p tcp -m tcp -s 192.168.178.0/24 --dport 1900 -j ACCEPT
$IPT -A OUTPUT -p udp -m udp -s 192.168.178.0/24 --dport 1900 -j ACCEPT


#$IPT -A INPUT -i $INET -s 0.0.0.0/32 -d 224.0.0.1/32 -p igmp -j ACCEPT <- this Rule is oben
# ----- UPnP uses IGMP multicast to find media servers.  Accept IGMP broadcast packets ------ #
#$IPT -A INPUT -i $INET -d 239.0.0.0/8 -p igmp -j ACCEPT

# Zugriff auf Mediatomb Webseite aus dem Lokalen Netzwerk
$IPT -A INPUT -p tcp -m tcp -s 192.168.178.0/24 --dport 49166 -j ACCEPT
$IPT -A INPUT -p udp -m udp -s 192.168.178.0/24 --dport 49166 -j ACCEPT
$IPT -A OUTPUT -p tcp -m tcp -s 192.168.178.0/24 --dport 49166 -j ACCEPT
$IPT -A OUTPUT -p udp -m udp -s 192.168.178.0/24 --dport 49166 -j ACCEPT
# ------------------------------------------------------------------------------------------- #


# ---------------  Masquerading ------------- #
# Die drei modprobe Befehle stellen sicher, dass FTP mit Masquerading funktioniert.
# Hierbei muß oben '/sbin/modprobe' Variable aktiviert werden.
#$MODPROBE ip_conntrack
#$MODPROBE ip_conntrack_ftp
#$MODPROBE ip_nat_ftp
#
#$IPT -t nat -A POSTROUTING -o $INET -j MASQUERADE
#echo 1 > /proc/sys/net/ipv4/ip_forward
# -------------------------------------------- #
 
# ------------ Alles andere Blockieren oder Verwerfen. --------------- #
# Um Pakete nur zu Verwerfen "REJECT" benutzen, möchte man Verworfene Pakete Loggen, "REJECTLOG" nutzen.
# Oder DROP/DROPLOG um Pakete zu blockieren.
$IPT -A INPUT -j DROPLOG
$IPT -A OUTPUT -j DROPLOG
$IPT -A FORWARD -j DROPLOG
#--------------------------------------------------------------------- #
exit 0





Cloud

  • Zuletzt geändert: 24.07.2017 01:07
  • von Tom