Entwicklungsumgebung/Firewall: Unterschied zwischen den Versionen

Aus Delixs
Zur Navigation springen Zur Suche springen
(Installationsscript)
(Scripte)
Zeile 5: Zeile 5:
== 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:
 
debby-3:/home/hjede/qemu-run# grep -Ev '(^#|^$)' /etc/uif/uif.conf |wc
    44      96    851
debby-3:/home/hjede/qemu-run# iptables-save |wc
    99    606    4448
 
 
Beispiel:
 
<source lang="text">
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
service {
    traceroute  udp(32769:65535/33434:33523) icmp(11)
    ping        icmp(8)
    ipp        udp(/631)
}
network {
    localhost  127.0.0.1
    all        0.0.0.0/0
    trusted    192.168.231.0/24
    dmz        192.168.12.0/24
    gateway    192.168.12.1
}
interface {
    loop    lo
    ETHA        eth0
    ETH1        eth1
    BR0        br0
    ETH0        ETHA BR0
}
input {
    in+  i=loop    s=localhost
    in+  i=ETH0 s=trusted
    in+  p=ping,traceroute
    in-  p=ipp i=ETH1 f=reject
    in-  f=log(input),reject
}
output {
    out+ o=loop    d=localhost
    out+ d=all
    out+ o=ETH0,ETH1
    out- f=log(output),reject
}
forward {
    fw+  i=BR0 o=BR0
    fw> o=ETH1
    fw+ o=ETH1 s=trusted
    fw-  f=log(forward),reject
}
masquerade {
    masq+ o=ETH1 s=trusted d=gateway f=log(masq)
    masq+ o=ETH1 s=trusted d=all
}
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
</source>


Und hier die lange & komplizierte Ausgabe von iptables-save:
<source lang="text">
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# Generated by iptables-save v1.3.6 on Sat Jun  7 13:13:25 2008
*nat
:PREROUTING ACCEPT [61495:5257743]
:POSTROUTING ACCEPT [22191:3933471]
:OUTPUT ACCEPT [6405:1246646]
:13MASQUERADElog - [0:0]
-A POSTROUTING -s 192.168.231.0/255.255.255.0 -d 192.168.12.1 -o eth1 -j
13MASQUERADElog
-A POSTROUTING -s 192.168.231.0/255.255.255.0 -o eth1 -j MASQUERADE
-A 13MASQUERADElog -m limit --limit 20/min -j LOG --log-prefix "FW
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
# Generated by iptables-save v1.3.6 on Sat Jun  7 13:13:25 2008
*filter
:INPUT DROP [0:0]
:FORWARD DROP [0:0]
:OUTPUT DROP [0:0]
:12DROPlog - [0:0]
:1_1 - [0:0]
:4DROPlog - [0:0]
:8DROPlog - [0:0]
:ACCOUNTINGFORWARD - [0:0]
:ACCOUNTINGINPUT - [0:0]
:ACCOUNTINGOUTPUT - [0:0]
:ACCOUNTINGSTATELESSFORWARD - [0:0]
:ACCOUNTINGSTATELESSINPUT - [0:0]
:ACCOUNTINGSTATELESSOUTPUT - [0:0]
:MYREJECT - [0:0]
:STATEFORWARD - [0:0]
:STATEINPUT - [0:0]
:STATELESSFORWARD - [0:0]
:STATELESSINPUT - [0:0]
:STATELESSOUTPUT - [0:0]
:STATENOTNEW - [0:0]
:STATEOUTPUT - [0:0]
-A INPUT -j STATEINPUT
-A INPUT -s 127.0.0.1 -i lo -j ACCEPT
-A INPUT -s 192.168.231.0/255.255.255.0 -j 1_1
-A INPUT -p udp -m udp --sport 32769:65535 --dport 33434:33523 -j ACCEPT
-A INPUT -p icmp -m icmp --icmp-type 8 -j ACCEPT
-A INPUT -p icmp -m icmp --icmp-type 11 -j ACCEPT
-A INPUT -i eth1 -p udp -m udp --dport 631 -j MYREJECT
-A INPUT -j 4DROPlog
-A FORWARD -j STATEFORWARD
-A FORWARD -i br0 -o br0 -j ACCEPT
-A FORWARD -o eth1 -p tcp -m tcp --tcp-flags SYN,RST SYN -j
TCPMSS --clamp-mss-to-pmtu
-A FORWARD -s 192.168.231.0/255.255.255.0 -o eth1 -j ACCEPT
-A FORWARD -j 12DROPlog
-A OUTPUT -j STATEOUTPUT
-A OUTPUT -d 127.0.0.1 -o lo -j ACCEPT
-A OUTPUT -j ACCEPT
-A OUTPUT -o eth1 -j ACCEPT
-A OUTPUT -o br0 -j ACCEPT
-A OUTPUT -o eth0 -j ACCEPT
-A OUTPUT -j 8DROPlog
-A 12DROPlog -m limit --limit 20/min -j LOG --log-prefix "FW REJECT
(forward): " --log-level 7 --log-tcp-options --log-ip-options
-A 12DROPlog -j MYREJECT
-A 1_1 -i br0 -j ACCEPT
-A 1_1 -i eth0 -j ACCEPT
-A 4DROPlog -m limit --limit 20/min -j LOG --log-prefix "FW REJECT
(input): " --log-level 7 --log-tcp-options --log-ip-options
-A 4DROPlog -j MYREJECT
-A 8DROPlog -m limit --limit 20/min -j LOG --log-prefix "FW REJECT
(output): " --log-level
7 --log-tcp-options --log-ip-options
-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
-A STATEFORWARD -j ACCOUNTINGFORWARD
-A STATEFORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT
-A STATEFORWARD -m state --state
INVALID,RELATED,ESTABLISHED,UNTRACKED -j STATENOTNEW
-A STATEINPUT -m state --state INVALID -j STATELESSINPUT
-A STATEINPUT -j ACCOUNTINGINPUT
-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>
== Installationsscript ==


