Entwicklungsumgebung/Firewall: Unterschied zwischen den Versionen

Aus Delixs
Zur Navigation springen Zur Suche springen
KKeine Bearbeitungszusammenfassung
 
(6 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt)
Zeile 1: Zeile 1:
__NOTOC__
__NOTOC__
{{Uberarbeiten}}
{{EditStatus|1|Kirmse}}  




== Firewall ==
== Firewall ==


Text kommt noch, jetzt erst einmal eine völlig unstrukturierte Materialsammlung:
Sie dient dem Schutz des Schulnetzes gegen Attacken aus dem Internet.


Schau Dir mal ipfilter:uif an (Harry am 07.06.2008 in developer).
== Installationsscript ==


* 1. per default, alle tables auf drop
* 2. syntax: narrensicher
* 3. LDAP-Support
* 4. conf-Datei, keine GUI, koennen wir also leicht scripten


Als Vergleich die Werte von wc:
<source lang="text">
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
#!/bin/bash
 
##################################################################
#  Kapitel: Firewall
##################################################################
 
 
# wir installieren das Firewallscript
cp -f /root/delixs/conffiles/firewall.sh  /usr/sbin/firewall.sh
chown root:root  /usr/sbin/firewall.sh
chmod 755        /usr/sbin/firewall.sh


debby-3:/home/hjede/qemu-run# grep -Ev '(^#|^$)' /etc/uif/uif.conf |wc
# wir sichern erstmal den bisherigen Stand der debconf-Datenbank
    44      96    851
debconf-get-selections > /root/delixs/confbackup/debconf_uif.0
debby-3:/home/hjede/qemu-run# iptables-save |wc
    99    606    4448


# wir installieren uif (nach einem Vorschlag von Harry Jede)
# (gewählt: "nicht ändern")
aptitude install -R uif
# hier sind die Änderungen von "aptitude install uif" drin
debconf-get-selections > /root/delixs/confbackup/debconf_uif.1
# wir löschen uif (dabei bleibt u.a. das Initscript erhalten)
aptitude remove uif
# wir ersetzen dieses Initscript durch unser 'uif'
cp -f  /root/delixs/conffiles/uif      /etc/init.d/uif
chown root:root    /etc/init.d/uif
chmod 755          /etc/init.d/uif
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
</source>
Script "/usr/sbin/firewall.sh"


Beispiel:


<source lang="text">
<source lang="text">
service {
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    traceroute udp(32769:65535/33434:33523) icmp(11)
#!/bin/sh
    ping        icmp(8)
 
    ipp        udp(/631)
# dieses Firewall-Script wurde nach der Anleitung und Vorlage
}
# aus dem Buch "Linux-Server mit Debian/GNU-Linux" von
network {
# Eric Amberg erstellt
    localhost  127.0.0.1
 
    all        0.0.0.0/0
# nach Hinweis von Harry und Thorsten wurde DROP durch REJECT ersetzt
    trusted    192.168.231.0/24
# letzte Ueberarbeitung 22.4.2009 HD.Kirmse
    dmz        192.168.12.0/24
# allerdings bei den Policy habe ich wieder DROP gesetzt,
    gateway    192.168.12.1
# weil sonst als Meldung kommt: iptables: Bad policy name
}
 
