Bender – LAMP (Linux, Apache, Mysql, Php)

Serwisy http i jego odpowiednik z szyfrowaniem https są najczęściej wykorzystywanymi serwisami w internecie przez użytkowników końcowych. Dzisiaj przedstawię instalację i konfigurację apache na debianie.

Czytaj dalej Bender – LAMP (Linux, Apache, Mysql, Php)

Ucieczka z blokowanego internetu #3 sshuttle (Linux/MacOS)

W poprzednich częściach opisałem jak tunelować się przy użyciu ssh i putty. Dzisiaj natrafiłem na fajny programik do tunelowania się przez ssh’a który działa transparentnie  i obsługuje udp.

Program wymaga posiadania uprawnień root’a na komputerze klienckim, za to na serwerze wystarczy nam zwyczajne konto. Przewagą tego rozwiązania nad VPN’ami jest możliwość pełnego tunelowania się przez serwery na których nie możemy instalować oprogramowania. Czytaj dalej Ucieczka z blokowanego internetu #3 sshuttle (Linux/MacOS)

Ucieczka z blokowanego internetu (*nix)

Czasami zdarza się że korzystamy z internetu który przez administratora sieci jest ograniczony. Jest wiele powodów dlaczego dla których taka sytuacja występuje, (ochrona przed piractwem, zmniejszenie obciążenia sieci, zwiększenie wydajności pracy itp.) lecz czasami się zdarza iż potrzebujemy skorzystać z zablokowanych usług np. zablokowany smtp do wysyłania poczty w hotspotcie na lotnisku. W takim wypadku trzeba przekierować ruch przez jakiś swój serwer.

W poniższym artykule będę korzystał z przypadku kiedy mamy własny serwer (jesteśmy jego administratorami z uprawnieniami root’a).

1. Proste tunelowanie

W tym przypadku bierzemy pod uwagę sytuację w której nie jest blokowany standardowy port ssh (22/tcp), wtedy wystarczy proste postawienie proxy socks przez klienta ssh.

$ ssh [email protected] -D 8080

Opcja -D 8080 otwiera na loopbacku port 8080 na którym będzie stało nasze proxy socks. Numer portu może być dowolny, jednak normalny użytkownik nie może otworzyć portu poniżej 1024 to może tylko root jednak nie ma to większego sensu.

Jeżeli chcemy możemy sprawdzić czy port jest otwarty poleceniem nmap.

