Jak zpřístupnit ISPadmin jen z vaší sítě
Přihlašovací stránka ISPadminu bývá vidět z celého internetu. Kdokoli na ni může zkoušet hesla nebo hledat slabá místa, i když vaši lidé pracují jen z kanceláře, přes VPN nebo z call centra. Tento návod ukazuje, jak ISPadmin zpřístupnit jen z adres, které určíte. Portál klienta zůstane pro vaše zákazníky dostupný jako dosud.
Postup platí pro ISPadmin 5 nainstalovaný na vlastním serveru. Potřebujete k serveru přístup s právy root.
Jak to funguje
ISPadmin běží na webovém serveru Apache. Systém a Portál klienta mají každý vlastní doménu a vlastní blok <VirtualHost> v konfiguraci. Omezení proto nastavíte jen pro doménu systému a Portál klienta se ho nedotkne. Na port 80 (HTTP) sahat nemusíte, jen přesměrovává na HTTPS.
Firewall v Nastavení / Syst. nastavení / Zabezpečení na to nestačí. Povoluje nebo zakazuje celé porty, takže by s portem 443 zavřel i Portál klienta.
1. Sepište adresy, ze kterých se do ISPadminu pracuje
Projděte, kdo a co do ISPadminu přistupuje:
- kancelář a pobočky (veřejné IP adresy),
- vnitřní síť a VPN, přes kterou se připojují technici v terénu,
- externí call centrum nebo účetní, pokud v ISPadminu pracují,
- server s vaším webem, pokud na něm máte formulář žádosti o službu napojený na ISPadmin,
- systémy, které volají API ISPadminu,
- veřejnou IP adresu samotného serveru ISPadminu,
- adresní rozsahy vašich zákazníků, pokud nabízíte SledovaniTV s přihlášením podle IP adresy. Stránky pro přihlášení otevírají zákazníci přímo ze své sítě a mají adresu systému.
Dobrým výchozím seznamem je tabulka v Nastavení / Syst. nastavení / Zabezpečení. Řádky se zaškrtnutým HTTPS (443) jsou adresy, kterým firewall ISPadminu povoluje HTTPS. Řádek s poznámkou Globálně platí pro všechny adresy, ten do seznamu nepatří.

