Pred par tyzdnami som narazil na problem, kedy som potreboval niektore sluzby na serveri povolit len z urcitych GeoIP lokacii.
Existuju v zasade 3 moznosti:
Ako prve som chcel implementovat prvu moznost, no kedze som primarne potreboval ochranit takto napr SSH pristup, coskoro som moznost 1 zavrhol.
V mojej malej serverovni kde mam server, zakladny FW riesi Mikrotik, na ktorom je prilis komplikovane riesit (nevravim ze nemozne) zlozitejsie FW rules, hlavne ak ide o GeoIP. Samozrejme je mozne definovat address listy atp, ale ich udrzba bola na moj vkus prilis komplikovana, takze krok 2 (v tom okamihu) padal tiez.
Zostala teda moznost riesit to priamo na masine. Dany stroj je UBUNTU server 16.04, takze tu ukazem, ako to riesit na danej platforme:
Ako prve budeme potrebovat dane iptables rules niekte ukladat a restorovat ich:
santa@santa-vyuka-machine:~$ sudo apt-get install iptables-persistent
Dalej budeme potrebovat xtables plugin do itables, a podporne moduly pre pracu s CSV v prele
santa@santa-vyuka-machine:~$ sudo apt-get install xtables-addons-common santa@santa-vyuka-machine:~$ sudo apt-get install libtext-csv-xs-perl unzip
Dalej si vytvorime script pomocou sudo vi /etc/cron.daily/update_geoip.sh ktory bude obsahovat:
#!/bin/sh cd /tmp /usr/lib/xtables-addons/xt_geoip_dl /usr/lib/xtables-addons/xt_geoip_build -D /usr/share/xt_geoip *.csv
Nasledne zmenime opravnenia
santa@santa-vyuka-machine:~$ sudo chmod 750 /etc/cron.daily/update_geoip.sh
Ked si dany script prvy krat manualne spustime, aktualizuju sa jednotlive IP ranges v databaze s tym, ktore patria ku ktorej krajine…
santa@santa-vyuka-machine:~$ sudo /etc/cron.daily/update_geoip.sh --2016-10-03 19:11:38-- http://geolite.maxmind.com/download/geoip/database/GeoIPv6.csv.gz Prevádza sa geolite.maxmind.com (geolite.maxmind.com) na IP adresu... 104.16.38.47, 104.16.37.47, 2400:cb00:2048:1::6810:262f, ... Pripájanie k geolite.maxmind.com (geolite.maxmind.com)|104.16.38.47|:80... pripojené. HTTP požiadavka odoslaná, čakám na odpoveď... 200 OK Dĺžka: 1300354 (1,2M) [application/octet-stream] Ukladá sa do: „GeoIPv6.csv.gz“ GeoIPv6.csv.gz 100%[====================================================================================================>] 1,24M 4,53MB/s in 0,3s 2016-10-03 19:11:38 (4,53 MB/s) - „GeoIPv6.csv.gz“ uložené [1300354/1300354] --2016-10-03 19:11:38-- http://geolite.maxmind.com/download/geoip/database/GeoIPCountryCSV.zip Použije sa existujúce spojenie s geolite.maxmind.com:80. HTTP požiadavka odoslaná, čakám na odpoveď... 200 OK Dĺžka: 2132864 (2,0M) [application/zip] Ukladá sa do: „GeoIPCountryCSV.zip“ GeoIPCountryCSV.zip 100%[====================================================================================================>] 2,03M 5,84MB/s in 0,3s 2016-10-03 19:11:38 (5,84 MB/s) - „GeoIPCountryCSV.zip“ uložené [2132864/2132864] UKONČENÉ --2016-10-03 19:11:38-- Celkový čas: 0,7s Stiahnutých: 2 súborov, 3,3M za 0,6s (5,26 MB/s) Archive: GeoIPCountryCSV.zip inflating: GeoIPCountryWhois.csv 172010 entries total 0 IPv6 ranges for A1 Anonymous Proxy 31 IPv4 ranges for A1 Anonymous Proxy 0 IPv6 ranges for A2 Satellite Provider 37 IPv4 ranges for A2 Satellite Provider ........................ 10 IPv6 ranges for ZW Zimbabwe 63 IPv4 ranges for ZW Zimbabwe santa@santa-vyuka-machine:~$
A teraz je cas zacat pridavat rules:
santa@santa-vyuka-machine:~$ sudo netfilter-persistent save run-parts: executing /usr/share/netfilter-persistent/plugins.d/15-ip4tables save run-parts: executing /usr/share/netfilter-persistent/plugins.d/25-ip6tables save santa@santa-vyuka-machine:~$ sudo /etc/iptables/rules.v4
Upravime podla nasledujucich pravidiel, ak chceme povolit napr len SSH z CZ a SK ip ranges… (je tam aj vysledok fail2ban pre ssh…
# Generated by iptables-save v1.6.0 on Mon Oct 3 19:21:49 2016 *filter :INPUT DROP :FORWARD ACCEPT :OUTPUT ACCEPT :f2b-sshd - [0:0] -A INPUT -i lo -j ACCEPT -A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT # fail2ban -A INPUT -p tcp -m multiport --dports 22 -j f2b-sshd # sem sa vrati fail2ban ak je vsetko ok.... -A f2b-sshd -j RETURN # povolime SSH z CZ a SK ip ranges... -A INPUT -d 123.123.123.321/32 -p tcp -m geoip --source-country CZ -m tcp --dport 22 -j ACCEPT -A INPUT -d 123.123.123.321/32 -p tcp -m geoip --source-country SK -m tcp --dport 22 -j ACCEPT COMMIT # Completed on Mon Oct 3 19:21:49 2016
Tak toto je cca cesta ako to riesit na UBUNTU 16.04 priamo… Nabuduce si snad ukazeme, ako to riesit na urvoni centralneho FW. Budem rad, ak Vam toto posluzi ako inspiracia, pripadne podnet k diskusii.
ako potom riesis dostupnost klientom z SK/CZ z IP rozsahov, ktore su "kupene" pre SK/CZ providera, realne su routovane na/zo SK/CZ, ale formalne patria do ineho GeoIP range?
Jednoduše neřeší, stejně jako všichni ostatní, kteří používají takováto zhovadilá řešení...
Dobry den,
ake riesenie prosim odporucate? Uvazujem o filtracii na zaklade geoip, nakolko niektore sluzby potrebujem mat dostupne lokalne, z jednej oblasti.. Niektore sluzby nemusia byt predsa "zbytocne" exponovane sietam, ktore sluzbu nebudu nikdy legitimne potrebovat a su zajimave iba pre utocnikov.
Vdaka
V pripade, ze dany "nakup" prebehol standardne, pre dany IP range je zmena zaznacena vo WhoIs databaze, co by malo byt odzrkadlene v zaznamoch v GeoIPCountryWhois.csv
Aby dochadzalo k refreshu udajov z GeoIP databazy a z Whois zaznamov, je tam script /etc/cron.daily/update_geoip.sh
Samozrejme nic nie je 100%, urcite sa najdu "podrukou" routovane range, ku ktorym nie je regulerny zaznam vo Whois databaze, holt, na toto som zatial nenasiel riesenie.
ano, cronovy refresh je "standardne riesenie", skor ma zaujimalo ci sa zaoberas tymi okrajovymi nestastnikmi, ktorym to a) zacne fungovat az po update GeoIP DB resp. za b) sa ich IP nikdy do nejakeho GeoIP updatu nedostane.
Taketo veci mozes riesit pomocou modulu set....
ipset --create vynikmy nethash
ipset --add vynikmy 10.0.0.0/8
ipset --add vynikmy 192.168.0.0/16
iptables -A INPUT -d 123.123.123.321/32 -p tcp -m tcp --dport 22 -m set --set vynikmy src -j ACCEPT