$ nmap localhost
Starting Nmap 6.25 ( http://nmap.org ) at 2013-06-20 10:27 CEST
Nmap scan report for localhost (127.0.0.1)
Host is up (0.0000070s latency).
Not shown: 995 closed ports
PORT     STATE SERVICE
22/tcp   open  ssh
25/tcp   open  smtp
111/tcp  open  rpcbind
631/tcp  open  ipp
8080/tcp open  http-proxy

Nmap done: 1 IP address (1 host up) scanned in 0.12 seconds

Ok mamy już postawione proxy i możemy korzystać przez niego z nieograniczonego internetu.

2. Port 22 jest zablokowany

Może przydarzyć się sytuacja iż port 22 jest zablokowany. W tym wypadku możemy postawić serwer ssh na innym porcie. Lecz musimy się dostać do swojego serwera w inny sposób (w końcu w sieci której jesteśmy port do secure sh jest zablokowany). Najprawdopodobniej otwarte porty będą w przedziale do 1024, są to porty których przeznaczenie jest znane. Możemy wypisać je poleceniem:

$ grep '\([^0-9][0-9]\{1,3\}\|10[0-1][0-9]\|102[0-4]\)\/tcp' /etc/services

Z pewniejszych portów można wyłonić:

ftp		21/tcp
smtp		25/tcp		mail
domain		53/tcp				# Domain Name Server
http		80/tcp		www		# WorldWideWeb HTTP
pop3		110/tcp		pop-3		# POP version 3
ntp		123/tcp
https		443/tcp				# http protocol over TLS/SSL
urd		465/tcp		ssmtp smtps  # URL Rendesvous Directory for SSM
submission	587/tcp				# Submission [RFC4409]
imaps		993/tcp				# IMAP over SSL
pop3s		995/tcp				# POP-3 over SSL

Portami które nie będą się rzucały na pierwszy rzut oka że jest coś nie tak będą wszystkie SSL’e, w końcu nie da się SSL swobodnie podsłuchiwać bez MitM’a ale to da się w przypadku ssh łatwo zauważyć. Wytypowane przeze mnie porty są IMO najczęściej wykorzystywane w necie, można użyć też innych portów które się uważa że mogą być otwarte. Teraz pozostaje nam zmienić konfigurację serwera ssh. W debianie plik konfiguracji znajduje się w:

/etc/ssh/sshd_config

Otwieramy go oczywiście jako root swoim ulubionym edytorem czyli vim’em np.

# vim /etc/ssh/sshd_config

Następnie znajdujemy wpis odpowiedzialny za nasłuchiwanie na portach. Najczęściej będzie to

# What ports, IPs and protocols we listen for
Port 22

Teraz poniżej tego wpisu dopisujemy dodatkowe porty na których chcemy aby nam nasłuchiwał serwer ssh. np.

# What ports, IPs and protocols we listen for
Port 22
Port 993
Port 443

Teraz pozostaje nam zrestartować serwer ssh (aktualne połączenia z serwerem ssh nie zostaną przerwane), np w debianie:

# service ssh restart

Teraz mamy otwarte dodatkowe porty dla serwera ssh. Teraz na swoim komputerze klienckim uruchamiamy ssh z dodatkowym parametrem -p i numerem portu np.

$ ssh [email protected] -p 995 -D 8080

Opcja -D zostaje ponieważ ona odpowiada nam za otwarcie dynamicznego proxy na porcie 8080 (lokalnie). Jeśli port nie jest blokowany to połączymy się bez problemu.

3. Wyższa szkoła jazdy czyli wszystko przez proxy.

Może się wydarzyć sytuacja iż tak wkurzyliśmy administratora że zablokował cały ruch wychodzący do sieci, a dostęp do internetu mamy przez czyjeś proxy, niestety nie jest to proxy typu socks lecz http. Nawet i na to znajdzie się rozwiązanie. Na początek musimy zainstalować pakiet corkscrew. Następnie edytujemy plik własnej konfiguracji SSH.

$ ~/.ssh/config

W pliku wpisujemy

ProxyCommand /usr/bin/corkscrew PROXY_HOST PROXY_PORT %h %p

Gdzie PROXY_HOST adres IP serwera proxy a PROXY_PORT to port serwera proxy. Teraz łączymy się ze swoim serwerem tak jak w punkcie poprzednim tylko z użyciem portu 443. Można spróbować użyć innych portów ale najprawdopodobniej http+ssl (443/tcp) będzie otwarty. Teraz pozostaje nam korzystać z naszego proxy zamiast tego wymuszonego.

Walka z wiatrakami

Co dalej? Tego nie mogę przewidzieć. Administrator może w łatwy sposób po kolei blokować serwer kiedy wykryje że na nich jest postawione ssh lub inny serwis do obejścia ograniczeń sieci. Próba wymuszenia na administratorze lub jego szefie odblokowania którejś z usług może się skończyć dwojako. Nawet jak uda wam się przekonać kogoś do odblokowania ssh’a to może on nałożyć cap’a na niego w wielkości np 20 kb/s. Przy dzisiejszym internecie na nic nam to się zda. W przypadku kiedy nie uda nam się namówić kogoś na odblokowanie ssh’a może się to skończyć różnymi konsekwencjami np. można być oskarżonym w pracy o próbę wyniesienia poufnych danych firmowych i zostać zwolnionym, dlatego przed przystąpieniem do robienia czegokolwiek związanego z obejściem zabezpieczeń lepiej jest się zorientować jakie to może nieść za sobą konsekwencje.

Jak znajdę jeszcze trochę czasu to zrobię mały dodatek dla obsługi ssh’a przez putty ponieważ na windowsie nie ma natywnego ssh’a.

Część 2 – Putty (*nix/windows)

Część 3 – shuttle (Linux/MacOS)

Huawei E398 & Debian

Posiadam internet iPlus LTE z modemem E398, niestety w necie trzeba trochę poszukać info jak użyć go z terminala. W przeszłości używałem innych modemów Huawei i dobrze one działały z programem wvdial pozwalając mi na korzystanie z internetu bez środowiska graficznego. Do sporządzenia tego artykułu korzystałem z Debiana Wheezy (testing na chwilę obecną).

Potrzebne paczki: wvdial, usb-modeswithch i screen (niekonieczny ale zalecany)

Po instalacji powyższych pakietów należy dodać wpis do przełączania usb z trybu pracy ZeroCD na tryb pracy modemowej. Zazwyczaj nie trzeba dodawać takich wpisów do programu ale niestety dla E398 takiego wpisu nie ma.
Dopisujemy na końcu do /lib/udev/rules.d/40-usb_modeswitch.rules

# Huawei E398
ATTRS{idVendor}=="12d1", ATTRS{idProduct}=="1505", RUN+="usb_modeswitch '%b/%k'"

Oraz tworzymy plik /etc/usb_modeswitch.d/12d1:1505 z zawartością

########################################################

# Huawei E398

DefaultVendor= 0x12d1
DefaultProduct=0x1505

TargetVendor=  0x12d1
TargetProduct= 0x1506

CheckSuccess=20

# Standard profile
;MessageEndpoint= 0x0f

MessageContent="55534243123456780000000000000011062000000100000000000000000000"

Po tym zabiegu należy zrestartować usługę udev poleceniem

# service udev restart

Jeszcze trzeba skonfigurować wvdial. Plik konfiguracyjny znajduje się w /etc/wvdial.conf
Poniżej moja wersja pliku

[Dialer Defaults]
Phone = *99#
New PPPD = yes
Modem = /dev/ttyUSB0
Stupid Mode = 1
Dial Command = ATDT

[Dialer LTE]
Init1=AT^SYSCFGEX="03",3FFFFFFF,1,2,7FFFFFFFFFFFFFFF,,

[Dialer pin]
Init1 = AT+CPIN=1111

[Dialer iplus]
Baud=460800
Init2=ATZ
Init3=ATE0V1&D2&C1S0=0+IFC=2,2
Init5=AT+CGDCONT=1,"IP","internet";
ISDN=0
Modem Type = Analog Modem
Username = internet
Password = internet

Mała legenda:

Defaults - ustawienia standardowe
LTE - przestawienie modemu do pracy tylko LTE
pin - odblokowanie karty SIM z pinu, należy zmienić 1111 na swój kod pin
iplus - połączenie do internetu

Teraz aby połączyć się z internetem należy wykonać po kolei polecenia

# wvdial pin
# screen -S net wvdial iplus

Przy poleceniu połączenia się do sieci nie trzeba używać screen’a ale jest to wysoce zalecane z kilku powodów

  1. Nie blokujemy sobie terminala (screena można odłączyć od terminala sktótem klawiszowym Ctrl+A D, a podłączyć się do screena możemy poleceniem screen -x net)
  2. Połączenie nie jest przerywane jak zostanie zabity proces rodzica (np. jak wywołujemy komendę przez ssh lub w gnome-terminal)
  3. Bezpieczeństwa – osoba niepowołana może przerwać proces skrótem Ctrl+C i przejść do shell’a roota co jest bardzo niebezpieczne.

Źródła:
Konfiguracja E398
Komendy AT dla modemu