Also: Gezieltes Schliessen von Ports ist in der Regel die suboptimale Variante.
Warum? Weil man nur allzu gern auch mal einen Port vergisst und sich somit eventuell unnoetigen Gefahren aussetzen kann.
Ausserdem ist es meist einfacher einfach alles dicht zu machen und nur zu oeffnen was erwuenscht ist.
Dadurch werden dann sogar Ports gesperrt die nicht belegt sind, auch wenn es im Grunde ueberfluessig ist. Dennoch bietet es den Vorteil dass ein Dienst der eventuell irgendwann mal auf einem dieser Ports laeuft gleich geschuetzt ist. Und wenn von aussen darauf zugegriffen werden muss reicht eine weitere Regel dafuer aus.
Mal ein kleines Beispiel wie nur SSH, HTTP, SMTP und POP3 fuer die Aussenwelt erreichbar sind, alles andere wird vom Paketfilter (zumindest einigermassen) RFC-gerecht abgewiesen.
Code:
iptables -A INPUT -p tcp --dport ssh -j ACCEPT
iptables -A INPUT -p tcp --dport http -j ACCEPT
iptables -A INPUT -p tcp --dport smtp -j ACCEPT
iptables -A INPUT -p tcp --dport pop3 -j ACCEPT
iptables -A INPUT -p tcp -j REJECT --reject-with tcp-reset
iptables -A INPUT -p udp -j REJECT --reject-with icmp-port-unreachable
iptables -A INPUT -j REJECT --reject-with icmp-proto-unreachable
Was diesen Regeln natuerlich noch fehlt ist die Bindung an ein Interface, wie z.B. eth0 oder ppp0, denn ueber lo, das Loopback-Interface, sollte in der Regel alles erreichbar bleiben, was z.B. bei der Kommunikation PHP<->MySQL ganz sinnvoll sein kann und auch in anderen Faellen genutzt wird. Mein Linux-Server hier im Buero hat innerhalb der letzten 72 Tage schlappe 3GB ueber dieses Interface gejagt.