interface {
#
    loop    lo
# Variablen
    ETHA        eth0
#
    ETH1        eth1
INET_IFACE="eth0"
    BR0        br0
LAN_IFACE="eth1"
    ETH0        ETHA BR0
LAN_IP="10.100.0.1"
}
LAN_NET="10.100.0.0/16"  # wegen den Teilnetzen die 16
input {
 
    in+  i=loop    s=localhost
#
    in+  i=ETH0 s=trusted
# Setzen von Kernelparametern
    in+  p=ping,traceroute
#
    inp=ipp i=ETH1 f=reject
echo "1">/proc/sys/net/ipv4/ip_forward
    in- f=log(input),reject
echo "1">/proc/sys/net/ipv4/ip_dynaddr
}
for i in /proc/sys/net/ipv4/conf/*/{accept_source_route,accept_redirects,send_redirects}; do
output {
  echo 0 > $i
    out+ o=loop    d=localhost
done
    out+ d=all
echo "1">/proc/sys/net/ipv4/icmp_echo_ignore_broadcasts
    out+ o=ETH0,ETH1
echo "1">/proc/sys/net/ipv4/tcp_syncookies
    out- f=log(output),reject
 
}
#
forward {
# Module laden
    fw+  i=BR0 o=BR0
#
    fw> o=ETH1
modprobe ip_conntrack
    fw+ o=ETH1 s=trusted
modprobe ip_conntrack_ftp
    fw- f=log(forward),reject
modprobe ip_nat_ftp
}
modprobe ipt_LOG
masquerade {
modprobe ipt_MASQUERADE
    masq+ o=ETH1 s=trusted d=gateway f=log(masq)
 
    masq+ o=ETH1 s=trusted d=all
#
}
# Information auf der Konsole
#
echo "Initialisiere Firewall ..."
 
#
# erstmal aufraeumen und Policies setzen
#
iptables -F              # Standard-Chains
iptables -X              # Userdefinierte Chains
iptables -P INPUT DROP  # Policy fuer INPUT
iptables -P OUTPUT DROP
iptables -P FORWARD DROP
iptables -Z              # Zaehler auf 0 setzen
iptables -N MYDROP      # eigene Chains erstellen
iptables -N MYACCEPT
 
#
# eigene Chains MYDROP und MYACCEPT konfigurieren
# das wird (nur) wegen loggen gemacht
#
iptables -A MYDROP -j LOG --log-prefix "FW-DROP: "
iptables -A MYDROP -j REJECT
iptables -A MYACCEPT -j LOG --log-prefix "FW-ACCEPT: "
iptables -A MYACCEPT -j ACCEPT
 
#
# Stateful Inspection
#
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -m state --state INVALID -j MYDROP
iptables -A FORWARD -m state --state INVALID -j MYDROP
 
#
# Loopback-Kommunikation
#
iptables -A INPUT -i lo -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT
 
#
# Antispoofing
#
iptables -A FORWARD -s $LAN_NET -i $INET_IFACE -j REJECT
iptables -A FORWARD -s ! $LAN_NET -i $LAN_IFACE -j REJECT
iptables -A FORWARD -s 127.0.0.0/8 -j REJECT
 
 
#
# Zugriff vom Gateway auf das Internet fuer DNS, HTTP und FTP
#
iptables -A OUTPUT -p udp --dport 53 -j ACCEPT
iptables -A OUTPUT -p tcp -m multiport --destination-port 21,22,80,443 -j ACCEPT
 
 
#
# Zugriff auf den Nameserver / DNS-Caching-Server vom LAN aus
#
iptables -A INPUT -i $LAN_IFACE -s $LAN_NET -p udp --dport 53 -j MYACCEPT
 
 
#
# DHCP Server port 67 - Clients nehmen Port 68
#
iptables -A INPUT -i $LAN_IFACE -s $LAN_NET -p udp --dport 67 -j MYACCEPT
 
 
#
# ICMP (z.B. Ping) nach draussen erlauben
# (nur) aus dem lokalen Netz annehmen
#
iptables -A OUTPUT -p icmp -j ACCEPT
iptables -A INPUT -i $LAN_IFACE -s $LAN_NET -p icmp -j ACCEPT
 
 
#
# SSH-Zugriff auf den Server erlauben (auch von aussen)
#
iptables -A INPUT -p tcp --dport 22 -j MYACCEPT
 
 
#
# Zugriff auf den WWW-Server
#
iptables -A INPUT -i $LAN_IFACE -s $LAN_NET -p tcp --dport 80 -j MYACCEPT
iptables -A INPUT -i $LAN_IFACE -s $LAN_NET -p tcp --dport 443 -j MYACCEPT
 
 
#
# Zugriff auf den Proxy-Server
#
iptables -A INPUT -i $LAN_IFACE -s $LAN_NET -p tcp --dport 8080 -j MYACCEPT
#iptables -A INPUT -i $LAN_IFACE -s $LAN_NET -p tcp --dport 443 -j MYACCEPT
 
 
#
# Samba
#
iptables -A INPUT -i $LAN_IFACE -s $LAN_NET -p udp -m multiport --destination-port 137,138 -j MYACCEPT
iptables -A INPUT -i $LAN_IFACE -s $LAN_NET -p tcp -m multiport --destination-port 139,445 -j MYACCEPT
iptables -A OUTPUT -o $LAN_IFACE -s $LAN_NET -p udp -m multiport --destination-port 137,138 -j MYACCEPT
iptables -A OUTPUT -o $LAN_IFACE -s $LAN_NET -p tcp -m multiport --destination-port 139,445 -j MYACCEPT
 
 
#
# SWAT (SAMBA Administration Tool)
#
iptables -A INPUT -i $LAN_IFACE -s $LAN_NET -p tcp --dport 901 -j MYACCEPT
 
 
#
# LDAP
#
iptables -A INPUT -i $LAN_IFACE -s $LAN_NET -p tcp --dport 389 -j MYACCEPT
iptables -A INPUT -i $LAN_IFACE -s $LAN_NET -p udp --dport 389 -j MYACCEPT
 
 
#
# Logging aller verbleibender Pakete,
# wird durch MYDROP nicht erfasst und durch die Policy verworfen
#
iptables -A INPUT -j LOG --log-prefix "FW-LAST-DROP: "
iptables -A OUTPUT -j LOG --log-prefix "FW-LAST-DROP: "
iptables -A FORWARD -j LOG --log-prefix "FW-LAST-DROP: "
 
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
</source>
</source>




Und hier die lange & komplizierte Ausgabe von iptables-save:
 
Init-Script "/etc/init.d/uif"
 


<source lang="text">
<source lang="text">
# Generated by iptables-save v1.3.6 on Sat Jun  7 13:13:25 2008
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
*nat
#! /bin/bash
:PREROUTING ACCEPT [61495:5257743]
### BEGIN INIT INFO
:POSTROUTING ACCEPT [22191:3933471]
# Provides:         uif
:OUTPUT ACCEPT [6405:1246646]
# Required-Start:   $network $syslog $remote_fs
:13MASQUERADElog - [0:0]
# Required-Stop:     $network $syslog $remote_fs
-A POSTROUTING -s 192.168.231.0/255.255.255.0 -d 192.168.12.1 -o eth1 -j
# Default-Start:     2 3 4 5
13MASQUERADElog
# Default-Stop:     0 1 6
-A POSTROUTING -s 192.168.231.0/255.255.255.0 -o eth1 -j MASQUERADE
# Short-Description: Start the firewall
-A 13MASQUERADElog -m limit --limit 20/min -j LOG --log-prefix "FW
### END INIT INFO
MASQUERADE (masq): " --log-level 7 --log-tcp-options --log-ip-options
 
-A 13MASQUERADElog -j MASQUERADE
#############################################################
COMMIT
#
# Completed on Sat Jun  7 13:13:25 2008
# dieses Script ist eine Modifikation des Scriptes uif
# Generated by iptables-save v1.3.6 on Sat Jun  7 13:13:25 2008
# zum Starten des eigenen Firewallscriptes fuer Delixs
*filter
# 24.4.2009 HD.Kirmse
:INPUT DROP [0:0]
#
:FORWARD DROP [0:0]
#############################################################
:OUTPUT DROP [0:0]
 
:12DROPlog - [0:0]
#
:1_1 - [0:0]
# Version:     @(#)/etc/init.d/uif  1.0.0 21-Feb-2002  pollmeier@gonicus.de
:4DROPlog - [0:0]
#
:8DROPlog - [0:0]
 
:ACCOUNTINGFORWARD - [0:0]
# RedHat specific settings - ignore for real systems ---------------------------
:ACCOUNTINGINPUT - [0:0]
# chkconfig: - 60 95
:ACCOUNTINGOUTPUT - [0:0]
# description: provides iptables packet filtering
:ACCOUNTINGSTATELESSFORWARD - [0:0]
 
:ACCOUNTINGSTATELESSINPUT - [0:0]
PATH=/usr/sbin:/sbin:$PATH
:ACCOUNTINGSTATELESSOUTPUT - [0:0]
UIF=/usr/sbin/firewall.sh
:MYREJECT - [0:0]
 
:STATEFORWARD - [0:0]
# Binaries installed?
:STATEINPUT - [0:0]
if [ ! -f /sbin/iptables ]; then
:STATELESSFORWARD - [0:0]
echo "iptables not found - firewall.sh not started"
:STATELESSINPUT - [0:0]
exit 1
:STATELESSOUTPUT - [0:0]
fi
:STATENOTNEW - [0:0]
 
:STATEOUTPUT - [0:0]
# ist unser Script firewall.sh installiert?
-A INPUT -j STATEINPUT
if [ ! -f $UIF ]; then
-A INPUT -s 127.0.0.1 -i lo -j ACCEPT
echo "firewall.sh not found - aborting"
-A INPUT -s 192.168.231.0/255.255.255.0 -j 1_1
exit 1
-A INPUT -p udp -m udp --sport 32769:65535 --dport 33434:33523 -j ACCEPT
fi
-A INPUT -p icmp -m icmp --icmp-type 8 -j ACCEPT
 
-A INPUT -p icmp -m icmp --icmp-type 11 -j ACCEPT
case "$1" in
-A INPUT -i eth1 -p udp -m udp --dport 631 -j MYREJECT
 
-A INPUT -j 4DROPlog
start)
-A FORWARD -j STATEFORWARD
echo "Starting firewall.sh"
-A FORWARD -i br0 -o br0 -j ACCEPT
$UIF                                # Aufruf des Firewallscriptes
-A FORWARD -o eth1 -p tcp -m tcp --tcp-flags SYN,RST SYN -j
exit 0
TCPMSS --clamp-mss-to-pmtu
;;
-A FORWARD -s 192.168.231.0/255.255.255.0 -o eth1 -j ACCEPT
 
-A FORWARD -j 12DROPlog
stop)
-A OUTPUT -j STATEOUTPUT
echo "Stopping firewall.sh isn't enable"
-A OUTPUT -d 127.0.0.1 -o lo -j ACCEPT
exit 0
-A OUTPUT -j ACCEPT
;;
-A OUTPUT -o eth1 -j ACCEPT
 
-A OUTPUT -o br0 -j ACCEPT
status)
-A OUTPUT -o eth0 -j ACCEPT
if [ "`id -u`" != "0" ]; then
-A OUTPUT -j 8DROPlog
echo "Can't retrieve status information. You need to be root.\n"
-A 12DROPlog -m limit --limit 20/min -j LOG --log-prefix "FW REJECT
exit 1
(forward): " --log-level 7 --log-tcp-options --log-ip-options
fi
-A 12DROPlog -j MYREJECT
 
-A 1_1 -i br0 -j ACCEPT
# Simple rule listing
-A 1_1 -i eth0 -j ACCEPT
echo -e "\nRule listing:\n"
-A 4DROPlog -m limit --limit 20/min -j LOG --log-prefix "FW REJECT
iptables-save | sed "/^#/d"
(input): " --log-level 7 --log-tcp-options --log-ip-options
echo -e "\n\n"
-A 4DROPlog -j MYREJECT
;;
-A 8DROPlog -m limit --limit 20/min -j LOG --log-prefix "FW REJECT
 
(output): " --log-level
restart|reload|force-reload)
7 --log-tcp-options --log-ip-options
$0 start
-A 8DROPlog -j MYREJECT
;;
-A MYREJECT -p tcp -m tcp -j REJECT --reject-with tcp-reset
 
-A MYREJECT -j REJECT --reject-with icmp-port-unreachable
*)
-A STATEFORWARD -m state --state INVALID -j STATELESSFORWARD
# diese Anweisung wird nur ausgefuehrt, wenn uif direkt
-A STATEFORWARD -j ACCOUNTINGFORWARD
# und ohne Parameter aufgerufen wird. Service faengt diesen Fall ab
-A STATEFORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT
echo "Usage: $0 start|stop|status|restart|reload"
-A STATEFORWARD -m state --state
exit 1
INVALID,RELATED,ESTABLISHED,UNTRACKED -j STATENOTNEW
esac
-A STATEINPUT -m state --state INVALID -j STATELESSINPUT
 
-A STATEINPUT -j ACCOUNTINGINPUT
exit 0
-A STATEINPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
 
-A STATEINPUT -m state --state INVALID,RELATED,ESTABLISHED,UNTRACKED -j
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
STATENOTNEW
-A STATELESSFORWARD -j ACCOUNTINGSTATELESSFORWARD
-A STATELESSFORWARD -m limit --limit 20/min -j LOG --log-prefix "FW
INVALID STATE: " --log-level 7 --log-tcp-options --log-ip-options
-A STATELESSFORWARD -j DROP
-A STATELESSINPUT -j ACCOUNTINGSTATELESSINPUT
-A STATELESSINPUT -m limit --limit 20/min -j LOG --log-prefix "FW
INVALID STATE: " --log-level 7 --log-tcp-options --log-ip-options
-A STATELESSINPUT -j DROP
-A STATELESSOUTPUT -j ACCOUNTINGSTATELESSOUTPUT
-A STATELESSOUTPUT -m limit --limit 20/min -j LOG --log-prefix "FW
INVALID STATE: " --log-level 7 --log-tcp-options --log-ip-options
-A STATELESSOUTPUT -j DROP
-A STATENOTNEW -m limit --limit 20/min -j LOG --log-prefix "FW STATE NOT
NEW: " --log-level 7 --log-tcp-options --log-ip-options
-A STATENOTNEW -j DROP
-A STATEOUTPUT -m state --state INVALID -j STATELESSOUTPUT
-A STATEOUTPUT -j ACCOUNTINGOUTPUT
-A STATEOUTPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A STATEOUTPUT -m state --state INVALID,RELATED,ESTABLISHED,UNTRACKED -j
STATENOTNEW
COMMIT
# Completed on Sat Jun  7 13:13:25 2008
# Generated by iptables-save v1.3.6 on Sat Jun  7 13:13:25 2008
*mangle
:PREROUTING ACCEPT [25994780:19965091246]
:INPUT ACCEPT [24155447:19040604203]
:FORWARD ACCEPT [6557432:3191342180]
:OUTPUT ACCEPT [24433500:25546765616]
:POSTROUTING ACCEPT [32829626:29312519572]
COMMIT
# Completed on Sat Jun  7 13:13:25 2008
</source>
</source>
Falls Sie die Dateien unter Windows bearbeitet haben, müssen diese noch umgewandelt werden:
  dos2unix /usr/sbin/firewall.sh
  dos2unix /etc/init.d/uif
== Firewall nutzen ==
Diese Anleitung ist für das Deaktivieren und Aktivieren der Firewall
  Aufruf: sysvconfig
Es kommt ein (Dialog-)Menü, dort wählt man
  Enable/Disable
in der (alphabetisch sortierten) relativ langen Liste wählen wir
  uif
mit der Leertaste das Sternchen (*) entfernen (bzw. setzen)
  OK
Dann im Menü den 2. Punkt von unten auswählen:
  Finished
Dann nochmal
  OK
und als letzten Punkt aufrufen:
  Quit
Dann neu booten, sonst bleibt die Firewall weiter aktiv, denn es
wurde ja nur das Init-Script "ausgeschaltet".




Zeile 192: Zeile 354:


== Attacken abwehren ==
== Attacken abwehren ==


   apt-get install fail2ban
   apt-get install fail2ban
Zeile 211: Zeile 374:
   /etc/init.d/fail2ban restart
   /etc/init.d/fail2ban restart


in "/var/log/fail2ban.log" seht ihr anschließend das sehr spannende Ergebnis.
in "/var/log/fail2ban.log" sieht man anschließend das sehr spannende Ergebnis.




Zeile 220: Zeile 383:


----
----
<div align="right">[[Delixs:Entwicklungsumgebung|zurück]] | [[Hauptseite]]</div>
<div align="right">[[Installation:Entwicklungsumgebung|zurück]] | [[Hauptseite]]</div>
 
Hans-Dietrich Kirmse, Harry Jede 2009
 
[[Kategorie:DebianSqueeze]]

Aktuelle Version vom 28. März 2011, 19:17 Uhr


Diese Seite ist momentan eine Baustelle im Zustand: 1

Wird bearbeitet von: Kirmse
Hilfe zum Bearbeitungsstatus: Hilfe:Status eines Artikels


Firewall

Sie dient dem Schutz des Schulnetzes gegen Attacken aus dem Internet.

Installationsscript

<source lang="text"> ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

  1. !/bin/bash
  1. Kapitel: Firewall


  1. wir installieren das Firewallscript

cp -f /root/delixs/conffiles/firewall.sh /usr/sbin/firewall.sh chown root:root /usr/sbin/firewall.sh chmod 755 /usr/sbin/firewall.sh

  1. wir sichern erstmal den bisherigen Stand der debconf-Datenbank

debconf-get-selections > /root/delixs/confbackup/debconf_uif.0

  1. wir installieren uif (nach einem Vorschlag von Harry Jede)
  2. (gewählt: "nicht ändern")

aptitude install -R uif

  1. hier sind die Änderungen von "aptitude install uif" drin

debconf-get-selections > /root/delixs/confbackup/debconf_uif.1

  1. wir löschen uif (dabei bleibt u.a. das Initscript erhalten)

aptitude remove uif

  1. wir ersetzen dieses Initscript durch unser 'uif'

cp -f /root/delixs/conffiles/uif /etc/init.d/uif chown root:root /etc/init.d/uif chmod 755 /etc/init.d/uif ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ </source>


Script "/usr/sbin/firewall.sh"


<source lang="text"> ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

  1. !/bin/sh
  1. dieses Firewall-Script wurde nach der Anleitung und Vorlage
  2. aus dem Buch "Linux-Server mit Debian/GNU-Linux" von
  3. Eric Amberg erstellt
  1. nach Hinweis von Harry und Thorsten wurde DROP durch REJECT ersetzt
  2. letzte Ueberarbeitung 22.4.2009 HD.Kirmse
  3. allerdings bei den Policy habe ich wieder DROP gesetzt,
  4. weil sonst als Meldung kommt: iptables: Bad policy name
  1. Variablen

INET_IFACE="eth0" LAN_IFACE="eth1" LAN_IP="10.100.0.1" LAN_NET="10.100.0.0/16" # wegen den Teilnetzen die 16

  1. Setzen von Kernelparametern

echo "1">/proc/sys/net/ipv4/ip_forward echo "1">/proc/sys/net/ipv4/ip_dynaddr for i in /proc/sys/net/ipv4/conf/*/{accept_source_route,accept_redirects,send_redirects}; do

  echo 0 > $i

