Lenny/Firewall

Aus Delixs
Zur Navigation springen Zur Suche springen


Baustelle Archiv: Dieser Artikel beschreibt nicht die Funktionalität des derzeit aktuellen delixs-Servers. Er beschreibt ältere Schulserver-Funktionen und dient dem Zweck der Archivierung.


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