Iptables puust ja punaseks

Allikas: Kuutõrvaja
Redaktsioon seisuga 16. august 2011, kell 15:10 kasutajalt Jj (arutelu | kaastöö) (Ahelad ja reeglid)
                                        Roheline.jpg Toores. Ehk seda pala võib täiendada.

Mis see on?

Iptables on töövahend linuxi kernelisse ehitatud filtreerimismehanismi kasutamiseks.

Kernel ja moodulid

Iptablesi kasutamiseks peavad olema laetud vastavad kerneli moodulit. Näiteks kui soovime kasutada enda reeglites LOG, REJECT ja MASQUERADE targeteid (ja need pole kernelisse kompileeritud), peame laadima järgnevad moodulid.

# /sbin/insmod ipt_LOG
# /sbin/insmod ipt_REJECT
# /sbin/insmod ipt_MASQUERADE

Iptablesi moodulid, koos kirjeldustega, leiab siit lingilt http://www.tummy.com/journals/entries/jafo_20050717_164535

Laaditud iptablesi moodulid leiab failist /proc/net/ip_tables_matches

Paigaldatud netfilteri mooduleid näeb käsuga

# ls /lib/modules/`uname -r`/kernel/net/ipv4/netfilter

  # Disabled by default!
  $> echo "1" > /proc/sys/net/ipv4/ip_forward
  
  # Load various modules. Usually they are already loaded 
  # (especially for newer kernels), in that case 
  # the following commands are not needed.
   
  # Load iptables module:
  $> modprobe ip_tables
  
  # activate connection tracking
  # (connection's status are taken into account)
  $> modprobe ip_conntrack
  # Special features for IRC:
  $> modprobe ip_conntrack_irc
  # Special features for FTP:
  $> modprobe ip_conntrack_ftp


Iptablesi käsu süntaks

Iptables käsu võtmed:

  • -t <-table> Tabel, vaikimisi filter
  • -j <target> rakendatav policy
  • -A lisab reegli
  • -F Flush. Kustutab antud tabeli reeglid
  • -p <protocol-type>
  • -s <ip-address> Saatja IP
  • -d <ip-address> Saaja IP
  • -i <interface-name> Võrguseade (sisend)
  • -o <interface-name> Võrguseade (Väljundseade)
  • iptables -D chain {rule|rule-num} reegli kustutamine
  • iptables ‑F [chain] kõigi reeglite kustutamine
  • iptables [-t table] -N name uue ahela loomine
  • iptables [-v] [-n] -L kõikide reeglite näitamine
  • iptable -P chain {ACCEPT|DROP} seadistab vaikimisi reeglit ahelatel


Tabelid

Vaikimisi mängivad reeglid puhtalt Filter tabeliga. Tegelikult on aga põhitabeleid kokku kolm. Nat,Filter ja Mangle.

Filter Pakettide filtreerimiseks

  • INPUT filtreerime sisenevaid pakette
  • FORWARD filtreerime edasi suunatavaid pakette
  • OUTPUT filtreerime väljuvaid pakette

Nat Võrguaadresside transleerimiseks

  • PREROUTING aadressi transleerimiseks enne marsruutimist
  • DNAT ehk destination NAT
  • POSTROUTING aadressi transleerimiseks peale
  • marsruutimist SNAT source NAT
  • OUTPUT tulemüüri poolt teostatav NAT

Mangle

  • Modifitseerime IP paketi päist
  • QoS bittide modifitseerimine

Ahelad ja reeglid

Iptablesi üheks olulisemaks punktiks on ahelad (chains). Pakett liigub mööda ahelaid seni kuni mõni reegel ühildub paketiga. Näiteks lubab selle või kustutab.

Image001.gif

Lihtsustatult on olemas kaks peamist ahelat mida paketid läbivad INPUT ja OUTPUT. Tegelikult juba nagu ülemiselt skeemilt näha on peamisi ahelaidki veel. Näiteks Prerouting ja Postrouting, mis rakenduvad enne ja peale ruutingu otsuse tegemist (lisaks saab ahelaid ka ise juurde luua). Aga hetkel lihtsustamise mõttes vaatleme vaid kahte.

Ahelates olevaid reegleid näeb käsuga:

# 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

Selline pilt näitab, et mingeid reegleid hetkel pole kehtestatud.

Igal ahelaga saab siduda reegleid. Näiteks tekitame järgneva reegli:

iptables -A INPUT -i eth0 -j REJECT 

See reegel on seotud INPUT ahelaga (ehk sissetulevad paketid) ja kehtib ainult pakettide kohta, mis tulevad eth0 võrguliidesele. Lisaks ütleb, et need paketid lükatakse tagasi. Reject tähendab, et keeldutakse paketist ja antakse sellest ka paketi saatjale teada.

Võimalikud reeglid (policy):

  • ACCEPT – lubamine. Edasi ei uurita. Näiteks lubame pordile ühenduse
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
  • DROP – blokeerimine. Edasi ei uurita. Keelustame näiteks kõik sissetulevad paketid