done echo "1">/proc/sys/net/ipv4/icmp_echo_ignore_broadcasts echo "1">/proc/sys/net/ipv4/tcp_syncookies

  1. Module laden

modprobe ip_conntrack modprobe ip_conntrack_ftp modprobe ip_nat_ftp modprobe ipt_LOG modprobe ipt_MASQUERADE

  1. Information auf der Konsole

echo "Initialisiere Firewall ..."

  1. erstmal aufraeumen und Policies setzen

iptables -F # Standard-Chains iptables -X # Userdefinierte Chains iptables -P INPUT DROP # Policy fuer INPUT iptables -P OUTPUT DROP iptables -P FORWARD DROP iptables -Z # Zaehler auf 0 setzen iptables -N MYDROP # eigene Chains erstellen iptables -N MYACCEPT

  1. eigene Chains MYDROP und MYACCEPT konfigurieren
  2. das wird (nur) wegen loggen gemacht

iptables -A MYDROP -j LOG --log-prefix "FW-DROP: " iptables -A MYDROP -j REJECT iptables -A MYACCEPT -j LOG --log-prefix "FW-ACCEPT: " iptables -A MYACCEPT -j ACCEPT

  1. Stateful Inspection

iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT iptables -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT iptables -A INPUT -m state --state INVALID -j MYDROP iptables -A FORWARD -m state --state INVALID -j MYDROP

  1. Loopback-Kommunikation

