Er zijn verschillende firewall-applicaties voor Linux, maar wat je misschien niet beseft, is dat, in het hart van al deze programma's, een enkele almachtige applicatie is die direct in de Linux Kernel is ingebouwd: iptables. Dit is de Linux-firewall. Ongeacht het programma dat u gebruikt om uw firewall onder Linux te configureren, het komt uiteindelijk allemaal neer op iptables. Het enige dat deze andere programma's doen, is het configureren.
Dus hier komt de vraag: als die programma's simpelweg iptables configureren, waarom zou je het niet gewoon zelf rechtstreeks configureren? Dit is gemakkelijker dan je zou denken!
Als u bekend bent met netwerkvoorwaarden, zoals verbindingen, IP, TCP en poort, kunt u gerust naar de volgende stap gaan. Als u nog niet bekend bent met netwerken, lees dan verder om vertrouwd te raken met de voorwaarden die u moet begrijpen, zodat u deze zelfstudie kunt volgen.
Houd er rekening mee dat de onderstaande termen en definities opzettelijk zijn over-vereenvoudigd. Ze zijn bedoeld voor dagelijkse gebruikers, geen sysadmins. Dus als je een doorgewinterde systeembeheerder bent of als je een CCNA in je zak hebt, excuseer me dan voor het niet invoeren van de details.
TCP / IP is een protocol waarmee computers met elkaar kunnen communiceren via internet en Ethernet-netwerken.
Falen is het laatste redmiddel.
Stel je voor een Ethernet-netwerk als een klein lokaal netwerk (LAN - Local Area Network), zoals uw pc thuis, laptop en smartphone. Het is een klein heterogeen netwerk dat geïsoleerd is van de rest van de wereld. Een netwerk van dergelijke netwerken is wat we allemaal kennen als de internet: een set onderling verbonden netwerken.
TCP / IP is een combinatie van twee protocollen die werken op verschillende niveaus in de hiërarchie van de netwerkcommunicatieketen. We zullen niet ingaan op details over die hiërarchie. TCP betekent Transfer Control Protocol, en zijn kernverantwoordelijkheid is ervoor te zorgen dat de communicatie succesvol is. Het controleert de juistheid van de verzonden gegevens en zorgt voor het succes ervan. Het heeft verschillende algoritmen om verfijnde controlesommen uit te voeren, autocorrectie en opnieuw proberen. Falen is het laatste redmiddel. De naam, IK P komt van Internet Protocol. U kunt dit het beste associëren met het "telefoonnummer" van uw pc. Elke machine die in staat is om via internet te communiceren, moet een IP-adres hebben - een uniek telefoonnummer - zodat communicatiepakketten hun bestemming kunnen vinden. EEN pakket is een klein stukje gegevens in een communicatiestroom, die op zichzelf staat en kan worden gecontroleerd op juistheid. In wezen kunnen we stellen dat onze computers TCP-pakketten via internet verzenden via het IP-protocol.
Elke netwerkcommunicatie is gebonden aan een specifieke haven. Netwerkpoorten lopen van 0 tot 2 ^ 16 (65536). Elke netwerkverbinding heeft een uitgaande poort voor degene die deze initieert en een inkomende poort voor degene die naar berichten van andere computers luistert. Er kunnen verschillende verbindingen zijn tussen verschillende computers via identieke poorten. Een computer kan echter meerdere poorten tegelijk aanspreken. In feite zijn poorten dus goed om services te identificeren en communicatiekanalen te definiëren, maar ze beperken de hoeveelheid gegevens of verbindingen niet.
Sommige computers kunnen vergelijkbare IP-adressen hebben. U hebt misschien opgemerkt dat zowel uw computer thuis als op het werk IP-adressen heeft die de vorm aannemen van iets in de trant van 192.168.something.something
, of 10.0.something.something
, of 172.16.something.something
. Dit zijn de zogenaamde private IP-adressen die alleen binnen uw LAN kunnen worden gebruikt. Je kunt niet naar het internet gaan met IP-adressen zoals deze. Ze zijn vergelijkbaar met binnennummers voor het telefoonnetwerk van uw bedrijf.
EEN Brug is wat computers met echte (publieke) IP-adressen doorgeven aan het internet.
In feite hebben deze computers de rechten en mogelijkheden om rechtstreeks op internet met elkaar te praten. Maar aangezien er geen directe verbindingen zijn tussen alle computers in de wereld (dat zou vrij moeilijk zijn om te bereiken), zijn bruggen verantwoordelijk voor het verbinden van segmenten van het internet.
Om onze telefonie-analogie levend te houden, kunt u zich voorstellen dat deze bruggen vergelijkbaar zijn met de telefooncentra in uw stad of buurt. Als u belt naar een ander lokaal nummer (de computers aan de linkerkant in ons schema), kan de communicatie rechtstreeks door uw telefooncentrale zijn gemaakt door uw lijn fysiek met die van uw buren te verbinden. Als u in plaats daarvan uw verre oom Bob wilt bellen, moet uw oproep over verschillende telefooncentrales worden omgeleid totdat de telefoon van uw oom kan worden verbonden. Deze vormen een brug tussen je stad en zijn stad.
EEN poort is een manier voor computers van een privé-netwerk (LAN met privé-IP-adressen) om te communiceren met andere computers op internet.
Een privé-netwerk is vergelijkbaar met het particuliere telefoonnetwerk van uw bedrijf. U kunt interne nummers bellen, maar om iemand te bellen die buiten het netwerk van uw bedrijf is - zoals uw vrouw thuis - moet u eerst een speciaal nummer of prefix bellen..
Computers werken eigenlijk op dezelfde manier. Wanneer u zich op een particulier netwerk bevindt, hebt u een zogenaamde gateway-computer. Wanneer uw computer met een andere computer op internet probeert te praten, zal dit gebeuren automagisch neem eerst contact op met de gateway en vraag "een streepje" naar de buitenwereld. De gateway doet het gesprek met de computer op internet en stuurt het bericht door naar uw computer. U ziet als gewone gebruiker geen verschil tussen een bridge en een gateway. Uw computer zal weten hoe hij ermee moet omgaan.
Een firewall is een programma dat wordt uitgevoerd op een gateway, bridge of pc / laptop / smartphone die inkomende, uitgaande en doorgestuurde netwerkpakketten kan filteren. Een firewall is in wezen een hulpmiddel waarmee u de toegang van u of uw netwerk tot internet en de toegang van iemand anders van internet tot uw netwerk kunt beperken.
En ja, uw kabelrouter of thuisnetwerk is in feite een firewall voor al uw computers en gadgets die er verbinding mee maken.
Laten we ons een heel mogelijke netwerkarchitectuur voorstellen om de context in te stellen. Ik heb veel kleine bedrijven gezien die iets dergelijks deden.
Wat we hier hebben is eigenlijk iets heel eenvoudigs:
In het volgende gedeelte zullen we iptables op die gateway configureren, zodat alle apparaten in het netwerk verbinding kunnen maken met internet. Hiermee kunnen we via SSH verbinding maken, en externe e-mailservers toegang geven tot de e-mailserver binnen ons netwerk - een computer die zelfs geen openbaar IP-adres heeft; alleen een privé-account.
De naam van Iptables heeft eigenlijk een betekenis in zijn functionaliteit. Het is een verzameling tabellen met IP-adres en poorten waaraan een aantal acties is gekoppeld. In de terminologie van iptable worden deze tabellen aangeduid als kettingen. Een niet-geconfigureerde, lege iptables kan er als volgt uitzien:
csaba ~ # iptables -L Chain INPUT (beleid ACCEPT) doel prot opt bronbestemming Chain FORWARD (beleid ACCEPT) doel prot opt bronbestemming Chain OUTPUT (beleid ACCEPT) doel prot opt bronbestemming
Je kunt zien dat er drie hoofdketens zijn:
De voorwaarde, "beleid ACCEPTEREN"tussen haakjes betekent dat ACCEPT is ingesteld als het standaardbeleid voor die bepaalde keten. Dus als er geen overeenkomst voor een verbinding is, wordt die regel toegepast. Er zijn drie hoofdconcepten die u kunt gebruiken bij het configureren van uw firewall:
Er zijn twee manieren om een nieuwe regel toe te voegen aan iptables. Een daarvan is om het in te voegen aan het begin van een ketting. De andere optie is om het aan het einde van een keten toe te voegen. Waarom maakt het uit in welke volgorde de regels voorkomen?
Belangrijk: iptables controleer de regels in een keten van boven naar beneden. Het zal zijn zoekactie bij de eerste wedstrijd stoppen.
U moet uw regels op zo'n manier ontwerpen dat u rekening houdt met het bovengenoemde gedrag van iptables. Na de eerste match van een regel neemt iptables de acties die zijn gespecificeerd door de regel en stopt dan de zoekopdracht. Als er geen regel overeenkomt met de gecontroleerde verbinding, is het standaardbeleid van toepassing.
Laten we zeggen dat we een regel willen toevoegen aan onze iptables waarmee iedereen verbinding kan maken met poort 22 op onze firewall. Poort 22 is de poort voor het SSH-protocol. Natuurlijk zal een goede serverbeheerder deze poort veranderen in iets onverwachts om voor de hand liggende veiligheids- / obscuriteitsredenen, maar dat is een ander verhaal voor een andere zelfstudie. We houden vast aan 22.
csaba ~ # iptables -I INPUT -i eth0 -p tcp --dport 22 -j ACCEPT csaba ~ # iptables -L Chain INPUT (beleid ACCEPT) doel prot opt bronbestemming ACCEPT tcp - overal en overal tcp dpt: ssh
Ik veronderstelde dat het IP-adres waarmee het internet is geconfronteerd met het openbare IP-adres erop, wordt genoemd op de netwerkinterface eth0
. Laten we dit commando ontleden:
eth0
--sport
versie voor bronpoortverificatieU hebt echter al geraden dat deze regel op dit moment weinig effect heeft. Ons standaardbeleid is ACCEPTEREN, dus iets expliciet accepteren biedt ons geen extra functionaliteit. Onthoud nu de derde aanbevolen manier om onze firewall in te stellen: de expliciete regel om alles te ontkennen dat niet overeenkomt. Laten we die regel toevoegen.
We willen een regel toevoegen die binnenkomend verkeer blokkeert. Maar wees voorzichtig: we willen alleen blokkeren wat schadelijk kan zijn. Als we alles blokkeren, kunnen we niets doen, omdat de antwoorden op onze verzoeken worden afgewezen. Wanneer u bijvoorbeeld op een webpagina surft, doet u een aanvraag en ontvangt u een antwoord. Dit antwoord komt op je computer, dus in de INPUT-keten moeten we een regel hebben om dit toe te staan.
Ten eerste voegen we een regel toe om inkomend verkeer te accepteren voor reeds bestaande verbindingen, zoals antwoorden op verzoeken.
csaba ~ # iptables -A INPUT -i eth0 -m conntrack --ctstate ESTABLISHED, RELATED -j ACCEPT csaba ~ # iptables -L Chain INPUT (policy ACCEPT) doel prot opt bronbestemming ACCEPT tcp - overal en overal tcp dpt: ssh ACCEPT alles - overal waar ctstate GERELATEERD, GEVESTIGD
Nu we onze bestaande verbindingen en de antwoorden op de verbindingen die we hebben geïnitieerd, hebben beveiligd, kunnen we al het andere dat niet is gematcht, ontkennen.
csaba ~ # iptables -A INPUT -i eth0 -p tcp -j DROP csaba ~ # iptables -L Chain INPUT (beleid ACCEPT) doel prot opt bronbestemming ACCEPT tcp - overal en overal tcp dpt: ssh ACCEPT alles - overal waar dan ook ctstate GERELATEERDE, VASTGELEGDE DROP tcp - overal en altijd
We hebben een nieuwe regel toegevoegd, met een regel om alle verbindingen die overeenkomen te DROPen. Let op: deze regel is alleen van toepassing als geen van de vorige overeenkomen.
Er zijn twee manieren om een verbinding te weigeren.
Op dit punt hebben we enkele basisregels voor de INPUT-keten. Maar we hebben een netwerk van computers met privé IP-adressen. We moeten een toegangspoort tot internet bieden. Dit wordt ook gedaan door iptables: de firewall.
Waarschijnlijk heb je deze term al gehoord: NAT. Dit verwijst naar de procedure van het vertalen van een netwerkadres naar een ander en het doorsturen van de informatie tussen de twee. Het wordt het meest gebruikt in architecturen zoals die van ons. De gateway moet NAT doen om het IP-adres van elke computer vanaf het LAN naar zijn eigen openbare IP en vervolgens terug te vertalen.
Routering is de procedure waarmee een systeem kan achterhalen op welke netwerkinterfaces en naar welke gateway het kan communiceren om zijn bestemming te bereiken. Elke computer heeft zijn eigen routeringstabel om dit te bepalen. Iptables kunnen deze routingprocedure op twee verschillende manieren aansluiten: voor en na de procedure.
csaba ~ # iptables -t nat -A POSTROUTING -o eth0 -j SNAT --to-source 89.72.31.243
Met deze opdracht wordt een regel toegevoegd als POSTROUTING aan de NATing-tabel (-t nat
). POSTROUTING betekent in feite dat de pakketten eerst het routeringsmechanisme op de gateway passeren en pas daarna worden ze aangepast. De regel -j SNAT
betekent Source NAT; het bronadres van de pakketten zal worden veranderd naar het adres op de interface gespecificeerd door -o eth0
- in ons geval naar het IP-adres dat is opgegeven door de optie, --to-source
. Dus iedereen die gecontacteerd wordt door een computer in uw netwerk zal aannemen dat het rechtstreeks met uw gateway praat. Het zal absoluut geen idee hebben over het feit dat de pakketten bestemd zijn voor een andere computer. De gateway, die iptables gebruikt, houdt een interne lijst bij van alle vertaalde IP-adressen, en wanneer er een antwoord komt, zal het de wijziging terugdraaien en het antwoord doorgeven aan de computer binnen het netwerk.
Een ander probleem dat we tegenkomen is wat te doen als we een server hebben die achter een firewall zit. We moeten toestaan dat de clients, afkomstig van internet, op de een of andere manier communiceren met onze server. Dit is het geval met onze mailserver. Wanneer een e-mail binnenkomt die moet worden bezorgd op een e-mailaccount op onze server, zal de verzendende e-mailserver verbinding moeten maken met onze ontvangende e-mail.
Maar onze mailserver heeft alleen een privé-IP-adres. Het is niet mogelijk dat een externe computer er rechtstreeks verbinding mee kan maken. Aan de andere kant heeft onze gateway een externe IP waarmee iedereen verbinding kan maken. De oplossing? Open een poort op onze gateway zodat een verzoek van internet naar die poort daadwerkelijk naar onze e-mailserver gaat. Het antwoord zal natuurlijk via de gateway teruggaan naar de klant. De truc is om hier een ander type NAT te gebruiken, Destination NAT genaamd. Dit verandert de bestemming van de pakketten en keert ze terug wanneer het antwoord zich voordoet. Denk aan DNAT als het omgekeerde van SNAT.
Tip: Je kent deze functie misschien als 'Virtual Server', als je ooit hebt gespeeld met kleine thuisrouters.
csaba ~ # iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 25 -j DNAT --to-destination 192.168.1.2:25
Wat is hier aan de hand? Een pakket komt binnen bij onze gateway op poort 25 (de poort gebruikt voor SMTP, het e-mailprotocol dat het hele internet gebruikt). De regel hierboven vangt dit pakket vanwege de --dport 25
optie, die in feite zegt:Vergelijk alles dat naar deze poort gaat op de interface die is opgegeven door -ik eth0
. Nu het pakket is gekoppeld, wijzigt u de bestemming van de huidige machine (de gateway) naar die gespecificeerd door --to-bestemming
."Let op: u kunt de poort expliciet achter het IP-adres opgeven door deze te scheiden met een dubbele punt.
Merk tot slot op dat dit in de PREROUTING-haak zit. De bestemming moet worden gewijzigd voordat de routering daadwerkelijk plaatsvindt. Anders komen de pakketten op de gateway terecht en vinden ze geen weg naar de mailserver.
De regels die u invoegt of toevoegt aan iptables bevinden zich in het geheugen. Na een reboot, spoof: alles is weg! Om uw configuratie op te slaan, moet u deze naar een bestand dumpen, zoals:
csaba ~ # iptables-save> /some/directory/my_rules.fw
De naam van het bestand doet er niet toe, noch de extensie. Om de regels te herstellen, voert u deze opdracht uit wanneer uw computer opstart.
iptables-Restor < /some/directory/my_rules.fw
Als u de opgeslagen inhoud bekijkt, ziet u dat het dezelfde parameters zijn die we met de iptables-opdrachten hebben gebruikt. Er zijn enkele kleine verschillen, maar je kunt het opgeslagen bestand gemakkelijk begrijpen, en zou zelfs je eigen dergelijke bestanden handmatig kunnen schrijven en laden.
Tot slot volgen hier enkele gedachten over wanneer en wanneer geen firewall te gebruiken met een Linux-computer.
Gebruik een firewall op Linux wanneer u een server configureert (zoals een gateway in ons voorbeeld), of wanneer u een computer hebt met belangrijke informatie die direct is blootgesteld aan het internet. Bekijk het potentiële gevaar voordat u doorgaat met het configureren van uw iptables. Stel jezelf de vraag: is mijn computer bekend op het internet? Er zijn een paar miljard computers die er zijn. Als de jouwe maar één is, is de kans om te worden aangevallen ongelooflijk laag. Zijn er mensen die direct geïnteresseerd zijn in jouw informatie? Hackers verspillen geen tijd aan het stelen van willekeurige gegevens in de hoop dat ze iets vinden. Ze weten meestal waar ze naar op zoek zijn en richten zich vervolgens op de computers met de gewenste informatie. Natuurlijk zijn er talloze aanvallen tegen willekeurige computers die proberen een soort worm of virus te installeren, maar op Linux ben je immuun voor ontwerp.
Verspil geen tijd met het configureren van een firewall op Linux als het een computer is die altijd achter een firewall zit, zoals je thuiscomputer achter je thuisrouter, of als je geen bijzonder belangrijke informatie op je laptop hebt staan. Als u de services die naar het netwerk luisteren tot een minimum beperkt en een redelijk beveiligd wachtwoord heeft, kunt u uw firewall vergeten. Ik heb persoonlijk geen pc, laptop of smartphone met een firewall die draait. Ik heb echter een thuisrouter met een goed geconfigureerde firewall.
Ik denk dat je deze ideeën ook veilig kunt toepassen op Mac OSX. Als je een Windows-gebruiker bent, sorry: een firewall is je eerste verdedigingslinie. Voor Linux of MacOSX is een firewall echter uw laatste verdedigingslinie. Een zorgvuldig geselecteerd wachtwoord en geen nutteloze services uitvoeren, moet het grootste deel van uw computer beschermen.
Bedankt voor het lezen. vragen?