Strona używa cookies (ciasteczek). Dowiedz się więcej o celu ich używania i zmianach ustawień. Korzystając ze strony wyrażasz zgodę na używanie cookies, zgodnie z aktualnymi ustawieniami przeglądarki.    X

Malinowy Serwer Domowy cz. 1 - Magiczny Przycisk

To już drugi wpis z serii o domowym malinowym serwerze. W poprzednim opisałem jak udostępnić Raspberry w świat. W tym wpisie chciałbym opisać jak przy pomocy Raspberry uruchomić inny wyłączony komputer w sieci LAN, a później jak zrobić stronę WWW z przyciskiem służącym do tego właśnie zadania.

Poprzedni wpis wywołał falę komentarzy dotyczących bezpieczeństwa tego rozwiązania, zarówno na Facebooku, na Malinowej grupie jak i pod samym tekstem na DP. Obecnie cały przychodzący ruch sieciowy przekierowywany jest po prostu na Malinkę. Nie jest na niej uruchomiony żaden firewall. Jedyne zabezpieczenia u mnie to zmienione hasła do pi oraz root-a, a dodatkowo na porcie 80 uruchomiony jest Apache z przyciskiem do uruchamiania komputera (do tej pory niezabezpieczony). Malinowy adres był publicznie podany we wpisie, a nazwę folderu ze skryptem podałem na IRC :) Nikt nie włączył mi w nocy komputera, w ogóle nikt poza mną go nie włączył przy pomocy tego skryptu mimo że kilka osób podziwiało przycisk :) Ludzie to są lenie, żeby nawet do crona nie dodać http://dom.olo-web.eu/wake/wake.php (przycisk jest pod http://dom.olo-web.eu/wake/, skrypt po prostu uruchamia kompa)... Kilka osób zarzuciło mi przekierowanie całości ruchu zamiast poszczególnych portów - firewall będzie, VPN też będzie. Na routery domowe (bo i głosy o tym że są one niebezpieczne i dzuuurawe się pojawiły, z czym się oczywiście zgadzam) niestety wpływu nie mam, wolnej karty WiFi na USB niestety też nie. Być może kupię i opisze jak zrobić router, choć tych opisów na necie pewnie trochę jest, ale zawsze można coś dodać - np. sniffowanie ruchu :)

1. Wake On Lan

1.0. Ale jak to wyłączony?

Od czasu powstania płyt głównych typu ATX, komputer nigdy nie jest całkowicie wyłączony. Po jego wyłączeniu pracuje zasilacz dostarczając jedno z napięć (5V), co umożliwia czuwanie niektórym elementom komputera. Włączenie komputera polega na wysłaniu sygnału do zasilacza, że ma zacząć dostarczać wszystkie napięcia do wszystkich elementów komputera. Takim sygnałem może być wciśnięcie przycisku "Power" na obudowie komputera, przerwanie wygenerowane modemem, zegar (jeśli ustawiliśmy taką opcję w BIOS), czy też odbiór specjalnego pakietu (Magic Packet) przez kartę sieciową. [ten akapit ukradłem z Wikipedii, proszę nie bijcie]

Większość dostępnych na rynku płyt głównych ze zintegrowaną kartą sieciową Ethernet wspiera mechanizm Wake On Lan. Sam WOL działa jedynie w sieciach Ethernet. Istnieje co prawda podobny standard dla sieci bezprzewodowych - Wake On WLAN, jednak nie jest on tak popularny. Praktycznie to nie spotkałem żadnego urządzenia wspierającego WOWLAN.

Działanie Wake On Lan polega właśnie na wysłaniu specjalnego magicznego pakietu. Pakiet (a w sumie to ramka bo karta sieciowa nie interpretuje formatu pakietu, segmentu ani PDU warstwy aplikacji) musi zawierać gdzieś w polu danych ciąg 6 powtarzających się bajtów 0xFF, a następnie 16 razy powtórzony adres MAC karty która ma być wybudzona. Pakiet ten jest broadcastowany - wysyłany na adres rozgłoszeniowy w warstwie łącza danych (MAC FF:FF:FF:FF:FF:FF) jak również w warstwie sieciowej (adres rozgłoszeniowy danej sieci). Ramka ta najczęściej zawiera w sobie pakiet IP zawierający z kolei datagram UDP wysyłany na port 7 lub 9. Może to też być ramka Ethernet z identyfikatorem następnego protokołu ustawionym na 0x0842. W obu przypadkach w polu danych zawarty jest ten sam wzór bitów.