iptables -A INPUT -i lo -j ACCEPT iptables -A OUTPUT -o lo -j ACCEPT

  1. Antispoofing

iptables -A FORWARD -s $LAN_NET -i $INET_IFACE -j REJECT iptables -A FORWARD -s ! $LAN_NET -i $LAN_IFACE -j REJECT iptables -A FORWARD -s 127.0.0.0/8 -j REJECT


  1. Zugriff vom Gateway auf das Internet fuer DNS, HTTP und FTP

iptables -A OUTPUT -p udp --dport 53 -j ACCEPT iptables -A OUTPUT -p tcp -m multiport --destination-port 21,22,80,443 -j ACCEPT


  1. Zugriff auf den Nameserver / DNS-Caching-Server vom LAN aus

iptables -A INPUT -i $LAN_IFACE -s $LAN_NET -p udp --dport 53 -j MYACCEPT


  1. DHCP Server port 67 - Clients nehmen Port 68

iptables -A INPUT -i $LAN_IFACE -s $LAN_NET -p udp --dport 67 -j MYACCEPT


  1. ICMP (z.B. Ping) nach draussen erlauben
  2. (nur) aus dem lokalen Netz annehmen

iptables -A OUTPUT -p icmp -j ACCEPT iptables -A INPUT -i $LAN_IFACE -s $LAN_NET -p icmp -j ACCEPT


  1. SSH-Zugriff auf den Server erlauben (auch von aussen)