<source lang="text">
<source lang="text">
Zeile 228: Zeile 43:
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
</source>
</source>
Script "/usr/sbin/firewall.sh"
<source lang="text">
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
#!/bin/sh
# dieses Firewall-Script wurde nach der Anleitung und Vorlage
# aus dem Buch "Linux-Server mit Debian/GNU-Linux" von
# Eric Amberg erstellt
# nach Hinweis von Harry und Thorsten wurde DROP durch REJECT ersetzt
# letzte Ueberarbeitung 22.4.2009  HD.Kirmse
# allerdings bei den Policy habe ich wieder DROP gesetzt,
# weil sonst als Meldung kommt: iptables: Bad policy name
#
# 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
#
# 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
#
# Module laden
#
modprobe ip_conntrack
modprobe ip_conntrack_ftp
modprobe ip_nat_ftp
modprobe ipt_LOG
modprobe ipt_MASQUERADE
#
# 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
#
# 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>
Init-Script "/etc/init.d/uif"
<source lang="text">
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
#! /bin/bash
### BEGIN INIT INFO
# Provides:          uif
# Required-Start:    $network $syslog $remote_fs
# Required-Stop:    $network $syslog $remote_fs
# Default-Start:    2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: Start the firewall
### END INIT INFO
#############################################################
#
# dieses Script ist eine Modifikation des Scriptes uif
# zum Starten des eigenen Firewallscriptes fuer Delixs
# 24.4.2009 HD.Kirmse
#
#############################################################
#
# Version:      @(#)/etc/init.d/uif  1.0.0  21-Feb-2002  pollmeier@gonicus.de
#
# RedHat specific settings - ignore for real systems ---------------------------
# chkconfig: - 60 95
# description: provides iptables packet filtering
PATH=/usr/sbin:/sbin:$PATH
UIF=/usr/sbin/firewall.sh
# Binaries installed?
if [ ! -f /sbin/iptables ]; then
echo "iptables not found - firewall.sh not started"
exit 1
fi
# 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
;;
*)
# diese Anweisung wird nur ausgefuehrt, wenn uif direkt
# und ohne Parameter aufgerufen wird. Service faengt diesen Fall ab
echo "Usage: $0 start|stop|status|restart|reload"
exit 1
esac
exit 0
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
</source>
== 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 ==
== Attacken abwehren ==


   apt-get install fail2ban
   apt-get install fail2ban
Zeile 251: Zeile 363:
   /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.





Version vom 24. Oktober 2009, 20:23 Uhr

Uberarbeiten Diese Seite sollte nochmals überarbeitet werden. Eine Begründung befindet sich in der Regel unter Diskussion (oben).


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. 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>



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