Wysłanie magicznego pakietu możliwe jest także przez Internety, jednak w większości przypadków routery odrzucają ruch broadcastowy więc muszą być do tego specjalnie skonfigurowane. Potrzebna również może być publiczna adresacja albo konfiguracja przekierowania.

U mnie magiczny pakiet nadawany jest przez Malinkę w sieci lokalnej, więc ten problem odpada.

1.1. Ustawienia BIOS-u i Windowsa

WOL najczęściej jest w BIOS-ie domyślnie wyłączony i trzeba go włączyć. Opcja ta może mieć nazwę WOL, Wake On Lan, lub coś związanego z PCI-E. Może znajdować się w zakładce Power, Power Management lub Boot. Polecam poszukać w Google, podając konkretny model płyty głównej. U mnie - na Asusie M5A78L-M/USB3 w BIOS-ie opcja ta jest domyślnie włączona i nie można jej nawet wyłączyć :)

Kolejna sprawa to konfiguracja samej karty sieciowej, a robi się to w ustawieniach sterownika w systemie operacyjnym - u mnie pod Windowsem:

1. Wchodzimy w Panel sterowania -> Połączenia sieciowe -> Właściwości połączenia lokalnego (u mnie Ethernet) -> Konfiguracja (pod modelem karty sieciowej) -> Zaawansowane -> Coś związanego z Magic Packet/Magicznym pakietem -> pole Wartość ustawiamy na włączone.

2. Dalej będąc we zaawansowanej konfiguracji urządzenia (karty) przechodzimy do zakładki Zarządzanie energią i zaznaczamy opcje Zezwalaj temu urządzeniu na wznowienie pracy komputera oraz Zezwalaj tylko pakietowi Magic na wznowienie pracy komputera, zapisujemy zmiany i wychodzimy z ustawień karty.

Po tych zmianach, po wyłączeniu komputera, powinniśmy już mieć możliwość jego zdalnego uruchamiania przy pomocy magicznego pakietu.

1.10. Pierwsze próby

Na Wikipedii Debiana (https://wiki.debian.org/WakeOnLan) znalazłem 2 narzędzia nadające w sieci magiczny pakiet - etherwake i wakeonlan. Pierwszy z nich nadaje pakiet TCP i wymaga uprawnień roota, drugi nadaje pakiet UDP i może być użyty zarówno przez roota jak i przez zwykłego użytkownika. Drugi program ma także więcej opcji konfiguracji oraz informuje nas o tym co robi. Ze względu na to że polecenie będzie wywoływane przez skrypt PHP, a prawidłowa konfiguracja sudo to tylko dodatkowe zamieszanie, proponuję wykorzystać wakeonlan.

Program instalujemy na Raspbianie przy pomocy tych poleceń:

sudo apt-get update sudo apt-get -y install wakeonlan

A następnie uruchamiamy komputer w ten sposób:

wakeonlan ADRES_MAC

ADRES_MAC oczywiście zastępujemy adresem MAC PC-ta w formacie aa:bb:cc:dd:ee:ff.

1.11. Magiczny przycisk

Sam skrypt uruchamiający jest bardzo prosty - wywołuje 3 razy powyższe polecenie. 3 razy bo... tak :)

<?php $adres_mac = 'aa:bb:cc:dd:ee:ff'; exec('wakeonlan ' . $adres_mac); exec('wakeonlan ' . $adres_mac); exec('wakeonlan ' . $adres_mac); ?>

Button natomiast ukradłem stąd http://www.hongkiat.com/blog/css3-on-off-button/. Pasuje, prawda? Trochę go przerobiłem - tak aby AJAX-em wywoływał skrypt wake.php, był 2x większy, blokował się po wciśnięciu oraz wywaliłem światełko - jakoś mi przeszkadzało.