iptables -A INPUT -p tcp --dport 22 -j MYACCEPT


  1. Zugriff auf den WWW-Server

iptables -A INPUT -i $LAN_IFACE -s $LAN_NET -p tcp --dport 80 -j MYACCEPT iptables -A INPUT -i $LAN_IFACE -s $LAN_NET -p tcp --dport 443 -j MYACCEPT


  1. Zugriff auf den Proxy-Server

iptables -A INPUT -i $LAN_IFACE -s $LAN_NET -p tcp --dport 8080 -j MYACCEPT

  1. iptables -A INPUT -i $LAN_IFACE -s $LAN_NET -p tcp --dport 443 -j MYACCEPT


  1. Samba

iptables -A INPUT -i $LAN_IFACE -s $LAN_NET -p udp -m multiport --destination-port 137,138 -j MYACCEPT iptables -A INPUT -i $LAN_IFACE -s $LAN_NET -p tcp -m multiport --destination-port 139,445 -j MYACCEPT iptables -A OUTPUT -o $LAN_IFACE -s $LAN_NET -p udp -m multiport --destination-port 137,138 -j MYACCEPT iptables -A OUTPUT -o $LAN_IFACE -s $LAN_NET -p tcp -m multiport --destination-port 139,445 -j MYACCEPT


  1. SWAT (SAMBA Administration Tool)

