Entwicklungsumgebung/Firewall
Diese Seite ist momentan eine Baustelle im Zustand: 1
-
0
-
1
-
2
-
3
-
4
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
Hans-Dietrich Kirmse, Harry Jede 2009