Im folgenden Artikel zeigen wir Ihnen, wie Sie Ihren Ubuntu- oder Debian-basierten virtuellen Server mit einer Firewall sichern und schützen können Anwendung namens iptables.
Was ist iptables?
Es ist ein Userspace-Anwendungsprogramm, das es einem Systemadministrator ermöglicht, die Tabellen zu konfigurieren, die von der Linux-Kernel-Firewall bereitgestellt werden (als verschiedene Netfilter-Module implementiert ) und die darin gespeicherten Ketten und Regeln.
Um die Anzahl der Einbruchsversuche gering zu halten und die auf Ihrem virtuellen Server geöffneten Ports zu filtern, ist es notwendig, Ihre Firewall richtig zu konfigurieren .
Um die Verwaltung der Firewall-Regeln Ihres Servers zu vereinfachen, stellen wir ein einfaches Shell-Skript bereit, das bei der Verwaltung der Firewall-Regeln hilft. Grundsätzlich würden Sie dieses Skript verwenden, um die gewünschte(n) Regel(n) hinzuzufügen/zu entfernen, wann immer Sie Ihre Firewall-Regeln ändern müssen.
FIREWALL-REGELN EINRICHTEN
Bevor Sie die Regeln in ein Skript packen, teilen Sie es in Abschnitte auf, damit Sie wissen, wie die Firewall aufgebaut ist und welche Regeln vorhanden sein werden.
ALTE REGELN LEEREN
Die Firewall-Regeln können mit den folgenden Befehlen geleert werden:
## iptables --flush ## iptables --delete-chain ## iptables --table nat --flush ## iptables --table nat --delete-chain
SERVICE-PORTS BESTIMMEN
Sie müssen wissen, welche Dienste Sie der Öffentlichkeit zugänglich gemacht haben, damit Sie geeignete Regeln für sie festlegen können. Eine Möglichkeit herauszufinden, welche Dienste auf welchen Ports lauschen, ist die Verwendung von netstat
oder ss
Befehle wie in:
## netstat -tunlp or ## ss -tunlp
Zum Beispiel verwenden wir einen unserer virtuellen Ubuntu 12.04 LTS-Server und das Folgende ist die Ausgabe von netstat
Befehl:
## netstat -tunlp Active Internet connections (only servers) Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name tcp 0 0 127.0.0.1:3306 0.0.0.0:* LISTEN 296/mysqld tcp 0 0 0.0.0.0:587 0.0.0.0:* LISTEN 449/sendmail: MTA: tcp 0 0 0.0.0.0:110 0.0.0.0:* LISTEN 261/dovecot tcp 0 0 0.0.0.0:143 0.0.0.0:* LISTEN 261/dovecot tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 590/apache2 tcp 0 0 209.135.140.77:53 0.0.0.0:* LISTEN 353/named tcp 0 0 127.0.0.1:53 0.0.0.0:* LISTEN 353/named tcp 0 0 0.0.0.0:21 0.0.0.0:* LISTEN 173/vsftpd tcp 0 0 0.0.0.0:5622 0.0.0.0:* LISTEN 630/sshd tcp 0 0 0.0.0.0:25 0.0.0.0:* LISTEN 449/sendmail: MTA: tcp 0 0 127.0.0.1:953 0.0.0.0:* LISTEN 353/named tcp 0 0 0.0.0.0:443 0.0.0.0:* LISTEN 590/apache2 tcp 0 0 0.0.0.0:993 0.0.0.0:* LISTEN 261/dovecot tcp 0 0 0.0.0.0:995 0.0.0.0:* LISTEN 261/dovecot udp 0 0 209.135.140.77:53 0.0.0.0:* 353/named udp 0 0 127.0.0.1:53 0.0.0.0:* 353/named
Das bedeutet also, dass wir die folgenden Ports für die Öffentlichkeit geöffnet haben:
- 25 (smtp)
- 587 (smtp-Übermittlung)
- 110 (pop3)
- 143 (immap)
- 993 (imap-ssl)
- 995 (pop3-ssl)
- 80 (http)
- 443 (https)
- 53 (dns)
- 21 (ftp)
- 5622 (ssh)
STANDARDRICHTLINIEN EINRICHTEN
ok, jetzt können wir die Richtlinien unserer Firewall auf DROP einstellen alles im INPUT und WEITER Ketten und erlauben Verkehr im OUTPUT Kette.
der Standardtabellen-filter
enthält drei eingebaute Kette:
- Eingehender Datenverkehr, der an die Maschine selbst adressiert ist, trifft auf die INPUT-Kette.
- Ausgehender, lokal generierter Traffic trifft auf die OUTPUT-Kette.
- Gerouteter Datenverkehr, der nicht lokal zugestellt werden sollte, trifft auf die FORWARD-Kette.
überprüfen Sie man 8 iptables
Weitere Informationen dazu
Standardrichtlinien können mit den folgenden Befehlen angewendet werden:
## iptables -P INPUT DROP # <- do not run this over ssh as it will lock you out ## iptables -P FORWARD DROP ## iptables -P OUTPUT ACCEPT
FIREWALL-REGELN EINRICHTEN
Als nächstes müssen Sie die Firewall-Regeln für unsere Dienste tatsächlich einrichten. Da die INPUT-Kette DROPPED ist, müssen wir die Dienste, die an öffentlichen Ports lauschen, auf die weiße Liste setzen, also:
Das erste ist, die kostenlose Nutzung der loopback interfaces
zu ermöglichen , um sicherzustellen, dass alle TCP-Sitzungen mit SYN beginnen, und um etablierte und verwandte Pakete zuzulassen:
## iptables -A INPUT -i lo -j ACCEPT ## iptables -A OUTPUT -o lo -j ACCEPT ## iptables -A INPUT -p tcp ! --syn -m state --state NEW -j DROP ## iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
Lassen Sie uns als Nächstes unsere Service-Ports öffnen, indem Sie Firewall-Regeln verwenden wie:
### SSH ## iptables -A INPUT -p tcp --dport 5622 -m state --state NEW -j ACCEPT ### HTTP ## iptables -A INPUT -p tcp --dport 80 -m state --state NEW -j ACCEPT ### SMTP ## iptables -A INPUT -p tcp -m state --state NEW -m tcp --dport 25 -j ACCEPT
usw. Sobald alle Dienste auf der weißen Liste stehen, ist es eine gute Idee, ICMP-Pakete zuzulassen und alles andere in der INPUT-Kette zu LOGEN und zu DROPEN.
## iptables -A INPUT -p ICMP --icmp-type 8 -j ACCEPT ## iptables -A INPUT -j LOG ## iptables -A INPUT -j DROP
SPEICHERN/WIEDERHERSTELLEN DER FIREWALL-REGELN
Firewall-Regeln sind standardmäßig nicht persistent, was bedeutet, dass sie verloren gehen, wenn Sie beispielsweise Ihren virtuellen Server neu starten. So speichern Sie Ihre aktuelle Firewall in /etc/fwall.rules
Sie würden so etwas verwenden wie:
## iptables-save > /etc/fwall.rules
und um die gespeicherten Regeln wiederherzustellen, würden Sie Folgendes verwenden:
## iptables-restore -c /etc/fwall.rules
Um die Regeln beim Systemstart automatisch wiederherstellen zu lassen, müssten Sie entweder ein Paket namens iptables-persistent
verwenden oder Sie können einfach ein Skript in /etc/network/if-pre-up.d
erstellen Dadurch werden die in /etc/fwall.rules
gespeicherten Regeln geladen , zum Beispiel:
## vim /etc/network/if-pre-up.d/iptables #!/bin/bash test -e /etc/fwall.rules && iptables-restore -c /etc/fwall.rules ## chmod +x /etc/network/if-pre-up.d/iptables
FIREWALL-SKRIPT
Speichern Sie das Skript in /usr/local/bin/fwall-rules
und ausführbar machen
#!/bin/bash IPTABLES=/sbin/iptables echo " * flushing old rules" ${IPTABLES} --flush ${IPTABLES} --delete-chain ${IPTABLES} --table nat --flush ${IPTABLES} --table nat --delete-chain echo " * setting default policies" ${IPTABLES} -P INPUT DROP ${IPTABLES} -P FORWARD DROP ${IPTABLES} -P OUTPUT ACCEPT echo " * allowing loopback devices" ${IPTABLES} -A INPUT -i lo -j ACCEPT ${IPTABLES} -A OUTPUT -o lo -j ACCEPT ${IPTABLES} -A INPUT -p tcp ! --syn -m state --state NEW -j DROP ${IPTABLES} -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT ## BLOCK ABUSING IPs HERE ## #echo " * BLACKLIST" #${IPTABLES} -A INPUT -s _ABUSIVE_IP_ -j DROP #${IPTABLES} -A INPUT -s _ABUSIVE_IP2_ -j DROP echo " * allowing ssh on port 5622" ${IPTABLES} -A INPUT -p tcp --dport 5622 -m state --state NEW -j ACCEPT echo " * allowing ftp on port 21" ${IPTABLES} -A INPUT -p tcp --dport 21 -m state --state NEW -j ACCEPT echo " * allowing dns on port 53 udp" ${IPTABLES} -A INPUT -p udp -m udp --dport 53 -j ACCEPT echo " * allowing dns on port 53 tcp" ${IPTABLES} -A INPUT -p tcp -m tcp --dport 53 -j ACCEPT echo " * allowing http on port 80" ${IPTABLES} -A INPUT -p tcp --dport 80 -m state --state NEW -j ACCEPT echo " * allowing https on port 443" ${IPTABLES} -A INPUT -p tcp --dport 443 -m state --state NEW -j ACCEPT echo " * allowing smtp on port 25" ${IPTABLES} -A INPUT -p tcp -m state --state NEW -m tcp --dport 25 -j ACCEPT echo " * allowing submission on port 587" ${IPTABLES} -A INPUT -p tcp -m state --state NEW -m tcp --dport 587 -j ACCEPT echo " * allowing imaps on port 993" ${IPTABLES} -A INPUT -p tcp -m state --state NEW -m tcp --dport 993 -j ACCEPT echo " * allowing pop3s on port 995" ${IPTABLES} -A INPUT -p tcp -m state --state NEW -m tcp --dport 995 -j ACCEPT echo " * allowing imap on port 143" ${IPTABLES} -A INPUT -p tcp -m state --state NEW -m tcp --dport 143 -j ACCEPT echo " * allowing pop3 on port 110" ${IPTABLES} -A INPUT -p tcp -m state --state NEW -m tcp --dport 110 -j ACCEPT echo " * allowing ping responses" ${IPTABLES} -A INPUT -p ICMP --icmp-type 8 -j ACCEPT # DROP everything else and Log it ${IPTABLES} -A INPUT -j LOG ${IPTABLES} -A INPUT -j DROP # # Save settings # echo " * SAVING RULES" if [[ -d /etc/network/if-pre-up.d ]]; then if [[ ! -f /etc/network/if-pre-up.d/iptables ]]; then echo -e "#!/bin/bash" > /etc/network/if-pre-up.d/iptables echo -e "test -e /etc/iptables.rules && iptables-restore -c /etc/iptables.rules" >> /etc/network/if-pre-up.d/iptables chmod +x /etc/network/if-pre-up.d/iptables fi fi iptables-save > /etc/fwall.rules iptables-restore -c /etc/fwall.rules
## chmod +x /usr/local/bin/fwall-rules
Um die Regeln zu aktivieren, die Sie im Skript vorbereitet haben, führen Sie einfach
aus## fwall-rules
von der Kommandozeile. Um eine Regel hinzuzufügen oder zu entfernen, müssen Sie nur das Skript öffnen, die gewünschte Regel hinzufügen oder entfernen, speichern und erneut ausführen, zum Beispiel:
## fwall-rules * flushing old rules * setting default policies * allowing loopback devices * allowing ssh on port 5622 * allowing ftp on port 21 * allowing dns on port 53 udp * allowing dns on port 53 tcp * allowing http on port 80 * allowing https on port 443 * allowing smtp on port 25 * allowing submission on port 587 * allowing imaps on port 993 * allowing pop3s on port 995 * allowing imap on port 143 * allowing pop3 on port 110 * allowing ping responses * SAVING RULES
Natürlich müssen Sie nichts davon tun, wenn Sie einen unserer Linux-VPS-Hosting-Dienste nutzen. In diesem Fall können Sie einfach unsere erfahrenen Linux-Administratoren bitten, dies für Sie zu tun. Sie sind 24×7 erreichbar und kümmern sich umgehend um Ihr Anliegen.
PS. Wenn Ihnen dieser Beitrag gefallen hat, teilen Sie ihn bitte mit Ihren Freunden in den sozialen Netzwerken über die Schaltflächen auf der linken Seite oder hinterlassen Sie einfach unten eine Antwort. Danke.