Ich installiere einen neuen Centos 5.4-Server und möchte eine Reihe sauberer Regeln für den Start von muiptables haben.
Was wären die guten Regeln für den Anfang?
Ist das ein guter Ausgangspunkt:
# Allow outgoing traffic and disallow any passthroughs
iptables -P INPUT DROP
iptables -P OUTPUT ACCEPT
iptables -P FORWARD DROP
# Allow traffic already established to continue
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
# Allow ssh, ftp and web services
iptables -A INPUT -p tcp --dport ssh -i eth0 -j ACCEPT
iptables -A INPUT -p tcp --dport ftp -i eth0 -j ACCEPT
iptables -A INPUT -p udp --dport ftp -i eth0 -j ACCEPT
iptables -A INPUT -p tcp --dport ftp-data -i eth0 -j ACCEPT
iptables -A INPUT -p udp --dport ftp-data -i eth0 -j ACCEPT
iptables -A INPUT -p tcp --dport 80 -i eth0 -j ACCEPT
# Allow local loopback services
iptables -A INPUT -i lo -j ACCEPT
# Allow pings
iptables -I INPUT -p icmp --icmp-type destination-unreachable -j ACCEPT
iptables -I INPUT -p icmp --icmp-type source-quench -j ACCEPT
iptables -I INPUT -p icmp --icmp-type time-exceeded -j ACCEPT
Für was ist diese Regel:
iptables -A INPUT -p tcp --dport domain -i eth0 -j ACCEPT
UPDATE:
Es wird ein Webserver mit FTP (erforderlich), Apache, SSH, MySQL sein.
Antworten:
Ihre IPTables-Regeln scheinen für Ihren Server am besten geeignet zu sein. Aber ich würde ein paar mögliche Änderungen vorschlagen:
Sofern Sie nicht den SSH-, MySQL- und FTP-Zugriff vom gesamten Internet aus zulassen müssen, wäre es viel sicherer, die Option '--source' zu verwenden, um den Zugriff auf diese Ports nur von bestimmten zugelassenen IP-Adressen aus zu beschränken. Um beispielsweise nur SSH-Zugriff von der IP-Adresse 71.82.93.101 aus zuzulassen, ändern Sie die 5. Regel in "iptables -A INPUT -p tcp --dport ssh --source 71.82.93.101 -i eth0 -j ACCEPT". Sie müssen wahrscheinlich eine separate Regel für jede einzelne IP-Adresse hinzufügen, die Sie zulassen möchten. Weitere Informationen hierzu finden Sie in dieser Frage: iptables multiple source IPs .
Sofern auf diesem Computer kein DNS-Server ausgeführt wird, möchten Sie wahrscheinlich den Zugriff auf den Domain-Port (53) blockieren. Entfernen Sie dazu einfach die Zeile 'iptables -A INPUT -p tcp --dport domain -i eth0 -j ACCEPT'. (Dies sollte übrigens auch Ihre letzte Frage beantworten.) Wenn Sie jedoch tatsächlich einen DNS-Server betreiben, lassen Sie diese Regel in Kraft.
Wenn Sie den Remote-Zugriff auf MySQL-Clients über das Netzwerk zulassen möchten, müssen Sie die Zeile 'iptables -A INPUT -p tcp --dport 3306 -i eth0 -j ACCEPT' hinzufügen, um den externen Zugriff auf den Standard-MySQL-Port zu ermöglichen . Tun Sie dies jedoch NICHT, es sei denn, dies ist wirklich erforderlich. Wenn Sie nur lokalen MySQL-Zugriff benötigen (beispielsweise für eine PHP-App unter Apache), müssen Sie keinen Remote-MySQL-Zugriff bereitstellen. Wenn Sie nicht riskieren möchten, gehackt zu werden, stellen Sie sicher, dass Sie für alle MySQL-Benutzerkonten sichere Kennwörter benötigen und dass Ihre MySQL-Serverpakete auf dem neuesten Stand sind, wenn Sie Port 3306 für das Netzwerk öffnen.
In einem Ihrer Kommentare ("Zulassen von ssh-, dns-, ldap-, ftp- und Webdiensten") werden LDAP-Dienste erwähnt, aber in Ihrer Konfiguration gibt es keine solche Regel. Dies passiert mir häufig, wenn ich eine Beispielkonfiguration kopiere und sie ändere. Es wird die Funktion nicht beeinträchtigen, aber ich würde den Kommentar korrigieren, da irreführende Kommentare indirekt dazu führen können, dass Sie oder ein anderer Administrator in Zukunft verwirrt werden.
Nach meiner Erfahrung ist es schwierig, perfekte IPTables-Regeln zu finden, aber ich denke, Sie sind definitiv auf dem richtigen Weg. Viel Glück beim Erlernen von IPTables - diese Regeln können auf den ersten Blick komplex erscheinen, aber es ist eine sehr hilfreiche Fähigkeit für jeden Linux-Systemadministrator.
quelle
Versuchen Sie auf jeden Fall, auch Ihren ausgehenden Datenverkehr einzuschränken.
Ich habe viele Fälle gesehen, in denen PHP-Exploits dazu führen, dass jemand 'curl' oder 'wget' verwendet, um bösartigen Code von einer anderen Stelle abzurufen und ihn dann auf Ihrem Server auszuführen, um sich einem Botnetz anzuschließen.
Wenn Sie nicht erwarten, dass Apache (als Beispiel) mit anderen Websites selbst kommunizieren muss, beschränken Sie den Datenverkehr und sparen Sie sich ein wenig Zeit!
quelle
Diese Regeln können über "iptables-restore" importiert werden:
Und nur zur Veranschaulichung ... diese Standardrichtlinien sollten auch festgelegt werden, WENN die oben genannte iptables-restore nicht verwendet wird:
quelle
Warum erlauben Sie FTP und DNS? Bietet Ihr Server diese Dienste an? FTP sollte eigentlich nicht verwendet werden, außer für einige sehr spezielle Anwendungsfälle, verwenden Sie stattdessen SFTP (nicht FTPS). Warum sollten Sie auch alle anderen Ports durch symbolische Namen und http durch numerische 80 angeben? Hast du das gerade von woanders kopiert? Kein Kopieren und Rat wird Unverständnis ausgleichen. Stellen Sie sicher, dass Sie TCP, IP, Firewalls und die Protokolle der Dienste verstehen, die Sie bereitstellen werden.
quelle