{"id":769,"date":"2025-11-08T21:02:01","date_gmt":"2025-11-08T20:02:01","guid":{"rendered":"https:\/\/activum24.pl\/?p=769"},"modified":"2025-11-27T21:28:35","modified_gmt":"2025-11-27T20:28:35","slug":"automatyzacja-npm-access-list","status":"publish","type":"post","link":"https:\/\/activum24.pl\/index.php\/2025\/11\/08\/automatyzacja-npm-access-list\/","title":{"rendered":"Automatyzacja &#8211; NPM &#8211; Access List"},"content":{"rendered":"\n<p>W przypadku gdy w zdalnej lokalizacji znajduje si\u0119 modem LTE, adres IP przydzielany przez operatora jest cz\u0119sto dynamiczny i mo\u017ce zmienia\u0107 si\u0119 przy ka\u017cdym po\u0142\u0105czeniu. Standardowo dost\u0119p do serwis\u00f3w udost\u0119pnianych w centrali, ograniczony jest poprzez mechanizmy access lists. Dodanie IP do Access List w Nginx Proxy Manager umo\u017cliwia czasowy dost\u0119p z tej lokalizacji, jednak trzeba mie\u0107 \u015bwiadomo\u015b\u0107, \u017ce po zmianie IP przez operatora konieczna b\u0119dzie ponowna aktualizacja listy. Skrypt automatyzuj\u0105cy proces sprawdzania, usuni\u0119cia poprzedniego oraz dodania nowego adresu IP do bazy, mo\u017ce by\u0107 uruchamiany cyklicznie (cron) lub wed\u0142ug potrzeb, zapewniaj\u0105c ci\u0105g\u0142o\u015b\u0107 dost\u0119pu z mobilnych lub nietrwa\u0142ych po\u0142\u0105cze\u0144 LTE.<\/p>\n\n\n\n<p>Opr\u00f3cz aktualizacji nowego adresu IP w bazie danych, wymagane s\u0105 tak\u017ce zmiany w plikach conf dla odpowiednich host\u00f3w, dla kt\u00f3rych u\u017cywana jest linia allow &lt;adres IP>.<\/p>\n\n\n\n<p>Dzi\u0119ki temu rozwi\u0105zaniu, bez dzia\u0142ania administratora, po\u0142\u0105czenia zdalne, uzyskuj\u0105 dost\u0119p do serwis\u00f3w w centrali, pomimo zmieniaj\u0105cego si\u0119 adresu IP (np. z modemu LTE).<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>#!\/bin\/bash\nREMOTE=\".....................\"\nACCESS_LIST_ID=\"1\"\nSQLITE_PATH=\"\/data\/database.sqlite\"\nSAVE_IP_FILE=\"\/data\/last_remote_ip.txt\"\nCONFIG_DIR=\"\/data\/nginx\/proxy_host\"\n\n\nIP=$(ssh $REMOTE \"curl -s --max-time 8 ifconfig.me\")\n&#91;&#91; -z \"$IP\" || \"$IP\" =~ &#91;^0-9.] ]] &amp;&amp; { echo \"Nie pobrano IP\"; exit 1; }\n\necho \"Zdalny Nowy IP: $IP\"\n\nLAST_IP=$(cat \"$SAVE_IP_FILE\")\n\necho \"Zdalny Stary IP: $LAST_IP\"\n\nif &#91; -f \"$SAVE_IP_FILE\" ]; then\n    if &#91; \"$LAST_IP\" != \"$IP\" ]; then\n        cp $SQLITE_PATH $SQLITE_PATH.backup\n        sqlite3 \"$SQLITE_PATH\" \\\n        \"DELETE FROM access_list_client WHERE access_list_id=$ACCESS_LIST_ID AND address='$LAST_IP';\"\n        echo \"Stary IP $LAST_IP usunity.\"\n\n        EXISTS=$(sqlite3 \"$SQLITE_PATH\" \"SELECT COUNT(*) FROM access_list_client WHERE access_list_id=$ACCESS_LIST_ID AND address='$IP';\")\n\n        if &#91; \"$EXISTS\" -eq 0 ]; then\n             # 3. Dodaj jeli brak\n          sqlite3 \"$SQLITE_PATH\" \\\n              \"INSERT INTO access_list_client (access_list_id, address, directive, meta, created_on, modified_on) \\\n              VALUES ($ACCESS_LIST_ID, '$IP', 'allow', '{}', datetime('now'), datetime('now'));\"\n          echo \"IP $IP dodane do access_list_id $ACCESS_LIST_ID.\"\n        else\n          echo \"IP $IP ju\u017c istnieje na access list $ACCESS_LIST_ID.\"\n        fi\n\n        echo \"Szukam i podmieniam stare IP ($LAST_IP) na nowe ($IP)...\"\n        for file in \"$CONFIG_DIR\"\/*.conf; do\n            &#91; ! -f \"$file\" ] &amp;&amp; continue\n            if grep -q \"allow.*$LAST_IP\" \"$file\"; then\n                echo \"   podmieniam w: $(basename \"$file\")\"\n\n                sed \\\n                    -e \"s|allow $LAST_IP;|allow $IP;|g\" \\\n                    -e \"s|allow $LAST_IP\/32;|allow $IP\/32;|g\" \\\n                    -e \"s|allow $LAST_IP |allow $IP |g\" \\\n                    \"$file\" > \"$file.tmp\" &amp;&amp; mv \"$file.tmp\" \"$file\"\n            fi\n        done\n        echo \"$IP\" > \"$SAVE_IP_FILE\"\n\n        sudo nginx -s reload\n    else\n      echo \"IP zgodnie - nic nie robie\"\n    fi\nfi<\/code><\/pre>\n\n\n\n<p><\/p>\n","protected":false},"excerpt":{"rendered":"<p>W przypadku gdy w zdalnej lokalizacji znajduje si\u0119 modem LTE, adres IP przydzielany przez operatora jest cz\u0119sto dynamiczny i mo\u017ce zmienia\u0107 si\u0119 przy ka\u017cdym po\u0142\u0105czeniu. Standardowo dost\u0119p do serwis\u00f3w udost\u0119pnianych w centrali, ograniczony jest poprzez mechanizmy access lists. Dodanie IP do Access List w Nginx Proxy Manager umo\u017cliwia czasowy dost\u0119p z tej lokalizacji, jednak trzeba&hellip;&nbsp;<\/p>\n","protected":false},"author":1,"featured_media":770,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"neve_meta_sidebar":"","neve_meta_container":"","neve_meta_enable_content_width":"","neve_meta_content_width":0,"neve_meta_title_alignment":"","neve_meta_author_avatar":"","neve_post_elements_order":"","neve_meta_disable_header":"","neve_meta_disable_footer":"","neve_meta_disable_title":"","footnotes":""},"categories":[58],"tags":[166,72,124],"class_list":["post-769","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-software","tag-nginx","tag-proxmox","tag-proxy"],"_links":{"self":[{"href":"https:\/\/activum24.pl\/index.php\/wp-json\/wp\/v2\/posts\/769","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/activum24.pl\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/activum24.pl\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/activum24.pl\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/activum24.pl\/index.php\/wp-json\/wp\/v2\/comments?post=769"}],"version-history":[{"count":8,"href":"https:\/\/activum24.pl\/index.php\/wp-json\/wp\/v2\/posts\/769\/revisions"}],"predecessor-version":[{"id":786,"href":"https:\/\/activum24.pl\/index.php\/wp-json\/wp\/v2\/posts\/769\/revisions\/786"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/activum24.pl\/index.php\/wp-json\/wp\/v2\/media\/770"}],"wp:attachment":[{"href":"https:\/\/activum24.pl\/index.php\/wp-json\/wp\/v2\/media?parent=769"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/activum24.pl\/index.php\/wp-json\/wp\/v2\/categories?post=769"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/activum24.pl\/index.php\/wp-json\/wp\/v2\/tags?post=769"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}