Entwicklungsumgebung/Firewall: Unterschied zwischen den Versionen

Aus Delixs
Zur Navigation springen Zur Suche springen
(Die Seite wurde neu angelegt: __NOTOC__ {{Uberarbeiten}} ---- <div align="right">zurück | Hauptseite</div>)
 
 
(11 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt)
Zeile 1: Zeile 1:
__NOTOC__
__NOTOC__
{{Uberarbeiten}}
{{EditStatus|1|Kirmse}}  


== Firewall ==
Sie dient dem Schutz des Schulnetzes gegen Attacken aus dem Internet.
== Installationsscript ==
<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
# wir sichern erstmal den bisherigen Stand der debconf-Datenbank
debconf-get-selections > /root/delixs/confbackup/debconf_uif.0
# 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"
<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
#
# 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>
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>
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 ==
* http://arktur.schul-netz.de/wiki/index.php/Tools:IP-Filter




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