Zoeken op website

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:

    1. FILTER – dit is de standaardtabel, die de ingebouwde ketens bevat voor:

      1. INPUT  – pakketten bestemd voor lokale sockets
      2. FORWARD – pakketten die door het systeem worden gerouteerd
      3. OUTPUT – pakketten die lokaal worden gegenereerd
    2. NAT – een tabel die wordt geraadpleegd wanneer een pakket een nieuwe verbinding probeert te maken. Het heeft het volgende ingebouwd:

      1. PREROUTING – wordt gebruikt om een pakket te wijzigen zodra het wordt ontvangen
      2. OUTPUT – gebruikt voor het wijzigen van lokaal gegenereerde pakketten
      3. POSTROUTING – gebruikt voor het wijzigen van pakketten als ze op het punt staan te worden verzonden
    3. 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:

      1. PREROUTING – voor het wijzigen van inkomende verbindingen
      2. OUTPUT – voor het wijzigen van lokaal gegenereerde pakketten
      3. INPUT – voor inkomende pakketten
      4. POSTROUTING – voor het wijzigen van pakketten als ze op het punt staan te worden verzonden
      5. FORWARD – voor pakketten die door de box worden gerouteerd

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.