Das Sichermachen gliedert sich in grob 2 Schritte: -------------------------------------------------- 1. Deaktivieren nicht benötigter Dienste 2. Beschränken der verbleibenden Dienste soweit nötig 1. Feststellen offener Ports Als erstes sollte überprüft werden, welche Dienste überhaupt laufen und auf welche grundsätzlich verzichtet werden kann. Mit dem Kommando netstat -lp |less (als root absetzen). Damit bekommt man eine Liste der einzelnen offenen Ports und dessen zugehöriges Programm. Hier muß nun entschieden werden, was nicht mehr benötigt wird. Grundsätzlich wird außer einem eventuell laufenden named nichts benötigt, wenn nur lokal gearbeitet wird. Wenn man nicht weiß, was es ist, mach's dicht. 2. Deaktivieren Es gibt zwei Arten von Programmen aus netzwerktechnischer Sicht: - Standalone (squid, sendmail, ssh, etc.) - Inetd (telnet, ftp, etc.) Standalone-Programme werden für den nächsten Neustart in /sbin/init.d/rc2.d deaktiviert durch Löschen der entsprechenden Links. Sofort beendet werden die Programme durch ein /sbin/init.d/prog stop Prog steht für den Namen des Programmes, bitte in /sbin/init.d nachsehen, was es dort genau gibt. Inetd Programme werden in der /etc/inetd.conf auskommentiert werden. Hernach muß mit kill -1 `cat /var/run/inetd.pid` dem inetd gesagt werden, daß er seine Konfiguration neu einlesen soll. Damit sind dann nicht mehr benötigte Programme deaktiviert. 3. Beschränken 3.1 Über die Konfiguration Programme wie squid, samba oder named können über entsprechende Statements in deren Konfigurationsdatei dazu gebracht werden, sich nur an bestimmte IP Adressen zu klemmen. So kann man z.B. den named nur an localhost (127.0.0.1) und an die IP Adresse der internen Ethernetkarte klemmen. Dieser Dienst ist dann von außen nicht mehr erreichbar. Wohl kommen Antworten auf Anfragen von diesen Dienst wieder an ihn zurück. Wie das genau geht, ist vom Dienst abhängig und kann in der zugehörigen Doku nachgelesen werden. 3.2 Inetd/TCP Wrappers Alle Inetd-Programme und manche Standalone Programme können über einen Eintrag in der /etc/hosts.allow auf einen IP Adreßbereich beschränkt werden, von dem aus zugegriffen werden darf. Zum Beispiel das interne 192.168er Netz. Beispiele stehen in der /etc/hosts.allow. Der Programmname muß entweder 1:1 aus der inetd.conf übernommen werden oder bei Standalones kann das auch unabhängig vom eigentlichen Programmanmen sein. Siehe zugehörige Doku. 4. Dichtmachen Manche Programme lassen sich nicht so ohne weiteres beschränken. Das betrifft hauptsächlich UDP basierte Dienste wie z.B. xntpd oder snmp. Als zusätzliche Sicherheit können auch bereits wie oben restriktierte Programme noch zusätzlich dicht gemacht werden. Dazu müssen entsprechende Einträge in die /etc/netperm-table gemacht werden. Siehe die dortigen Einträge als Beispiel. Wichtig bei UDP: Da UDP ein verbindungsloses Protokoll ist, können Antworten nicht von Verbindungsaufforderungen unterschieden werden. Das äußert sich dahingehend, daß ein Dichtmachen von snmp ein Nichtfunktionieren von snmp nach außen nach sich zieht. Nachher muß ein fwrefresh abgesetzt werden, um die Änderungen zu reflektieren. Sollte das Fehlermeldungen nach sich ziehen, fehlt die Filterfunktionalität im Kernel, was da noch einkompiliert werden sollte. Siehe die 2.2 -> 2.4 Updatedoku zwecks Kurzbeschreibung Kernelkompilieren. Ein Sonderfall sind die RPC-Programme, wie NFS- und NIS-Server und dergleichen. Deren Port kann sich bei jedem Neustart theoretisch ändern. Von daher wäre es wünschenswert, wenn diese Ports mit diesem kleinen Shellsnippet nach dem Hochstarten der Kiste dicht gemacht werden könnten, da RPC generell immer wieder ausnutzbare Fehler beinhaltet. Das Interface sollte man halt auch von ppp0 auf ippp0 oder sowas ändern, wenn das notwendig wäre. rpcinfo -p localhost |grep -v "program.*vers.*proto.*port" \ |awk '{print $3"\t"$4}' |while read PROTO PORT; do iptables -t filter -A INPUT -p $PROTO -s 0/0 --destination-port $PORT \ -d 0/0 -i ppp0 -j DROP done Sollten noch Fragen sein oder jemand Tippfehler entdeckt haben -> mail an webhamster@pocnet.net. (c) 2003-2007 Patrik Schindler, Stand: 29.7.2003