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:
Kui teeme lahti pordi 22 ja meil on see edasi suunatud ssh serveri teenusele, siis võime näha logidest umbes sellist vaatepilti:
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:
Samuti võime testimiseks installida 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.
Käivitan ruuteris:
netcat -l -p 8080
Proovin Eestis paiknevast masinast:
Sama Inglismaal paiknevast masinast:
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.
Proovime nüüd uuesti. Kui meil on kõik õigesti, siis peaksime endiselt Eestist ligi pääsema, kuid Inglismaalt enam mitte:
Sama Inglismaal paiknevast masinast:
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/516504/iptables-to-allow-traffic-from-one-country-only