Linux Systeembeheer/Firewalls

Uit Wikibooks
Ga naar: navigatie, zoek

Inleiding[bewerken]

Om aanvallen op een netwerk te voorkomen of tegen te houden is een firewall op de router onontbeerlijk. De Linux-kernel heeft een ingebouwde firewall die je kan manipuleren met het commando iptables. Nu is het opstellen van een goede firewall niet zo evident en daarom zijn er intussen tientallen applicaties beschikbaar die deze taak vergemakkelijken (o.a. Firestarter, ufw, enz.). Het gebruiken van die tools is echter niet zonder gevaar: de details van de werking blijven verborgen, de kwaliteit van de firewall is niet langer 100% zeker en het is wellicht niet langer mogelijk om alle functionaliteiten van iptables te gebruiken. Voor een goed begrip van de werking van Linux-firewalls is het daarom belangrijk met iptables te leren werken.

Leerdoelen[bewerken]

  • De basisstructuur van Linux firewalls begrijpen
    • de begrippen “table” en “chain” kennen en begrijpen
    • de standaard tables (filter, nat, mangle) en hun functie kennen
    • de standaard chains (INPUT, OUTPUT, FORWARD) kennen en hun functie begrijpen
  • Het commando iptables kunnen gebruiken om de Linux firewall te manipuleren
    • de standaard policies (ACCEPT, DROP, REJECT, LOG) kennen en kunnen instellen
    • regels en chains kunnen toevoegen en verwijderen
    • filteropties kunnen gebruiken:
      • filteren op protocol, IP-adres, MAC-adres, netwerkinterface, protocol
      • TCP, UDP uitbreidingen
      • trafiek limiteren
      • connection tracking
      • Network Address Translation
  • De firewall-configuratie kunnen aanpassen en persistent maken op een RedHat-achtig systeem
    • firewall opstarten/stoppen: service iptables {start,stop,restart,status}
    • firewall-configuratie opslaan: service iptables save
    • De meegeleverde GUI-tools (system-config-firewall of system-config-securitylevel) voor firewall-beheer kunnen gebruiken


Basisstructuur Linux Firewalls[bewerken]

Iptables[bewerken]

Iptables is de front-end van het netwerk packet filter framework Netfilter. Netfilter is onderdeel van de Linux kernel en kan worden gebruikt om diverse acties met data packets uit te voeren, zoals: accepteren, weigeren, NAT, etc.

Met iptables kan de systeembeheerder de firewall configureren voor het IPv4-protocol. Andere protocols brengen andere programma's of modules met zich mee. Bijvoorbeeld:

  • ip6tables (IPv6)
  • arptables (ARP)
  • ebtables (Ethernet frames)

Tables en Chains[bewerken]

Het uitgangspunt van iptables is dat de regels waaruit een firewall bestaat zijn ingedeeld in drie tables of tabellen; filter, nat en mangle.

In elk van deze tabellen vindt u een aantal chains. Deze chains zijn de verzamelingen regels waaruit de firewall is opgebouwd. Welke chains u kunt gebruiken, is afhankelijk van de tabel.

De filter tabel[bewerken]

De filter tabel zorgt voor packet filtering en bestaat uit drie ingebouwde chains. Let overigens op de notatie van de chains, die is altijd in hoofdletters.

  • INPUT
  • OUTPUT
  • FORWARD

De INPUT-chain wordt gebruikt om binnenkomende pakketjes te filteren, de OUTPUT-chain wordt gebruikt voor het verwerken van pakketjes die op de lokale machine gedefinieerd zijn en naar buiten verstuurd moeten worden en de FORWARD-chain verwerkt alle pakketjes die door de firewall gerouteerd worden.

De nat tabel[bewerken]

Ook de nat table bestaat uit drie chains.

  • PREROUTING
  • OUTPUT
  • POSTROUTING

