4. Projekt Atropa: Automaticé spustenie webu a publikaci prostredníctvom nginx

Loading

Raspberry Pi Hacks – Facebook – V predchádzajúcich dieloch sme si ukázali postup, ako na Raspberry Pi rozchodiť ASP.NET a napísať jednoduchú aplikáciu. Web server sme ale museli spustiť ručne a ide o interný server Kestrel. V tomto pokračovaní sa pozrieme na to, ako spustiť aplikáciu ako démona (službu) a vypublikovat ju pomocou nginx.

Automatické spustenie Kestrelu pomocou init.d

Na Windows sa im hovorí, že sú to služby, na UNIX-like systémoch ako démoni. Programy, ktoré štartujú automaticky a pri spustení beží v pozadí, aj keď nie je nikto interaktívne prihlásený. Ako prvý potrebujeme zariadiť, aby sa Kestrel, web server na ktorom beží ASP.NET, správal práve takto.

Môj návod vychádza z postupu, ktorý opísal Ivan Derevianko na svojom blogu. Jeho návod však s najnovšou verziou ASP.NET nefunguje, pretože sa zmenila syntax, s akou sa DNX volá. Mojou upravenú verziu nájdete na GitHub.

Začnite tým, že si mnou upravenú verziu stiahnete z GitHub nasledujúcim príkazom (dôležité: aby sa mi to vošlo na stránku, pridal som do URL medzeru (pred slovo raw); pred spustením ju odstráňte):

wget “https://gist.githubusercontent.com/ridercz/97e01a4c67c045eb9d46/ raw / adb69b6fc219bf1a6b6a3dd8869512250afaf6c5 / kestrel_service.sh”

Potom si súbor kestrel_service.sh otvorte v editore Nano príkazom nano kestrel_service.sh. Upravte hodnoty, ktoré sú vo <špicatých zátvorkách>, pričom zátvorky samotnej odstráňte. Pre našu demo aplikáciu z predchádzajúceho pokračovania nastavte nasledujúce hodnoty:

  • <SCRIPT_NAME> je logický názov “služby”. V našom prípade kestrel_wifigate. Ak by ste na jednom počítači chceli prevádzkovať viac webov, musíte každý z nich zaregistrovať týmto postupom zvlášť pod iným menom.
  • <WWW_USER> je názov užívateľa, pod ktorým služba pobeží. V našom prípade je to pi. Z bezpečnostného hľadiska nie je dobrý nápad rozbehnúť web server pod týmto užívateľom, ale pre naše účely to zatiaľ postačí.
  • <PATH_TO_RUNTIME> je cesta k aktuálnej verzii DNX. V ceste používam skôr definovanú premennú WWW_USER, cesta pre betu 5 je /home/$WWW_USER/.dnx/runtimes/dnx-mono.1.0.0-beta5/bin/dnx.
  • <APPROOT> je cesta k roote aplikácie, v našom prípade teda / home / $ WWW_USER / www / wifigate.

Celý súbor bude po úpravách vyzerať nasledovne:

Ukončite Nano s uložením zmien (Ctrl + X, Y, Enter). Teraz je potrebné pridať náš skript do init.d, čo je infraštruktúra, ktorá sa stará práve o spúšťanie služieb. Urobte to nasledujúcimi príkazmi:

sudo cp kestrel_service.sh /etc/init.d/kestrel_wifigate

sudo chmod +x /etc/init.d/kestrel_wifigate

Reklamy

Prvým príkazom (cp) skopírujete súbor do adresára /etc/init.d a premenujete ho na kestrel_wifigate (bez prípony). Druhým príkazom (chmod) súbor označíte ako vykonateľný. Na Linuxe sa na označenie spustiteľných súborov nepoužívajú prípony (.exe atď.), Ale špeciálna príznak, ktorý týmto príkazom nastavíte.

Príkazom sudo service kestrel_wifigate štart službu naštartujete (môžete tiež miesto štart využiť príkazy stop a reštart). Ak všetko dopadlo dobre, chvíľu po spustení služby nájdete na adrese serveri a porte 5004 ukážkový ASP.NET 5 web. Ak všetko nedopadlo dobre, službu zastavte a pozrite sa do súboru ~ / www / wifigate / kestrel.log, kde nájdete, na čo si Kestrel sťažuje.

Ak chcete, aby služba štartovala automaticky po rebootu (nejspíš áno), nastavte to príkazom sudo update-rc.d kestrel_wifigate defaults. Ak budete chcieť autostart zrušiť, vypnite ho príkazom sudo update-rc.d kestrel_wifigate remove.

Reštartujte počítač príkazom sudo reboot a vyskúšajte, že po naštartovaní služba automaticky nabehne.

Použitie nginx

