Wie kann ich alle bis auf drei Ports in Ubuntu blockieren?

22

Wie kann ich alle Ports außer 1962, 999, 12020 blockieren?

Ein Port für SSH und zwei weitere für eine Art Skript. Es ist also notwendig, das Senden über diese Ports zuzulassen, oder?

Meine Iptables:

# Generated by iptables-save v1.4.4 on Sat Feb 25 17:25:21 2012
*mangle
:PREROUTING ACCEPT [643521:136954367]
:INPUT ACCEPT [643521:136954367]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [645723:99904505]
:POSTROUTING ACCEPT [645723:99904505]
COMMIT
# Completed on Sat Feb 25 17:25:21 2012
# Generated by iptables-save v1.4.4 on Sat Feb 25 17:25:21 2012
*filter
:INPUT ACCEPT [643490:136950781]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [645723:99904505]
-A INPUT -p tcp -m tcp --dport 1962 -j ACCEPT 
-A INPUT -p tcp -m tcp --dport 999 -j ACCEPT 
COMMIT
# Completed on Sat Feb 25 17:25:21 2012
# Generated by iptables-save v1.4.4 on Sat Feb 25 17:25:21 2012
*nat
:PREROUTING ACCEPT [5673:734891]
:POSTROUTING ACCEPT [2816:179474]
:OUTPUT ACCEPT [2816:179474]
COMMIT
# Completed on Sat Feb 25 17:25:21 2012

Entschuldigung, aber ich bin ein echter Neuling, wenn es um diese Dinge geht, und ich möchte meinen Server nur sicherer machen.

okapa
quelle
Warum nicht UFW benutzen?
Soviero

Antworten:

25

Zuerst sollten Sie immer spülen, um sicherzugehen, was bereits definiert ist ... nichts

iptables -F

Setzen Sie dann die Standardrichtlinie der INPUT-Kette auf DROP, wenn das Ende erreicht ist und keine Regel übereinstimmt:

iptables -P INPUT DROP

Um sicherzustellen, dass der Loopback nicht beeinträchtigt wird, sollten Sie hinzufügen

iptables -A INPUT -i lo -p all -j ACCEPT
iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT

um allen Datenverkehr auf dem lo-if und jeden eingehenden Datenverkehr für die von Ihnen eingerichteten Verbindungen zuzulassen. Fügen Sie danach jede Regel hinzu, die Sie für Ihre Dienste benötigen (vergessen Sie nicht, ssh zu öffnen, wenn Sie es brauchen! Sonst sind Sie draußen) :

iptables -A INPUT -p tcp -m tcp --dport 1962 -j ACCEPT 
iptables -A INPUT -p tcp -m tcp --dport 999 -j ACCEPT 
iptables -A INPUT -p tcp -m tcp --dport 12020 -j ACCEPT 

Ein kleiner Trick, den ich mache, um mich und andere davon abzuhalten, versehentlich Löcher in die Sicherheit zu bohren, die ich schließlich hinzufüge:

iptables -A INPUT -j DROP

Diese Zeile stimmt mit allem für die INPUT-Kette überein und die Richtlinie sollte nichts erhalten. Dies hat den Vorteil, dass selbst wenn Sie eine ACCEPT-Regel irgendwann nach der Initialisierung Ihres Regelsatzes hinzufügen, diese nie überprüft wird, da zuvor alles gelöscht wurde. So wird sichergestellt, dass Sie alles an einem Ort aufbewahren müssen.

Für Ihre Frage sieht das Ganze zusammenfassend so aus:

iptables -F
iptables -P INPUT DROP
iptables -A INPUT -i lo -p all -j ACCEPT
iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A INPUT -p tcp -m tcp --dport 1962 -j ACCEPT 
iptables -A INPUT -p tcp -m tcp --dport 999 -j ACCEPT 
iptables -A INPUT -p tcp -m tcp --dport 12020 -j ACCEPT 
iptables -A INPUT -j DROP
Mose
quelle
1
Nur zur Verdeutlichung: -PLegt die Richtlinie für die Kette fest. Es wird keine Regel hinzugefügt. Die Richtlinie der Kette gibt die Aktion an, die für das Paket ausgeführt werden soll, wenn das Ende der Kette erreicht ist. Aus diesem Grund ist es ratsam, Ihre Regeln hinzuzufügen, bevor Sie eine DROPRichtlinie festlegen .
Belmin Fernandez
Wenn ich mich richtig erinnere, spielt es normalerweise keine Rolle, wo die Richtlinie festgelegt wird. Vielleicht sollte ich meine Antwort ein wenig ändern.
Mose
3
ein hinweis: seien sie sehr vorsichtig, wenn sie standardrichtlinien ablehnen und löschen, wenn sie eine firewall über ssh einrichten. Du wirst dich aussperren. Ja, das habe ich getan. :-) Jetzt mache ich iptables -A INPUT -j DROPstattdessen normalerweise die letzte Regel, genau aus diesem Grund.
Sirex
Ich habe meine SSH-Warnung ein wenig hervorgehoben ;-)
Mose
@Mose: Richtig, egal im Allgemeinen. Ich habe versucht, das hervorzuheben. Aber es könnte dazu führen, dass Sie ausgesperrt werden, wie es bereits erwähnt wurde.
Belmin Fernandez
20

Eine Antwort von einem Neuling wie dir :-) Ich musste auch meinen Ubuntu-Server sichern, iptables zu lernen war ein Schmerz, den ich nicht durchstehen konnte. UFW (Uncomplicated Firewall) ist ein Programm, das die Konfiguration der Firewall so einfach wie möglich macht.

  • installiere ufw:

    sudo apt-get install ufw
    
  • deaktiviere es sofort (ich musste rescue-boot machen, weil ich von meinem eigenen SSH-Login ausgeschlossen war):

    sudo ufw disable
    
  • setze "deny" als Standardregel (dies blockiert alle Ports):

    sudo ufw default deny
    
  • erlaube Ports die du brauchst:

    sudo ufw allow to 1962
    sudo ufw allow to 999
    sudo ufw allow to 12020
    
    sudo ufw allow from 1962
    sudo ufw allow from 999
    sudo ufw allow from 12020
    
  • Wenn Sie sicher sind, dass die oben genannten Regeln Ihre SSH-Verbindung nicht unterbrechen, aktivieren Sie ufw:

    sudo ufw enable
    

Die Dokumente sind gut geschrieben und enthalten weitere Beispiele: https://help.ubuntu.com/community/UFW

Vlad Gerasimov
quelle
1
Wenn Sie mit Firewall-Konfigurationen arbeiten, empfiehlt es sich möglicherweise, einen Cron-Job zu erstellen, der die Firewall wieder deaktiviert. Nur für den Fall, dass Sie ausgesperrt werden.
Pymkin
Beachten Sie, dass dies mit ufw 0.35 nicht funktioniert und Fehler wie ERROR: Bad destination addressund auslöstERROR: Bad source address
Dave
Und wie lassen Sie alle Ports außer einem Port für eine bestimmte Schnittstelle zu? Ich verwende die Standardverweigerungsregel und möchte den DNS-Port 53 auf der Ethernet-Schnittstelle blockieren, um ein DNS-Leck bei Verwendung eines VPN zu verhindern. Derzeit muss ich alle Ports zulassen, die ich für private IP-Bereiche verwenden möchte, was nicht sehr praktisch ist.
Taufe