Blog (29)
Komentarze (1k)
Recenzje (0)
@okokokMalinowy Serwer Domowy cz. 1 - Magiczny Przycisk

Malinowy Serwer Domowy cz. 1 - Magiczny Przycisk

06.02.2014 | aktual.: 14.02.2014 22:20

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 :)

501705

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ć :)

501715

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.

501718

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.

501720

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:

501734

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

501742

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

501747

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 :)
Kucykowy serwer :)

Kucykowy serwer :)

CIĄG DALSZY NASTĄPI

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

Wybrane dla Ciebie
Komentarze (17)