Firewall / iptables Check

jochen35

New Member
Hallo,

für meinen Root-Server, der die üblichen Dienste (Web, Mail, FTP) zur Verfügung stellen soll, habe ich folgende iptables-Konfiguration erstellt und wäre Euch über Anregungen und Kritik zu dieser Konfiguration sehr dankbar.

Gruß
Jochen

PHP:
*mangle
:PREROUTING ACCEPT [0:0]
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
:POSTROUTING ACCEPT [0:0]
COMMIT

*nat
:PREROUTING ACCEPT [0:0]
:INPUT ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
:POSTROUTING ACCEPT [0:0]
COMMIT

*filter
:INPUT DROP [0:0]
:OUTPUT DROP [0:0]
:FORWARD DROP [0:0]

#################################################################
### Incoming Traffic
#################################################################

-A INPUT -p tcp --tcp-flags SYN,RST SYN,RST -j DROP # Portscan - SYN + RST
-A INPUT -p tcp --tcp-flags SYN,FIN SYN,FIN -j DROP # Portscan - SYN + FIN
-A INPUT -p tcp --tcp-flags ALL FIN,URG,PSH -j DROP # Portscan - FIN + URG + PSH
-A INPUT -p tcp --tcp-flags ALL ALL -j DROP # Portscan - ALL Flags
-A INPUT -p tcp --tcp-flags ALL NONE -j DROP # Portscan - nmap Null scan
-A INPUT -p tcp --tcp-flags ALL FIN -j DROP # Portscan - nmap FIN stealth scan
-A INPUT -p tcp --tcp-flags ALL URG,ACK,PSH,RST,SYN,FIN -j DROP # Portscan - XMAS
-A INPUT -m state --state INVALID -j DROP # Invalid Packet

-A INPUT -i lo -j ACCEPT # Loopback (localhost)
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT # Established Sessions
-A INPUT -p icmp --icmp-type echo-request -j ACCEPT # ICMP - Echo-Request (8)
-A INPUT -i eth0 -p udp --dport 67:68 --sport 67:68 -j ACCEPT # DCHP - Client

-A INPUT -p tcp --dport 22 -m state --state NEW -j ACCEPT # SSH - OpenSSH
-A INPUT -p tcp --dport 80 -m state --state NEW -j ACCEPT # HTTP - nginx
-A INPUT -p tcp --dport 443 -m state --state NEW -j ACCEPT # HTTPS - nginx
-A INPUT -p tcp --dport 21 -m state --state NEW -j ACCEPT # FTP - Pure-FTP
-A INPUT -p tcp --dport 25 -m state --state NEW -j ACCEPT # SMTP - Exim
-A INPUT -p tcp --dport 465 -m state --state NEW -j ACCEPT # SMTPS - Exim
-A INPUT -p tcp --dport 110 -m state --state NEW -j ACCEPT # POP3 - Courier
-A INPUT -p tcp --dport 995 -m state --state NEW -j ACCEPT # POP3S - Courier
-A INPUT -p tcp --dport 143 -m state --state NEW -j ACCEPT # IMAP - Courier
-A INPUT -p tcp --dport 993 -m state --state NEW -j ACCEPT # IMAPS - Courier

-A INPUT -j DROP # Any

#################################################################
### Outgoing Traffic
#################################################################

-A OUTPUT -m state --state INVALID -j DROP # Invalid Packet

-A OUTPUT -o lo -j ACCEPT # Loopback (localhost)
-A OUTPUT -m state --state RELATED,ESTABLISHED -j ACCEPT # Established Sessions
-A OUTPUT -p icmp --icmp-type echo-request -j ACCEPT # ICMP - Echo-Request (8)
-A OUTPUT -o eth0 -p udp --dport 67:68 --sport 67:68 -j ACCEPT # DCHP - Client

-A OUTPUT -p tcp --dport 53 -m state --state NEW -j ACCEPT # DNS - System
-A OUTPUT -p udp --dport 53 -m state --state NEW -j ACCEPT # DNS - System
-A OUTPUT -p udp --dport 123 -m state --state NEW -j ACCEPT # NTP - System
-A OUTPUT -p tcp --dport 43 -m state --state NEW -j ACCEPT # WHOIS - System
-A OUTPUT -p tcp --dport 80 -m state --state NEW -j ACCEPT # HTTPS - nginx
-A OUTPUT -p tcp --dport 443 -m state --state NEW -j ACCEPT # HTTPS - nginx
-A OUTPUT -p tcp --dport 21 -m state --state NEW -j ACCEPT # FTP - Pure-FTP
-A OUTPUT -p tcp --dport 25 -m state --state NEW -j ACCEPT # SMTP - Exim
-A OUTPUT -p tcp --dport 465 -m state --state NEW -j ACCEPT # SMTPS - Exim