Obecnie wygląda to tak:

Instalacja przycisku:

sudo apt-get update sudo apt-get -y install apache2 php5 cd /var/www sudo chown pi:pi /var/www sudo chown pi:pi /var/www/index.html wget http://proste.to/pliki/wake.zip unzip wake.zip rm wake.zip

Apache, bo instaluje się go szybko i bardzo prosto. Jeśli ktoś jest zainteresowany postawieniem na Malince czegoś więcej niż przycisku to polecam świetną serię LukasAMD na temat Nginx, PHP (z FPM) i MariaDB. Link tutaj: http://www.dobreprogramy.pl/lukasamd/LNMP-Czesc-1-Wstep-i-repozytoria,.... Repozytoria opisane w pierwszej części serii Lukasa wspiera jedynie architektury i386 i amd64 więc na Malinie nie zadziałają, ale pakiety Nginx i PHP-FPM są dostępne w standardowym repo Raspbiana.

Wracając do tematu, teraz przycisk powinien już działać i choć każdy ma do niego dostęp, to na pewno nikt go nie użyje (wciąż czekam).

1.100. Zbędne zabezpieczenia

Zanim nie będzie VPN ani firewalla możemy na szybko zabezpieczyć dostęp do folderu wake przy pomocy pliku .htaccess. .htaccess umożliwia nadpisanie ustawienia Apache dla danego katalogu. Oczywiście nie są to wszystkie ustawienia i dotyczą zazwyczaj jedynie dostępu do witryny lub przekierowań (mod_rewrite).

1.100.0. Dostęp jedynie z określonego zakresu adresów IP

W tym przypadku dostęp do przycisku będzie możliwy jedynie z sieci lokalnej - będzie to przydatne do konfiguracji z siecią VPN jeśli zdecydujemy się wypuścić Apache "na świat". Wystarczy że do pliku /var/www/wake/.htaccess zapiszemy 3 linie:

nano /var/www/wake/.htaccess Order Deny,Allow Deny from all Allow from 192.168.0.0/255.255.255.0

Z edytora nano wychodzimy wciskając CTRL+C, y, enter. Oczywiście zamiast 192.168.0.0/255.255.255.0 podajemy swoją podsieć i jej maskę.

1.100.1. Dostęp na login i hasło

Poprzedni sposób będzie dobrym rozwiązaniem dla konfiguracji z VPN, ale obecnie nie ma zbyt sensownego zastosowania. Zamiast tego można wykorzystać bazę loginów i haseł i umożliwić dostęp jedynie zalogowanym użytkownikom.

Do pliku .htaccess, podobnie jak poprzednio wstawiamy:

nano /var/www/wake/.htaccess AuthName "Niepotrzebne zabezpieczenie" AuthType Basic AuthUserFile /var/www/wake/.htpasswd Require valid-user

Oraz tworzymy bazę i jednocześnie dodajemy do niej użytkownika:

htpasswd -cb /var/www/wake/.htpasswd dp tajne_haslo

dp to login, a tajne_haslo to oczywiście hasło.

Kolejnych użytkowników dodajemy w podobny sposób (bez parametru c - create):

htpasswd -b /var/www/wake/.htpasswd dp tajne_haslo

1.100.10. Aktywacja .htaccess

Aby plik .htaccess był wczytywany i zmiany zadziałały musimy jeszcze zmienić 1 opcje w pliku konfiguracyjnym Apache (konkretnie to domyślnego vhosta):

nano /etc/apache2/sites-enabled/000-default Odnajdujemy fragment: <Directory /var/www/> Options Indexes FollowSymLinks MultiViews AllowOverride None Order allow,deny allow from all </Directory>

I zamieniamy w nim linię AllowOverride None, na AllowOverride All, a następnie restartujemy Apache:

sudo service apache2 restart

Kucykowy serwer :)

CIĄG DALSZY NASTĄPI

W następnej części VPN lub iptables, a może jedno i drugie. 

linux serwery

Komentarze

0 nowych
command-dos   18 #1 06.02.2014 08:14

@okokok - albo coś padło, albo ktoś już rozwalił Ci przycisk ;) http://dom.olo-web.eu/wake/ się nie otwiera...

