IPTables – leichtere Bedienung mittels Skript
Skripte Skripte Skripte – wer hat noch nicht, wer will nochmal …
Endlich ist es mal wieder so weit. Ich werde euch heute einen kleinen Kniff zeifen, wie sich eure IPTables deutlich einfacher managen lassen. Das Stichtwort heiß hier “Shellskript”. Ein Shellskript ist quasi einfach nur eine Textdatei, die das System (mit normalen Shellkommandos) anweist, bestimmte Abläufe anzustoßen.
Okay – zuerst solltet Ihr euch eine Ordnerstruktur ausdenken. Der Einfachheit halber habe ich das mal bis hierhin übernommen, ihr hingegen könnt euch etwas einfallen lassen oder einfach das hier benutzen 😛
Als erstes legen wir uns die Zieltordner, Dateien und die Rechte zu den jeweiligen Dateien an:
mkdir -p /home/security/iptables.d/
touch /home/security/iptables
chmod 755 /home/security/iptables
So und als erstes werden wir unseren Webservice (Apache Port 80) absichern. Dazu benötige ich noch eine weitere Datei
touch /home/security/iptables.d/80_http
Der Dateiname ist mit Absicht so gewählt. Irgendwann wird das Konstrukt immer größer und größer und so habe ich die möglichkeit den Inhalt der Dateien schon am Namen abzuschätzen – so was in der Art solltet ihr auch nutzen.
Nun lege ich noch die Datei general_drop an, damit ich dort IP Adressen definieren kann, die grundsätzlich systemweit (also alle Ports und IPs) gesperrt werden:
touch /home/security/iptables.d/general_drop
Kommen wir nun zum Inhalt:
vi /home/security/iptables
#!/bin/bash
## GLOBAR ABSOLUT PATH ##
IPT=”/sbin/iptables” ## path to iptables program### First of all flush $IPT
$IPT –flush ## get empty ruleset## include security files
source /home/security/iptables.d/80_http
## HERE ALL DEFINITIONFILES##############
#### DROP ####
##############
### DROP SEPCIFIC NETS ###
source /home/security/iptables.d/general_drop
Der Inhalt für die 80_http Datei sieht in etwa so aus (fügt bitte eure eigenen IPs hinzu!):
— $IPT habt ihr bereits in der /home/security/iptables festgelegt – durch das “source” – include – werden die Variablen auch in der 80_http bekannt
vi /home/security/iptables.d/80_http
## allow ssh from
$IPT -A INPUT -p tcp -m tcp -s 1.2.3.4 –dport 80 -j ACCEPT # ok from home
$IPT -A INPUT -p tcp -m tcp -s 2.2.2.2 –dport 80 -j ACCEPT # ok from xyz## deny all other
$IPT -A INPUT -p tcp -m tcp -s 0.0.0.0/0 –dport 80 -j DROP
[the_ad id=”266″]
WICHTIG! Kommentiert euch, welche IP ihr freigegeben habt, damit ihr nachher noch wisst, was ihr dort getan habt!
Nun fehlt noch der Inhalt für die general_drop. Hier stehen alle IPs drin die ihr nicht wollt (ich zum Beispiel habe eine “China-NET” List dort eingefügt, da ich nichts mit den Chinesen am Hut haben will :-P)
vi /home/security/iptables.d/general_drop
## deny all mo-fus
$IPT -A INPUT -s 123.59.64.0/19 -j DROP
$IPT -A INPUT -s 79.171.80.0/21 -j DROP
$IPT -A INPUT -s 201.148.0.0/16 -j DROP
Das war es schon!
Nun könnt ihr natürlich noch nach Belieben weitere Unterdateien anlegen, die andere Ports beschränken.
Noch ein Tipp:
Legt euch doch ruhig einen Crontab Eintrag für das Skript an (alle 5 Minuten) – dann müsst ihr es nicht immer händisch neu laden und nach einem Neustart des Servers werden die Regeln so definitiv neu geladen 😉
Ich hoffe ich konnte euch helfen. Wer Fragen hat, darf sehr gerne fragen!
Grüße
Nico