Introductie
Iptables is een software firewall voor Linux distributies. Deze spiekbriefstijlgids biedt een snelle referentie naar iptables commando’s die firewallregels zullen creëren die nuttig zijn in veelvoorkomende dagelijkse scenario’s. Dit omvat iptables voorbeelden van het toestaan en blokkeren van verschillende services op poorten, netwerkinterfaces en bron-IP-adressen.
Hoe Deze Gids Te Gebruiken
- De meeste regels die hier worden beschreven, gaan ervan uit dat uw iptables is ingesteld op het laten vallen van inkomend verkeer, via het standaard inputbeleid, en dat u selectief inkomend verkeer wilt toestaan
- Gebruik de volgende secties die van toepassing zijn op wat u probeert te bereiken. De meeste secties zijn niet afhankelijk van elkaar, dus u kunt de onderstaande voorbeelden onafhankelijk gebruiken
- Gebruik het inhoudsmenu aan de rechterkant van deze pagina (bij brede paginabreedtes) of de zoekfunctie van uw browser om de secties te vinden die u nodig hebt
- Kopieer en plak de gegeven commandoregelvoorbeelden en vervang de gemarkeerde waarden door uw eigen waarden
Houd er rekening mee dat de volgorde van uw regels ertoe doet. Alle iptables
-opdrachten gebruiken de -A
-optie om de nieuwe regel toe te voegen aan het einde van een keten. Als u het ergens anders in de keten wilt plaatsen, kunt u de -I
-optie gebruiken waarmee u de positie van de nieuwe regel kunt specificeren (of plaats deze aan het begin van de keten door geen regelnummer op te geven).
Let op: Wanneer u werkt met firewalls, zorg er dan voor dat u uzelf niet buitensluit van uw eigen server door SSH-verkeer te blokkeren (standaard poort 22). Als u de toegang verliest vanwege uw firewallinstellingen, moet u mogelijk via een webgebaseerde console verbinding maken om uw toegang te herstellen. Als u DigitalOcean gebruikt, kunt u onze documentatie over het Herstelconsole-product raadplegen voor meer informatie. Zodra u via de console bent verbonden, kunt u uw firewallregels wijzigen om SSH-toegang toe te staan (of alle verkeer toe te staan). Als uw opgeslagen firewallregels SSH-toegang toestaan, is een andere methode om uw server opnieuw op te starten.
Onthoud dat u uw huidige iptables-regelset kunt controleren met sudo iptables -S
en sudo iptables -L
.
Laten we eens kijken naar de iptables-opdrachten!
Regels Opslaan
Iptables-regels zijn vluchtig, wat betekent dat ze handmatig moeten worden opgeslagen om ze te behouden na een herstart.
Op Ubuntu is een manier om iptables-regels op te slaan door het gebruik van het iptables-persistent
-pakket. Installeer het met apt op deze manier:
Tijdens de installatie wordt u gevraagd of u uw huidige firewallregels wilt opslaan.
Als u uw firewallregels bijwerkt en de wijzigingen wilt opslaan, voert u deze opdracht uit:
Andere Linux distributies kunnen alternatieve manieren hebben om uw iptables wijzigingen permanent te maken. Raadpleeg de relevante documentatie voor meer informatie.
Regels opsommen en verwijderen
Als u wilt leren hoe u iptables-regels kunt opsommen en verwijderen, bekijk dan deze tutorial: Hoe Iptables-firewallregels op te sommen en te verwijderen.
Algemeen nuttige regels
Deze sectie bevat een verscheidenheid aan iptables-opdrachten die regels zullen creëren die over het algemeen nuttig zijn op de meeste servers.
Loopback-verbindingen toestaan
De loopback-interface, ook wel lo
genoemd, is wat een computer gebruikt om netwerkverbindingen naar zichzelf door te sturen. Als je bijvoorbeeld ping localhost
of ping 127.0.0.1
uitvoert, zal je server zichzelf pingen met behulp van de loopback. De loopback-interface wordt ook gebruikt als je je toepassingsserver configureert om verbinding te maken met een databaseserver met een localhost
-adres. Daarom wil je er zeker van zijn dat je firewall deze verbindingen toestaat.
Om alle verkeer op je loopback-interface te accepteren, voer je deze commando’s uit:
Inkomende verbindingen toestaan die zijn ingesteld en gerelateerd
Omdat netwerkverkeer doorgaans tweerichtingsverkeer moet zijn – inkomend en uitgaand – om correct te werken, is het typisch om een firewallregel te maken die ingesteld en gerelateerd inkomend verkeer toestaat, zodat de server terugkerend verkeer zal toestaan voor uitgaande verbindingen die door de server zelf zijn geïnitieerd. Dit commando zal dat toestaan:
Uitgaande verbindingen toestaan die zijn ingesteld
Je wilt wellicht uitgaand verkeer van alle gevestigde verbindingen toestaan, die meestal een reactie zijn op legitieme inkomende verbindingen. Met dit commando kun je dat toestaan:
Interne Netwerk toegang tot Externe toestaan
Als eth0
je externe netwerk is, en eth1
je interne netwerk, dan zal dit je interne toegang geven tot het externe:
Ongeldige Pakketten laten vallen
Sommige netwerkverkeerpakketten worden gemarkeerd als ongeldig. Soms kan het nuttig zijn om dit soort pakketten te loggen, maar vaak is het prima om ze te laten vallen. Doe dit met dit commando:
Een IP-adres Blokkeren
Om netwerkverbindingen te blokkeren die afkomstig zijn van een specifiek IP-adres, bijvoorbeeld 203.0.113.51
, voer dit commando uit:
In dit voorbeeld specificeert -s 203.0.113.51
een bron-IP-adres van “203.0.113.51”. Het bron-IP-adres kan worden gespecificeerd in elke firewallregel, inclusief een toestaan-regel.
Als u de verbinding daarentegen wilt weigeren, wat zal reageren op het verbindingsverzoek met een “verbinding geweigerd” fout, vervang dan “DROP” door “REJECT” zoals hier:
Verbindingen blokkeren naar een netwerkinterface
Om verbindingen vanaf een specifiek IP-adres, bijv. 203.0.113.51
, naar een specifieke netwerkinterface, bijv. eth0
, te blokkeren, gebruikt u dit commando:
Dit is hetzelfde als het vorige voorbeeld, met toevoeging van -i eth0
. De netwerkinterface kan worden gespecificeerd in elke firewallregel en is een goede manier om de regel te beperken tot een specifiek netwerk.
Service: SSH
Als u een server gebruikt zonder een lokale console, wilt u waarschijnlijk inkomende SSH-verbindingen (poort 22) toestaan zodat u verbinding kunt maken met en uw server kunt beheren. Dit gedeelte behandelt hoe u uw firewall configureert met verschillende SSH-gerelateerde regels.
Het toestaan van alle inkomende SSH-verbindingen
Om alle inkomende SSH-verbindingen toe te staan, voert u deze opdrachten uit:
De tweede opdracht, die het uitgaande verkeer van gevestigde SSH-verbindingen toestaat, is alleen nodig als het beleid voor OUTPUT
niet is ingesteld op ACCEPT
.
Het toestaan van inkomende SSH van een specifiek IP-adres of subnet
Om inkomende SSH-verbindingen van een specifiek IP-adres of subnet toe te staan, specificeert u de bron. Als u bijvoorbeeld het hele subnet 203.0.113.0/24
wilt toestaan, voert u deze opdrachten uit:
De tweede opdracht, die het uitgaande verkeer van gevestigde SSH-verbindingen toestaat, is alleen nodig als het beleid voor OUTPUT
niet is ingesteld op ACCEPT
.
Het toestaan van uitgaande SSH-verbindingen
Als uw OUTPUT
-beleid van de firewall niet is ingesteld op ACCEPT
en u uitgaande SSH-verbindingen wilt toestaan — uw server initieert een SSH-verbinding naar een andere server — kunt u deze opdrachten uitvoeren:
Inkomende Rsync toestaan vanaf een specifiek IP-adres of subnet
Rsync, dat draait op poort 873, kan worden gebruikt om bestanden van de ene computer naar de andere over te zetten.
Om inkomende rsync-verbindingen vanaf een specifiek IP-adres of subnet toe te staan, specificeert u het bron-IP-adres en de bestemmingspoort. Als u bijvoorbeeld het volledige subnet 203.0.113.0/24
wilt toestaan om naar uw server te kunnen rsyncen, voert u deze opdrachten uit:
De tweede opdracht, die het uitgaande verkeer van gevestigde rsync-verbindingen toestaat, is alleen nodig als het OUTPUT
-beleid niet is ingesteld op ACCEPT
.
Service: Webserver
Web servers, zoals Apache en Nginx, luisteren doorgaans naar verzoeken op poort 80 en 443 voor respectievelijk HTTP- en HTTPS-verbindingen. Als uw standaardbeleid voor inkomend verkeer is ingesteld op afwijzen, wilt u regels maken die uw server toestaan te reageren op die verzoeken.
Het toestaan van alle inkomende HTTP-verkeer
Om alle inkomende HTTP (poort 80) verbindingen toe te staan, voer deze commando’s uit:
Het tweede commando, dat het uitgaande verkeer van gevestigde HTTP-verbindingen toestaat, is alleen nodig als het beleid voor OUTPUT
niet is ingesteld op ACCEPT
.
Het toestaan van alle inkomende HTTPS-verkeer
Om alle inkomende HTTPS (poort 443) verbindingen toe te staan, voer deze commando’s uit:
Het tweede commando, dat het uitgaande verkeer van gevestigde HTTP-verbindingen toestaat, is alleen nodig als het beleid voor OUTPUT
niet is ingesteld op ACCEPT
.
Het toestaan van alle inkomende HTTP en HTTPS
Als je zowel HTTP- als HTTPS-verkeer wilt toestaan, kun je de multiport-module gebruiken om een regel te maken die beide poorten toestaat. Om alle inkomende HTTP- en HTTPS (poort 443) verbindingen toe te staan, voer deze commando’s uit:
De tweede opdracht, die het uitgaande verkeer van gevestigde HTTP- en HTTPS-verbindingen mogelijk maakt, is alleen nodig als het beleid OUTPUT
niet is ingesteld op ACCEPT
.
Service: MySQL
MySQL luistert naar clientverbindingen op poort 3306. Als uw MySQL-databaseserver wordt gebruikt door een client op een externe server, moet u ervoor zorgen dat dat verkeer is toegestaan.
MySQL toestaan vanaf een specifiek IP-adres of subnet
Om inkomende MySQL-verbindingen vanaf een specifiek IP-adres of subnet toe te staan, specificeert u de bron. Als u bijvoorbeeld het hele 203.0.113.0/24
subnet wilt toestaan, voert u deze opdrachten uit:
De tweede opdracht, die het uitgaande verkeer van gevestigde MySQL-verbindingen mogelijk maakt, is alleen nodig als het beleid OUTPUT
niet is ingesteld op ACCEPT
.
MySQL toestaan op een specifiek netwerkinterface
Om MySQL-verbindingen toe te staan op een specifiek netwerkinterface – laten we zeggen dat je een privénetwerkinterface eth1
hebt, bijvoorbeeld – gebruik deze commando’s:
Het tweede commando, dat het uitgaande verkeer van gevestigde MySQL-verbindingen toestaat, is alleen nodig als het beleid voor OUTPUT
niet is ingesteld op ACCEPT
.
Service: PostgreSQL
PostgreSQL luistert naar clientverbindingen op poort 5432. Als uw PostgreSQL-databaseserver wordt gebruikt door een client op een externe server, moet u ervoor zorgen dat dit verkeer wordt toegestaan.
PostgreSQL vanaf specifiek IP-adres of subnet
Om inkomende PostgreSQL-verbindingen toe te staan vanaf een specifiek IP-adres of subnet, geef de bron op. Als u bijvoorbeeld het hele subnet 203.0.113.0/24
wilt toestaan, voer dan deze commando’s uit:
Het tweede commando, dat het uitgaande verkeer van gevestigde PostgreSQL-verbindingen toestaat, is alleen nodig als het beleid voor OUTPUT
niet is ingesteld op ACCEPT
.
Toestaan van PostgreSQL voor een specifiek netwerkinterface
Om PostgreSQL-verbindingen toe te staan op een specifiek netwerkinterface – laten we zeggen dat je een privé netwerkinterface eth1
hebt, bijvoorbeeld – gebruik deze commando’s:
Het tweede commando, dat het uitgaande verkeer van gevestigde PostgreSQL-verbindingen toestaat, is alleen nodig als het beleid OUTPUT
niet is ingesteld op ACCEPT
.
Service: Mail
Mail servers, zoals Sendmail en Postfix, luisteren op verschillende poorten, afhankelijk van de gebruikte protocollen voor mailverzending. Als je een mailsysteem draait, bepaal dan welke protocollen je gebruikt en sta het juiste type verkeer toe. We zullen ook laten zien hoe je een regel kunt maken om uitgaande SMTP-mail te blokkeren.
Uitgaande SMTP-mail blokkeren
Als je server geen uitgaande mail zou moeten versturen, wil je dat soort verkeer misschien blokkeren. Om uitgaande SMTP-mail te blokkeren, die poort 25 gebruikt, voer je dit commando uit:
Dit configureert iptables om al het uitgaande verkeer op poort 25 te afwijzen. Als u een andere service wilt afwijzen op basis van het poortnummer, in plaats van poort 25, vervang dan dat poortnummer door de 25
hierboven.
Alle inkomende SMTP toestaan
Om uw server in staat te stellen te reageren op SMTP-verbindingen op poort 25, voert u deze commando’s uit:
Het tweede commando, dat het uitgaande verkeer van gevestigde SMTP-verbindingen toestaat, is alleen nodig als het beleid voor OUTPUT
niet is ingesteld op ACCEPT
.
Alle inkomende IMAP toestaan
Om uw server in staat te stellen te reageren op IMAP-verbindingen, poort 143, voert u deze commando’s uit:
Het tweede commando, dat het uitgaande verkeer van gevestigde IMAP-verbindingen toestaat, is alleen nodig als het beleid voor OUTPUT
niet is ingesteld op ACCEPT
.
Alle inkomende IMAPS toestaan
Om uw server te laten reageren op IMAPS-verbindingen, poort 993, voert u deze opdrachten uit:
De tweede opdracht, die het uitgaande verkeer van gevestigde IMAPS-verbindingen toestaat, is alleen nodig als het beleid voor OUTPUT
niet is ingesteld op ACCEPT
.
Alle inkomende POP3 toestaan
Om uw server te laten reageren op POP3-verbindingen, poort 110, voert u deze opdrachten uit:
De tweede opdracht, die het uitgaande verkeer van gevestigde POP3-verbindingen toestaat, is alleen nodig als het beleid voor OUTPUT
niet is ingesteld op ACCEPT
.
Alle inkomende POP3S toestaan
Om uw server te laten reageren op POP3S-verbindingen, poort 995, voert u deze opdrachten uit:
De tweede opdracht, die het uitgaande verkeer van gevestigde POP3S-verbindingen toestaat, is alleen nodig als het beleid voor OUTPUT
niet is ingesteld op ACCEPT
.
Conclusie
Dat zou veel van de commando’s moeten bevatten die vaak worden gebruikt bij het configureren van een iptables-firewall. Natuurlijk is iptables een zeer flexibel hulpmiddel, dus voel je vrij om de commando’s te combineren met verschillende opties om aan je specifieke behoeften te voldoen als ze hier niet worden behandeld.
Als je hulp nodig hebt bij het bepalen hoe je firewall moet worden ingesteld, bekijk dan deze handleiding: Hoe kies je een effectief firewallbeleid om je servers te beveiligen.