Startpagina » hoe » De beginnershandleiding voor iptables, de Linux Firewall

    De beginnershandleiding voor iptables, de Linux Firewall

    Iptables is een uiterst flexibel firewall-hulpprogramma dat is gebouwd voor Linux-besturingssystemen. Of je nu een beginnende Linux-expert bent of een systeembeheerder, er is waarschijnlijk een manier waarop iptables je heel goed kunnen gebruiken. Lees verder terwijl we u laten zien hoe u de meest veelzijdige Linux-firewall kunt configureren.

    foto door ezioman.

    Over iptables

    iptables is een opdrachtregelprogramma voor firewalls dat beleidsketens gebruikt om verkeer toe te staan ​​of te blokkeren. Wanneer een verbinding probeert zichzelf op uw systeem te vestigen, zoekt iptables naar een regel in de lijst om deze aan te passen. Als er geen wordt gevonden, wordt de standaardactie toegepast.

    iptables komt bijna altijd vooraf geïnstalleerd op elke Linux-distributie. Om het bij te werken / te installeren, haal je gewoon het iptables-pakket op:

    sudo apt-get install iptables

    Er zijn GUI-alternatieven voor iptables zoals Firestarter, maar iptables is niet echt zo moeilijk als je eenmaal een paar bevelen lager hebt staan. Je wilt extreem voorzichtig zijn bij het configureren van iptables-regels, vooral als je SSH bent op een server, omdat een foutieve opdracht je permanent kan vergrendelen totdat het handmatig is opgelost op de fysieke machine.

    Soorten kettingen

    iptables gebruikt drie verschillende ketens: input, forward en output.

    Invoer - Deze keten wordt gebruikt om het gedrag voor binnenkomende verbindingen te regelen. Als een gebruiker bijvoorbeeld probeert SSH naar uw pc / server te verzenden, probeert iptables het IP-adres en de poort te koppelen aan een regel in de invoerketen.

    Vooruit - Deze keten wordt gebruikt voor inkomende verbindingen die niet lokaal worden afgeleverd. Denk aan een router - er worden altijd gegevens naar toe gestuurd, maar deze zijn eigenlijk niet echt bestemd voor de router zelf; de gegevens worden gewoon doorgestuurd naar het doelwit. Tenzij je een soort routing, NATing of iets anders op je systeem doet dat moet worden doorgestuurd, gebruik je deze keten niet eens.

    Er is een zekere manier om te controleren of uw systeem de forward-keten al dan niet gebruikt.

    iptables -L -v

    De bovenstaande schermafbeelding is van een server die al enkele weken wordt uitgevoerd en heeft geen beperkingen voor inkomende of uitgaande verbindingen. Zoals u ziet, heeft de invoerketen 11 GB aan pakketten verwerkt en heeft de uitvoerketen 17 GB verwerkt. De forward-keten hoeft echter geen enkel pakket te verwerken. Dit komt omdat de server geen enkele vorm van doorsturen uitvoert of wordt gebruikt als een doorvoerapparaat.

    uitgang - Deze keten wordt gebruikt voor uitgaande verbindingen. Als u bijvoorbeeld howtogeek.com probeert te pingen, controleert iptables de uitvoerketen om te zien wat de regels zijn met betrekking tot ping en howtogeek.com voordat een besluit wordt genomen om de verbindingspoging toe te staan ​​of te weigeren.

    Het voorbehoud

    Hoewel het pingen van een externe host lijkt op iets dat alleen de uitvoerketen hoeft te doorlopen, moet u er rekening mee houden dat om de gegevens te retourneren, de invoerketen ook wordt gebruikt. Wanneer u iptables gebruikt om uw systeem te vergrendelen, moet u onthouden dat veel protocollen tweerichtingscommunicatie vereisen, dus zowel de ingangs- als uitgangsketens moeten correct worden geconfigureerd. SSH is een algemeen protocol dat mensen vergeten toe te staan ​​aan beide ketens.

    Beleidsketen standaardgedrag

    Voordat u instapt en specifieke regels configureert, moet u beslissen wat u wilt dat het standaardgedrag van de drie ketens is. Met andere woorden, wat wilt u dat iptables doen als de verbinding niet overeenkomt met bestaande regels?

    Om te zien wat uw beleidsketens momenteel zijn geconfigureerd om te doen met ongeëvenaard verkeer, voert u het iptables -L commando.

    Zoals je kunt zien, hebben we ook het grep-commando gebruikt om ons een schonere output te geven. In dat screenshot zijn onze ketens momenteel berekend op het accepteren van verkeer.

    Meer tijden dan niet, wil je dat je systeem standaard verbindingen accepteert. Tenzij u eerder de beleidsketenregels hebt gewijzigd, moet deze instelling al zijn geconfigureerd. Hoe dan ook, hier is de opdracht om standaard verbindingen te accepteren:

    iptables --policy INPUT ACCEPT
    iptables --policy OUTPUT ACCEPT
    iptables --policy VOORWAARDE ACCEPTEREN

    Door standaard op de acceptatieregel te klikken, kunt u iptables gebruiken om specifieke IP-adressen of poortnummers te weigeren, terwijl u alle andere verbindingen blijft accepteren. We komen zo snel tot die opdrachten.

    Als u liever alle verbindingen weigert en handmatig opgeeft welke verbindingen u wilt toestaan ​​om verbinding te maken, moet u het standaardbeleid van uw ketens wijzigen om te laten vallen. Dit doen zou waarschijnlijk alleen nuttig zijn voor servers die gevoelige informatie bevatten en alleen ooit dezelfde IP-adressen hebben om verbinding te maken.

    iptables --policy INPUT DROP
    iptables --policy OUTPUT DROP
    iptables --policy VOORUITE DALING

    Connectie-specifieke antwoorden

    Met uw standaard ketenbeleid geconfigureerd, kunt u beginnen met het toevoegen van regels aan iptables zodat het weet wat te doen wanneer het een verbinding van of naar een bepaald IP-adres of poort ontmoet. In deze gids bespreken we de drie meest elementaire en veelgebruikte antwoorden..

    Aanvaarden - Sta de verbinding toe.

    Laten vallen - Laat de verbinding vallen, doe alsof het nooit gebeurd is. Dit is het beste als u niet wilt dat de bron zich realiseert dat uw systeem bestaat.

    afwijzen - Sta de verbinding niet toe, maar stuur een foutmelding terug. Dit is het beste als u niet wilt dat een bepaalde bron verbinding maakt met uw systeem, maar u wilt dat ze weten dat uw firewall ze heeft geblokkeerd.

    De beste manier om het verschil tussen deze drie regels te laten zien is om te laten zien hoe het eruitziet wanneer een pc een Linux-machine probeert te pingen met iptables die voor elk van deze instellingen zijn geconfigureerd.

    De verbinding toestaan:

    De verbinding laten vallen:

    De verbinding weigeren:

    Specifieke verbindingen toestaan ​​of blokkeren

    Als uw beleidsketens zijn geconfigureerd, kunt u nu iptables configureren om specifieke adressen, adresbereiken en poorten toe te staan ​​of te blokkeren. In deze voorbeelden leggen we de verbindingen naar LATEN VALLEN, maar je kunt er naar overschakelen AANVAARDEN of REJECT, afhankelijk van uw behoeften en hoe u uw beleidsketens hebt geconfigureerd.

    Opmerking: in deze voorbeelden gaan we gebruiken iptables -A regels toevoegen aan de bestaande keten. iptables begint bovenaan de lijst en doorloopt elke regel totdat deze een regel vindt die overeenkomt. Als u een regel boven een andere moet invoegen, kunt u gebruiken iptables -I [ketting] [nummer] om het nummer op te geven dat het in de lijst moet zijn.

    Verbindingen vanaf een enkel IP-adres

    Dit voorbeeld laat zien hoe alle verbindingen van het IP-adres 10.10.10.10 te blokkeren.

    iptables -A INPUT -s 10.10.10.10 -j DROP

    Verbindingen van een reeks IP-adressen

    Dit voorbeeld laat zien hoe alle IP-adressen in het 10.10.10.0/24 netwerkbereik worden geblokkeerd. U kunt een netmasker of standaard schuine notatie gebruiken om het bereik van IP-adressen op te geven.

    iptables -A INPUT -s 10.10.10.0/24 -j DROP

    of

    iptables -A INPUT -s 10.10.10.0/255.255.255.0 -j DROP

    Verbindingen met een specifieke poort

    Dit voorbeeld laat zien hoe SSH-verbindingen te blokkeren van 10.10.10.10.

    iptables -A INPUT -p tcp --dport ssh -s 10.10.10.10 -j DROP

    U kunt "ssh" vervangen door een protocol of poortnummer. De -p tcp een deel van de code vertelt iptables wat voor soort verbinding het protocol gebruikt. Als u een protocol blokkeerde dat UDP gebruikt in plaats van TCP, dan -p udp zou in plaats daarvan nodig zijn.

    Dit voorbeeld laat zien hoe SSH-verbindingen van elk IP-adres worden geblokkeerd.

    iptables -A INPUT -p tcp --dport ssh -j DROP

    Verbindingsstaten

    Zoals we eerder vermeldden, zullen veel protocollen tweerichtingscommunicatie vereisen. Als u bijvoorbeeld SSH-verbindingen met uw systeem wilt toestaan, hebben de invoer- en uitvoerketens een regel nodig die daaraan is toegevoegd. Maar wat als u alleen wilt dat SSH in uw systeem wordt toegelaten? Het toevoegen van een regel aan de uitvoerketen staat ook uitgaande SSH-pogingen toe?

    Dat is waar verbindingsstaten binnenkomen, die je de mogelijkheid geven die je nodig hebt om tweerichtingscommunicatie mogelijk te maken, maar alleen toestaan ​​dat er eenrichtingsverbindingen tot stand worden gebracht. Bekijk dit voorbeeld, waar SSH-verbindingen VANAF 10.10.10.10 zijn toegestaan, maar SSH-verbindingen TOT 10.10.10.10 niet. Het is het systeem echter toegestaan ​​om informatie over SSH terug te sturen zolang de sessie al is ingesteld, waardoor SSH-communicatie mogelijk is tussen deze twee hosts.

    iptables -A INPUT -p tcp --dport ssh -s 10.10.10.10 -m staat --status NIEUW, GEVESTIGD -j ACCEPT

    iptables -A OUTPUT -p tcp --sport 22 -d 10.10.10.10 -m state --state ESTABLISHED -j ACCEPT

    Wijzigingen opslaan

    De wijzigingen die u in uw iptables-regels aanbrengt, worden de volgende keer dat de iptables-service opnieuw wordt gestart, verwijderd tenzij u een opdracht uitvoert om de wijzigingen op te slaan. Deze opdracht kan verschillen afhankelijk van uw distributie:

    Ubuntu:

    sudo / sbin / iptables-opslaan

    Red Hat / CentOS:

    / sbin / service iptables opslaan

    Of

    /etc/init.d/iptables opslaan

    Andere opdrachten

    Lijst van de momenteel geconfigureerde iptables-regels:

    iptables -L

    Het toevoegen van de -v optie geeft u pakket- en bytegegevens en voegt toe -n zal alles numeriek weergeven. Met andere woorden: hostnamen, protocollen en netwerken worden weergegeven als nummers.

    Om alle momenteel geconfigureerde regels te wissen, kunt u de flush-opdracht geven.

    iptables -F