Tabulka se do konfigurace Apache sama nepropisuje. Seznam z ní přepíšete ručně a při každé změně adres upravíte obojí.
2. Zálohujte konfiguraci
Konfigurace systému je v souboru /etc/apache2/sites-enabled/ispadmin.conf. Před úpravou si ho zazálohujte:
cp /etc/apache2/sites-enabled/ispadmin.conf /root/ispadmin.conf.bak-$(date +%Y%m%d)
3. Povolte jen vybrané adresy
V souboru najděte blok <VirtualHost *:443> s doménou systému (DocumentRoot "/data/support/ispadmin/new/www/"). V něm je <Directory /data/support/ispadmin/new/www/> s řádkem Require all granted. Upravte ho podle příkladu: Require all granted nahraďte seznamem adres z prvního kroku, nad blok přidejte řádek SetEnvIf a pod blok výjimku pro Let’s Encrypt:
SetEnvIf Request_URI "^/(paypal/notify|supercash/platba_sc\.php|billing-bank-kb-notification-endpoint/v[0-9]+/[A-Za-z0-9/_-]+)$" ISPADMIN_CALLBACK
<Directory /data/support/ispadmin/new/www/>
Options +ExecCGI
Options FollowSymLinks MultiViews
AllowOverride All
# ISPadmin jen z povolených adres
# kancelář
Require ip 192.0.2.10
# naše veřejné adresy
Require ip 198.51.100.0/24
# vnitřní síť a VPN
Require ip 10.0.0.0/8
# call centrum
Require ip 203.0.113.25
# oznámení o platbách z PayPalu, SuperCash a API Komerční banky
Require env ISPADMIN_CALLBACK REDIRECT_ISPADMIN_CALLBACK
</Directory>
# obnova certifikátu Let's Encrypt musí projít odkudkoliv
<Directory /data/support/ispadmin/new/www/.well-known/acme-challenge/>
Require all granted
</Directory>
Adresy v příkladu jsou ukázkové, použijte své. Jedna adresa se píše samostatně, celý rozsah s maskou (/24). Poznámku za znakem # pište vždy na samostatný řádek, za adresou ji Apache nepřijme. Má-li server i IPv6, doplňte také IPv6 rozsahy, například Require ip 2001:db8::/32.
K čemu jsou výjimky:
- Oznámení o platbách. PayPal, SuperCash a API Komerční banky posílají ISPadminu zprávy o platbách ze svých serverů, jejichž adresy předem neznáte. Výjimka pustí jen tyto konkrétní adresy URL. Ostatní stránky systému z nich nedostupné zůstanou. Řádek
SetEnvIfmusí být v bloku<VirtualHost>, ne uvnitř<Directory>. Kdo tyto platby nepoužívá, řádky sISPADMIN_CALLBACKvynechá. - Let’s Encrypt. Certifikát se obnovuje automaticky a ověřovací server Let’s Encrypt musí na váš server dosáhnout odkudkoliv. Bez výjimky by se certifikát přestal obnovovat a po vypršení platnosti by prohlížeče hlásily chybu.
4. Zkontrolujte a načtěte konfiguraci
apache2ctl configtest
systemctl reload apache2
Když configtest nevypíše Syntax OK, konfiguraci nenačítejte a opravte chybu, na kterou upozorní.
5. Vyzkoušejte, že to funguje
- Z povolené adresy se do ISPadminu přihlaste jako obvykle.
- Z nepovolené adresy, třeba z mobilu přes mobilní data, otevřete adresu systému. Má se zobrazit chyba 403 Forbidden.
- Otevřete Portál klienta. Má fungovat odkudkoliv.
- Ověřte výjimku pro certifikát. Na serveru vytvořte zkušební soubor:
Z nepovolené adresy otevřetemkdir -p /data/support/ispadmin/new/www/.well-known/acme-challenge echo ok > /data/support/ispadmin/new/www/.well-known/acme-challenge/testhttp://vase-domena/.well-known/acme-challenge/test. Má se zobrazitok. Pak soubor smažte. - Po prvních platbách zkontrolujte, že se párují jako dřív.
Další ochrana přímo v ISPadminu
Omezení v Apache chrání celý systém. V ISPadminu můžete navíc zabezpečit jednotlivé uživatele:
- Povolené IP adresy uživatele. V Nastavení / Administrátoři / Administrátoři klikněte u uživatele na ikonu zámku, přidejte adresy a klikněte na Aktivovat. Uživatel se pak přihlásí jen z nich, i kdyby se k přihlašovací stránce dostal. Hodí se pro účty s nejvyššími právy. Od verze 5.41 lze zadat i IPv6 adresy.
- Dvoufázové ověření. Ve stejném seznamu ve sloupci 2FA zvolte Zapnout 2FA. Při dalším přihlášení si uživatel musí nastavit aplikaci v telefonu a od té doby zadává i kód z ní.

Časté potíže
- Omezení po čase zmizelo. Skript
certificate.pl, kterým se nastavují domény a certifikáty, při instalaci certifikátu pro systém souborispadmin.confvytvoří znovu sRequire all granted. Předchozí verzi uloží vedle jakoispadmin.conf.acme.…. Po každém spuštění skriptu omezení doplňte znovu. Běžná automatická obnova certifikátu konfiguraci nemění. - Nefunguje formulář na webu nebo napojení přes API. Do seznamu chybí adresa serveru, který ISPadmin volá. Doplňte ji jako další řádek
Require ip. - Přestaly se párovat platby z platební brány. Brána posílá oznámení na adresu systému ze serveru, který není v seznamu. Zjistěte u poskytovatele brány adresy jeho serverů a doplňte je jako
Require ip, nebo se obraťte na naši podporu. - Zákazníci se nepřihlásí do SledovaniTV. V seznamu chybí jejich adresní rozsahy, viz první krok.
- Přestalo fungovat volání ze samotného serveru přes
https://localhost. Adresa 127.0.0.1 v seznamu není. Pokud ji potřebujete, přidejteRequire ip 127.0.0.1. - Zablokovali jste sami sebe. Přihlaste se na server přes SSH nebo konzoli, vraťte zálohu z kroku 2 a znovu načtěte Apache.
- Portál klienta hlásí 403. Zákazníci ho nejspíš otevírají přes adresu systému (
…/clientinterface/). Portál klienta potřebuje vlastní doménu.
Co dál
Další kroky k bezpečnějšímu provozu, heslovou politiku pro uživatele ISPadminu a bezpečnější Helpdesk popisujeme v článku Bezpečnost ISP po NIS2.