iptables -A INPUT -i $LAN_IFACE -s $LAN_NET -p tcp --dport 901 -j MYACCEPT


  1. LDAP

iptables -A INPUT -i $LAN_IFACE -s $LAN_NET -p tcp --dport 389 -j MYACCEPT iptables -A INPUT -i $LAN_IFACE -s $LAN_NET -p udp --dport 389 -j MYACCEPT


  1. Logging aller verbleibender Pakete,
  2. wird durch MYDROP nicht erfasst und durch die Policy verworfen

iptables -A INPUT -j LOG --log-prefix "FW-LAST-DROP: " iptables -A OUTPUT -j LOG --log-prefix "FW-LAST-DROP: " iptables -A FORWARD -j LOG --log-prefix "FW-LAST-DROP: "

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ </source>


Init-Script "/etc/init.d/uif"


<source lang="text"> ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

  1. ! /bin/bash
      1. BEGIN INIT INFO
  2. Provides: uif
  3. Required-Start: $network $syslog $remote_fs
  4. Required-Stop: $network $syslog $remote_fs
  5. Default-Start: 2 3 4 5
  6. Default-Stop: 0 1 6
  7. Short-Description: Start the firewall
      1. END INIT INFO
  1. dieses Script ist eine Modifikation des Scriptes uif
  2. zum Starten des eigenen Firewallscriptes fuer Delixs
  3. 24.4.2009 HD.Kirmse
  1. Version: @(#)/etc/init.d/uif 1.0.0 21-Feb-2002 pollmeier@gonicus.de
  1. RedHat specific settings - ignore for real systems ---------------------------
  2. chkconfig: - 60 95
  3. description: provides iptables packet filtering

PATH=/usr/sbin:/sbin:$PATH UIF=/usr/sbin/firewall.sh

  1. Binaries installed?

if [ ! -f /sbin/iptables ]; then echo "iptables not found - firewall.sh not started" exit 1 fi

  1. ist unser Script firewall.sh installiert?

if [ ! -f $UIF ]; then echo "firewall.sh not found - aborting" exit 1 fi

case "$1" in

start) echo "Starting firewall.sh" $UIF # Aufruf des Firewallscriptes exit 0 ;;

