25 Handige IPtable Firewall-regels die elke Linux-beheerder moet kennen
Het beheren van netwerkverkeer is een van de zwaarste taken waarmee systeembeheerders te maken krijgen. Hij moet de firewall zo configureren dat deze voldoet aan de systeem- en gebruikersvereisten voor zowel inkomende als uitgaande verbindingen, zonder het systeem kwetsbaar te maken voor aanvallen.
Dit is waar iptables
van pas komen. Iptables is een Linux-opdrachtregelfirewall waarmee systeembeheerders inkomend en uitgaand verkeer kunnen beheren via een reeks configureerbare tabelregels.
Iptables gebruikt een reeks tabellen met ketens die een reeks ingebouwde of door de gebruiker gedefinieerde regels bevatten. Dankzij hen kan een systeembeheerder het netwerkverkeer van zijn systeem goed filteren.
Per iptables-handleiding zijn er momenteel 3 soorten tabellen:
-
FILTER
– dit is de standaardtabel, die de ingebouwde ketens bevat voor:- INPUT – pakketten bestemd voor lokale sockets
- FORWARD – pakketten die door het systeem worden gerouteerd
- OUTPUT – pakketten die lokaal worden gegenereerd
NAT
– een tabel die wordt geraadpleegd wanneer een pakket een nieuwe verbinding probeert te maken. Het heeft het volgende ingebouwd:- PREROUTING – wordt gebruikt om een pakket te wijzigen zodra het wordt ontvangen
- OUTPUT – gebruikt voor het wijzigen van lokaal gegenereerde pakketten
- POSTROUTING – gebruikt voor het wijzigen van pakketten als ze op het punt staan te worden verzonden
MANGLE
– deze tabel wordt gebruikt voor het wijzigen van pakketten. Tot kernelversie 2.4 had deze tabel slechts twee ketens, maar dat zijn er nu vijf:
- PREROUTING – voor het wijzigen van inkomende verbindingen
In dit artikel zul je enkele nuttige opdrachten zien die je zullen helpen bij het beheren van je Linux box-firewall via iptables. Voor de doeleinden van dit artikel begin ik met eenvoudigere opdrachten en ga ik tot het einde door met de complexere opdrachten.
1. Iptables Firewall starten/stoppen/herstarten
Ten eerste moet u weten hoe u de iptables-service in verschillende Linux-distributies beheert. Dit is vrij eenvoudig:
Op SystemD-gebaseerde Linux-distributies
------------ On Cent/RHEL 7 and Fedora 22+ ------------
systemctl start iptables
systemctl stop iptables
systemctl restart iptables
Op op SysVinit gebaseerde Linux-distributies
------------ On Cent/RHEL 6/5 and Fedora ------------
/etc/init.d/iptables start
/etc/init.d/iptables stop
/etc/init.d/iptables restart
2. Controleer alle IPtables Firewall-regels
Als u uw bestaande regels wilt controleren, gebruikt u de volgende opdracht:
iptables -L -n -v
Dit zou een uitvoer moeten opleveren die vergelijkbaar is met die hieronder:
Chain INPUT (policy ACCEPT 1129K packets, 415M bytes)
pkts bytes target prot opt in out source destination
0 0 ACCEPT tcp -- lxcbr0 * 0.0.0.0/0 0.0.0.0/0 tcp dpt:53
0 0 ACCEPT udp -- lxcbr0 * 0.0.0.0/0 0.0.0.0/0 udp dpt:53
0 0 ACCEPT tcp -- lxcbr0 * 0.0.0.0/0 0.0.0.0/0 tcp dpt:67
0 0 ACCEPT udp -- lxcbr0 * 0.0.0.0/0 0.0.0.0/0 udp dpt:67
Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
0 0 ACCEPT all -- * lxcbr0 0.0.0.0/0 0.0.0.0/0
0 0 ACCEPT all -- lxcbr0 * 0.0.0.0/0 0.0.0.0/0
Chain OUTPUT (policy ACCEPT 354K packets, 185M bytes)
pkts bytes target prot opt in out source destination
Als u liever de regels voor een specifieke tabel controleert, kunt u de optie -t
gebruiken, gevolgd door de tabel die u wilt controleren. Om bijvoorbeeld de regels in de NAT
tabel te controleren, kunt u het volgende gebruiken:
iptables -t nat -L -v -n
3. Blokkeer het specifieke IP-adres in IPtables Firewall
Als u een ongebruikelijke of beledigende activiteit op een IP-adres constateert, kunt u dat IP-adres blokkeren met de volgende regel:
iptables -A INPUT -s xxx.xxx.xxx.xxx -j DROP
Waar u "xxx.xxx.xxx.xxx"
moet wijzigen met het daadwerkelijke IP-adres. Wees zeer voorzichtig bij het uitvoeren van deze opdracht, aangezien u per ongeluk uw eigen IP-adres kunt blokkeren. De -A
optie voegt de regel toe aan het einde van de geselecteerde keten.
Als u alleen TCP-verkeer vanaf dat IP-adres wilt blokkeren, kunt u de optie -p
gebruiken die het protocol specificeert. Op die manier zal het commando er als volgt uitzien:
iptables -A INPUT -p tcp -s xxx.xxx.xxx.xxx -j DROP
4. Deblokkeer het IP-adres in IPtables Firewall
Als u heeft besloten dat u verzoeken van een specifiek IP-adres niet langer wilt blokkeren, kunt u de blokkeerregel verwijderen met de volgende opdracht:
iptables -D INPUT -s xxx.xxx.xxx.xxx -j DROP
De optie -D
verwijdert een of meer regels uit de geselecteerde keten. Als u liever de langere optie gebruikt, kunt u --delete
gebruiken.
5. Blokkeer specifieke poort op IPtables Firewall
Soms wilt u inkomende of uitgaande verbindingen op een specifieke poort blokkeren. Het is een goede beveiligingsmaatregel en u moet daar goed over nadenken bij het instellen van uw firewall.
Om uitgaande verbindingen op een specifieke poort te blokkeren, gebruikt u:
iptables -A OUTPUT -p tcp --dport xxx -j DROP
Om inkomende verbindingen toe te staan, gebruikt u:
iptables -A INPUT -p tcp --dport xxx -j ACCEPT
In beide voorbeelden verander je "xxx"
met de daadwerkelijke poort die je wilt toestaan. Als u UDP-verkeer wilt blokkeren in plaats van TCP, wijzigt u eenvoudigweg "tcp"
door "udp"
in het bovenstaande iptables-regel.
6. Sta meerdere poorten toe op IP-tafels met behulp van Multiport
U kunt meerdere poorten tegelijk toestaan door multiport te gebruiken. Hieronder vindt u een dergelijke regel voor zowel inkomende als uitgaande verbindingen:
iptables -A INPUT -p tcp -m multiport --dports 22,80,443 -j ACCEPT
iptables -A OUTPUT -p tcp -m multiport --sports 22,80,443 -j ACCEPT
7. Sta specifiek netwerkbereik toe op een bepaalde poort op IPtables
Mogelijk wilt u bepaalde verbindingen op een specifieke poort tot een bepaald netwerk beperken. Stel dat u uitgaande verbindingen op poort 22
naar netwerk 192.168.100.0/24
wilt toestaan.
Je kunt het doen met dit commando:
iptables -A OUTPUT -p tcp -d 192.168.100.0/24 --dport 22 -j ACCEPT
8. Blokkeer Facebook op IPtables Firewall
Sommige werkgevers blokkeren graag de toegang tot Facebook voor hun werknemers. Hieronder ziet u een voorbeeld van hoe u verkeer naar Facebook kunt blokkeren.
Opmerking: als u een systeembeheerder bent en deze regels moet toepassen, houd er dan rekening mee dat uw collega's mogelijk niet meer met u praten :)
Zoek eerst de IP-adressen die Facebook gebruikt:
host facebook.com
facebook.com has address 66.220.156.68
whois 66.220.156.68 | grep CIDR
CIDR: 66.220.144.0/20
Je kunt dat Facebook-netwerk vervolgens blokkeren met:
iptables -A OUTPUT -p tcp -d 66.220.144.0/20 -j DROP
Houd er rekening mee dat het IP-adresbereik dat door Facebook wordt gebruikt, in uw land kan variëren.
9. Stel Port Forwarding in IPtables in
Soms wilt u misschien het verkeer van de ene service doorsturen naar een andere poort. Je kunt dit bereiken met het volgende commando:
iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 25 -j REDIRECT --to-port 2525
Het bovenstaande commando stuurt al het binnenkomende verkeer door op netwerkinterface eth0
, van poort 25
naar poort 2525
. U kunt de poorten wijzigen met de poorten die u nodig heeft.
10. Blokkeer netwerkoverstroming op Apache-poort met IPtables
Soms vragen IP-adressen te veel verbindingen naar webpoorten op uw website. Dit kan een aantal problemen veroorzaken en om dergelijke problemen te voorkomen, kunt u de volgende regel gebruiken:
iptables -A INPUT -p tcp --dport 80 -m limit --limit 100/minute --limit-burst 200 -j ACCEPT
Het bovenstaande commando beperkt de inkomende verbindingen van per minuut tot 100
en stelt een limiet in op 200
. U kunt de limiet en limit-burst aanpassen aan uw eigen specifieke vereisten.
11. Blokkeer inkomende pingverzoeken op IPtables
Sommige systeembeheerders blokkeren graag inkomende ping-verzoeken vanwege veiligheidsoverwegingen. Hoewel de dreiging niet zo groot is, is het goed om te weten hoe je een dergelijk verzoek kunt blokkeren:
iptables -A INPUT -p icmp -i eth0 -j DROP
12. Sta loopback-toegang toe
Loopback-toegang (toegang vanaf 127.0.0.1
) is belangrijk en u moet deze altijd actief laten:
iptables -A INPUT -i lo -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT
13. Houd een logboek bij van weggevallen netwerkpakketten op IPtables
Als u de verwijderde pakketten op de netwerkinterface eth0
wilt loggen, kunt u de volgende opdracht gebruiken:
iptables -A INPUT -i eth0 -j LOG --log-prefix "IPtables dropped packets:"
U kunt de waarde na "--log-prefix"
wijzigen met iets naar keuze. De berichten worden ingelogd in /var/log/messages
en je kunt ze zoeken met:
grep "IPtables dropped packets:" /var/log/messages
14. Blokkeer de toegang tot een specifiek MAC-adres op IPtables
U kunt de toegang tot uw systeem vanaf een specifiek MAC-adres blokkeren met behulp van:
iptables -A INPUT -m mac --mac-source 00:00:00:00:00:00 -j DROP
Uiteraard moet u "00:00:00:00:00:00"
wijzigen met het daadwerkelijke MAC-adres dat u wilt blokkeren.
15. Beperk het aantal gelijktijdige verbindingen per IP-adres
Als u niet te veel gelijktijdige verbindingen tot stand wilt brengen vanaf een enkel IP-adres op een bepaalde poort, kunt u de onderstaande opdracht gebruiken:
iptables -A INPUT -p tcp --syn --dport 22 -m connlimit --connlimit-above 3 -j REJECT
Met het bovenstaande commando zijn niet meer dan 3
verbindingen per client toegestaan. Natuurlijk kunt u het poortnummer wijzigen, zodat het overeenkomt met een andere service. Ook de --connlimit-above
moet worden gewijzigd om aan uw vereisten te voldoen.
16. Zoek binnen IPtables-regel
Nadat u uw iptables-regels heeft gedefinieerd, wilt u af en toe zoeken en moet u deze mogelijk wijzigen. Een gemakkelijke manier om binnen uw regels te zoeken, is door gebruik te maken van:
iptables -L $table -v -n | grep $string
In het bovenstaande voorbeeld moet u $table
wijzigen met de daadwerkelijke tabel waarin u wilt zoeken en $string
met de daadwerkelijke string waarnaar u zoekt.
Hier is een voorbeeld:
iptables -L INPUT -v -n | grep 192.168.0.100
17. Definieer een nieuwe IPTables-keten
Met iptables kunt u uw eigen keten definiëren en daarin aangepaste regels opslaan. Om een keten te definiëren, gebruik je:
iptables -N custom-filter
Nu kunt u controleren of uw nieuwe filter er is:
iptables -L
Voorbeelduitvoer
Chain INPUT (policy ACCEPT)
target prot opt source destination
Chain FORWARD (policy ACCEPT)
target prot opt source destination
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
Chain custom-filter (0 references)
target prot opt source destination
18. Spoel IPtables-firewallketens of -regels door
Als u uw firewallketens wilt leegmaken, kunt u het volgende gebruiken:
iptables -F
Je kunt ketens uit een specifieke tabel doorspoelen met:
iptables -t nat -F
Je kunt "nat"
met de daadwerkelijke tabel wijzigen welke ketens je wilt doorspoelen.
19. Bewaar IPtables-regels in een bestand
Als u uw firewallregels wilt opslaan, kunt u de opdracht iptables-save
gebruiken. U kunt het volgende gebruiken om uw regels op te slaan en op te slaan in een bestand:
iptables-save > ~/iptables.rules
Het is aan u waar u het bestand opslaat en hoe u het een naam geeft.
20. Herstel IPtables-regels vanuit een bestand
Als je een lijst met iptables-regels wilt herstellen, kun je iptables-restore
gebruiken. De opdracht ziet er als volgt uit:
iptables-restore < ~/iptables.rules
Natuurlijk kan het pad naar uw regelbestand anders zijn.
21. IPtables-regels instellen voor PCI-compliance
Van sommige systeembeheerders kan worden verlangd dat zij hun servers zo configureren dat zij PCI-compatibel zijn. Er zijn veel vereisten van verschillende PCI-complianceleveranciers, maar er zijn weinig algemene vereisten.
In veel gevallen heeft u meer dan één IP-adres nodig. U moet de onderstaande regels toepassen voor het IP-adres van de site. Wees extra voorzichtig bij het gebruik van de onderstaande regels en gebruik ze alleen als u zeker weet wat u doet:
iptables -I INPUT -d SITE -p tcp -m multiport --dports 21,25,110,143,465,587,993,995 -j DROP
Als u cPanel of een vergelijkbaar configuratiescherm gebruikt, moet u mogelijk ook de poorten ervan blokkeren. Hier is een voorbeeld:
iptables -I in_sg -d DEDI_IP -p tcp -m multiport --dports 2082,2083,2095,2096,2525,2086,2087 -j DROP
Opmerking: om er zeker van te zijn dat u aan de vereisten van uw PCI-leverancier voldoet, controleert u hun rapport zorgvuldig en past u de vereiste regels toe. In sommige gevallen moet u mogelijk ook UDP-verkeer op bepaalde poorten blokkeren.
22. Sta gevestigde en gerelateerde verbindingen toe
Omdat het netwerkverkeer gescheiden is bij inkomend en uitgaand verkeer, wilt u bestaand en gerelateerd inkomend verkeer toestaan. Voor inkomende verbindingen doe je dit met:
iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
Voor uitgaand gebruik:
iptables -A OUTPUT -m conntrack --ctstate ESTABLISHED -j ACCEPT
23. Zet ongeldige pakketten neer in IPtables
Het is mogelijk dat sommige netwerkpakketten als ongeldig worden gemarkeerd. Sommige mensen geven er misschien de voorkeur aan om die pakketten te loggen, maar anderen laten ze liever vallen. Om de pakketten ongeldig te maken, kunt u het volgende gebruiken:
iptables -A INPUT -m conntrack --ctstate INVALID -j DROP
24. Verbinding blokkeren op netwerkinterface
Sommige systemen hebben mogelijk meer dan één netwerkinterface. U kunt de toegang tot die netwerkinterface beperken of verbindingen vanaf een bepaald IP-adres blokkeren.
Bijvoorbeeld:
iptables -A INPUT -i eth0 -s xxx.xxx.xxx.xxx -j DROP
Wijzig “xxx.xxx.xxx.xxx” met het daadwerkelijke IP-adres (of netwerk) dat u wilt blokkeren.
25. Schakel uitgaande e-mails uit via IPTables
Als uw systeem geen e-mails verzendt, kunt u uitgaande poorten op SMTP-poorten blokkeren. Je kunt dit bijvoorbeeld gebruiken:
iptables -A OUTPUT -p tcp --dports 25,465,587 -j REJECT
Conclusie
Iptables is een krachtige firewall waar u gemakkelijk van kunt profiteren. Het is van vitaal belang voor elke systeembeheerder om op zijn minst de basisprincipes van iptables te leren. Als je meer gedetailleerde informatie wilt vinden over iptables en de opties ervan, raden we je ten zeerste aan om de handleiding ervan te lezen:
man iptables
Als u vindt dat we meer opdrachten aan deze lijst moeten toevoegen, deel ze dan met ons door ze in het commentaargedeelte hieronder in te dienen.