Door middel van de nat table worden twee soorten NAT ondersteund. Om te beginnen is dit het veel gebruikte masquerading. Dit is de vorm van NAT waarin hosts op het privé-netwerk het internet op kunnen door gebruik te maken van het IP-adres van de firewall. Computers op internet zien in dat geval niets anders dan de firewall en zijn zich er niet van bewust dat er achter die firewall een volledig netwerk schuilt. Daarnaast is het ook mogelijk het omgekeerde te doen. Dit betekent dat u nodes op het interne netwerk met behulp van de nat tabel toegankelijk kunt maken voor de buitenwereld door er een geregistreerd IP-adres aan toe te wijzen. Dit verschijnsel wordt ook aangeduid als statisch NAT. Dit betekent dat u aan de interface van de router een tweede IP-adres toekent en er door middel van de nat tabel voor zorgt dat alles wat op dat secundaire IP-adres binnenkomt wordt doorgestuurd naar de betreffende host op het privénetwerk.

Van de drie chains wordt de PREROUTING chain gebruikt om pakketjes te behandelen zodra ze binnenkomen; dat wil zeggen nog voordat het routingproces er mee aan de slag kan. De OUTPUT-chain wordt gebruikt om pakketjes te behandelen die door het lokale systeem gegenereerd worden, nog voordat het routing proces er mee aan de slag gaat. De POSTROUTING chain tot slot wordt gebruikt om pakketjes te behandelen voordat ze het systeem verlaten, maar nadat het routingproces er mee aan de slag is geweest.

De mangle-tabel[bewerken]

De mangle-table zorgt voor TCP header wijzigingen en bestaat uit twee ingebouwde chains.

  • PREROUTING
  • OUTPUT

De PREROUTING chain behandelt alle inkomende pakketjes voordat ze gerouteerd worden, de OUTPUT chain behandelt uitgaande pakketjes voordat ze gerouteerd worden. De mangle-tabel wordt alleen in speciale gevallen gebruikt, bijvoorbeeld wanneer speciale services zoals Quality of Service (QoS) gebruikt worden om pakketjes een hogere prioriteit te geven.

Regels[bewerken]

Bij het definiëren van een chain wordt gebruik gemaakt van verschillende regels (rules). Het is belangrijk dat in deze regels de juiste volgorde gebruikt wordt. In normale gevallen gaat een pakketje door alle regels in de chain. Dit is niet het geval als er een DENY of REJECT in de regel voorkomt. In dat geval wordt het pakketje direct tegengehouden. In alle andere gevallen worden dus alle regels verwerkt.

Als geen enkele regel een match oplevert met het betreffende pakketje, wordt de laatste regel in de chain toegepast. Deze regel staat ook bekend als de policy. In het Nederlands mag u dit gerust vertalen in “standaardbeleid”. Dit is dus de standaardregel die wordt toegepast voor alle pakketjes waarvoor geen specifieke regel gevonden kon worden.


Policies[bewerken]

Er zijn standaard vier policies:

Policy Betekenis
ACCEPT Iptables stopt de verdere verwerking van het pakket en geeft het door aan de applicatie of het besturingssysteem.
DROP Iptables stopt de verdere verwerking van het pakket en dropt het.
REJECT Doet hetzelfde als DROP maar met het verschil dat het een foutmelding weergeeft aan de verzender van het geblokkeerde pakket.
LOG Eerst wordt het pakket doorgezonden naar de systemlog daemon om een log-notitie aan te maken, vervolgens wordt de volgende regel in de chain uitgevoerd.


Werken met tables en chains[bewerken]

Geen documentatie is vollediger dan de iptables man page. Daarom:

 $ man iptables

Een compact overzicht van de meestgebruikte vlaggen en opties vindt u in de tabel hieronder.

Merk op dat om een nieuwe chain te definiëren, u als eerste moet aangeven tot welke tabel de chain behoort. Als u dit niet doet, wordt de nieuwe chain automatisch toegewezen aan de tabel filter.

 $ iptables [-t table] -[ADIRLFNPX] chain rule-specification [options] 
