Jak zpřístupnit ISPadmin jen z vaší sítě

Návod

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 Zabezpečení se čtyřmi povolenými adresami a zaškrtnutými porty
Nastavení / Syst. nastavení / Zabezpečení: adresy s povoleným HTTPS jsou podklad pro seznam.

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 SetEnvIf musí být v bloku <VirtualHost>, ne uvnitř <Directory>. Kdo tyto platby nepoužívá, řádky s ISPADMIN_CALLBACK vynechá.
  • 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

  1. Z povolené adresy se do ISPadminu přihlaste jako obvykle.
  2. Z nepovolené adresy, třeba z mobilu přes mobilní data, otevřete adresu systému. Má se zobrazit chyba 403 Forbidden.
  3. Otevřete Portál klienta. Má fungovat odkudkoliv.
  4. Ověřte výjimku pro certifikát. Na serveru vytvořte zkušební soubor:
    mkdir -p /data/support/ispadmin/new/www/.well-known/acme-challenge
    echo ok > /data/support/ispadmin/new/www/.well-known/acme-challenge/test
    Z nepovolené adresy otevřete http://vase-domena/.well-known/acme-challenge/test. Má se zobrazit ok. Pak soubor smažte.
  5. 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í.
Stránka Povolené IP adresy uživatele se dvěma adresami a aktivním zabezpečením
Povolené IP adresy uživatele: zabezpečení je aktivní, uživatel se přihlásí jen z kanceláře nebo z vnitřní sítě.

Č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 soubor ispadmin.conf vytvoří znovu s Require all granted. Předchozí verzi uloží vedle jako ispadmin.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řidejte Require 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.

Další z blogu

Celý blog