stop) echo "Stopping firewall.sh isn't enable" exit 0 ;;

status) if [ "`id -u`" != "0" ]; then echo "Can't retrieve status information. You need to be root.\n" exit 1 fi

# Simple rule listing echo -e "\nRule listing:\n" iptables-save | sed "/^#/d" echo -e "\n\n" ;;

restart|reload|force-reload) $0 start ;;

  • )
  1. diese Anweisung wird nur ausgefuehrt, wenn uif direkt
  2. und ohne Parameter aufgerufen wird. Service faengt diesen Fall ab

echo "Usage: $0 start|stop|status|restart|reload" exit 1 esac

exit 0

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ </source>


Falls Sie die Dateien unter Windows bearbeitet haben, müssen diese noch umgewandelt werden:

 dos2unix /usr/sbin/firewall.sh
 dos2unix /etc/init.d/uif


Firewall nutzen

Diese Anleitung ist für das Deaktivieren und Aktivieren der Firewall

 Aufruf: sysvconfig

Es kommt ein (Dialog-)Menü, dort wählt man

 Enable/Disable

in der (alphabetisch sortierten) relativ langen Liste wählen wir

 uif

mit der Leertaste das Sternchen (*) entfernen (bzw. setzen)

 OK

Dann im Menü den 2. Punkt von unten auswählen:

 Finished

Dann nochmal

 OK

und als letzten Punkt aufrufen:

 Quit


Dann neu booten, sonst bleibt die Firewall weiter aktiv, denn es wurde ja nur das Init-Script "ausgeschaltet".



Attacken abwehren

 apt-get install fail2ban

Datei "/etc/fail2ban/jail.conf" bearbeiten:


 ignoreip = 127.0.0.1 <weitere IP>
 bantime  = 3600
 [ssh]
 enabled = true
 port    = ssh
 filter  = sshd
 logpath  = /var/log/auth.log
 maxretry = 3

Einlesen:

 /etc/init.d/fail2ban restart

in "/var/log/fail2ban.log" sieht man anschließend das sehr spannende Ergebnis.


Weblinks



zurück | Hauptseite

Hans-Dietrich Kirmse, Harry Jede 2009