Hemsida » hur » Nybörjarens guide till iptables, Linux-brandväggen

    Nybörjarens guide till iptables, Linux-brandväggen

    Iptables är ett extremt flexibelt brandväggsprogram byggt för Linux operativsystem. Oavsett om du är en nybörjare Linux-geek eller en systemadministratör, finns det förmodligen något sätt att iptables kan vara till stor nytta för dig. Läs vidare när vi visar dig hur du konfigurerar den mest mångsidiga Linux-brandväggen.

    Foto av ezioman.

    Om iptables

    iptables är ett kommandorad brandvägg verktyg som använder politikkedjor för att tillåta eller blockera trafik. När en anslutning försöker etablera sig på ditt system letar iptables efter en regel i sin lista för att matcha den till. Om den inte hittar någon, skiljer den sig från standardåtgärden.

    iptables kommer nästan alltid förinstallerad på någon Linux-distribution. För att uppdatera / installera det, hämta bara iptables-paketet:

    sudo apt-get installera iptables

    Det finns GUI-alternativ till iptables som Firestarter, men iptables är inte så svårt när du har några kommandon nere. Du vill vara mycket försiktig när du konfigurerar iptables-regler, särskilt om du har SSH-en till en server, eftersom ett felkommando kan låsa dig permanent tills det är manuellt fixerat på den fysiska maskinen.

    Typer av kedjor

    iptables använder tre olika kedjor: input, forward och output.

    Inmatning - Denna kedja används för att styra beteendet för inkommande anslutningar. Om en användare till exempel försöker SSH till din dator / server, försöker iptables att matcha IP-adressen och porten till en regel i ingångskedjan.

    Framåt - Denna kedja används för inkommande anslutningar som inte faktiskt levereras lokalt. Tänk på en router - data skickas alltid till det men sällan faktiskt avsett för routern själv; data vidarebefordras till sitt mål. Om du inte gör någon form av routing, NATing eller något annat på ditt system som kräver vidarebefordran, kommer du inte ens att använda den här kedjan.

    Det finns ett säkert sätt att kontrollera om ditt system använder eller behöver framåtkedjan.

    iptables -L -v

    Skärmbilden ovan är en server som har körts i några veckor och har inga restriktioner för inkommande eller utgående anslutningar. Som du kan se har inmatningskedjan bearbetat 11 GB paket och utmatningskedjan har bearbetat 17 GB. Framkedjan har å andra sidan inte behövt bearbeta ett enda paket. Detta beror på att servern inte gör någon form av vidarebefordran eller används som en pass-through-enhet.

    Produktion - Denna kedja används för utgående anslutningar. Om du till exempel försöker ping howtogeek.com, kommer iptables att kontrollera sin produktionskedja för att se vad reglerna gäller för ping och howtogeek.com innan de fattar ett beslut att tillåta eller neka anslutningsförsöket.

    Tillgången

    Trots att pingning av en extern värd verkar som något som bara behöver gå över produktkedjan, kom ihåg att för att returnera data kommer inmatningskedjan också att användas. När du använder iptables för att låsa ner ditt system, kom ihåg att många protokoll kräver dubbelriktad kommunikation, så både inmatnings- och utmatningskedjorna måste konfigureras på rätt sätt. SSH är ett gemensamt protokoll som folk glömmer att tillåta på båda kedjorna.

    Policy Chain Default Behavior

    Innan du går in och konfigurerar specifika regler, vill du bestämma vad du vill att de tre kedjarnas standardbeteende ska vara. Med andra ord, vad vill du ha iptables att göra om anslutningen inte matchar några befintliga regler?

    För att se vad dina policykedjor för närvarande är konfigurerade för att göra med oöverträffad trafik, kör iptables -L kommando.

    Som du kan se använder vi också grep-kommandot för att ge oss renare utdata. I den skärmdumpen är våra kedjor för närvarande för att acceptera trafik.

    Fler gånger än inte, du vill att ditt system ska acceptera anslutningar som standard. Om du inte har ändrat reglerna för politikkedjan tidigare, bör den här inställningen redan vara konfigurerad. Hur som helst, här är kommandot att acceptera anslutningar som standard:

    iptables - policy INPUT ACCEPT
    iptables - policy OUTPUT ACCEPT
    iptables - policy FRAMGÅENDE ACCEPT

    Genom att standardisera till acceptregeln kan du sedan använda iptables för att neka specifika IP-adresser eller portnummer medan du fortsätter att acceptera alla andra anslutningar. Vi kommer till dessa kommandon om en minut.

    Om du hellre vill förneka alla anslutningar och manuellt ange vilka som du vill tillåta att ansluta, bör du ändra standardpolicy för dina kedjor för att släppa. Att göra detta skulle förmodligen bara vara användbart för servrar som innehåller känslig information och bara har samma IP-adresser ansluta till dem.

    iptables - policy INPUT DROP
    iptables - policy UTGÅNGDROP
    iptables - policy FORWARD DROP

    Anslutningsspecifika svar

    Med din standardkedjepolitik konfigurerad kan du börja lägga till regler i iptables så att den vet vad man ska göra när den stöter på en anslutning från eller till en viss IP-adress eller port. I den här guiden kommer vi att gå över de tre mest grundläggande och vanliga "svaren".

    Acceptera - Tillåt anslutningen.

    Släppa - Släpp anslutningen, agera som om det aldrig hände. Det här är bäst om du inte vill att källan ska inse att ditt system finns.

    Avvisa - Tillåt inte anslutningen, men skicka tillbaka ett fel. Det här är bäst om du inte vill att en viss källa ska ansluta till ditt system, men du vill att de ska veta att din brandvägg har blockerat dem.

    Det bästa sättet att visa skillnaden mellan dessa tre regler är att visa hur det ser ut när en dator försöker pinga en Linux-maskin med iptables konfigurerad för var och en av dessa inställningar.

    Tillåt anslutningen:

    Släppa anslutningen:

    Avvisa anslutningen:

    Tillåter eller blockerar specifika anslutningar

    Med dina policykedjor konfigurerade kan du nu konfigurera iptables för att tillåta eller blockera specifika adresser, adressintervaller och portar. I dessa exempel ställer vi upp anslutningarna till SLÄPPA, men du kan byta dem till ACCEPTERA eller AVVISA, beroende på dina behov och hur du konfigurerat dina politikkedjor.

    Obs! I dessa exempel ska vi använda iptables -A att lägga till regler i den befintliga kedjan. iptables börjar högst upp i listan och går igenom varje regel tills den hittar en som matchar. Om du behöver infoga en regel ovanför en annan, kan du använda iptables -I [chain] [number] för att ange vilket nummer det ska finnas i listan.

    Anslutningar från en enda IP-adress

    I det här exemplet visas hur du blockerar alla anslutningar från IP-adressen 10.10.10.10.

    iptables -A INPUT -s 10.10.10.10 -j DROP

    Anslutningar från en rad IP-adresser

    I det här exemplet visas hur du blockerar alla IP-adresser i 10.10.10.0/24-nätverket. Du kan använda en nätmaske eller standard slash notation för att ange intervallet av IP-adresser.

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

    eller

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

    Anslutningar till en viss port

    I det här exemplet visas hur man blockerar SSH-anslutningar från den 10.10.10.10.

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

    Du kan ersätta "ssh" med något protokoll eller portnummer. De -p tcp En del av koden berättar iptables vilken typ av anslutning protokollet använder. Om du blockerade ett protokoll som använder UDP istället för TCP, då -p utp skulle behövas istället.

    I det här exemplet visas hur man blockerar SSH-anslutningar från vilken IP-adress som helst.

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

    Anslutningsstater

    Som vi nämnde tidigare kommer många protokoll att kräva dubbelriktad kommunikation. Om du till exempel vill tillåta SSH-anslutningar till ditt system, kommer inmatnings- och utmatningskedjorna att behöva en regel som läggs till dem. Men, om du bara vill att SSH kommer in i ditt system för att bli tillåtet? Kommer inte lägga till en regel i utmatningskedjan tillåter även utgående SSH-försök?

    Det är där anslutningstillstånd kommer in, vilket ger dig den förmåga du behöver för att tillåta tvåvägskommunikation men bara tillåta envägsanslutningar att etableras. Ta en titt på det här exemplet, där SSH-anslutningar FRÅN 10.10.10.10 är tillåtna, men SSH-anslutningar till 10.10.10.10 är inte. Systemet tillåts emellertid att skicka tillbaka information över SSH så länge som sessionen redan har etablerats, vilket möjliggör SSH-kommunikation mellan dessa två värdar.

    iptables -A INPUT -p tcp -dport ssh -s 10.10.10.10 -m state -state NYTT, STÄLLT -J ACCEPT

    iptables -A OUTPUT -p tcp --port 22 -d 10.10.10.10 -m state -state INSTÄLLT -J ACCEPT

    Spara ändringar

    Ändringarna som du gör till dina iptables-regler kommer att skrotas nästa gång som tjänsten iptables startas om du inte utför ett kommando för att spara ändringarna. Det här kommandot kan skilja sig beroende på din distribution:

    Ubuntu:

    sudo / sbin / iptables-save

    Red Hat / CentOS:

    / sbin / service iptables spara

    Eller

    /etc/init.d/iptables spara

    Andra kommandon

    Lista de för närvarande konfigurerade iptables-reglerna:

    iptables -L

    Lägger till -v alternativet ger dig information om paket och byte och lägger till -n kommer att lista allt numeriskt. Med andra ord är värdnamn, protokoll och nätverk listade som nummer.

    För att rensa alla regler som för närvarande är konfigurerade kan du utfärda flush-kommandot.

    iptables -F