Linuxkärnan innehåller systemet Netfilter som används för att manipulera eller avgöra ödet för nätverkstrafik som skickas till eller genom din server. Alla moderna brandväggslösningar för Linux använder det här systemet för nätverksfiltrering.
Kärnans paketfiltreringssystem skulle vara ganska värdelöst för administratörer utan ett användargränssnitt för att hantera det. Ett sådant gränssnitt är iptables. När ett paket anländer till din server kommer det att skickas till Netfilter-systemet för att accepteras, manipuleras, eller nekas, beroende på de regler det får från iptables. Därför är iptables allt du behöver för att hantera din brandvägg om du är bekant med den, men det finns många gränssnitt för att förenkla uppgiften.
Syftet med att maskera IP:n är att ge datorer med privata, icke-routebara IP-adresser på ditt nätverk tillgång till internet genom datorn som sköter maskeringen. Trafik från ditt privata nätverk på väg mot internet måste manipuleras så att svaren går att routas tillbaka till datorn som skickade förfrågan. För att göra det måste kärnan modifiera ursprungs-IP-adressen i varje paket så att svaren kommer tillbaka till datorn, istället för att skickas till den privata IP-adressen som datorn som skickade förfrågan, vilket inte går att göra över internet. Linux använder spårning av anslutningar (conntrack) för att hålla ordning på vilka anslutningar som hör till vilka datorer, och skicka vidare alla paket baserat på det. Trafik som lämnar ditt privata nätverk "maskeras" därför så att de ser ut att komma från din gateway-dator. Den här funktionen kallas i Microsofts dokumentation Internetanslutningsdelning.
Du kan åstakomma det här med en enda iptables-regel, som kan variera något beroende på din nätverkskonfiguration:
sudo iptables -t nat -A POSTROUTING -s 192.168.0.0/16 -o ppp0 -j MASQUERADE
Ovastående kommando antar att ditt privata adressrum är 192.168.0.0/16 och att enheten som ansluts till internet ppp0. Syntaxet är - uppdelat i bitar - som följer:
-t nat -- regeln som ska läggas till nat-tabellen
-A POSTROUING -- regeln som ska läggas till (-A) till POSTROUTING-kedjan.
-s 192.168.0.0/16 -- den här regeln gäller all trafik som kommer från det specificerade adressutrymmet
-o ppp0 -- den här regeln gäller trafik som ska skickas genom den specificerade nätverksenheten
-j MASQUERADE -- trafik som matchar den här regeln ska "hoppa" (-j) till MASQUERADE-målet för att bli manipulerad enligt vad som beskrivs ovan
Varje kedja i filtertabellen (standardtabellen, där nästan all paketfiltrering utförs) har normalt policyn ACCEPT för all trafik, men om du skapar en brandvägg på din gatewaydator vill du kanske sätta stardardpolicyn till DROP eller REJECT, varpå all maskerad trafik måste släppas igenom FORWARD-kedjan för att ovastående regel ska fungera:
sudo iptables -A FORWARD -s 192.168.0.0/16 -o ppp0 -j ACCEPT sudo iptables -A FORWARD -d 192.168.0.0/16 -m state --state ESTABLISHED,RELATED -i ppp0 -j ACCEPT
Ovastående kommandon kommer att tillåta alla anslutningar från ditt lokala nätverk till internet och all trafik som har med de anslutningarna att göra släpps tillbaka till datorn som skapade den dator som skapade dem.
Det finns många verktyg tillgängliga som hjälper dig att skapa en komplett brandvägg utan intim kunskap om iptables. För de som vill ha en GUI är Firestarter väldigt populärt och lättanvänt, och fwbuilder är väldigt kraftfullt och kommer att kännas bekant för en administratör som har använt kommersiella brandväggsprogram som Checkpoint FireWall-1. Om du föredrar ett kommandoradsverktyg med konfigurationsfiler i vanlig text är Shorewall en väldigt kraftfull lösning som hjälper dig konfigurera en avancerad brandvägg för alla nätverk. Om ditt nätverk är relativt enkelt, eller om du inte har något nätverk, bör ipkungfu ge dig en fungerande brandvägg helt utan konfiguration, och låter dig enkelt göra din brandvägg genom att modifiera de enkla, väldokumenterade konfigurationsfilerna. Ett annat intressant verktyg är fireflier, som är byggt för att vara en skrivbordsbrandvägg. Det består av en server (fireflier-server) och den GUI-klient du vill ha (GTK eller QT), och beter sig som de många populära brandväggsprogrammen till Windows.
Brandväggsloggar är helt nödvändiga för att hitta attacker, felsöka dina brandväggsregler, och notera ovanlig aktivitet på ditt nätverk. Du måste dock inkludera loggningsregler i din brandvägg för att loggarna ska skapas, och loggningsreglerna måste stå innan någon applicerbar avslutande regel (en regel som avgör ett pakets öde, som ACCEPT, DROP eller REJECT). Till exempel:
sudo iptables -A INPUT -m state --state NEW -p tcp --dport 80 -j LOG --log-prefix "NEW_HTTP_CONN: "
En förfrågan på port 80 från den lokala maskinen kommer nu att generera en logg i dmesg som ser ut såhär:
[4304885.870000] NEW_HTTP_CONN: IN=lo OUT= MAC=00:00:00:00:00:00:00:00:00:00:00:00:08:00 SRC=127.0.0.1 DST=127.0.0.1 LEN=60 TOS=0x00 PREC=0x00 TTL=64 ID=58288 DF PROTO=TCP SPT=53981 DPT=80 WINDOW=32767 RES=0x00 SYN URGP=0
Ovastående logg hittar du också i /var/log/messages
, /var/log/syslog
och /var/log/kern.log
. Det här betendet går att ändra på genom att göra lämpliga ändringar i /etc/syslog.conf
eller genom att installera och konfigurera ulogd och skriv ULOG istället för LOG i den tidigare regeln. Demonen ulogd är en server som lyssnar efter loggningsinstruktioner från kärnan om brandväggar, och kan logga det till vilken fil du vill, eller till och med till databaserna PostgreSQL eller MySQL. Du kan göra det enklare att förstå loggarna genom att använda ett logganalyseringsverktyg som fwanalog, fwlogwatch eller lire.