Iptables
Contents
iptables is a packet filtering, NAT/PAT and packet mangling tool for Linux. Used by a variety of Linux distributions including Ubuntu, Redhat and CentOS. Iptables is highly configurable and are used in many firewall solutions.
Using IPTABLES
Iptables is a commandline command with numerous options, and need some training to master. There are three tables you can use filter(default) nat and mangle. Only filter and nat shown below.
The filter chains
Basically iptables has three filters/chains
- INPUT : Packets from a Interface to a local process on the machine. A packet from outside to the machine.
- FORWARD: Packets traversing from one Interface to another Interface
- OUTPUT : Packets from a local process - the machine itself - to the outside world.
See the tables with the command
[root@bkshost sysconfig]# 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
The nat chains
When you use the nat table or mangle tables
- PREROUTING : Incoming packets before Routing decision. Used fx. for Destination nat
- POSTROUTING: Incoming packets after Routing decision. Used fx. for Source nat
- OUTPUT : Packets from a local process - the machine itself - to the outside world.
See the tables with the command
[root@bkshost sysconfig]# iptables -L -t nat Chain PREROUTING (policy ACCEPT) target prot opt source destination Chain POSTROUTING (policy ACCEPT) target prot opt source destination Chain OUTPUT (policy ACCEPT) target prot opt source destination
IPTABLES firewall solutions
- Shorewall firewall [http://www.shorewall.net/ Shorewall.net 9
iptables syntax
Tabel | |
filter | Regler, der bruges til at filtrere uønskede pakker fra.
Virker på INPUT, OUTPUT og FORWARD kæde |
mangle | Regler, der bruges til at ændre i indholdet af pakker.
Virker på PREROUTING og OUTPUT kæde |
nat | Regler, der bruges til at ændre adresser i pakker.
Viker på PREROUTING, OUTPUT og POSTROUTING kæde |
Kommando | |
-A kæde | Tilføj (append) for kæde |
-I kæde [nummer] | Indsæt for kæde. Angives nummer ikke, antages 1 (dvs. først i tabellen) |
-D kæde | Slet for kæde |
-F [kæde] | Slet alle regler. Eventuelt i kæde |
-P kæde politik | Sæt handling for kæde, hvis ingen regler findes. Politik er ACCEPT, DROP og RETURN |
-L [kæde] | Vis en liste over regler, eventuelt for bestemt kæde |
Regel | |
-p [!]protokol | Match, hvis pakke bruger protokol. Protokol kan være tcp, udp, icmp eller andre |
-s [!]adresse[/maske] | Match, hvis kilde adresse på pakke passer. Der kan angives en maske til et subnet (både 24 og 255.255.255.0 kan bruges) |
-d [!]adresse[/maske] | Match, hvis destinatinsadresse på pakke passer. Der kan angives en maske til et subnet (både 24 og 255.255.255.0 kan bruges) |
-i [!]interface | Match, hvis input interface er anvendt til at modtage pakken |
-o [!]interface | Match, hvis output interface skal anvendes til at sende pakken |
--sport [!] [port[:port]] | Match, hvis kildeport eller kildeport interval (f.eks. 22:80) anvendes i pakken. Bruges med tcp og udp (se -p regel) |
--dport [!] [port[:port]] | Match, hvis destinationsport eller destinationsport interval (f.eks. 22:80) anvendes i pakken. Bruges med tcp og udp (se -p regel) |
--icmp-type [!]typenavn | Match, hvis ICMP meddelelse er af typenavn, f.eks. echo-request, echo-reply, source-quench, time-exceeded, destination-unreachable, network-unreachable, host-unreachable, protocol-unreachable og port-unreachable. Bruges med icmp (se -p regel) |
Bruges ! i ovenstående regler, virker match modsat. F.eks. vil -p !tcp matche alle pakker, der ikke bruger tcp. | |
Handling | |
-j ACCEPT | Accepter pakker, dvs. lad dem gå videre |
-j DROP | Drop pakker, dvs. smid dem væk |
-j SNAT --to-source adresse[:port] | Lav ændring i pakkens source IP, hvor adresse bliver den nye source IP og port den nye source port |
-j DNAT
--to-destination adresse[:port] |
Lav ændring i pakkens destination IP, hvor adresse bliver den nye destination IP og port den nye destination port |
very basic Firewall
Accepts only ping from inside to the outside. The machine is open to the Internet.
#!/bin/bash # # Start firewall # Diverse erklæringer FW=iptables INT_NET="192.168.54.0/24" EXT_NET="172.16.0.0/16" EXT_IP="172.16.4.4" EXT_IF="eth0" # Fjern alle tidligere regler $FW –F $FW -F -t nat # Sæt default politik til afvisning $FW –P FORWARD DROP # Tillad ping indefra $FW –A FORWARD –s $INT_NET –p icmp --icmp-type echo-request –j ACCEPT # Tillad pong udefra $FW –A FORWARD –d $INT_NET –p icmp --icmp-type echo-reply –j ACCEPT # Source NAT på udgående pakker $FW –A POSTROUTING –o $EXT_IF –s $INT_NET –j SNAT --to-source $EXT_IP #Accept forwarding. Start routing echo "1" > /proc/sys/net/ipv4/ip_forward
basic firewall 2
iptables-save udskriver en liste over regler. Kommandoen
Iptables-save > /etc/sysconfig/iptables
Gør nuværende opsætning af iptables permanent dvs. den loades under opstart af iptables scriptet /etc/init.d/iptables.
Her er et eksempel på et simpelt firewall script, hvor der åbnet for ping fra det interne net og ud. Samtidig ændres alle interne IP til ekstern IP 172.16.4.4:
#!/bin/bash # # Start firewall # # Tillader ping indefra og ud. # Lukker for al anden trafik. # # OBS! Denne firewall rører udelukkende ved FORWARD # # Diverse erklæringer FW=iptables INT_NET="192.168.54.0/24" EXT_NET="172.16.0.0/16" EXT_IP="172.16.4.4" EXT_IF="eth0" # Fjern alle tidligere regler $FW –F # Sæt default politik til afvisning $FW –P FORWARD DROP # Tillad ping indefra $FW –A FORWARD –s $INT_NET –p icmp --icmp-type echo-request –j ACCEPT # Tillad pong udefra $FW –A FORWARD –d $INT_NET –p icmp --icmp-type echo-reply –j ACCEPT # Source NAT på udgående pakker $FW –A POSTROUTING –o $EXT_IF –s $INT_NET –j SNAT --to-source $EXT_IP