Pordi suunamine turvalisemaks OpenWrt ruuteriga

05.03.2020

Ei ole just ebatavaline olukord, kus meil on vaja sisevõrgust mingi teenus kättesaadavaks teha avalikule internetile. Seda saab suhteliselt lihtsasti teha pordi suunamisega. Näiteks Cisco EPC3940 modemil näeb see välja selliselt:

Cisco EPC3940

Kui teeme lahti pordi 22 ja meil on see edasi suunatud ssh serveri teenusele, siis võime näha logidest umbes sellist vaatepilti:

ssh auth fail log

Kui nüüd ip aadresside haaval uurida, siis võime leida, et üritajaid on olnud Hiinast, Vietnamist, Lõuna-Koreast ja mujaltki.

Loomulikult tuleb tahtmine nende üritajate elu raskemaks teha ja need IP aadressid ära keelata. Tavalise ruuteri tarkvaras ei pruugi aga sellist võimalust olla. Õnneks on populaarses vabavaralises ruuteri tarkvaras OpenWrt see võimalik. Sellepärast tasuks enne uue ruuteri ostmist uurida, kui hästi see OpenWrt OS-i toetab. Näiteks üks populaarne ruuter on TP-LINK Wireless Access Point Archer C7 AC1750 Dual Band Gigabit wireless Router

Selle asemel, et hoida ajakohasena pikka nimekirja, kust me ühendusi ei soovi, võime teha ka nn "valge nimekirja" IP-aadressidest, kust me soovime ligipääsu lubada.

Mängime nüüd läbi olukorra, kus tahame lubada ligipääsu vaid Eesti IP aadressidelt ja mitte kusagilt mujalt.

Esiteks on meil vaja nimekirja Eesti IP aadressruumist. Abiks on selline pisike tööriist nagu get-ripe-ips. See on bash skript, mis laadib aadressid json vormingus alla ja salvestab tekstifailina. On ka teisi võimalusi. Vaatame siin vaid ühte.

$ git clone https://github.com/mivk/ip-country.git
$ chmod +x get-ripe-ips
$ ./get-ripe-ips -c ee -o . -s 1800
./get-ripe-ips: line 74: hash: jq: ei leitud
Cannot find the jq Json processor. Install it with 'apt install jq' or similar
$ sudo apt install jq
$ ./get-ripe-ips -c ee -o . -s 1800
$ head ipv4_ee
2.57.220.0/22
2.59.164.0/22
5.34.240.0/21
5.44.184.0/21
5.45.112.0/21
5.45.120.0/21
5.101.112.0/20
5.101.176.0/20
5.153.232.0/21
5.157.0.0/18

Selliselt on meil IP aadressid failis ipv4_ee olemas.

Vaikimisi ei ole ruuteris installeeritud ipset utiliiti, kuid selle võib installeerida veebiliidese abil:

openwrt-ipset

Samuti võime testimiseks installida netcat: openwrt-netcat

Kopeerin selle faili ruuteris asukohta /usr/opt/geoip-ee/ipv4_ee.

Muudan ruuteris faili /etc/firewall.user:

root@OpenWrt:~# cat /etc/firewall.user
# This file is interpreted as shell script.
# Put your custom iptables rules here, they will
# be executed with each firewall (re-)start.

# Internal uci firewall chains are flushed and recreated on reload, so
# put custom rules into the root chains e.g. INPUT or FORWARD or into the
# special user chains, e.g. input_wan_rule or postrouting_lan_rule
ipset create ipv4_ee hash:net
while read network ; do
    ipset add ipv4_ee $network;
    done < /usr/opt/geoip-ee/ipv4_ee

Teeme ruuterile restardi. Seejärel logime sisse ja vaatame, kas igal käivitamisel tehakse ipset nimega ipv4_ee. Seda saame vaadata käsklusega:

ipset list ipv4_ee

Kui ilmub nimekiri IP aadressidega, siis on sellega korras.

Proovime kõigepealt pordi suunamist ilma ip aadresside piiranguteta.

openwrt-port-fw1 openwrt-port-fw1a

Käivitan ruuteris:

netcat -l -p 8080

Proovin Eestis paiknevast masinast:

connect-test-eesti1

listen-test-eesti1

Sama Inglismaal paiknevast masinast:

connect-test-uk1

listen-test-uk1

Nagu näha, pordi suunamine töötab ja see on ligipääsetav igalt poolt maailmas.

Paneme nüüd piirangu peale, lisades tulemüüris Extra arguments reale: -m set --match-set ipv4_ee src.

openwrt-extra-arguments

Proovime nüüd uuesti. Kui meil on kõik õigesti, siis peaksime endiselt Eestist ligi pääsema, kuid Inglismaalt enam mitte:

connect-test-eesti1

listen-test-eesti2

Sama Inglismaal paiknevast masinast:

connect-test-uk2

Mida öelda kokkuvõtteks? Kui meil on kasutada OpenWrt ruuter, siis tasub ligipääs IP aadresside järgi ära seadistada. Nagu nägime, ei olegi seda nii raske teha.

Linke:

https://openwrt.org/toh/tp-link/archer-c5-c7-wdr7500

https://unix.stackexchange.com/questions/502907/how-to-block-countries-iptables-or-firewalld-by-geolite2-mmdb/527504#527504

https://unix.stackexchange.com/questions/516504/iptables-to-allow-traffic-from-one-country-only