-A OUTPUT -j DROP # Any

#################################################################
### Forward Traffic
#################################################################

-A FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT # Established Sessions

-A FORWARD -m state --state INVALID -j DROP # Invalid Packet
-A FORWARD -j DROP # Any

COMMIT
 
Sieht soweit gar nich schlecht aus, wobei man über den Sinn einer Firewall direkt auf dem Gerät streiten kann.

Nutzt du Forwarding? Wenn nicht, ist der Bereich überflüssig, wenn doch, sieht das sehr klein aus. In dem Bereich ist eine Firewall am sinnvollsten.
 
Warum erlaubst Du outbound nur die Ports die du Inbound benötigst?

Da mein Server selbst sonst keine Verbindung zu anderen Diensten (z.B. DNS-Abfragen u. SMTP-Mailausgang etc.) aufbauen kann.

PHP:
*filter
:INPUT DROP [0:0]
:OUTPUT DROP [0:0]

Es sind nun mal teilweise die gleichen Dienste, auf die andere Server und User bei mir zugreifen sollen.

Ich hättes es mir mit ":OUTPUT ACCEPT [0:0]" natürlich auch einfacher machen können - das wollte ich aber nicht.

Gruß
Jochen
 
Ich sehe keinen Sinn, outbound zu verbieten. Hat einer deinen Server gehackt und will outbound Verbindungen machen, kann er die rule problemlos löschen...
 
Macht schon Sinn, deckt ja schließlich auch Userkonten ab. Muss ja nicht immer gleich das root-Konto gekarpert sein. In Setups auf denen Dritte einen SSH-Zugang und die Möglichkeit eigene Software ausführen zu können haben, macht das in jedem Fall Sinn. Was nicht raus kommt macht schonmal keinen Ärger.

Schon faszinierend, dass den Meisten egal ist was sie ins Internet schießen, während sie penibelst darauf achten was durch ihre Firewall kommt.

wobei man über den Sinn einer Firewall direkt auf dem Gerät streiten kann.
Und genau das ist der Grund wieso eine Firewall auf dem Gerät Sinn ergibt - nämlich um den Traffic nach außen zu regulieren. Eingehender Traffic sollte natürlich schon im Idealfall vorher gefiltert woden sein.
 
Schon faszinierend, dass den Meisten egal ist was sie ins Internet schießen
Ich vertraue mir selber mehr...

während sie penibelst darauf achten was durch ihre Firewall kommt.
... als irgendwelchen chinesischen Zugriffen. Zudem werden die meisten Angriffen von Servern durchgeführt, die von inkompetenten Admins gewartet werden. Ich zähle mich mal nicht zu denen.
 
Bitte sieh das differenziert.
Ich finde nur es gehört dazu sich damit zu beschäftigen was ins Internet geschossen wird.

Es geht nicht darum in wie weit du dir selber oder anderen vertraust. In meinem Beispiel sprach ich auch von Dritten die Zugriff haben - welchen man eigentlich so wenig Vertrauen wie nötig gegenüber bringen sollte wenn es um Sicherheit geht.

Nichts desto trotz hat man die Möglichkeit seinen ausgehenden Datenverkehr zu regulieren und auf das nötigste einzuschränken. Dabei heißt es doch immer so viel Rechte wie nötig, so wenig wie möglich. Das sehe ich hier genauso. Was nicht benötigt wird wird abgeschalten.
Ob einem der Aufwand wert ist und ob das in einem Setup überhaupt Sinn ergibt muss jeder Admin für sich entscheiden.
Ich sehe hier nur einen bedeutsamen Sinn dahinter und das wollte ich Jochen35 bestätigen.

Mit deiner Argumentation kommen wir aber nicht weit, da du nur den Fall aufzeigst, in dem eh schon alles zu spät ist. Das würde man mathematisch als Trivialfall bezeichnen und wollen wir deshalb nicht als Ausgangssituation sehen.

Aber nehmen wir mal an ein Benutzerkonto wurde gehackt und dort will sich eine Software breit machen. Durch Filterung des ausgehenden Datenverkehrs können wir Verbindunen auf unerlaubten Ports verweigern und dies gleichzeitig in einem IDS als Indikator dafür nutzen, dass von einem User ungewöhnliche Verbindungsaufrufe stattgefunden haben.

In meinen Augen hat das daher durchweg seine Berechtigung. Du darfst da aber gerne eine andere Meinung haben.

Grüße
 
Macht schon Sinn, deckt ja schließlich auch Userkonten ab. Muss ja nicht immer gleich das root-Konto gekarpert sein. In Setups auf denen Dritte einen SSH-Zugang und die Möglichkeit eigene Software ausführen zu können haben, macht das in jedem Fall Sinn. Was nicht raus kommt macht schonmal keinen Ärger.

second that :yes:
 
Back
Top