Vlag Uitleg
-A, --append Voegt een of meer rules toe achteraan aan de gespecificeerde chain. Als argument moet aangegeven worden op welke chain dit commando uitgevoerd moet worden en welke regel er aan toegevoegd moet worden.
-D, --delete Verwijdert een of meer rules uit de aangegeven table. Als argument moet aangegeven worden in welke chain gewerkt wordt en welke regel uit de chain bewerkt moet worden. U kunt verwijzen naar de betreffende regel door middel van een regelnummer (gebruik de optie -L voor een overzicht van alle

regelnummers).

-I, --insert Voeg een regel toe in een chain. De syntaxis hiervoor is iptables -I chain regelnummer regel.
-R, --replace Gebruik deze optie om een regel te vervangen. De syntaxis van deze optie is: -R chain regelnummer regelspecificatie.
-L, --list Toont alle regels. Bij deze optie kan aangegeven worden dat alleen regels uit één bepaalde chain getoond moeten worden. Als dit niet gebeurd, worden alle regels uit alle chains getoond.
-F, --flush Verwijdert alle regels uit een chain.
-N, --new-chain Definieer een nieuwe chain. U mag zelf bepalen welke naam die chain moet krijgen. Uiteraard moet deze naam wel uniek zijn.
-P, --policy chain target Stelt een standaard policy (bvb DROP, ACCEPT,...) in voor de chain.
-X, --delete chain Verwijdert een zelfgemaakte chain.
Rule specs Uitleg
-p, --protocol [!] protocol Een protocol meegeven dat moet gecontroleerd worden. Dit kan zowel tcp, udp, ..., all zijn of een numerieke waarde (0 is all in dit geval). De waarde 'all' is de default warde. Een uitroepteken inverteert de controle.
-s, --source [!] address[/mask] De bron. Het adres kan een netwerk naam, hostnaam, ip addres (met /mask) of zonder mask zijn (zowel de /255.255.255.255 als /32 notatie is goed) Het adres 0.0.0.0 dient als wildcard. Een uitroepteken inverteert de controle.
-src zie -s
-d, --destination [!] address[/mask] De besteming. Het adres kan een netwerk naam, hostnaam, ip addres (met /mask) of zonder mask zijn (zowel de /255.255.255.255 als /32 notatie is goed) Het adres 0.0.0.0 dient als wildcard. Een uitroepteken inverteert de controle.
-dst zie -d
-j, --jump target Dit specifiëert het doel van de regel, wat gebeurt er als een packet met de regel matcht.
-i, --in-interface [!] name Naam van de interface via dewelke het packet werd ontvangen (enkel te gebruiken bij de INPUT, FORWARD, PREROUTING chains). Je kan de naam laten eindigen op een "+" teken als jokerteken. Een uitroepteken inverteert de controle.
-o, --out-interface [!] name Naam van de interface via dewelke het packet zal verzonden worden (enkel te gebruiken bij de FORWARD, OUTPUT, POSTROUTING chains). Je kan de naam laten eindigen op een "+" teken als jokerteken. Een uitroepteken inverteert de controle.
--sport <port> Source port, dit kan een enkele waarde zijn of een range hebben. Bvb: -p tcp --sport 234:240
--dport <port> Destination port, dit kan een enkele waarde zijn of een range hebben. Bvb: -p tcp --dport 235
Algemeen Uitleg
-n en -v Voorbeeld: de huidige configuratie tonen: iptables -L -n -v (-n is numeric en -v is verbose)

Een toegepast voorbeeld vindt u in het Bash script verder op deze pagina.



samenvatting firewalls[bewerken]

enkele overzichten met frequente functies van de iptables

Queue Type Queue Function Packet Transformation Chain in Queue & Chain function
Filter Packet filtering
Forward Filters packets to servers accessible by another NIC on the firewall.
Input Filters packets destined to the firewall.
Output Filters packets originating from the firewall
Nat network adress translation
prerouting Address translation occurs before routing. Facilitates the transformation of the destination IP address to be compatible with the firewall's routing table. Used with NAT of the destination IP address, also known as destination NAT or DNAT.
postrouting Address translation occurs after routing. This implies that there was no need to modify the destination IP address of the packet as in pre-routing. Used with NAT of the source IP address using either one-to-one or many-to-one NAT. This is known as source NAT, or SNAT.
output Network address translation for packets generated by the firewall. (Rarely used in SOHO environments)
mangle TCP header modification
prerouting
postrouting
output
forward
Modification of the TCP packet quality of service bits before routing occurs. (Rarely used in SOHO environments)
target description most common options
accept
  • iptables stops further processing.
  • The packet is handed over to the end application or the operating system for processing
