iptables/Reititin

Linux.fista
Siirry navigaatioon Siirry hakuun


Huomautus: Artikkeli on pahasti kesken ja sitä päivitetään lähitulevaisuudessa.


Useimmissa valmiissa reitittimissä on joku mini-Linux ja joihinkin saa jälkeenpäin asennettua OpenWrt:n. Valmiissa purkeissa turvallisuus on pääsääntöisesti varsin puutteellinen ja OpenWrt on vähän hankala ylläpitää. Mikään ei luomasta reititintä itse. Pelkkä Raspberry Pi tai vanhempi kannettava voi riittää jos tarvitsee vain langattoman lähiverkon. Joku sopiva mini-PC useammalla LAN-portilla toimii, ja jos haluaa oikean kotipalvelimen, voi käyttää jotain vanhaa työpöytä-konetta.

Sivulla esitetään kahdet ohjeet eri ratkaisuille. Ensimmäisessä tapauksessa tehdään PC-koneesta tavallinen lähiverkko-reititin, toisessa KVM-virtuaalikoneesta Whonix-tyylinen portti Tor-verkkoon. Ensimmäisessä tapauksessa käytetään 64-bittistä Debian-versiota 10.10.0 ja toisessa 64-bittistä Debian-versiota 11.0. Lähtökohtana on täysin uunituore, asetuksia vailla oleva Debian-asennus ilman mitään työkaluja (base system). Koneissa tulee olla kaksi verkkolaitetta.

LAN-reititin[muokkaa]

PC:stä voi tehdä LAN-reitittimen jos siinä on vähintään kaksi LAN-porttia. Tässä tapauksessa oletetaan että ne on nimetty enp3s0 ja enp4s0, ja että enp3s0 liitetään nettiin ja enp4s0 käyttäjän sisäverkkoon. Wifi-purkin tekeminen HostAPD:ta käyttäen mutta sitä ei käsitellä täällä verkkokorttien laajan kirjon takia. Helpoiten selviää valitsemalla dnsmasq:in DNS- ja DHCP-palvelimeksi. Niiden lisäksi pitäisi konffata iptables, kiinteät ja oletettavasti dynaamiset ip-osoitteet sekä ottaa ip_forward käyttöön. Ensin asennetaan dnsmasq käskyllä apt-get install dnsmasq. Seuraavaksi muokataan asetuksia tiedostossa /etc/dnsmasq.conf. Tiedoston kuuluu näyttää seuraavalta:

interface=enp4s0
bind-interfaces
dhcp-range=192.168.1.50,192.168.1.60,12h

Loput rivit voi poistaa tai kommentoida pois. Seuraavaksi asetetaan IP-osoitteet tiedostossa /etc/network/interfaces:

auto lo
iface lo inet loopback
allow-hotplug enp3s0
iface enp3s0 inet dhcp
auto enp4s0
iface enp4s0 inet static
address 192.168.1.250
netmask 255.255.255.0
gateway 192.168.1.250
network 192.168.1.0

Tallennetaan molemmat muutokset. Tässä vaiheessa dnsmasqin voi käynnistää käskyillä systemctl enable dnsmasq.service. Seuraavaksi tehdään iptables-säännöt. Luodaan tiedosto käskyillä touch /etc/iptables.save ja muokataan sitä seuraavasti:

# Generated by iptables-save v1.8.7 on Sun Mar 27 12:52:14 2022
*filter
:INPUT DROP [174647:10066454]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [24876483:69841164843]
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -s 127.0.0.1/32 -d 127.0.0.1/32 -j ACCEPT
-A INPUT -s 192.168.1.0/24 -d 192.168.1.250/32 -p udp -m udp --dport 53 -j ACCEPT
-A INPUT -i enp4s0 -p udp -m udp --dport 67 -j ACCEPT
-A FORWARD -i enp3s0 -o enp4s0 -m state --state RELATED,ESTABLISHED -j ACCEPT
-A FORWARD -i enp4s0 -o ene3s0 -j ACCEPT
-A OUTPUT -s 127.0.0.1/32 -d 127.0.0.1/32 -j ACCEPT
COMMIT
# Completed on Sun Mar 27 12:52:14 2022
# Generated by iptables-save v1.8.7 on Sun Mar 27 12:52:14 2022
*nat
:PREROUTING ACCEPT [243858:20317139]
:INPUT ACCEPT [29875:1979367]
:OUTPUT ACCEPT [61228:4493121]
:POSTROUTING ACCEPT [27228:1646052]
-A POSTROUTING -o enp4s0 -j MASQUERADE
COMMIT
# Completed on Sun Mar 27 12:52:14 2022

Tässä vaiheessa palomuurisäännöt ei vielä selviä uudelleenkäynnistyksestä. Sen voi tehdä vaikka asentamalla iptables-persistent-paketti. Aivan lopulta muokataan tiedostoa /etc/sysctl.conf ja lisätään siihen net.ipv4.ip_forward=1. Tässä vaiheessa tehdään uudelleenkäynnistys käskyllä reboot. Tämän jälkeen tietokoneen pitäisi toimia reitittimenä.

Tor-reititin[muokkaa]

