Netwerkverkeer beheren is een van de zwaarste taken waarmee een systeembeheerder te maken krijgt. Hij moet configureer de firewall zodanig dat het voldoet aan de systeem- en gebruikersvereisten voor zowel inkomende als uitgaande verbindingen, zonder het systeem kwetsbaar te maken voor aanvallen.
Dit is waar iptables
goed van pas komen. Iptables is een Linux-opdrachtregelfirewall waarmee systeembeheerders inkomend en uitgaand verkeer kunnen beheren via een reeks configureerbare tabelregels.
Iptables gebruikt een reeks tabellen met ketens die een reeks ingebouwde of door de gebruiker gedefinieerde regels bevatten. Dankzij hen kan een systeembeheerder het netwerkverkeer van zijn systeem goed filteren.
Per iptables-handleiding zijn er momenteel 3 soorten tabellen:
FILTER
– dit is de standaardtabel, die de ingebouwde ketens bevat voor: NAT
– een tabel die wordt geraadpleegd wanneer een pakket probeert een nieuwe verbinding tot stand te brengen. Het heeft het volgende ingebouwd: MANGEL
– deze tabel wordt gebruikt voor het wijzigen van pakketten. Tot kernelversie 2.4 deze tafel had slechts twee kettingen, maar dat zijn nu 5: In dit artikel zul je enkele handige commando's zien die je zullen helpen om je Linux box firewall te beheren via iptables. Voor de toepassing van dit artikel zal ik beginnen met eenvoudigere commando's en tot het einde toe meer complex gaan.
Ten eerste moet u weten hoe u de iptables-service in verschillende Linux-distributies kunt beheren. Dit is vrij eenvoudig:
Op Cent/RHEL 7 en Fedora 22+ # systemctl start iptables. # systemctl stop iptables. # systemctl herstart iptables.
Op Cent/RHEL 6/5 en Fedora # /etc/init.d/iptables start # /etc/init.d/iptables stop. # /etc/init.d/iptables herstart.
Als u uw bestaande regels wilt controleren, gebruikt u de volgende opdracht:
# iptables -L -n -v.
Dit zou een uitvoer moeten opleveren die vergelijkbaar is met die hieronder:
Chain INPUT (beleid ACCEPT 1129K pakketten, 415M bytes) pkts bytes target prot opt in out source bestemming 0 0 ACCEPT tcp -- lxcbr0 * 0.0.0.0/0 0.0.0.0/0 tcp dpt: 53 0 0 ACCEPT udp -- lxcbr0 * 0.0.0.0/0 0.0.0.0/0 udp dpt: 53 0 0 ACCEPT tcp -- lxcbr0 * 0.0.0.0/0 0.0.0.0/0 tcp dpt: 67 0 0 ACCEPT udp -- lxcbr0 * 0.0.0.0/0 0.0.0.0/0 udp dpt: 67
Chain FORWARD (beleid ACCEPT 0 pakketten, 0 bytes) pkts bytes target prot opt in out source bestemming 0 0 ACCEPT all -- * lxcbr0 0.0.0.0/0 0.0.0.0/0 0 0 ACCEPT all -- lxcbr0 * 0.0.0.0/ 0 0.0.0.0/0
Chain OUTPUT (beleid ACCEPT 354K pakketten, 185M bytes) pkts bytes doel prot opt in out bronbestemming
Als u liever de regels voor een specifieke tafel wilt controleren, kunt u de -t
optie gevolgd door de tabel die u wilt controleren. Om bijvoorbeeld de regels in de NAT
tabel kunt u gebruiken:
# iptables -t nat -L -v -n.
Als u een ongebruikelijke of beledigende activiteit van een IP-adres vindt, kunt u dat IP-adres blokkeren met de volgende regel:
# iptables -A INPUT -s xxx.xxx.xxx.xxx -j DROP.
Waar je moet veranderen "xxx.xxx.xxx.xxx"
met het daadwerkelijke IP-adres. Wees zeer voorzichtig bij het uitvoeren van deze opdracht, aangezien u per ongeluk uw eigen IP-adres kunt blokkeren. De -EEN
optie voegt de regel toe aan het einde van de geselecteerde keten.
Als je alleen wilt blokkeren TCP verkeer vanaf dat IP-adres, kunt u de -P
optie die het protocol specificeert. Op die manier ziet de opdracht er als volgt uit:
# iptables -A INPUT -p tcp -s xxx.xxx.xxx.xxx -j DROP.
Als je hebt besloten dat je verzoeken van een specifiek IP-adres niet langer wilt blokkeren, kun je de blokkeringsregel verwijderen met de volgende opdracht:
# iptables -D INPUT -s xxx.xxx.xxx.xxx -j DROP.
De -NS
optie verwijdert een of meer regels uit de geselecteerde keten. Als u liever de langere optie gebruikt, kunt u deze gebruiken --verwijderen
.
Soms wil je misschien inkomende of uitgaande verbindingen op een specifieke poort blokkeren. Het is een goede beveiligingsmaatregel en u moet daar echt over nadenken bij het instellen van uw firewall.
Om uitgaande verbindingen op een specifieke poort te blokkeren, gebruikt u:
# iptables -A OUTPUT -p tcp --dport xxx -j DROP.
Gebruik om inkomende verbindingen toe te staan:
# iptables -A INPUT -p tcp --dport xxx -j ACCEPTEREN.
In beide voorbeelden veranderen "xxx"
met de daadwerkelijke poort die u wilt toestaan. Als je wilt blokkeren UDP verkeer in plaats van TCP, gewoon veranderen "tcp"
met "udp"
in de bovenstaande iptables-regel.
U kunt meerdere poorten tegelijk toestaan door gebruik te maken van meerdere poorten, hieronder vindt u een dergelijke regel voor zowel inkomende als uitgaande verbindingen:
# iptables -A INPUT -p tcp -m multiport --dports 22,80,443 -j ACCEPTEREN. # iptables -A OUTPUT -p tcp -m multiport --sports 22,80,443 -j ACCEPTEREN.
Mogelijk wilt u bepaalde verbindingen op een specifieke poort tot een bepaald netwerk beperken. Stel dat u uitgaande verbindingen op poort wilt toestaan 22
netwerken 192.168.100.0/24
.
Je kunt het doen met dit commando:
# iptables -A OUTPUT -p tcp -d 192.168.100.0/24 --dport 22 -j ACCEPTEREN.
Sommige werkgevers blokkeren graag de toegang tot: Facebook aan hun medewerkers. Hieronder ziet u een voorbeeld van hoe u verkeer naar Facebook kunt blokkeren.
Opmerking: Als u een systeembeheerder bent en deze regels moet toepassen, houd er dan rekening mee dat uw collega's misschien niet meer met u praten :)
Zoek eerst de IP-adressen die Facebook gebruikt:
# host facebook.com facebook.com heeft adres 66.220.156.68.
# whois 66.220.156.68 | grep CIDR. CIDR: 66.220.144.0/20.
Je kunt dat Facebook-netwerk dan blokkeren met:
# iptables -A OUTPUT -p tcp -d 66.220.144.0/20 -j DROP.
Houd er rekening mee dat het IP-adresbereik dat door Facebook wordt gebruikt in uw land kan verschillen.
Soms wilt u het verkeer van de ene service naar een andere poort doorsturen. U kunt dit bereiken met het volgende commando:
# iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 25 -j REDIRECT --naar-poort 2525.
De bovenstaande opdracht stuurt al het inkomende verkeer op de netwerkinterface door eth0
, van haven 25
naar de haven 2525
. U kunt de poorten wijzigen met de poorten die u nodig heeft.
Soms vragen IP-adressen te veel verbindingen naar webpoorten op uw website. Dit kan een aantal problemen veroorzaken en om dergelijke problemen te voorkomen, kunt u de volgende regel gebruiken:
# iptables -A INPUT -p tcp --dport 80 -m limiet --limiet 100/minuut --limit-burst 200 -j ACCEPTEREN.
Het bovenstaande commando beperkt de inkomende verbindingen van per minuut tot 100
en stelt een limiet burst in op 200
. U kunt de limiet en limiet-burst aanpassen aan uw eigen specifieke vereisten.
Sommige systeembeheerders blokkeren graag inkomende ping-verzoeken vanwege beveiligingsproblemen. Hoewel de dreiging niet zo groot is, is het goed om te weten hoe je een dergelijk verzoek kunt blokkeren:
# iptables -A INPUT -p icmp -i eth0 -j DROP.
Loopback-toegang (toegang vanaf 127.0.0.1
) is belangrijk en u moet het altijd actief laten:
# iptables -A INPUT -i lo -j ACCEPTEREN. # iptables -A OUTPUT -o lo -j ACCEPTEREN.
Als u de gedropte pakketten op de netwerkinterface wilt loggen: eth0
, kunt u de volgende opdracht gebruiken:
# iptables -A INPUT -i eth0 -j LOG --log-prefix "IPtables liet pakketten vallen:"
U kunt de waarde wijzigen nadat "--log-voorvoegsel"
met iets naar keuze. De berichten zijn ingelogd /var/log/messages
en je kunt ze zoeken met:
# grep "IPtables liet pakketten vallen:" /var/log/messages.
U kunt de toegang tot uw systeem vanaf een specifiek MAC-adres blokkeren door:
# iptables -A INPUT -m mac --mac-source 00:00:00:00:00:00 -j DROP.
Natuurlijk moet je veranderen "00:00:00:00:00:00"
met het daadwerkelijke MAC-adres dat u wilt blokkeren.
Als u niet te veel gelijktijdige verbindingen tot stand wilt brengen vanaf een enkel IP-adres op een bepaalde poort, kunt u de onderstaande opdracht gebruiken:
# iptables -A INPUT -p tcp --syn --dport 22 -m connlimit --connlimit-boven 3 -j REJECT.
Het bovenstaande commando staat niet meer toe dan: 3
aansluitingen per klant. Natuurlijk kunt u het poortnummer wijzigen zodat het overeenkomt met een andere service. Ook de --connlimit-boven
moet worden gewijzigd om aan uw vereisten te voldoen.
Nadat u uw iptables-regels hebt gedefinieerd, wilt u af en toe zoeken en moet u deze mogelijk wijzigen. Een gemakkelijke manier om binnen uw regels te zoeken, is door gebruik te maken van:
# iptables -L $table -v -n | grep $string.
In het bovenstaande voorbeeld moet u wijzigen: $tafel
met de eigenlijke tabel waarin u wilt zoeken en $string
met de daadwerkelijke string waarnaar u op zoek bent.
Hier is een voorbeeld:
# iptables -L INPUT -v -n | grep 192.168.0.100.
Met iptables kun je je eigen keten definiëren en daarin aangepaste regels opslaan. Gebruik om een ketting te definiëren:
# iptables -N aangepast filter.
Nu kunt u controleren of uw nieuwe filter er is:
# iptables -L.
Chain INPUT (beleid ACCEPT) doel prot opt source bestemming.
Keten VOORUIT (beleid ACCEPTEREN) target prot opt source bestemming
Keten OUTPUT (beleid ACCEPT) target prot opt source bestemming
Keten aangepast filter(0 referenties) target prot opt source bestemming
Als u uw firewallketens wilt doorspoelen, kunt u het volgende gebruiken:
# iptables -F.
U kunt kettingen uit een specifieke tabel doorspoelen met:
# iptables -t nat -F.
Je kan veranderen "nat"
met de eigenlijke tabel welke ketens u wilt doorspoelen.
Als u uw firewallregels wilt opslaan, kunt u de iptables-save
opdracht. U kunt het volgende gebruiken om uw regels op te slaan en op te slaan in een bestand:
# iptables-save > ~/iptables.rules.
Het is aan jou waar je het bestand opslaat en hoe je het een naam geeft.
Als u een lijst met iptables-regels wilt herstellen, kunt u gebruik maken van iptables-herstel
. Het commando ziet er als volgt uit:
# iptables-restore < ~/iptables.rules.
Natuurlijk kan het pad naar uw regelbestand anders zijn.
Sommige systeembeheerders moeten mogelijk hun servers configureren om PCI-compatibel te zijn. Er zijn veel vereisten van verschillende leveranciers van PCI-compliance, maar er zijn er maar weinig.
In veel gevallen heeft u meer dan één IP-adres nodig. U moet de onderstaande regels toepassen voor het IP-adres van de site. Wees extra voorzichtig bij het gebruik van onderstaande regels en gebruik ze alleen als u zeker weet wat u doet:
# iptables -I INPUT -d SITE -p tcp -m multiport --dports 21,25,110,143,465,587,993,995 -j DROP.
Als u cPanel of een vergelijkbaar configuratiescherm gebruikt, moet u mogelijk ook de poorten ervan blokkeren. Hier is een voorbeeld:
# iptables -I in_sg -d DEDI_IP -p tcp -m multiport --dports 2082,2083,2095,2096,2525,2086,2087 -j DROP.
Opmerking: Om er zeker van te zijn dat u voldoet aan de vereisten van uw PCI-leverancier, moet u hun rapport zorgvuldig controleren en de vereiste regels toepassen. In sommige gevallen moet u mogelijk ook UDP-verkeer op bepaalde poorten blokkeren.
Aangezien het netwerkverkeer gescheiden is van inkomend en uitgaand verkeer, wilt u vaststaand en gerelateerd inkomend verkeer toestaan. Voor inkomende verbindingen doe je het met:
# iptables -A INPUT -m conntrack --ctstate GEVESTIGD, GERELATEERD -j ACCEPTEREN.
Voor uitgaand gebruik:
# iptables -A OUTPUT -m conntrack --ctstate GEVESTIGD -j ACCEPTEREN.
Het is mogelijk dat sommige netwerkpakketten als ongeldig worden gemarkeerd. Sommige mensen geven er misschien de voorkeur aan om die pakketten te loggen, maar anderen geven er de voorkeur aan ze te laten vallen. Om de pakketten ongeldig te maken, kunt u het volgende gebruiken:
# iptables -A INPUT -m conntrack --ctstate INVALID -j DROP
Sommige systemen hebben mogelijk meer dan één netwerkinterface. U kunt de toegang tot die netwerkinterface beperken of verbindingen vanaf een bepaald IP-adres blokkeren.
Bijvoorbeeld:
# iptables -A INPUT -i eth0 -s xxx.xxx.xxx.xxx -j DROP.
Verandering “xxx.xxx.xxx.xxx” met het daadwerkelijke IP-adres (of netwerk) dat u wilt blokkeren.
Als uw systeem geen e-mails zou moeten verzenden, kunt u uitgaande poorten op SMTP-poorten blokkeren. U kunt dit bijvoorbeeld gebruiken:
# iptables -A OUTPUT -p tcp --dports 25.465.587 -j REJECT.
Iptables is een krachtige firewall waar u gemakkelijk van kunt profiteren. Het is van vitaal belang voor elke systeembeheerder om ten minste de: basisprincipes van iptables. Als je meer gedetailleerde informatie over iptables en zijn opties wilt vinden, is het ten zeerste aan te raden om de handleiding te lezen:
# man iptables.
Als je denkt dat we meer commando's aan deze lijst moeten toevoegen, deel ze dan met ons door ze in het commentaargedeelte hieronder in te dienen.