V zásade by sme mohli nakonfigurovať Kestrel tak, aby počúval nie na porte 5004, ale na porte 80 a vyhlásiť, že máme hotovo. Avšak Kestrel nie je k takému nasadenie úplne vhodný, chýba mu rad obvyklých funkcií (ako napríklad schopnosť nadviazať na jeden port niekoľko virtuálnych webov) a navyše by musel bežať po doprávněním roota, aby mohol byť naviazaný na port nižšiu, než 1024. Preto, ak chceme web vypublikovat do Internetu, použijeme pre to nginx. To je program, ktorý slúži (okrem iného) ako reverzné proxy, dá sa porovnať napríklad s Application Request Routing (ARR) v IIS.

Ako na to, nám opäť poradia Druss, jeho návod som len mierne upravil pre naše potreby a pridal pár vysvetliviek. Nginx nainštalujete nasledujúcimi príkazy:

sudo apt-get install nginx -y

sudo update-rc.d nginx defaults

sudo service nginx start

Prvý príkaz nginx nainštaluje, druhý nastaví automatické spúšťanie po štarte pomocou init.d a tretiu službu naštartuje. Keď sa teraz pozriete z webového prehliadača na adresu Raspberry Pi s východiskovým portom (80), uvidíte hlášku Welcome to nginx !:

Reklamy

My však nechceme publikovať statický obsah (uložený mimochodom v adresári / usr / share / nginx / www /), ale chceme nginx použiť ako proxy pre Kestrel. Preto musíme upraviť jeho konfiguráciu.

Konfigurácia virtuálnych serverov Nginx je uložená v dvoch zložkách:

  • / Etc / nginx / sites-available obsahuje konfiguráciu jednotlivých virtuálnych web serverov. Nie všetky sú aktívne, je to zoznam konfigurácií, ktoré sú k dispozícii.
  • / Etc / nginx / sites-enabled potom obsahuje Symlink (odkazy, zástupca) na tie súbory zo sites-available, ktoré sa majú skutočne použiť.

Po inštalácii je v sites-available vytvorený súbor default, ktorý spôsobil, že sa zobrazila hláška “Welcome to nginx!”. Mohli by sme ho editovať, ale jednoduchšie bude vytvoriť nový súbor, ktorý bude obsahovať iba konfiguráciu, ktorú potrebujeme. Súbor sa bude volať / etc / nginx / sites-available / wifigate a vytvoríte ho pomocou editora Nano príkazom sudo nano / etc / nginx / sites-available / wifigate. Potom doň zadajte nasledujúci text:

server {
        listen 80;
        location / {
                proxy_set_header    Host $host;
                proxy_set_header    X-Real-IP   $remote_addr;
                proxy_set_header    X-Forwarded-For $proxy_add_x_forwarded_for;
                proxy_pass  http://127.0.0.1:5004;
        }
}

Aktualizujeme konfiguráciu Nginx nasledujúcimi príkazmi:

sudo rm /etc/nginx/sites-available/default
sudo ln -s /etc/nginx/sites-available/wifigate /etc/nginx/sites-enabled/wifigate
sudo service nginx restart

Prvním příkazem odstraníme symlink na výchozí konfiguraci, čímž ji vypneme. Druhým příkazem uděláme symlink na naši vlastní konfiguraci, čímž ji zapneme. Posledním příkazem restartujeme nginx, čímž se změny provedou.

Když se nyní podíváte na adresu Raspberry Pi z webového prohlířeče na výchozím portu (80), uvidíte ukázkový ASP.NET 5 projekt.

Kam sme sa dostali

V priebehu doterajších dielov seriálu sme si na minipočítač Raspberry Pi nainštalovali Raspbian Linux, rozbehli na ňom ASP.NET 5 a vypublikovali aplikáciu pomocou Nginx. Máme univerzálnu platformu, na ktorej môže bežať akákoľvek ASP.NET 5 aplikácie, na zariadenie veľkosti balíčka kariet a s cenou okolo tisícky.

V ďalšom pokračovaní si ukážeme, ako z Raspberry Pi urobiť WiFi Honeypot s captive portálom, ako napísať patričný portál a ako sa podobným útokom brániť.

Odkaz na nasledujúci – budúci článok.

  1. Projekt Artropa: Ako vyrobiť z Raspberry Pi zlé zariadenie s NETom
  2. Projekt Atropa: Sprevádzkovanie Raspberry Pi a Raspbian Linuxu
  3. Projekt Atropa: Ako spojazdniť ASP.NET 5 na Linuxe
  4. Projekt Atropa: Automaticé spustenie webu a publikaci prostredníctvom nginx
  5. Projekt Atropa: Vytvárame Honeypot
  6. Projekt Atropa: Vytvárame captive portál
  7. Projekt Atropa: Ako sa brániť?
Reklamy

Pridaj komentár

Vaša e-mailová adresa nebude zverejnená. Vyžadované polia sú označené *