# Run service that spits out an unbound-compatible blocklist of websites, # as mandated by polish telecommunications law. # # https://sip.lex.pl/akty-prawne/dzu-dziennik-ustaw/gry-hazardowe-17581037/art-15-f # Dz.U.2019.847 t.j. # Art. 15f. [Rejestr domen służących do oferowania gier hazardowych niezgodnie z ustawą] # 5. Przedsiębiorca telekomunikacyjny świadczący usługi dostępu do sieci # Internet jest obowiązany do: # 1) nieodpłatnego uniemożliwienia dostępu do stron internetowych # wykorzystujących nazwy domen internetowych wpisanych do Rejestru # poprzez ich usunięcie z systemów teleinformatycznych przedsiębiorców # telekomunikacyjnych, służących do zamiany nazw domen internetowych na # adresy IP, nie później niż w ciągu 48 godzin od dokonania wpisu do # Rejestru; # 2) nieodpłatnego przekierowania połączeń odwołujących się do nazw domen # internetowych wpisanych do Rejestru do strony internetowej prowadzonej # przez ministra właściwego do spraw finansów publicznych, zawierającej # komunikat, skierowany do odbiorców usługi dostępu do Internetu # obejmujący w szczególności informacje o lokalizacji Rejestru, wpisaniu # szukanej nazwy domeny internetowej do tego Rejestru, listę podmiotów # legalnie oferujących gry hazardowe na terytorium Rzeczypospolitej # Polskiej, a także powiadomienie o grożącej odpowiedzialności # karno-skarbowej uczestnika gier urządzanych wbrew przepisom ustawy; # 3) nieodpłatnego umożliwienia dostępu do stron internetowych # wykorzystujących nazwy domen wykreślonych z Rejestru, nie później niż w # ciągu 48 godzin od wykreślenia nazwy domeny internetowej z Rejestru. { config, pkgs, lib, ... }: with lib; let rshUnbound = pkgs.buildGoModule { pname = "rsh-unbound"; version = "20200926"; src = pkgs.fetchFromGitHub { owner = "q3k"; repo = "rsh-unbound"; rev = "31f8975d30a301fdf6f1d445826ebcd671ae07a3"; sha256 = "sha256-twI9VzPLBgztdccDgB29lJG7ekwpjr1eh27nR5F/TMA="; }; vendorSha256 = "sha256-A8yHaqSWHhvNmGrk6C6XOVYfVaFbiPmKqglg6gImwWM="; }; cfg = config.hscloud.rsh; in { options.hscloud.rsh = with types; { enable = mkOption { type = bool; default = false; description = "Enable the RSH-Unboudn service."; }; out = mkOption { type = str; default = "/var/lib/rsh.conf"; description = "Output file for generated unbound config."; }; register = mkOption { type = str; description = "URL of blocklist register."; default = "https://hazard.mf.gov.pl/api/Register"; }; }; config = mkIf cfg.enable { services.unbound.settings.server.include = [ cfg.out ]; systemd.services.rsh = { wantedBy = [ "multi-user.target" "unbound.service" ]; serviceConfig = { Type = "simple"; ExecStartPre = "${pkgs.coreutils}/bin/touch ${cfg.out}"; ExecStart = "${rshUnbound}/bin/rsh-unbound -output ${cfg.out} -register_endpoint ${cfg.register}"; Restart = "always"; RestartSec = "10"; }; }; }; }