Basis firewall in Linux

Doel

Alle verkeer binnen het netwerk toestaan. Overig verkeer blokkeren behalve specifieke poort. Bijvoorbeeld ten behoeve van je website of domotica.

Aanleiding/overwegingen

  • Als het systeem met internet verbonden is, dan is het verstandig om het te beveiligen tegen kwaadwillende personen. Zelf vang ik in een aantal dagen meerdere connectie pogingen van verschillende IP adressen, die bij https://www.abuseipdb.com gemeld zijn als kwaadwillend.
    De vermelding kan b.v. zijn:
    This IP was reported 264 times. Confidence of Abuse is 100%:
  • Bij de website of het domotica systeem is het dan vervolgens ook weer zaak om ongenode gasten te weren. b.v. door te blokkeren na foutieve inlogpogingen of anderszins.

Voorbereiding

  • Houd onderstaande code paraat en log in als root.
  • Ik ga ervan uit dat iptables nog niet in gebruik is.

Uitvoering

Met het commando iptables -L tonen we de huidige instellingen.

root@MyMachine:~# iptables -L
Chain INPUT (policy ACCEPT)
target     prot opt source               destination         

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination         

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination

Zorg altijd eerst voor je achterdeurtje, zodat je terug kan naar af.
Bewaar de standaard instellingen. Wijzig your-path naar de locatie waar je het wilt opslaan.

root@MyMachine:~# iptables-save > /your-path/iptables-default.rules

De volgende stap is het maken van de basis firewall regels.
Open een nieuw bestand (ik gebruik vi als editor).

root@MyMachine:~# vi /your-path/iptables.firewall.rules

Onderstaande is een voorbeeld van enkele basis regels, om je op gang te helpen. Kopieer en plak deze regels in het zojuist geopende iptables.firewall.rules bestand en pas deze aan naar je eigen situatie.
Ik weet niet meer waar ik onderstaand voorbeeld vandaan heb. Het is op heel veel plaatsen al of niet aangepast voor specifieke toepassingen te vinden.

*filter

#  Allow all loopback (lo0) traffic and drop all traffic to 127/8 that doesn't use lo0
-A INPUT -i lo -j ACCEPT
-A INPUT -d 127.0.0.0/8 -j REJECT

#Allow all local traffic.
-A INPUT -s 111.222.333.0/24 -j ACCEPT
-A OUTPUT -d 111.222.333.0/24 -j ACCEPT

#  Accept all established inbound connections
-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

#  Allow all outbound traffic - you can modify this to only allow certain traffic
-A OUTPUT -j ACCEPT

#  Allow HTTP and HTTPS connections from anywhere (the normal ports for websites and SSL).
#-A INPUT -p tcp --dport 80 -j ACCEPT
#-A INPUT -p tcp --dport 443 -j ACCEPT

#  Allow your special application connections from anywhere (SSL port)
#-A INPUT -p tcp --dport 20443 -j ACCEPT

#  Allow SSH connections
#  The -dport number should be the same port number you set in sshd_config
#-A INPUT -p tcp -m state --state NEW --dport 22 -j ACCEPT

#  Allow ping
#-A INPUT -p icmp --icmp-type echo-request -j ACCEPT

#  Log iptables denied calls
-A INPUT -m limit --limit 5/min -j LOG --log-prefix "iptables denied: " --log-level 7

#  Drop all other inbound - default deny unless explicitly allowed policy
-A INPUT -j DROP
-A FORWARD -j DROP

COMMIT

Toelichting bij de regels

  • Volgt nog.
  • Wijzig in regel 8 en 9 111.222.333.0 in je eigen lokale netwerk range.

Let er in de toekomst op dat je de regels aanpast, indien je andere onderdelen gaat toevoegen aan je installatie.

Bewaar bovenstaand bestand en activeer de regels.

root@MyMachine:~# iptables-restore < /your-path/iptables.firewall.rules

Controleer of de nieuwe configuratie actief is.

root@MyMachine:~# iptables -L
Chain INPUT (policy ACCEPT)
target     prot opt source               destination         
ACCEPT     all  --  anywhere             anywhere            
REJECT     all  --  anywhere             localhost/8          reject-with icmp-port-unreachable
ACCEPT     all  --  111.222.333.0/24      anywhere            
ACCEPT     all  --  anywhere             anywhere             state RELATED,ESTABLISHED
LOG        all  --  anywhere             anywhere             limit: avg 5/min burst 5 LOG level debug prefix "iptables denied: "
DROP       all  --  anywhere             anywhere            

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination         
DROP       all  --  anywhere             anywhere            

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination         
ACCEPT     all  --  anywhere             111.222.333.0/24     
ACCEPT     all  --  anywhere             anywhere

De firewall-regels willen we automatisch actief hebben, wanneer het systeem opnieuw opgestart wordt.

Om te zorgen dat de iptables regels ook na reboot weer worden geactiveerd installeren we het pakket ‘iptables-persistent’ met behulp van het commando ‘apt-get’

root@MyMachine:~# apt-get install iptables-persistent

De huidige geactiveerde regels zullen worden opgeslagen in overeenkomstige IPv4 enIPv6 regels in
/etc/iptables/rules.v4 en /etc/iptables/rules.v6

Om nieuwe iptables regels permanent te maken gebruiken we iptables commando om regels toe te voegen. Om de wijzigingen permanent te maken na herstart gebruiken we het commando ‘iptables-save’.

root@MyMachine:~# iptables-save > /etc/iptables/rules.v4
root@MyMachine:~# ip6tables-save > /etc/iptables/rules.v6

Om permanente regels te verwijderen, kunnen deze uit de betreffende /etc/iptables/rules.v* bestanden worden weggehaald.

Resultaat

Bekijk de inhoud van /etc/iptables/rules.v4 en /etc/iptables/rules.v6

Tips

  • Test het!
  • Controleer met enige regelmaat de log
root@MyMachine:/var/log# cat syslog | grep 'iptables denied'

Geef een reactie

Het e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *

Deze site gebruikt Akismet om spam te verminderen. Meer informatie over hoe uw reactiegegevens worden verwerkt.