Debian zawiera kilka pakietów, które zawierają narzędzia do zarządzania zaporą. Jednym z nich jest iptables, który jest instalowany jako część systemu podstawowego. Narzędzie iptables służy przede wszystkim do filtracji pakietów IPv4 i można je wykorzystać do konfiguracji zapory (firewall). Zapora natomiast działa dzięki dopasowywaniu każdego pakietu, który przechodzi przez interfejs sieciowy do zestawu reguł zdefiniowanych w zaporze, które decydują, co zrobić.

Komendy iptables muszą być uruchamiane z przywilejami root, dlatego koniecznym jest, aby zalogować się do systemu jako użytkownik root.

  • tabela z regułami iptables:

Aby wyświetlić listę reguł znajdujących się w tabeli, należy uruchomić polecenie:

#  iptables -L

Pusta tabela nie będzie zawierała żadnych reguł, ale jak można zauważyć znajdują się w niej trzy łańcuchy (INPUT, OUTPUT oraz FORWARD):

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

Nazwy łańcuchów wskazują, do którego ruchu zostaną zastosowane reguły na każdej liście. INPUT dotyczy wszystkich połączeń przychodzących na maszynę wirtualną, OUTPUT dotyczy wszystkich połączeń wychodzących z maszyny wirtualnej, FORWARD dotyczy połączeń, które zostaną przekazane dalej. Każdy łańcuch ma również swoje ustawienie zasad (policy), które określają sposób obsługi ruchu. Jeżeli nie pasuje do żadnych określonych reguł, domyślnie jest ustawiony na akceptację (ACCEPT).

  • dodawanie reguł iptables:

Zapory można zazwyczaj konfigurować na jeden z dwóch sposobów: albo ustawić domyślną regułę na akceptowanie, a następnie blokować niepożądany ruch za pomocą określonych reguł, albo za pomocą reguł definiować dozwolony ruch i blokować wszystko inne. Ta ostatnia jest często zalecana, ponieważ pozwala na prewencyjne blokowanie ruchu, zamiast konieczności reaktywnego odrzucania połączeń, które nie powinny próbować uzyskać dostępu do maszyny wirtualnej.

Aby rozpocząć korzystanie z iptables, należy najpierw dodać reguły dla dozwolonego ruchu przychodzącego dla potrzebnych usług. Iptables może śledzić stan połączenia. Aby dodać regułę dla połączeń nawiązanych, należy użyć poniższego polecenia:

# iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT

Można teraz sprawdzić, czy reguła została dodana w tabeli przy użyciu polecenia jak poprzednio:

 # iptables -L
  • otworzenie SSH na porcie 22 lub innym:

Następnie należy zezwolić na połączenia przychodzące dla usług bądź na określony port. Niezbędne jest dopuszczenie połączenia SSH, uruchamiając poniższe polecenie:

# iptables -A INPUT -p tcp --dport ssh -j ACCEPT

Usługa ssh w iptables standardowo została określona na porcie numer 22. Jeżeli SSH działa na porcie innym niż 22, należy dodać regułę pozwalającą na ruch przychodzący dla danego portu.

Na przykład usługa SSH działa na porcie 5244/tcp. Należy więc dodać regułę z tym numerem portu poleceniem:

# iptables -A INPUT -p tcp --dport 5244 -j ACCEPT

Jeżeli na maszynie wirtualnej działają popularne usługi takie jak http, https również należy dodać regułę pozwalająca na ruch przychodzący dla tych usług:

  • otworzenie http na porcie 80:
# iptables -I INPUT -p tcp --dport 80 -m state --state NEW -j ACCEPT
  • otworzenie https na porcie 443:
# iptables -I INPUT -p tcp --dport 443 -m state --state NEW -j ACCEPT

Po dodaniu wszystkich wymaganych reguł, należy zmienić zasady polityki łańcucha INPUT na DROP, aby nie zezwalać na innych ruch przychodzący niż zdefiniowany w dodanych wcześniej regułach. Należy to uczynić poleceniem:

# iptables -P INPUT DROP

Te same zasady polityki można również zdefiniować dla innych łańcuchów, wprowadzając nazwę danego łańcucha i wybierając opcję DROP lub ACCEPT.

Aby zweryfikować listę reguł iptables, należy wydać polecenie:

# iptables -vL

Zostanie wyświetlona tabela zawierająca wszystkie aktywne reguły:

# iptables -vL

Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
  pkts bytes target     prot opt in     out     source               destination
     0     0 ACCEPT     tcp  --  any    any     anywhere             anywhere             tcp dpt:ssh state NEW
     0     0 ACCEPT     tcp  --  any    any     anywhere             anywhere             tcp dpt:http state NEW
     0     0 ACCEPT     tcp  --  any    any     anywhere             anywhere             tcp dpt:https state NEW

 Chain OUTPUT (policy ACCEPT 0 packets, 0 bytes)
  pkts bytes target     prot opt in     out     source               destination
  • zapisywanie konfiguracji:

Obecnie, jeżeli maszyna wirtualna zostałaby ponownie uruchomiona wprowadzone zmiany w iptables nie zostaną zapamiętane. Aby zapamiętać wprowadzone zmiany, należy utworzyć i zapisać plik z tabelą reguł poleceniem:

# iptables-save > /etc/iptables/rules.v4 

Następnie można po prostu przywrócić zapisane reguły, odczytując zapisany plik:

# Overwrite the current rules
 iptables-restore < /etc/iptables/rules.v4

# Add the new rules keeping the current ones
 iptables-restore -n < /etc/iptables/rules.v4