{"id":2159,"date":"2021-05-01T22:31:32","date_gmt":"2021-05-01T20:31:32","guid":{"rendered":"https:\/\/www.lammertbies.nl\/comm\/info\/firewall-configuratie-voor-iptables"},"modified":"2021-05-05T23:45:28","modified_gmt":"2021-05-05T21:45:28","slug":"iptables","status":"publish","type":"page","link":"https:\/\/www.lammertbies.nl\/nl\/comm\/info\/iptables","title":{"rendered":"Firewall configuratie voor iptables"},"content":{"rendered":"\n<ul class=\"wp-block-list\"><li><a href=\"#intr\">Inleiding in de iptables firewall<\/a><\/li><li><a href=\"#func\">Functionaliteit van de firewall in woorden<\/a><\/li><li><a href=\"#perf\">Firewall performance in Linux<\/a><\/li><li><a href=\"#drop\">Negeren of weigeren van pakketten?<\/a><\/li><li><a href=\"#load\">Laden van de iptables configuratie<\/a><\/li><li><a href=\"#addi\">Toevoegen en verwijderen van vijanden in de firewall<\/a><\/li><\/ul>\n\n<h2 class=\"wp-block-heading\" id=\"intr\">Inleiding in de iptables firewall<\/h2>\n\n<p>Een firewall in computerterminologie is een software of hardware oplossing die probeert zoveel mogelijk kwaardaardig networkverkeer te stoppen, terwijl nuttig verkeer wordt doorgelaten. Firewalls kunnen ofwel worden ge\u00efntegreerd in bestaande netwerkapparatuur zoals routers, als aparte apparaten met als enige functie om een netwerk te beschermen of in de eerste lagen van de netwerk stack op een van netwerk voorziene computer.<\/p>\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\"><p><b>Belangrijk<\/b><br\/>Firewalls kunnen zeer effectief zijn in het blokkeren van ongewenst verkeer naar een computer of netwerk. Deze pagina beschrijft een methode om een dergelijke firewall te implementeren in de kernel van uw computer. U moet begrijpen dat het net zo gemakkelijk is om vijanden te blokkeren, als om uw eigen toegang te onmogelijk te maken. Tijdens het testen moet er daarom ook altijd een achterdeur geopend blijven, bijvoorbeeld door de firewall zo in te stellen dat die bij herstarten van de computer niet automatisch opstart. In het geval u tijdens het testen uzelf buitensluit is dan een herstart genoeg om opnieuw toegang te krijgen. Denk niet dat dit u niet zal overkomen. Het gebeurde mij in het verleden, zelfs met meer dan 10 jaren ervaring in Unix\/Linux beveiliging en firewall configuraties.<\/p><\/blockquote>\n\n<p><strong>Iptables<\/strong> is een software oplossing die beschikbaar is op de meeste Linux computer met een kernel versie <b>2.4<\/b> of nieuwer. Om heel eerlijk te zijn moet ik zeggen dat iptables niet de firewall zelf is. Het iptables programma is een gebruikers interface die vanaf de commandoregel kan worden aangeroepen om filtertabellen in de kernel aan te passen. De echte firewall bevindt zich in de kernel. Omdat de meeste mensen alleen het iptables programma zullen gebruiken wordt het vaak benoemd als de Linux firewall, en dat zullen we uit gemakzucht hier dan ook maar doen.<\/p>\n\n<p>Netwerkpakketten die een in een netwerk aangesloten Linux computer binnenkomen of uitgaan passeren een aantal tabellen in de kernel. Elke tabel bevat nul of meer eenvoudige regels waar het IP adres of specifieke eigenschappen van een pakket worden gecontroleerd. Wanneer een regel overeenkomt kunnen een aantal acties in gang worden gezet. Een netwerkpakket kan eenvoudigweg worden genegeerd, geweigerd, geaccepteerd, of doorgestuurd naar een andere tabel met regels. Hoewel het principe van dit firewall systeem eenvoudig is, is het vaak heel moeilijk een degelijke firewall te configureren die in een specifieke behoefte voorziet. Dit komt deels omdat er kennis nodig is van de onderliggende structuren, en deels omdat er geen goede documentatie is die de werking op zo&#8217;n manier uitlegt dat het ook kan worden begrepen door mensen die niet werken als netwerkbeheerder. Er is bovendien het probleem dat je een firewall probleem op vele manieren kunt oplossen met iptables, waarbij veel oplossingen niet optimaal zijn omdat ze niet schaalbaar zijn, flexibel of beide. Ik zal hier het raamwerk uitleggen van de firewall instellingen die ik gebruik op een aantal van mijn Linux computers. Deze computers werken allemaal met de Linux distributie CentOS 5.4. Wanneer u een andere distributie gebruikt zullen de lokaties van de bestanden waarschijnlijk anders zijn, maar het algemene concept blijft hetzelfde.<\/p>\n\n<h2 class=\"wp-block-heading\" id=\"func\">Functionaliteit van de firewall in woorden<\/h2>\n\n<p>De meeste beschikbare firewall implementaties voor iptables missen een duidelijke beschrijving in woorden van de ontwerpachtergronden. Ze worden slechts gepresenteerd als een aantal regels. Dit maakt het moeilijk voor mensen om de functionaliteit te begrijpen en te beslissen of het past in hun specifieke situatie. Het maakt het ook moeilijk om wijzigingen aan te brengen in de firewall instellingen zonder de functionaliteit teniet te doen. Zonder verdere configuratie zijn vijf tabellen van regels voorgedefini\u00eberd in de kernel. De <strong>PREROUTING<\/strong> is de eerste tabel voor binnenkomende pakketten. Vanaf de <strong>PREROUTING<\/strong> tabel kunnen pakketten ofwel doorgestuurd worden naar de <strong>INPUT<\/strong> tabel, of naar de <strong>FORWARD<\/strong> tabel. De <strong>INPUT<\/strong> tabel is voor pakketten die lokaal afgeleverd moeten worden. De <strong>FORWARD<\/strong> tabel wordt uitsluitend gebruikt op computers waarop routing is geactiveerd. Het zorgt ervoor dat pakketten doorgestuurd worden naar andere bestemmingen dan de lokale computer. De <strong>OUTPUT<\/strong> tabel wordt gebruikt om pakketten na te bewerken die afkomstig zijn van de lokale computer en de POSTROUTING tabel brengt de pakketten naar de netwerkadapter voor aflevering in den<br\/>vreemde.<\/p>\n\n<p>In onze iptables firewall configuratie zullen we ons alleen concentreren op binnenkomend verkeer. Het controleren van uitgaand verkeer kan mogelijk ook nodig zijn, bijvoorbeeld om bepaalde applicaties ervan te weerhouden om verbinding te maken met externe computers, maar in dit configuratievoorbeeld zien we te buitenwereld als het grootste gevaar. We zullen daarom firewall regels defini\u00ebren die zowel op de <strong>INPUT<\/strong>, als de <strong>FORWARD<\/strong> tabellen betrekking hebben en laten de <strong>OUTPUT<\/strong> tabel ongemoeid.<\/p>\n\n<p>Als eerste zullen we de pakketten in verschillende groepen indelen. Elke groep van pakketten verdient zijn eigen behandeling.<\/p>\n\n<dl class=\"wp-block-simple-definition-list-blocks-list\">\n<dt class=\"wp-block-simple-definition-list-blocks-term\">Vijanden<\/dt>\n\n\n\n<dd class=\"wp-block-simple-definition-list-blocks-details-html\">\n<p>De vijanden zijn pakketten die afkomstig zijn van bronnen, of bedoeld zijn voor bestemmingen die niet toegestaan zijn. E\u00e9n manier om een vijandig pakket te herkennen is door de kijken naar het bron IP adres. Misschien weet u IP adressen die gebruikt worden door spammers die uw forums vervuilen. Vijanden kunnen ook pakketten zijn die bestemd zijn voor verdachte poorten, bijvoorbeeld om de computer te scannen voor onbeveiligde poorten waarop een MySQL server draait.<\/p>\n<\/dd>\n\n\n\n<dt class=\"wp-block-simple-definition-list-blocks-term\">Vrienden<\/dt>\n\n\n\n<dd class=\"wp-block-simple-definition-list-blocks-details-html\">\n<p>Vrienden zijn pakketten die afkomstig zijn van een vertrouwde bron. Vrienden hebben meer privileges dan andere pakketten. Het is bijvoorbeeld mogelijk om netwerk verkeer naar de SSH poort toe te staan voor vrienden, maar de blokkeren vanaf andere bronnen.<\/p>\n<\/dd>\n\n\n\n<dt class=\"wp-block-simple-definition-list-blocks-term\">Foutieve pakketten<\/dt>\n\n\n\n<dd class=\"wp-block-simple-definition-list-blocks-details-html\">\n<p>E\u00e9n methode die hackers gebruiken om computers in een netwerk aan te vallen is door ze pakketten de sturen die ongeldig zijn, in de hoop dat dit ofwel de computer laat crashen, of dat hiermee lokaal verkeer kan worden onderschept. Ongeldige pakketten kunnen een ongeldige combinatie van TCP\/IP vlaggen bevatten. Maar het is ook mogelijk dat hackers pakketten verzenden naar een computer die afkomstig zijn van \u00e9\u00e9n van de private IP adres bereiken in de hoop dat ze hier mee een deel van het verkeer kunnen onderscheppen of ontregelen. Zoals mogelijk bekend zijn adresbereiken zoals <strong>192.168.0.0\/16<\/strong> en <strong>10.0.0.0\/8<\/strong> gereserveerd voor het gebruik op priv\u00e9 netwerken. Veel standaard firewall implementaties hebben uitzonderingen die meer rechten geven aan netwerkverkeer van deze bronnen. Maar wanneer je een een computer in een netwerk hebt\u2014speciaal in een datacentrum\u2014zou er geen verkeer van deze IP bereiken moeten komen. In dat geval moeten deze pakketten worden gemarkeerd als ongeldig en op gepaste wijze worden behandeld.<\/p>\n<\/dd>\n\n\n\n<dt class=\"wp-block-simple-definition-list-blocks-term\">Altijd toegestane pakketten<\/dt>\n\n\n\n<dd class=\"wp-block-simple-definition-list-blocks-details-html\">\n<p>Toegestane pakketten zijn pakketten waarvan het absoluut zeker is dat geen enkele blokkerende firewall regel op hen van toepassing is. Dit kunnen pakketten zijn voor specifieke poorten waarop geen firewall filtering van toepassing is, pakketen die komen vanaf de lokale loopback interface of pakketten die onderdeel zijn van een stroom van pakketten die eerder al gecontroleerd en geaccepteerd zijn. Het mag vreemd lijken om een aparte groep te maken voor altijd toegestane pakketten, maar het heeft voordelen wat betreft de performance van de firewall.<\/p>\n<\/dd>\n<\/dl>\n\n<h2 class=\"wp-block-heading\" id=\"perf\">Firewall performance in Linux<\/h2>\n\n<p>Heb ik al verteld dat de firewall implementatie van Linux bestaat uit een aantal tabellen met regels die in volgorde worden doorlopen? Wanneer u dit concept begrijpt zult u ook begrijpen dat de tijd die nodig is om een pakket te vergelijken met alle regels evenredig toe zal nemen met het aantal regels. Dit kan performance problemen geven op zwaar belaste computers waar een groot aantal pakketten per seconde moet worden gecontroleerd.<\/p>\n\n<p>Er zijn een aantal mogelijkheden om potenti\u00eble performance problemen op te lossen in de firewall. Het eerste dat moet worden gedaan is de regels op zodanige wijze te sorteren dat regels die de hoogste kans hebben op een match in het begin van de tabellen komen te staan. Bovendien zouden we moeten proberen om de tabellen zodanig te organiseren voor de verschillende pakketten dat die zodanig worden verwerkt dat bij pakketten die geaccepteerd moeten worden dat in een vroeg stadium gebeurt, terwijl alleen pakketten die waarschijnlijk toch geblokkeerd worden de hele lijst met tabellen en regels doorlopen. Om dit uit te voeren stel ik de volgende stroom van pakketten door de firewall voor.<\/p>\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-large\"><img decoding=\"async\" src=\"https:\/\/www.lammertbies.nl\/picture\/iptables-flow.png\" alt=\"Pakketstroom door de iptables firewall\"\/><figcaption>Pakketstroom door de iptables firewall<\/figcaption><\/figure><\/div>\n\n<h2 class=\"wp-block-heading\" id=\"drop\">Negeren of weigeren van pakketten?<\/h2>\n\n<p>Wanneer een inkomend pakket geen toestemming krijgt om de server binnen te komen dan zijn er twee manieren om daarmee om te gaan. Allereerst kan er een antwoord aan de zendende computer worden gestuurd dat het pakket is geweigerd, of het pakket kan worden genegeerd zonder reactie. In veel firewalls is het versturen van een weigering ge\u00efmplementeerd omdat het netter is wat betreft volgen van internet standaarden, maar zouden we dat alleen om die reden doen? Wanneer de beslissing gekomen is om een pakket niet te accepteren, dan is daar iets mee aan de hand. Ofwel het is een ongeldig pakket, of het is van een bron die u niet vertrouwt. Laten we dat nu eens in een ander perspectief zien. Vergelijk de computer met uw huis. Wanneer u weet dat uw huis zeer goed beveiligd is en een inbreker loopt rond het huis op zoek naar een manier om binnen te komen, zou u dan \u201cHet huis is beveiligd\u201d schreeuwen, elke keer als hij op de deur klopt, of zou u niks zeggen en misschien de politie bellen. Waarschijnlijk het laatste. In computers kunnen we een vergelijkbare actie doen als de politie bellen, namelijk een logfile vijhouden of een email zenden naar het adres van een beheerder. Maar wanneer u weet dat de beveiliging in orde is zou u waarschijnlijk slechts uw mond dichthouden. Het niet antwoorden op verdachte pakketten heeft twee andere voordelen. Een inbreker weet dat het huis bestaat omdat het een tastbaar object is, maar een computer op het internet is alleen herkenbaar bij het anonieme IP adres. Wanneer je alle verdachte pakketten eenvoudigweg negeert zal de zender niet weten of de computer bestaat, of dat het IP adres niet toegewezen is. De aanvaller zal daardoor waarschijnlijk na een paar pogingen stoppen om een gemakkelijker te identificeren slachtoffer te zoeken. Bij het negeren van pakketten is er bovendien het voordeel dat dit niet veel processortijd vergt op de eigen computer, maar door de manier waarop IP protocollen werken moet het proces op de zendende computer wachten tot een timeout is opgetreden die uiteindelijk aangeeft dat de verbinding is mislukt.<\/p>\n\n<p>Daarom zullen we in onze configuratie alleen pakketten negeren, niet weigeren.<\/p>\n\n<h2 class=\"wp-block-heading\" id=\"load\">Laden van de iptables configuratie<\/h2>\n\n<p>Op de RedHat familie van Linux distributies wordt de configuratie van het systeem die moet worden geladen bij opstarten opgeslagen in de <b class=\"nowrap\">\/etc\/sysconfig<\/b> directory. Het bestand iptables bevat een lijst met regels voor de firewall. Het raamwerk van onze firewall lijkt op het onderstaande<\/p>\n\n<pre><code class=\"plaintext\">#\n# Example fast and scalable firewall configuration with iptables\n# Please only implement if you fully understand the functionality\n# because is very easy to lockout yourself from your computer if\n# the script isn't adapted to your specific situation.\n#\n\n*filter\n:INPUT ACCEPT [0:0]\n:FORWARD ACCEPT [0:0]\n:OUTPUT ACCEPT [0:0]\n:Always - [0:0]\n:Allow - [0:0]\n:Bogus - [0:0]\n:Enemies - [0:0]\n:Friends - [0:0]\n\n-A INPUT -j Bogus\n-A INPUT -j Always\n-A INPUT -j Enemies\n-A INPUT -j Allow\n\n-A FORWARD -j Bogus\n-A FORWARD -j Always\n-A FORWARD -j Enemies\n-A FORWARD -j Allow\n\n-A Bogus -p tcp -m tcp --tcp-flags SYN,FIN SYN,FIN -j DROP\n-A Bogus -p tcp -m tcp --tcp-flags SYN,RST SYN,RST -j DROP\n-A Bogus -s 169.254.0.0\/16 -j DROP\n-A Bogus -s 172.16.0.0\/12 -j DROP\n-A Bogus -s 192.0.2.0\/24 -j DROP\n-A Bogus -s 192.168.0.0\/16 -j DROP\n-A Bogus -s 10.0.0.0\/8 -j DROP\n-A Bogus -s 127.0.0.0\/8 -i ! lo -j DROP\n\n-A Always -p udp --dport 123 -j ACCEPT\n-A Always -m state --state ESTABLISHED,RELATED -j ACCEPT\n-A Always -i lo -j ACCEPT\n\n-A Friends -s 123.123.123.123 -j ACCEPT\n-A Friends -s 111.111.111.0\/24 -j ACCEPT\n-A Friends -j DROP\n\n-A Enemies  -m recent --name psc --update --seconds 60 -j DROP\n-A Enemies -i ! lo -m tcp -p tcp --dport 1433  -m recent --name psc --set -j DROP\n-A Enemies -i ! lo -m tcp -p tcp --dport 3306  -m recent --name psc --set -j DROP\n-A Enemies -i ! lo -m tcp -p tcp --dport 8086  -m recent --name psc --set -j DROP\n-A Enemies -i ! lo -m tcp -p tcp --dport 10000 -m recent --name psc --set -j DROP\n-A Enemies -s 99.99.99.99 -j DROP\n\n-A Allow -p icmp --icmp-type echo-request -j Friends\n-A Allow -p icmp --icmp-type any -m limit --limit 1\/second -j ACCEPT\n-A Allow -p icmp --icmp-type any -j DROP\n-A Allow -p tcp -m state --state NEW -m tcp --dport 22 -j Friends\n-A Allow -p tcp -m state --state NEW -m tcp --dport 25 -j ACCEPT\n-A Allow -p tcp -m state --state NEW -m tcp --dport 80 -j ACCEPT\n-A Allow -p tcp -m state --state NEW -m tcp --dport 443 -j ACCEPT\n-A Allow -j DROP\n\nCOMMIT<\/code><\/pre>\n\n<p>Ik heb een paar lege regels toegevoegd om het bestand gemakkelijker leesbaar te maken. Het eerste blok geeft ons de namen van de tabellen die we zullen gebruiken, en de initi\u00eble waarden van de pakket en byte tellers. Met deze instellingen resetten we de tellers elke keer als de firewall configuratie opnieuw geladen wordt. De standaard actie voor de drie interne tabellen <strong>INPUT<\/strong>, <strong>FORWARD<\/strong> en <strong>OUTPUT<\/strong> wordt ingesteld op <strong>ACCEPT<\/strong>. Dit betekent dat een pakket geaccepteerd wordt door elk van deze tabellen, tenzij een regel in de tabel anders aanwijst. De vijf door onszelf gedefini\u00eberde tabellen hebben geen standaard actie. De logica van de firewall zal daardoor doorgaan met het verwerken van andere regels wanneer de regels in die tabellen niet tot een definitief antwoord leiden wat te doen met een pakket.<\/p>\n\n<p>De volgende twee blokken voegen vier filterregels toe aan de <strong>INPUT<\/strong> en <strong>FORWARD<\/strong> tabel. Elke regel voert een sprong uit naar een door ons gedefini\u00eberde tabel. De volgorde waarin deze commando\u2019s voorkomen in het iptables bestand is belangrijk omdat dit ook de volgorde zal zijn waarin de regels door de kernel zullen worden verwerkt.<\/p>\n\n<h3 class=\"wp-block-heading\">Ongeldige netwerkpakketten<\/h3>\n\n<p>De <strong>Bogus<\/strong> groep bevat een handvol regels die ongeldig pakketten defini\u00ebren. Dit zijn ondermeer pakketten waarbij zowel de <strong>SYN<\/strong> als de <strong>FIN<\/strong> vlaggen zijn gezet of de <strong>SYN<\/strong> en <strong>RST<\/strong> vlaggen, pakketten van specifieke bereiken van ongeldige IP adressen en pakketten met IP adressen die behoren bij de virtuele loopback adapter (<b>127.x.x.x<\/b>), maar die niet afkomstig zijn van een lokale bron. Dit zijn allemaal pakketten die inelkaar geknutseld worden door hackers of aanvallers om het systeem in verwarring te brengen of binnen te dringen.<\/p>\n\n<h3 class=\"wp-block-heading\">Hoge-prioriteit netwerkpakketten<\/h3>\n\n<p>De tweede groep <strong>Always<\/strong> bevat hoge-prioriteit pakketten die altijd zouden moeten worden geaccepteerd zonder veel vertraging. In mijn specifieke situatie functioneren de meeste servers die ik beheer ook als <strong>NTP<\/strong> <a href=\"https:\/\/www.lammertbies.nl\/nl\/comm\/info\/gps-time\">tijdservers<\/a>. Om accurate tijd te verzorgen is het belangrijk om een lage vertraging te hebben bij het verwerken van netwerk pakketten van het <em>Network Time Protocol<\/em>. Deze pakketten worden verzonden als <strong>UDP<\/strong> pakketten naar poort <b>123<\/b>. Om die reden worden deze pakketten direct geaccepteerd, zonder verder nog regels te checken. eze pakketten zouden kunnen komen van een aanvaller en zelfs onderdeel kunnen zijn van een <strong>DDOS<\/strong> aanval, maar we accepteren die situatie. Het verwerken van <strong>NTP<\/strong> pakketten heeft een dusdanig lage overhead dat zelfs wanneer pakketten op zeer hoge snelheid binnenkomen het slechts weinig CPU bronnen zal kosten. Er worden ook geen statussen bewaard zoals met het TCP protocol wel het geval is die buffer overflows zouden kunnen veroorzaken. Het enige wat zou kunnen gebeuren is verzadiging van het netwerk, maar dat gebeurt met een <strong>DDOS<\/strong> aanval onafhankelijk of we de pakketten nu accepteren of negeren.<\/p>\n\n<p>De volgende regel is net zo belangrijk. Het vertelt ons om alle pakketten te accepteren van een verbinding die we daarvoor hebben geaccepteerd als zijnde OK. Veel firewall configuraties missen deze specifieke regel, maar vanuit het oogpunt van performance is het een hele belangrijke. De meeste TCP\/IP protocollen wisselen veel pakketten uit over een enkele verbinding. Wanneer we praktisch gesproken alleen het eerste pakket van die strom testen en dan vervolgens de hele stroom als geaccepteerd of geweigerd markeren is er slechts weinig overhead nodig bij het verwerken van geaccepteerde netwerk verbindingen.<\/p>\n\n<p>De derde regel accepteert al het verkeer van de loop-back adapter. Wat veel firewall regels lijken te vergeten is dat ook het verkeer van en naar de loopback adapter door de firewall gecontroleerd wordt. Dit kan aanzienlijke performance problemen geven wanneer de loopback adapter bijvoorbeeld wordt gebruikt voor verbindingen tussen een Apache webserver en een SQL database.<\/p>\n\n<h3 class=\"wp-block-heading\">Vrienden<\/h3>\n\n<p>In het volgende blok defini\u00ebren we onze vrienden. Zoals je mogelijk hebt gezien wordt de <strong>Friends<\/strong> chain niet direct aangeroepen vanuit de <strong>INPUT<\/strong> of <strong>OUTPUT<\/strong> chain. Het wordt aangeroepen vanuit andere chains die we later zullen defini\u00ebren om toegang te accepteren tot specifieke poorten voor bepaalde IP adressen maar niet voor anderen. De <strong>Friends<\/strong> chain wordt aangeroepen om het bron IP adres te vergelijken met een lijst van toegestane adressen. De eerste regel controleert if het IP adres gelijk is aan <b>123.123.123.123<\/b>. Als dat het geval is wordt het pakket geaccepteerd zonder verdere uitvoering van firewall regels. Vervolgens wordt het IP adres gecontroleerd ten opzichte van een IP adres range van <b>111.111.111.0<\/b> tot <b>111.111.111.255<\/b>. Als het IP address in deze range ligt wordt het pakket ook geaccepteerd. De derde regel negeert alle pakketten die niet door \u00e9\u00e9n van de vorige regels geaccepteerd is.<\/p>\n\n<p>Het moge duidelijk zijn dat de IP adressen die hier genoemd worden slechts voorbeelden zijn. Ze moeten in de eigen situatie vervangen worden door adressen waar vriendschappelijk verkeer normaliter vandaan komt, bijvoorbeeld het IP adres van de eigen ADSL verbinding of IP adressen van andere servers in het eigen netwerk. Het is toegestaan extra regels toe te voegen voor de &#8211;<b>A Friends -j DROP<\/b> regel.<\/p>\n\n<h3 class=\"wp-block-heading\">Vijanden<\/h3>\n\n<p>Vijanden kunnen we op twee manieren herkennen. Ofwel bij het bron IP adres, ofwel door hun gedrag. Helaas werkt de firewall in de kernel op een laag niveau in de netwerk hierarchie en veel gedragskenmerken zijn alleen zichtbaar op het applicatie niveau, bijvoorbeeld woordenboek aanvallen om wachtwoorden te achterhalen op <strong>SSH<\/strong> servers of spam emails. Maar sommig gedrag kan worden gedetecteerd op het laagste netwerk niveau en \u00e9\u00e9n daarvan is het scannen van poorten. Het scannen van poorten is een methode waarbij met een aantal TCP\/IP poorten op de aangevallen computer verbinding wordt gelegd om te zoeken naar open verbindingen met SQL servers, controlepanelen en andere applicaties met netwerk faciliteiten. Mijn ervaring heeft me geleerd dat veel poortscanners zoeken voor onbeveiligde verbindingen met MySQL en MSSQL servers. Omdat mijn servers alleen SQL verzoeken van lokale applicaties accepteren is elk verzoek van de buitenwereld per definitie van een vijand. In de IP firewall heb ik regels geplaatst die worden geactiveerdwanneer verzoeken binnenkomen voor poort <b>1433<\/b>, poort <b>3306<\/b> en enkele andere bekende poorten. Elk IP adres van waaraf zo\u2019n verzoek wordt gegenereerd gaat in quarantaine voor een periode van 60 seconden. Dit wordt gedaan door de <strong>\u2013name psc \u2013set<\/strong> actie en er wordt gecontroleerd bij elk volgend pakket of die periode van 60 seconden nog niet verstreken is. De Linux kernel houdt een lijst bij van poortscan IPs die kan worden bekeken op de lokatie <b class=\"nowrap\">\/proc\/net\/ipt_recent\/psc<\/b>. Ik heb een timeout van 60 seconden genomen omdat ik sommige gevallen bij het testen ikzelf mogelijk als een poortscanner word geidentificeerd door de firewall. In dat geval sluit ik mijzelf slechts voor een periode van \u00e9\u00e9n minuut buiten. Maar het is uiteraard ook mogelijk die periode te verhogen naar bijvoorbeeld 15 minuten of een uur.<\/p>\n\n<p>Andere vijanden zijn vijanden die we kennen door het IP adres of een IP adresbereik. Ik heb hier het adres <b>99.99.99.99<\/b> toegevoegd als een voorbeeld, maar dit kunnen ook bereiken zijn zoals <b>111.111.111.0\/24<\/b>.<\/p>\n\n<h2 class=\"wp-block-heading\" id=\"addi\">Toevoegen en verwijderen van vijanden in de firewall<\/h2>\n\n<p><strong>Friends come and go, but enemies accumulate<\/strong> is wat Jones\u2019 motto ons leert. In de IT wereld ligt dat een klein beetje anders. Veel vijanden zijn dat slechts tijdelijk. Het zijn computers die geinfecteerd zijn, of servers met configurateproblemen zoals open mail of web proxies. Wanneer deze problemen opgelost zijn kan een vijand weer in een vriend veranderen.<\/p>\n\n<p>Hierom zoeken we naar een gemakkelijke methode om IP adressen of IP bereiken aan de iptables firewall die we hebben gemaakt toe te voegen of te verwijderen. In veel iptables firewall implementaties die u op het internet vindt is dit zeer moeilijk. Er is een diepgaande kennis nodig van de werking van de firewall voordat het mogelijk is wijzigingen erin te maken. Dat is raar, want wanneer de computer onder vuur ligt zijn er wel andere dingen te doen dan handleidingen te lezen, scripts te ontcijferen en dergelijke. Er was al te zien dat we de vijanden afgescheiden hebben in onze firewall door alle vijand gerelateerde firewall regels in een apparte tabel te plaatsen. Met twee shell scripts kunnen we regels toevoegen of verwijderen uit deze tabel.<\/p>\n\n<p><b class=\"nowrap\">\/usr\/local\/bin\/addenemy<\/b><\/p>\n\n<pre class=\"wp-block-preformatted\"><code>#!\/bin\/sh\n\niptables -L -n -v | grep -q $1\nRETVAL=$?\n\nif [ $RETVAL -eq 0 ]; then\n\n        echo \"IP address already in blocklist: $1\"\n        exit 0\n\nfi\necho \"Adding enemy $1\"\niptables -A Enemies -s $1 -j DROP\n<\/code><\/pre>\n\n<p>Dit script maakt eerst een dump van de huidige firewall regels and controleert of het IP adres of de IP range overeenkomt met een bestaande regel. Als dat het geval is wordt een waarschuwing getoond en stopt het script zonder verdere actie te ondernemen. Wanneer geen overeenkomende regel kan worden gevonden wordt het IP adres of IP range toegevoegd aan de lijst met vijanden. Door de hele lijst met regels te controleren op het nieuwe IP adres hebben een soort beveiliging gecre\u00eberd waarmee het moeilijker wordt \u00e9\u00e9n van onze eigen IPs toe te voegen aan de firewall, omdat dit script ook voortijdig zal stoppen als ze het IP adres of bereik vindt in de tabel met vrienden. Maar er geen test op individuele IPs ten opzichte van IP bereiken dus is nog steeds aandacht vereist bij het gebruik.<\/p>\n\n<p><b class=\"nowrap\">\/usr\/local\/bin\/delenemy<\/b><\/p>\n\n<pre class=\"wp-block-preformatted\"><code>#!\/bin\/sh\n\necho \"Deleting enemy $1\"\niptables -D Enemies -s $1 -j DROP\n<\/code><\/pre>\n\n<p>Dit script verwijdert een regel van de <strong>Enemies<\/strong> tabel die overeen komt met het opgegeven IP adres of IP bereik.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Inleiding in de iptables firewall Functionaliteit van de firewall in woorden Firewall performance in Linux Negeren of weigeren van pakketten? Laden van de iptables configuratie Toevoegen en verwijderen van vijanden in de firewall Inleiding in de iptables firewall Een firewall in computerterminologie is een software of hardware oplossing die probeert zoveel mogelijk kwaardaardig networkverkeer te [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":2000,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-2159","page","type-page","status-publish","hentry"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.4 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Een bijna perfecte iptables firewall configuratie - Lammert Bies<\/title>\n<meta name=\"description\" content=\"Beschrijving van een iptables firewall configuratie die portscanners, bekende vijanden en sommige DDOS aanvallen blokkeert.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.lammertbies.nl\/nl\/comm\/info\/iptables\" \/>\n<meta property=\"og:locale\" content=\"nl_NL\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Een bijna perfecte iptables firewall configuratie - Lammert Bies\" \/>\n<meta property=\"og:description\" content=\"Beschrijving van een iptables firewall configuratie die portscanners, bekende vijanden en sommige DDOS aanvallen blokkeert.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.lammertbies.nl\/nl\/comm\/info\/iptables\" \/>\n<meta property=\"og:site_name\" content=\"Lammert Bies\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/lammertbies\" \/>\n<meta property=\"article:modified_time\" content=\"2021-05-05T21:45:28+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.lammertbies.nl\/picture\/iptables-flow.png\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:site\" content=\"@lammertbies\" \/>\n<meta name=\"twitter:label1\" content=\"Geschatte leestijd\" \/>\n\t<meta name=\"twitter:data1\" content=\"18 minuten\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.lammertbies.nl\\\/nl\\\/comm\\\/info\\\/iptables\",\"url\":\"https:\\\/\\\/www.lammertbies.nl\\\/nl\\\/comm\\\/info\\\/iptables\",\"name\":\"Een bijna perfecte iptables firewall configuratie - Lammert Bies\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.lammertbies.nl\\\/nl#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/www.lammertbies.nl\\\/nl\\\/comm\\\/info\\\/iptables#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/www.lammertbies.nl\\\/nl\\\/comm\\\/info\\\/iptables#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.lammertbies.nl\\\/picture\\\/iptables-flow.png\",\"datePublished\":\"2021-05-01T20:31:32+00:00\",\"dateModified\":\"2021-05-05T21:45:28+00:00\",\"description\":\"Beschrijving van een iptables firewall configuratie die portscanners, bekende vijanden en sommige DDOS aanvallen blokkeert.\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.lammertbies.nl\\\/nl\\\/comm\\\/info\\\/iptables#breadcrumb\"},\"inLanguage\":\"nl-NL\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.lammertbies.nl\\\/nl\\\/comm\\\/info\\\/iptables\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"nl-NL\",\"@id\":\"https:\\\/\\\/www.lammertbies.nl\\\/nl\\\/comm\\\/info\\\/iptables#primaryimage\",\"url\":\"https:\\\/\\\/www.lammertbies.nl\\\/picture\\\/iptables-flow.png\",\"contentUrl\":\"https:\\\/\\\/www.lammertbies.nl\\\/picture\\\/iptables-flow.png\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.lammertbies.nl\\\/nl\\\/comm\\\/info\\\/iptables#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/www.lammertbies.nl\\\/nl\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Tutorials over computer interfacing\",\"item\":\"https:\\\/\\\/www.lammertbies.nl\\\/nl\\\/comm\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Communicatie en interfacing informatie\",\"item\":\"https:\\\/\\\/www.lammertbies.nl\\\/nl\\\/comm\\\/info\"},{\"@type\":\"ListItem\",\"position\":4,\"name\":\"Firewall configuratie voor iptables\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.lammertbies.nl\\\/nl#website\",\"url\":\"https:\\\/\\\/www.lammertbies.nl\\\/nl\",\"name\":\"Lammert Bies\",\"description\":\"Computer Interfacing\",\"publisher\":{\"@id\":\"https:\\\/\\\/www.lammertbies.nl\\\/nl#\\\/schema\\\/person\\\/5a6c15bc687da8d8d5ef7407fc62c7ba\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/www.lammertbies.nl\\\/nl?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"nl-NL\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\\\/\\\/www.lammertbies.nl\\\/nl#\\\/schema\\\/person\\\/5a6c15bc687da8d8d5ef7407fc62c7ba\",\"name\":\"Lammert Bies\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"nl-NL\",\"@id\":\"https:\\\/\\\/www.lammertbies.nl\\\/wp-content\\\/uploads\\\/2021\\\/04\\\/lammie.jpg\",\"url\":\"https:\\\/\\\/www.lammertbies.nl\\\/wp-content\\\/uploads\\\/2021\\\/04\\\/lammie.jpg\",\"contentUrl\":\"https:\\\/\\\/www.lammertbies.nl\\\/wp-content\\\/uploads\\\/2021\\\/04\\\/lammie.jpg\",\"width\":537,\"height\":541,\"caption\":\"Lammert Bies\"},\"logo\":{\"@id\":\"https:\\\/\\\/www.lammertbies.nl\\\/wp-content\\\/uploads\\\/2021\\\/04\\\/lammie.jpg\"},\"description\":\"is a dad, husband and polyglot. He is developing embedded systems since the eighties. Used machine learning before it had a name. Specializes in interconnecting computers, robots and humans. Was a Google Mapmaker Advocate and speaker on several international Google conferences from 2011 until the plug was pulled on Mapmaker in 2017. Currently spreading artificial intelligence to the wildest locations in production environments. He never stops learning.\",\"sameAs\":[\"https:\\\/\\\/www.lammertbies.nl\",\"https:\\\/\\\/www.facebook.com\\\/lammertbies\",\"https:\\\/\\\/www.linkedin.com\\\/in\\\/lammertbies\\\/\",\"https:\\\/\\\/x.com\\\/lammertbies\",\"https:\\\/\\\/bughunter.withgoogle.com\\\/profile\\\/1aaf547a-f30a-4145-b7f7-32259a48fa50\",\"https:\\\/\\\/github.com\\\/lammertb\"]}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Een bijna perfecte iptables firewall configuratie - Lammert Bies","description":"Beschrijving van een iptables firewall configuratie die portscanners, bekende vijanden en sommige DDOS aanvallen blokkeert.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.lammertbies.nl\/nl\/comm\/info\/iptables","og_locale":"nl_NL","og_type":"article","og_title":"Een bijna perfecte iptables firewall configuratie - Lammert Bies","og_description":"Beschrijving van een iptables firewall configuratie die portscanners, bekende vijanden en sommige DDOS aanvallen blokkeert.","og_url":"https:\/\/www.lammertbies.nl\/nl\/comm\/info\/iptables","og_site_name":"Lammert Bies","article_publisher":"https:\/\/www.facebook.com\/lammertbies","article_modified_time":"2021-05-05T21:45:28+00:00","og_image":[{"url":"https:\/\/www.lammertbies.nl\/picture\/iptables-flow.png","type":"","width":"","height":""}],"twitter_card":"summary_large_image","twitter_site":"@lammertbies","twitter_misc":{"Geschatte leestijd":"18 minuten"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/www.lammertbies.nl\/nl\/comm\/info\/iptables","url":"https:\/\/www.lammertbies.nl\/nl\/comm\/info\/iptables","name":"Een bijna perfecte iptables firewall configuratie - Lammert Bies","isPartOf":{"@id":"https:\/\/www.lammertbies.nl\/nl#website"},"primaryImageOfPage":{"@id":"https:\/\/www.lammertbies.nl\/nl\/comm\/info\/iptables#primaryimage"},"image":{"@id":"https:\/\/www.lammertbies.nl\/nl\/comm\/info\/iptables#primaryimage"},"thumbnailUrl":"https:\/\/www.lammertbies.nl\/picture\/iptables-flow.png","datePublished":"2021-05-01T20:31:32+00:00","dateModified":"2021-05-05T21:45:28+00:00","description":"Beschrijving van een iptables firewall configuratie die portscanners, bekende vijanden en sommige DDOS aanvallen blokkeert.","breadcrumb":{"@id":"https:\/\/www.lammertbies.nl\/nl\/comm\/info\/iptables#breadcrumb"},"inLanguage":"nl-NL","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.lammertbies.nl\/nl\/comm\/info\/iptables"]}]},{"@type":"ImageObject","inLanguage":"nl-NL","@id":"https:\/\/www.lammertbies.nl\/nl\/comm\/info\/iptables#primaryimage","url":"https:\/\/www.lammertbies.nl\/picture\/iptables-flow.png","contentUrl":"https:\/\/www.lammertbies.nl\/picture\/iptables-flow.png"},{"@type":"BreadcrumbList","@id":"https:\/\/www.lammertbies.nl\/nl\/comm\/info\/iptables#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.lammertbies.nl\/nl"},{"@type":"ListItem","position":2,"name":"Tutorials over computer interfacing","item":"https:\/\/www.lammertbies.nl\/nl\/comm"},{"@type":"ListItem","position":3,"name":"Communicatie en interfacing informatie","item":"https:\/\/www.lammertbies.nl\/nl\/comm\/info"},{"@type":"ListItem","position":4,"name":"Firewall configuratie voor iptables"}]},{"@type":"WebSite","@id":"https:\/\/www.lammertbies.nl\/nl#website","url":"https:\/\/www.lammertbies.nl\/nl","name":"Lammert Bies","description":"Computer Interfacing","publisher":{"@id":"https:\/\/www.lammertbies.nl\/nl#\/schema\/person\/5a6c15bc687da8d8d5ef7407fc62c7ba"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.lammertbies.nl\/nl?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"nl-NL"},{"@type":["Person","Organization"],"@id":"https:\/\/www.lammertbies.nl\/nl#\/schema\/person\/5a6c15bc687da8d8d5ef7407fc62c7ba","name":"Lammert Bies","image":{"@type":"ImageObject","inLanguage":"nl-NL","@id":"https:\/\/www.lammertbies.nl\/wp-content\/uploads\/2021\/04\/lammie.jpg","url":"https:\/\/www.lammertbies.nl\/wp-content\/uploads\/2021\/04\/lammie.jpg","contentUrl":"https:\/\/www.lammertbies.nl\/wp-content\/uploads\/2021\/04\/lammie.jpg","width":537,"height":541,"caption":"Lammert Bies"},"logo":{"@id":"https:\/\/www.lammertbies.nl\/wp-content\/uploads\/2021\/04\/lammie.jpg"},"description":"is a dad, husband and polyglot. He is developing embedded systems since the eighties. Used machine learning before it had a name. Specializes in interconnecting computers, robots and humans. Was a Google Mapmaker Advocate and speaker on several international Google conferences from 2011 until the plug was pulled on Mapmaker in 2017. Currently spreading artificial intelligence to the wildest locations in production environments. He never stops learning.","sameAs":["https:\/\/www.lammertbies.nl","https:\/\/www.facebook.com\/lammertbies","https:\/\/www.linkedin.com\/in\/lammertbies\/","https:\/\/x.com\/lammertbies","https:\/\/bughunter.withgoogle.com\/profile\/1aaf547a-f30a-4145-b7f7-32259a48fa50","https:\/\/github.com\/lammertb"]}]}},"_links":{"self":[{"href":"https:\/\/www.lammertbies.nl\/nl\/wp-json\/wp\/v2\/pages\/2159","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.lammertbies.nl\/nl\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/www.lammertbies.nl\/nl\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/www.lammertbies.nl\/nl\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.lammertbies.nl\/nl\/wp-json\/wp\/v2\/comments?post=2159"}],"version-history":[{"count":0,"href":"https:\/\/www.lammertbies.nl\/nl\/wp-json\/wp\/v2\/pages\/2159\/revisions"}],"up":[{"embeddable":true,"href":"https:\/\/www.lammertbies.nl\/nl\/wp-json\/wp\/v2\/pages\/2000"}],"wp:attachment":[{"href":"https:\/\/www.lammertbies.nl\/nl\/wp-json\/wp\/v2\/media?parent=2159"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}