iptables -A INPUT -j DROP
  • LOG – logitakse sellele reeglile vastamine ja iptables jätkab reeglite uurimist

If you would like to log dropped packets to syslog, this would be the quickest way:

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

DROP everything and Log it

iptables -A INPUT -j LOG --log-level 4
iptables -A INPUT -j DROP

Create a LOGDROP chain to log and drop packets

/sbin/iptables -N LOGDROP
/sbin/iptables -A LOGDROP -j LOG
/sbin/iptables -A LOGDROP -j DROP

Drop all other traffic

/sbin/iptables -A INPUT -j LOGDROP
  • REJECT – blokeerimine. Saatjale edastatakse vastus, et pakett blokeeriti (näiteks icmp-host-prohibited)
  • DNAT – saaja aadress muutmine
  • SNAT – saatja aadressi muutmine
  • MASQUERADE – saatja aadress muudetakse tulemüüri omaks

Connect a LAN to the internet

iptables -t nat -A POSTROUTING -o eth1 -j MASQUERADE
  • -t nat select table "nat" for configuration of NAT rules.
  • -A POSTROUTING Append a rule to the POSTROUTING chain (-A stands for "append").
  • -o eth1 this rule is valid for packets that leave on the second network interface (-o stands for "output")
  • -j MASQUERADE the action that should take place is to 'masquerade' packets, i.e. replacing the sender's address by the router's address.
  • chain - Send the packet to another chain for further processing. If that chain’s rules fail to match the packet, then processing will continue with the next rule in the current chain. (See also RETURN target.)
  • MARK - Used with the iproute2 and the tc command for advanced routing and traffic shaping.
  • REDIRECT

Transparent proxying: local net at eth0, proxy server at port 8080)

 iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 \
 -j REDIRECT --to-ports 8080 
  • RETURN - This is the default target at the end of a user-defined chain. It means to return to the next rule in the parent chain.

Või lubame kohe terve portide vahemiku

iptables -A INPUT -p tcp --dport 6881:6890 -j ACCEPT

Teisisõnu blokeerib antud reegel kogu sissetuleva võrguliikluse eth0 võrguliidesel.

Allow loopback traffic!

iptables -I INPUT 1 -i lo -j ACCEPT

Logging. This will log dropped packets to syslog:

iptables -I INPUT 5 -m limit --limit 5/min -j LOG --log-prefix \
"iptables denied: " --log- level 7

Accept packets from trusted IP addresses

iptables -A INPUT -s 192.168.0.4 -j ACCEPT # change the IP address as appropriate

Viimast rida võib paranoiline olles veelgi täiendada näitens nii MAC aadressiga

 iptables -A INPUT -s 192.168.0.4 -m mac --mac-source 00:50:8D:FD:E6:32 -j ACCEPT

Eelmise peatüki jätkuna lihtne tulemüür serverile

Kui tavalisele lauaarvutile võib kirjutada tulemüüri lihtsalt:

iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT ACCEPT

Siis server vajab juba keerukamat lähenemist

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

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

#  Allows all outbound traffic
#  You can modify this to only allow certain traffic
iptables -A OUTPUT -j ACCEPT

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

#  Allows SSH connections
iptables -A INPUT -p tcp -m state --state NEW --dport 22 -j ACCEPT

# Allow ping
iptables -A INPUT -p icmp -m icmp --icmp-type 8 -j ACCEPT

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

# Reject all other inbound - default deny unless explicitly allowed policy
iptables -A INPUT -j REJECT
iptables -A FORWARD -j REJECT

Lähme süviti keerukamaks

hetkel tulemüürile teada olevate seansside tabel asub /proc/net/ip_conntrack Custom Chains iptables also allows you to create custom chains, which can then be specified as a target to jump to. For example, you could create a so-called whitelist for trusted IP address, and a blacklist for evil nodes on the Internet. To create the chains, you would give the following commands:

iptables -N whitelist
iptables -N blacklist

To add a rule to these chains (or any other chain), use:

iptables -A whitelist -s 192.168.0.0/24 -j ACCEPT
iptables -A blacklist -s 207.46.130.0/24 -j DROP
iptables -A blacklist -s 207.46.250.0/24 -j DROP

Then, specify these chains as a target in your INPUT, FORWARD and/or OUTPUT chain:

iptables -A INPUT -j whitelist
iptables -A INPUT -j blacklist
iptables -A OUTPUT -j whitelist
iptables -A OUTPUT -j blacklist
iptables -A FORWARD -j whitelist
iptables -A FORWARD -j blacklist

Suppose there is a webserver in the SOHO Network, which must be available to the public (the Internet) as well as the clients on the LAN. This means you need to forward all requests to ROUTER B, port 80 to the webserver (suppose this webserver is at 192.168.2.20):

# iptables -A PREROUTING -p tcp --dport 80 -j DNAT --to-destination  192.168.2.20

Ftpcontrack1.png

Serveri ja kliendi vahelise ühenduse loomine

Client                     Server
------                     -------
SYN------------------------>
      <---------------------SYN-ACK
ACK------------------------> Mõlemapoolne ühendus loodud