Iptables är ett extremt flexibelt brandväggsverktyg byggt för Linux-operativsystem. Oavsett om du är en nybörjare av Linux-nörd eller systemadministratör, finns det antagligen något sätt att iptables kan vara bra för dig. Läs vidare när vi visar dig hur du konfigurerar den mest mångsidiga Linux-brandväggen.
Om iptables
iptables är ett kommandorads brandväggsverktyg som använder policykedjor 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. Om den inte hittar någon använder den standardåtgärden.
iptables levereras nästan alltid förinstallerat på alla Linux-distributioner. För att uppdatera / installera det, hämta bara iptables-paketet:
sudo apt-get install iptables
Det finns GUI-alternativ till iptables som Firestarter , men iptables är inte riktigt så svårt när du har några kommandon nere. Du vill vara extremt försiktig när du konfigurerar regler för iptables, särskilt om du SSH skulle vara på en server, eftersom ett felkommando permanent kan låsa ut dig tills det fixeras manuellt 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 kontrollera beteendet för inkommande anslutningar. Till exempel, om en användare försöker SSH in i din PC / server, kommer iptables att försöka matcha IP-adressen och porten till en regel i inmatningskedjan.
Fram - Denna kedja används för inkommande anslutningar som faktiskt inte levereras lokalt. Tänk på en router - data skickas alltid till den men sällan faktiskt avsedd för själva routern; uppgifterna vidarebefordras bara till sitt mål. Om du inte gör någon form av dirigering, NATing eller något annat på ditt system som kräver vidarebefordran, kommer du inte ens använda den här kedjan.
Det finns ett säkert sätt att kontrollera om ditt system använder / behöver framåtkedjan eller inte.
iptables -L -v
Skärmdumpen ovan är av en server som har körts i några veckor och har inga begränsningar för inkommande eller utgående anslutningar. Som du kan se har ingångskedjan bearbetat 11 GB paket och utgångskedjan har bearbetat 17 GB. Den främre kedjan har å andra sidan inte behövt bearbeta ett enda paket. Detta beror på att servern inte vidarebefordrar eller används som en pass-through-enhet.
Produktion - Denna kedja används för utgående anslutningar. Till exempel, om du försöker pinga howtogeek.com, kommer iptables att kontrollera dess utgångskedja 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.
Förbehållet
Även om pingning av en extern värd verkar som något som bara skulle behöva korsa utgångskedjan, kom ihåg att ingångskedjan också kommer att användas för att returnera data. När du använder iptables för att låsa ditt system, kom ihåg att många protokoll kräver tvåvägskommunikation, så både ingångs- och utgångskedjorna måste konfigureras korrekt. SSH är ett vanligt protokoll som folk glömmer att tillåta i båda kedjorna.
Policykedjans standardbeteende
Innan du går in och konfigurerar specifika regler vill du bestämma vad du vill att de tre kedjornas standardbeteende ska vara. Med andra ord, vad vill du att iptables ska 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 du
iptables -L
kommando.
Som du kan se använde vi också kommandot grep för att ge oss renare utdata. I den skärmdumpen anses våra kedjor för närvarande acceptera trafik.
Fler gånger än inte vill du att ditt system ska acceptera anslutningar som standard. Om du inte har ändrat reglerna för policykedjan 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 FRAMÅTET ACCEPT
Genom att som standard acceptera regeln kan du sedan använda iptables för att neka specifika IP-adresser eller portnummer samtidigt som du fortsätter att acceptera alla andra anslutningar. Vi kommer till dessa kommandon på en minut.
Om du hellre vill neka alla anslutningar och manuellt ange vilka du vill tillåta anslutning bör du ändra standardpolicyn för dina kedjor så att den släpps. 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 anslutna till dem.
iptables - policy INPUT DROP
iptables --policy OUTPUT DROP
iptables - policy FRAMÅT DROP
Anslutningsspecifika svar
Med din standardkedjepolicy konfigurerad kan du börja lägga till regler i iptables så att den vet vad den 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 ska vi gå igenom de tre mest grundläggande och vanliga "svaren".
Acceptera - Tillåt anslutningen.
Släppa - Släpp anslutningen, agera som om det aldrig hände. Detta ä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. Detta ä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 blockerade 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 konfigurerade för var och en av dessa inställningar.
Tillåter anslutning:
Avbryter anslutningen:
Avvisa anslutningen:
Tillåta eller blockera specifika anslutningar
Med dina policykedjor konfigurerade kan du nu konfigurera iptables för att tillåta eller blockera specifika adresser, adressintervall och portar. I dessa exempel ställer vi in anslutningarna till
SLÄPPA
, men du kan byta dem till
ACCEPTERA
eller
AVVISA
, beroende på dina behov och hur du konfigurerade dina policykedjor.
Obs! I dessa exempel kommer vi att använda
iptables -A
för att lägga till regler i den befintliga kedjan. iptables börjar högst upp på listan och går igenom varje regel tills den hittar en som den matchar. Om du behöver infoga en regel ovanför en annan kan du använda
iptables -I [chain] [number]
för att ange numret som det ska vara i listan.
Anslutningar från en enda IP-adress
Detta exempel visar 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
Detta exempel visar hur du blockerar alla IP-adresser i nätverksområdet 10.10.10.0/24. Du kan använda en nätmask eller standard snedstreck för att ange IP-adressernas intervall.
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
Det här exemplet visar hur du blockerar SSH-anslutningar från 10.10.10.10.
iptables -A INPUT -p tcp --dport ssh -s 10.10.10.10 -j DROP
Du kan ersätta “ssh” med valfritt protokoll eller portnummer. De
-p tcp
del av koden berättar iptables vilken typ av anslutning protokollet använder. Om du blockerade ett protokoll som använder UDP snarare än TCP, då
-p udp
skulle vara nödvändigt istället.
Det här exemplet visar hur du blockerar SSH-anslutningar från vilken IP-adress som helst.
iptables -A INPUT -p tcp --dport ssh -j DROP
Anslutningstillstånd
Som vi nämnde tidigare kommer många protokoll att kräva tvåvägskommunikation. Till exempel, om du vill tillåta SSH-anslutningar till ditt system kommer ingångs- och utgångskedjorna att behöva läggas till en regel till dem. Men vad händer om du bara vill att SSH kommer in i ditt system ska vara tillåtet? Kommer inte att lägga till en regel i utmatningskedjan också tillåta utgående SSH-försök?
Det är där anslutningstillstånd kommer in, vilket ger dig den möjlighet du behöver för att möjliggöra tvåvägskommunikation men bara tillåter att envägsanslutningar upprättas. Ta en titt på detta exempel, där SSH-anslutningar FRÅN 10.10.10.10 är tillåtna, men SSH-anslutningar TILL 10.10.10.10 är inte tillåtna. Systemet får dock skicka tillbaka information över SSH så länge sessionen redan har upprättats, vilket gör SSH-kommunikation möjlig mellan dessa två värdar.
iptables -A INPUT -p tcp --dport ssh -s 10.10.10.10 -m state --state NEW, ESTABLISHED -j ACCEPT
iptables -A UTGÅNG -p tcp --sport 22 -d 10.10.10.10 -m tillstånd --stat ESTABLERAD -j ACCEPT
Sparar ändringar
Ändringarna som du gör i dina iptables-regler skrotas nästa gång som iptables-tjänsten startas om såvida du inte utför ett kommando för att spara ändringarna. Detta kommando kan variera beroende på din distribution:
Ubuntu:
sudo / sbin / iptables-spara
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ägga till
-på
alternativet ger dig information om paket och byte och lägger till
-n
kommer att lista allt numeriskt. Med andra ord - värdnamn, protokoll och nätverk listas som nummer.
För att rensa alla för närvarande konfigurerade regler kan du utfärda flush-kommandot.
iptables -F