IPTables handige oneliners

Dit is vooral een note-to-self, maar het is toch tijd om af te komen van het uitzetten van iptables omdat ik de tijd er niet voor neem om uit te zoeken hoe het werkt.

Ik ben fan van de website serversforhackers.com en verwijs je dan ook met alle liefde naar dit iptables-artikel waarop ik ook mijn basis heb gemaakt.

Huidige situatie bekijken

Kijk hoe het er nu voor staat met de volgende vlaggetjes:

  • -L list alle rules
  • -v verbose, toon meer opties
$ sudo iptables -L -v
Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination
49525 3319K f2b-sshd   tcp  --  any    any     anywhere             anywhere             multiport dports ssh
60539   26M ACCEPT     all  --  lo     any     anywhere             anywhere
 250K   71M ACCEPT     all  --  any    any     anywhere             anywhere             ctstate RELATED,ESTABLISHED
 3495  204K ACCEPT     tcp  --  any    any     anywhere             anywhere             tcp dpt:ssh
 3835  213K ACCEPT     tcp  --  any    any     anywhere             anywhere             tcp dpt:http
 5946  339K ACCEPT     tcp  --  any    any     anywhere             anywhere             tcp dpt:https
 1919  102K DROP       all  --  any    any     anywhere             anywhere

Basis neerzetten

Voeg de volgende twee rules toe om local verkeer toe te staan en om jezelf niet buiten te sluiten als je met SSH ingelogd bent.

# allow all traffic on local port
$ sudo iptables -A INPUT -i lo -j ACCEPT

# allow traffic which was already there
$ sudo sudo iptables -A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT

Afhankelijk van wat je op server doet, kun je de poorten voor SSH en web open zetten

$ sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT
$ sudo iptables -A INPUT -p tcp --dport 80 -j ACCEPT
$ sudo iptables -A INPUT -p tcp --dport 443 -j ACCEPT

Als je verder niets meer toe hoeft te laten, kun je iptables instellen om standaard alles te droppen (tenzij er een rule is opengezet).

NB: let op! Zorg ervoor dat je jezelf niet buitensluit en controleer dat je de rule met RELATED,ESTABLISHED hebt opgenomen!

$ sudo iptables -A INPUT -j DROP

Een rule later toevoegen

Als je een rule later nog wilt toevoegen, dan moet je hem inserten in plaats van adden.

Het verschil tussen add en insert is dat bij add je rule aan het einde geplaatst wordt (ná de DROP dus!) en met insert kun je opgeven waar je wilt dat de rule komt (vóór de DROP uiteraard!).

Om een rule op de 3e positie in de lijst toe te voegen, gebruik je volgend commando.

$ sudo iptables -I INPUT 3 -p tcp --dport 8080 -j ACCEPT

Specifieke rules

Verkeer toestaan vanaf een specifiek IP-adres en naar een specifieke port:

$ sudo iptables -I INPUT 5 -s 172.30.0.86 -p tcp --dport 9200 -j ACCEPT

Verwijderen van een rule

# Delete by rulenumber
$ sudo iptables -D INPUT 3

# Or delete the rule by matching the parameters
$ sudo iptables -D INPUT -p tcp --dport 22 -j ACCEPT

Firewall rules opslaan

Let op! Firewall rules overleven een reboot niet! Je moet ze daarom opslaan.
Zie ook https://serversforhackers.com/c/firewall-persisting-iptables-rules

Ubuntu

Het makkelijkste is om iptables-persistent te gebruiken.

$ sudo apt-get install iptables-persistent

Je rules worden nu opgeslagen in /etc/iptables/rules.4 voor IPv4 en /etc/iptables/rules.6 voor IPv6.

Als je de rules wijzigt, sla ze dan op zodat ze met een volgende reboot weer ingezet worden:

$ sudo iptables-save > /etc/iptables/rules.v4

CentOS

De locatie op CentOS is anders kwam ik achter. Hier gaat het naar /etc/sysconfig/iptables.

# via service
$ sudo service iptables save
iptables: Saving firewall rules to /etc/sysconfig/iptables:[  OK  ]

# manually
$ sudo su root -c 'iptables-save > /etc/sysconfig/iptables’