Tarvitaan paketit apt-transport-tor, openssh-server ja isc-dhcp-server. iptables-säännöt otetaan käyttöön itsetehdyllä skriptillä ja unohdetaan esimerkiksi ufw ja iptables-persistent. Oleellisena erona wifi-reitittimeen tässä on se että palomuurin osoitemuunnokseen liittyvä MASQUERADE-sääntö ja systemd:n ip_forward jää käyttämättä. Lähtötilanne on kaksi KVM-konetta joista ensimmäinen on tor-proxy ja toinen ns. takakone jota käytetään surffailussa. Tor-proxylla on kaksi verkkolaitetta. Toinen niistä (enp1s0) on tavallisen NATin takana ja toinen (enp2s0) omassa eritetyssä verkossa. Takakoneella on yksi verkkolaite eristetyssä verkossa. Ensin asennetaan DHCP-palvelin käskyllä apt-get install isc-dhcp-server. Ihan suoraan se ei lähde toimimaan vaan se pitää konfiguroida. Avataan /etc/dhcp/dhcpd.conf-tiedosto ja korvataan kaikki sisältö seuraavalla:

ddns-update-style none;
authoritative;
subnet 192.168.42.0 netmask 255.255.255.0 {
      range 192.168.42.10 192.168.42.50;
      option broadcast-address 192.168.42.255;
      option routers 192.168.42.1;
      default-lease-time 600;
      max-lease-time 7200;
      option domain-name "local";
      option domain-name-servers 8.8.8.8, 8.8.4.4;
}

Seuraavaksi avataan /etc/default/isc-dhcp-server ja tehdään muokataan rivi

INTERFACESv4=""

muotoon

INTERFACESv4="enp2s0"

Pidetään mielessä että enp2s0 on nimenomaan sisäverkon laite. Seuraavaksi asennetaan tor käskyllä apt-get install tor ja lisätään /etc/tor/torrc-tiedostoon seuraavat rivit

Log notice file /var/log/tor/notices.log
VirtualAddrNetwork 10.192.0.0/10
AutomapHostsSuffixes .onion,.exit
AutomapHostsOnResolve 1
TransPort 192.168.42.1:9040
DNSPort 192.168.42.1:53

Netistä löytää vielä vanhoja TransListenAddress- ja DNSListenAddress-asetuksia mutta ne on poistettu käytöstä ja niiden tiedot tulee nykyään TransPort- ja DNSPort-yhteyteen. Lopulta luodaan tor-lokitiedosto käskyillä touch /var/log/tor/notices.log, chown debian-tor /var/log/tor/notices.log ja chmod 644 /var/log/tor/notices.log. Minimaalinen palomuurikonffaus luodaan tallentamalla seuraava tiedosto /etc/iptables-torproxy.conf-nimisenä:

# Generated by iptables-save v1.8.9 (nf_tables) on Thu Apr 18 23:22:16 2024
*filter
:INPUT DROP [219:20442]
:FORWARD DROP [0:0]
:OUTPUT DROP [1266:95320]
-A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A INPUT -s 192.168.42.0/24 -d 192.168.42.1/32 -p tcp -m tcp --dport 9040 -j ACCEPT
-A INPUT -s 192.168.42.0/24 -d 192.168.42.1/32 -p udp -m udp --dport 53 -j ACCEPT
-A OUTPUT -s 192.168.42.1/32 -d 192.168.42.0/24 -p tcp -m tcp --sport 9040 -j ACCEPT
-A OUTPUT -s 192.168.42.1/32 -d 192.168.42.0/24 -p udp -m udp --sport 53 -j ACCEPT
-A OUTPUT -s 192.168.122.152/32 -d 192.168.122.1/32 -p tcp -m tcp --sport 22 -j ACCEPT
-A OUTPUT -m owner --uid-owner 106 -j ACCEPT
COMMIT
# Completed on Thu Apr 18 23:22:16 2024
# Generated by iptables-save v1.8.9 (nf_tables) on Thu Apr 18 23:22:16 2024
*nat
:PREROUTING ACCEPT [30:7663]
:INPUT ACCEPT [356:25004]
:OUTPUT ACCEPT [304:20876]
:POSTROUTING ACCEPT [2:120]
-A PREROUTING -i enp2s0 -p udp -m udp --dport 53 -j REDIRECT --to-ports 53
-A PREROUTING -i enp2s0 -p tcp -m tcp --tcp-flags FIN,SYN,RST,ACK SYN -j REDIRECT --to-ports 9040
COMMIT
# Completed on Thu Apr 18 23:22:16 2024

Nämä iptables-säännöt ovat kattavammat ja tämän jälkeen sisäverkossa on auki vain portit 53 (DNS) ja 9040 (tor). Sopii myös huomioida että nämä iptables-säännöt on tehty Debianilla ja tässä tapauksessa käyttäjä 106 on debian-tor. Muissa jakeluissa voi olla toisin. Sisäverkon laite pitää konffata. Avataan /etc/network/interfaces ja lisätään siihen rivit:

allow-hotplug enp2s0
iface enp2s0 inet static
 address 192.168.42.1
 netmask 255.255.255.0
up iptables-restore < /etc/iptables-torproxy.conf

Jälleen kerran on enp2s0 se sisäverkon laite. Tässä vaiheessa voi avata /etc/sysctl.conf-tiedosto ja varmustutaan siitä että asetus net.ipv4.ip_forward=1 on kommentoitu pois. Sisäkoneen ei kuulu päästä suoraan nettiin. Lopulta tallennetaan kaikki, uudelleenkäynnistetään proxy ja avataan sisäkoneesta osoite https://check.torproject.org.

v  k  m
Palvelin
 Ylläpito  SSH | Tietoturva | Käyttäjien hallinta | Systemd | iptables | Security-Enhanced Linux | AppArmor
 Palvelintyypit  Web-palvelin | Sähköposti | Tietokanta | NFS | Samba
 Komentorivi  Komentorivin perusteet | Komentorivikomennot | Bash-skriptaus
 Tekstieditoreja  nano | vi | emacs
Palvelin-luokka