N/A
drop
  • iptables stops further processing.
  • The packet is blocked
N/A
log
  • The packet information is sent to the syslog daemon for logging
  • iptables continues processing with the next rule in the table
  • As you can't log and drop at the same time, it is common to have two similar rules in sequence. The first will log the packet, the second will drop it.
--log-prefix "string"

Tells iptables to prefix all log messages with a user defined string. Frequently used to tell why the logged packet was dropped

reject
  • Works like the DROP target, but will also return an error message to the host sending the packet that the packet was blocked
--reject-with qualifier

The qualifier tells what type of reject message is returned. Qualifiers include:

  • icmp-port-unreachable (default)
  • icmp-net-unreachable
  • icmp-host-unreachable
  • icmp-proto-unreachable
  • icmp-net-prohibited
  • icmp-host-prohibited
  • tcp-reset
  • echo-reply
dnat
  • Used to do destination network address translation. ie. rewriting the destination IP address of the packet || --to-destination ipaddress
    Tells iptables what the destination IP address should be
snat
  • Used to do source network address translation rewriting the source IP address of the packet
  • The source IP address is user defined || --to-source <address>[-<address>][:<port>-<port>]
    Specifies the source IP address and ports to be used by SNAT.
masquerade
  • Used to do Source Network Address Translation.
  • By default the source IP address is the same as that used by the firewall's interface
[--to-ports <port>[-<port>]]

Specifies the range of source ports to which the original source port can be mapped.

Labo-opdracht: Een bastion firewall opzetten[bewerken]

Bedoeling is een firewallscript uit te werken voor een zgn. “bastion firewall” dat een lokaal netwerk, bestaande uit een DMZ (demilitarized zone) met publiek toegankelijke servers en een intranet dat niet toegankelijk is van buitenaf. Onderstaande figuur en adressentabel verduidelijken de opstelling.

Structuur van het netwerk
Host Interface IP-adres Network Mask Opmerkingen
router eth0 172.16.1.253 255.255.255.252 verbonden met router van ISP
eth1 192.0.2.126 255.255.255.248 DMZ, met publieke IP-adressen
eth2 10.0.0.1 255.0.0.0 Itern netwerk, met private IP-adressen
apollo eth0 192.0.2.123 255.255.255.248 Webserver
mars eth0 192.0.2.124 Mailserver
ns1 eth0 192.0.2.121 DNS1
ns2 eth0 192.0.2.122 DNS2

Opm. 192.0.2.0 is het zgn. TEST-NET, een klasse-C netwerk dat is voorbehouden voor het gebruik in voorbeelden, handleidingen, enz. Je mag het beschouwen als een publiek IP netwerk, maar het komt nergens “in het echt” voor.

Zet een firewall op met volgende eigenschappen:

  • pakketten die tegengehouden worden (DROP), moeten ook gelogd worden. Maak daarvoor een nieuwe chain aan.
  • pc's op het intranet kunnen de services van de DMZ gebruiken (gebruik zo strikt mogelijke regels).
  • pc's op het intranet kunnen vrij naar “buiten” (via NAT).
  • computers van buiten kunnen de services van de DMZ gebruiken (ook met zo strikt mogelijke regels).
  • computers van buiten kunnen GEEN verbinding aangaan met computers op het intranet.
  • blokkeer flooding op de DMZ services.
  • op de router draaien geen services, dus alle verkeer van en naar de router zelf moet geblokkeerd worden.

Bibliografie[bewerken]

Informatie afkomstig van http://nl.wikibooks.org Wikibooks NL.
Wikibooks NL is onderdeel van de wikimediafoundation.