GL1zdA   12 #2 06.02.2014 08:56

Takie rzeczy można robić na płytach pod procesory Intela obsługujących AMT (aktualnie te z chipsetem Q87) i nie ma potrzeby korzystania z dodatkowego komputera.

wojtekadams   18 #3 06.02.2014 09:20

@command-dos
Pewnie na noc wyłącza Apache :)

BTW.
Ja swój komputer kiedyś włączałem za pomocą komórki (była podłączona do pinów od włącznika), ale kompa już nie mam więc rozwiązanie trafiło do szuflady.

command-dos   18 #4 06.02.2014 09:45

@wojtekadams - bardzo ciekawe rozwiązanie. To tak, jak zdalne odpalenie bomby ;) pewnie post trafi do nsa, abc i innego kgb, bo użyłem słowa klucza :)

  #5 06.02.2014 09:54

Co do routera zrobiłem niedawno router z komputera typu nettop na IPFire. Miał wydzielone sieci dla pc lokalnych, DMZ oraz WiFi ;) Fajna sprawa bo do serwera wgralem klienta torrent oraz sambe.

wojtekadams   18 #6 06.02.2014 10:27

@command-dos
Tylko żeby nie było że każdy mógł zadzwonić na ten telefon :P
Było oczywiście włączone filtrowanie połączeń przychodzących i akceptowane były tylko dwa numery: mój i mój :)

pejot   3 #7 06.02.2014 13:16

PHP musiałeś zatrudnić do tak prostego skryptu? O CGI nie słyszałeś, prosty skrypt w Bash'u i po robocie.

  #8 06.02.2014 13:50

@pejot - chętnie zapoznam się z Twoim alternatywnym rozwiązaniem.

  #9 06.02.2014 14:51

Co do routera zrobiłem niedawno router z komputera typu nettop na IPFire. Miał wydzielone sieci dla pc lokalnych, DMZ oraz WiFi ;) Fajna sprawa bo do serwera wgralem klienta torrent oraz sambe.

okokok   12 #10 06.02.2014 15:12

Czytając pierwszy komentarz w szkole bardzo się ucieszyłem. Chciałem napisać kolejną część o analizie powłamaniowej. Niestety prawda okazała się bardziej prozaiczna. To nie hasło roota które zapomniałem zmienić, a bezpiecznik elektryczny - jak widać dobre zabezpieczenie :D

wojtekadams, jak spowodowałeś zwieranie pinów przez komórkę? Coś jak dawne diody reagujące na fale?

pejot, 1 i 2 to interpreter, a długość wyszła by identyczna :P No dobra sh i cgi lżejsze, nie pomyślałem nawet o tym.

wojtekadams   18 #11 06.02.2014 15:55

@okokok
zrobiłem mały układzik, który był podłączony do wyświetlacza - jak tel "dzwonił" wyświetlacz się zapałał i następował "zapłon" ;]

  #12 06.02.2014 19:55

Najbardziej podoba mi się wpis o niecałkowitym wyłączeniu kompa po jego wyłączeniu. Od dawna podejrzewałem coś takiego, ale z oczywistych powodów szukanie tego w wyszukiwarce odpadło, a tu proszę present. Wiadomo teraz dlaczego jest parcie na dyski SSD.

mati75   6 #13 06.02.2014 22:15

Apache na rpi, ałć. Trzeba być masochistą, żeby to robić.

Urlich   1 #14 07.02.2014 12:58

@pejot ja również chętnie zapoznam się z twoją alternatywną propozycją.

wobes   4 #15 10.02.2014 01:47

@gość123: "Wiadomo teraz dlaczego jest parcie na dyski SSD."

A co ma piernik do wiatraka? Co jest zresztą dziwnego w ciągłej obecności 5V na płycie? Na płytach ATX starszych od węgla już tak było, dzięki czemu mechanizmy takie jak budzenie przez timer w biosie czy WoL działają.

  #16 14.02.2016 11:02

Witam a co z macintoshem? też ta metoda działa? U mnie raspi bez problemu budziło windowsa ale teraz z mac mam problemy... :(

  #17 17.02.2016 12:31