Apache2 rewrite i znak zapytania

Tak się składało, że musiałem zablokować zestaw stron spośród całkiem pokaźnej liczby innych stron, i musiałem zrobić to za pomocą apacha.

Niestety , standardowe podejście w stylu :
Redirect /cokolwiek.html?nie http://gdziekolwiek.pl/nie  po prostu nie działa.

Rozwiązaniem jest RewriteCond i RewriteRule
Jak tego użyć :

RewriteEngine on
RewriteCond %{QUERY_STRING} ^toCoJestPoZnakuZapytania$
RewriteRule ^/toCoJestPrzedZnakiemZapytania$ http://tamGdzieChcemyPrzekierowac.pl [R=301,L]

 

Ubuntu 14.04 a Likewise Open

Niestety, jak się okazało, wraz z nadejściem Ubuntu 14.04 z repozytorium wyleciało oprogramowanie Likewise Open – głównie z powodu braku utrzymania pakietów. Jeśli z jakiegoś powodu, potrzebujesz w dalszym ciągu go używać, ( a w moim przypadku było to bardzo dobrze zintegrowane z Puppet Masterem ) pakiet trzeba zainstalować samemu :

1.  Ze strony producenta ściągamy instalkę : ( link )

2. Nadajemy prawo wykonania i instalujemy

chmod u+x pbis-open-8.0.1.2029.linux.x86_64.deb.sh

3. Jeśli przyzwyczajony jesteś do starego likewise open należy jeszcze zrobić linki do programu :

sudo ln -s /opt/pbis/bin/config /sbin/lwconfig

 

 

Postfix SASL Auth

Musiałem na szybko podłączyć logowanie do postfixa

1. Zainstalować libsasl2-modules,postfix,sasl2-bin

sudo apt-get install libsasl2-modules, sasl2-bin

2. W Ubuntu postfix trzymany jest w jailowanym miejscu, więc trzeba zmienić te ustawienia także dla sasl

w /etc/default/saslauth zmienić dwie linie :

#START=yes
 START=yes
 #OPTIONS="-c -m /var/run/saslauthd"
 OPTIONS="-c -m /var/spool/postfix/var/run/saslauthd"

3. Wprowadzić stosowne zmiany i utworzyć odpowiedni folder :

sudo dpkg-statoverride --add root sasl 710 /var/spool/postfix/var/run/saslauthd

4. Dodać postfixa do uprawnionych do korzystania z sasl

sudo adduser postfix sasl

5. Uruchomić saslauth:

/etc/init.d/saslauthd start

6. W /etc/postfix/main.cf dodać następujące linie :

smtpd_sasl_local_domain = $myhostname
 smtpd_sasl_auth_enable = yes
 broken_sasl_auth_clients = yes

7. W /etc/postfix/main.cf do smtpd_recipient_restrictions dodać ( a jeśli nie ma to utworzyć ) następujące wartości :

smtpd_recipient_restrictions = permit_sasl_authenticated, permit_mynetworks, reject_unauth_destination

8. Zrestartować postfixa

service postfix restart

I powinno działać.

Strzelanie do Problemów:

1. Jak sprawdzić, czy saslauth w ogóle chodzi :

testsaslauthd -u user -p haslo

Jeśli zwróci 0: OK „Success” to oznacza, że chodzi prawidłowo.

2. Logowanie poczty nie chodzi , a w mail.log widnieje :

May 28 11:09:53 serverXXX postfix/smtpd[25634]: warning: SASL authentication failure: cannot connect to saslauthd se
 rver: No such file or directory
 May 28 11:09:53 serverXXX postfix/smtpd[25634]: warning: localhost[127.0.0.1]: SASL LOGIN authentication failed: gen
 eric failure

Najwyraźniej nie chciało ci się wykonać punktu 2 lub 3 i postfix w JaliRoocie nie jest w stanie skomunikować się z SaslAuthd.

 

Większość informacji wygrzebana spod adresu :

https://wiki.debian.org/PostfixAndSASL

(Rozwiązanie problemu z Jailroot  znalazłem na różnych innych stronach)

Korzystanie z Proxy w Apache

Czasami istnieje ważny powód, dla którego trzeba wykorzystać proxy wbudowane w Apache.

W tym konkretnym przypadku potrzebowałem wystawić na innej domenie content który był generowany na podstawie nazwy domeny i subfolderu – inaczej mówiąc kopiowanie nie wchodziło w grę.

Do wykonania zadania wykorzystałem moduły proxy występujące w paczce apacha,

a2enmod proxy
a2enmod proxy_http
service apache2 restart

Następnie utworzyłem wpis w /etc/apache2/sites-avaiable/strona

<VirtualHost *:80>
   ServerName something.pl
   ProxyRequests Off
  <proxy *>
     Order deny,allow
     Allow from all
     ForceType 'text/html; charset=UTF-8'    
  </proxy>
  ProxyPass / http://staryserwis.pl/sub/    
  ProxyPassReverse / http://staryserwis.pl/sub/
</VirtualHost>

 

 

Konwertowanie istniejącego systemu plików do LVM

Mam na warsztacie dość ważny serwer, który powstał jeszcze zanim wprowadziłem LVM. Ponieważ dość wzrosła jego ranga, a przestrzeń zajmowana przez bazy danych przestała wystarczać, postanowiłem całościowo postawić go na wygodniejszym do zarządzania systemie plików.

Zakładam, że system jest zaktualizowany i jest miejsce na wykonywanie wszystkich operacji

1. Instalujemy LVM

 root@unix:/#apt-get install lvm2

2. Przygotować partycje na LVM (nowy dysk),

root@unix:/#fdisk /dev/sdb
   n (nowa partycja)
   p (primary)
   t (zmiana systemu)
   8e (LVM)
   w (zapisz i wyjdź)
root@unix:/#pvcreate /dev/sdb1
   Physical volume "/dev/sdb1" successfully created
root@unix:/#vgcreate Foo /dev/sdb1
   Volume group "Foo" successfully created

Mamy już gotowe miejce, do którego będziemy kopiować nasze struktury
3. Tworzenie volumenów i przenoszenie tam danych

root@unix:#lvcreate -L +20G -n Bar Foo
   Logical volume "Foo" created
(-L to rozmiar, -n to nazwa volumenu. Na końcu nazwa grupy z której pobieramy to miejsce)
root@unix:#mkfs.ext4 /dev/Foo/Bar
root@unix:#mkdir /mnt/tmp
root@unix:#mount /dev/Foo/Bar /mnt/tmp
root@unix:#cp -parx /var/lib /mnt/tmp

Następne w kolejności to wprowadzeni zmian w /etc/fstab

c.d.n.

SQUID3 Reverse Proxy i podfoldery domeny

Miałem ostatnio kłopot. Otóż strona została przekierowana na nowy serwer, natomiast nie została przeniesiona pełna funkcjonalność.  jeden z podfolderów, nie mógł być zaimplementowany na nowej maszynie i musiał być obsłużony przez starą.  Ponieważ standardowe opisy nie opisały tej sytuacji dla przypadku, gdy squid obsługuje setki innych domen, zamieszczam tutaj informację, jak zrobiłem to ja :

Do wykonania zadania użyłem wyrażeń regularnych

acl domena_folder url_regex ^http://domena/folder
acl domena_common url_regex ^http://domena/

cache_peer 10.x.x.x parent 80 0 no-query no-digest originserver name=nazwa1 login=PASS
cache_peer 10.x.x.y parent 80 0 no-query no-digest originserver name=nazwa2 login=PASS

cache_peer_access nazwa2 allow domena_folder
cache_peer_access nazwa1 allow !domena_folder domena_common

Dzięki zaznaczeniu nazwy domeny, mamy pewność, że nie będzie problemu z obsługą innych domen, które obsługuję w innych plikach konfiguracyjnych

LVM z czym to się je

Logical Volume Management

Z początku byłem dość nieufny do tej technologii i za bardzo nie wiedziałem do czego może być mi potrzebna. Potrzeba matką wynalazku, więc w pewnym momencie niejako zostałem zmuszony do poznania, a potem już całkowicie dobrowolnie, do polubienia tej technologii.

Czym to jest.

Jest to system wciśnięty pomiędzy fizyczne dyski twarde, a system plików oferujący wygodne zarządzanie powierzchnią dostępną dla systemów, metodę bezpiecznego przenoszenia całych systemów plików z jednego miejsca na inne oraz możliwość zatrzymywania w czasie całego takiego systemu : Snapshot .

Przykłady gdzie LVM lśni:

#1. Kończy ci się miejsce w /var/lib na bazę danych.

Bez LVM musiałbyś dołożyć nowy dysk twardy, przekopiować cały zasób na nowy dysk, a potem zmienić punkt montowania.  Całość wywołuje niewygodne przestoje w pracy ( kopiowanie bazy danych ), konieczność zmieniania pliku fstab, a potem obawy, czy aby na pewno wszystko się poprawnie przekopiowało

z LVM, problem ten sprowadza się do dwóch instrukcji : Pierwsza powiększa dysk na którym jest /var/lib o tyle ile potrzebujesz, a druga zmienia powierzchnię systemu plików aby zaadoptować ją do powiększonej przestrzeni.  :

lvextend -L +20G grupa/volumen
resize2fs /dev/grupa/volumen

#2. Chciałbyś zrobić backup plikowy często używanych plików

Bez LVM trzeba zablokować zapisywanie na tych plikach, a potem żmudnie je kopiować. Przez pewien czas system byłby wyłączony z użycia

z LVM tworzysz snapshota backupowanego zasobu, podmontowujesz go w wygodnym miejscu a następnie robisz z niego backup :

service mysql stop # Backupuję bazę danych
lvcreate -s -n snap -L 3g grupa/wolumen # tworzę snapshota całego /wolumen o zapasie 3GB
service mysql start # Uruchamiam bazę danych, i już ona może pracować, a ja mogę backupować pozamykane pliki !!!
mkdir /mnt/snap
mount /dev/grupa/snap /mnt/snap # Z tego miejsca można robić backup
 ##### BACKUP ######
umount /mnt/snap #Odłączamy niepotrzebne elementy
rmdir /mnt/snap #Sprzątamy po sobie
lvremove -f /dev/grupa/snap # Usuwamy snapshota.

 

To już wiemy, po co, ale jak wygląda praca z LVM ?

Z punktu widzenia systemu operacyjnego gotowy LVM wygląda jak kolejne urządzenie w /dev .

 

To teraz krótko : Jak z tego skorzystać.

LVM jest standardowo zamieszczony w dystrybucji Ubuntu, więc nie trzeba go instalować.

Od korzystania z LVM dzielną nas trzy kroki

Krok 1. Stworzyć Fizyczny Volument ( Physical Volumen ), czyli poinstruować LVM że ma miejsce gdzie może przechowywać dane

fdisk /dev/sdX
>n (utworzenie nowej partycji, powinienes to znać)
>t (zmiana typu partycji)
>8e (partycja LVM)
>w (zapisanie i wyjście)

W tym momencie mamy już przygotowaną partycję. Teraz powiemy LVM że można z niej korzystać:

pvcreate /dev/sdX1

LVM Już wie, że ma do dyspozycji taki dysk.

Krok 2 : Utworzyć Grupę Volumenów

Jest to miejsce gdzie LVM zbiera fizyczne dyski do kupy i pozwala zarządzać nimi jako całością. W zakresie jednej grupy dyski te traktowane są jako jedna wspólna przestrzeń, z której można korzystać tworząc wolumeny.

vgcreate grupa /dev/sdX1

Czyli w skrócie, stworzyliśmy grupę o nazwie foo, i dodaliśmy do niej dysk /dev/sdX1.  Do dodawania kolejnych dysków można użyć komendy vgextend.

Krok 3. Stworzenie Wolumenu Logicznego – czyli dysku z którego możemy wreszcie korzystać.

lvcreate -n wolumen -L 12g grupa

„wolumen” to nazwa naszego wolumenu, „grupa” zaś to nazwa grupy w której tworzymy ten volumen. Po wykonaniu tej komendy w /dev/grupa/ znajdziemy volumen „wolumen” który to już można traktować jak zwykły wolumen. A w szczególności możemy go sformatować :

mkfs.ext4 /dev/grupa/wolumen

Proste.

A teraz parę ważnych szczegółów :

– LVM to nie rajd. jeśli uszkodzi się któryś dysk w grupie , to automatycznie tracisz wszystkie wolumeny w tej grupie. Dlatego bardzo zdrowym podejściem jest instalowanie LVM na dyskach znajdujących się w rajdzie minimum piątym.

– LVM umożliwia : dodawania i usuwanie dysków fizycznych z grupy BEZ uszkadzania całej grupy. Ale musi być troche miejsca zapasowego, żeby LVM przeniósł najpierw rzeczy które znajdowały się na odłączanym dysku fizycznym

LVM pozwala na przenoszenie wolumenu z jednej grupy do drugiej. I pozwala to robić BEZ przerywania pracy systemu. Pozwala to migrować serwery na nowe macierze rajdowe bez przerywania pracy.

 

 

 

 

 

Replikacja za pomocą GlusterFS

Potrzebowałem narzędzia, które łatwo pozwoli my synchronizować kilka serwerów tak, aby posiadały dokładnie taką samą zawartość.

Rsync do tego celu mi nie pasował. Przede wszystkim nie podobały mi się manipulacje przy zestawieniu master-master. Szukałem czegoś wygodniejszego.

Moim celem stał się ClusterFS
Większość informacji zdobyłem dzięki howtoforge.com

1. Zainstalować usługę :

apt-get install glusterfs-server

2. Upewnić się, że DNS (albo plik /etc/hosts) zawiera informacje o hostach – członkach clustera

3. Przygotować miejsce na którymprzechowywany będą dane np. /gluster

4. Jeśli drugi nod był klonem, trzeba zmienić UUID glustera – inaczej będzie konflikt maszyn :

service glusterfs-server stop
echo "UUID=$(uuidgen)" > /etc/glusterd/glusterd.info
service glusterfs-server start

5. Podłączyć do siebie hosty :

root@server1:/# gluster peer probe server2.pl
root@server2:/# gluster peer probe server1.pl

6. Sprawdzić, czy do połączenia doszło:

gluster peer status

7. Stworzyć volumen

gluster volume create JakisWolumen replica 2 transport tcp server1.pl:/gluster server2.pl:/gluster

8. Uruchomić go:

gluster volume start JakisWolumen

9. Sprawdzić na drugim serwerze, czy wszystko działa

gluster volume info

Powinna być informacja o utworzonym volumenie.

UWAGA. NIE MANIPULUJEMY DANYMI w folderze /gluster.  NIGDY. Od tego mamy połączenie klientem !!!!!!!

W tym momencie mamy już działający cluster.

Korzystanie z clustera

1. Zainstalować klienta :

apt-get install glusterfs-client

2. Podmontować wolumen

mount.glusterfs server1.pl:/JakisVolumen /GdziesTam

albo od razu w /etc/fstab :

localhost:JakisVolumen   /GdziesTam        glusterfs       defaults,_netdev        0       0

I to wszystko.

 

Proste?

 

 

MariaDB replikacja master-master

Jako że znalezienie informacji na ten temat nie było zbytnio łątwe, a instrukcja na stronie mariaDB jest niepełna, wrzucam to jak  Ja to zrobiłem ( korzystając z tego oto bloga : link )

Wstęp :

MySQL ma swoje ograniczenia. Między innymi nie ma czegoś takiego jak dobrze zrobiony cluster ( No dobrze, jest ale tylko w pamięci i kiepsko działa z bazami które wielokrotnie przekraczają pojemność pamięci ). MariaDB jest kompatybilna z MySQL tak dobrze, że nie ma żadnego problemu z przekopiowaniem baz z MySQL i wrzuceniem ich do MariaDB. mysqldump działa tu znakomicie.

Ponieważ czasami potrzebuję posiadać clustery w technologii Mysql PHP Apache2 , zapraszam do zapoznania się z MariaDB jako solidną alternatywą do produktu Oracle.

 

1. Dodać repozytorium :

sudo apt-get install python-software-properties
sudo apt-key adv --recv-keys --keyserver hkp://keyserver.ubuntu.com:80 0xcbcb082a1bb943db
sudo add-apt-repository 'deb http://mirror.vpsfree.cz/mariadb/repo/5.5/ubuntu precise main'

2. Pobrać cluster :

Aktualizacja : W nowszych ubuntu pierw trzeba ręcznie dołączyć odpowiednie pakiety,  bo te od mysql mają wyższe wersje  :

apt-cache show mysql-common | grep Version
apt-cache show libmysqlclient18 | grep Version

Tu otrzymane wersje programów używamy do zainstalowania właściwych pakietów :

apt-get install  \
  libmysqlclient18=<version-number> \
  mysql-common=<version-number>
sudo apt-get update
sudo apt-get install mariadb-galera-server galera

 

3. W /etc/mysql/my.cnf dostosować możliwości łączenia się ( mój clusterek siedzi w DMZ i nie jest bezpośrednio dostępny, ograniczyłem się do 0.0.0.0

bind-address = 0.0.0.0

4. Utworzyć plik konfiguracji clustera /etc/mysql/conf.d/mariadb.cnf

a. Serwer baza będzie uruchamiana jako pierwsza  :

[mysqld]
wsrep_cluster_address = 'gcomm://'
wsrep_provider = /usr/lib/galera/libgalera_smm.so
wsrep_retry_autocommit = 0
wsrep_sst_method = rsync

b. Serwer gdzie  gdzie baza będzie uruchamiana w drugiej kolejności :

[mysqld]
wsrep_cluster_address = 'gcomm://ADRES.PIERWSZEGO.SERWERA'
wsrep_provider = /usr/lib/galera/libgalera_smm.so
wsrep_retry_autocommit = 0
wsrep_sst_method = rsync

5. Zlikwidować puste konta, oraz utworzyć konto do komunikacji pomiędzy serwerami :

mysql -e "SET wsrep_on = OFF; DELETE FROM mysql.user WHERE user = '';"
mysql -e "SET wsrep_on = OFF; GRANT ALL ON *.* TO 'root'@'%' IDENTIFIED BY 'TwojeHasłoTUTAJ';"

6. Zrestartować serwisy

WAŻNE : Pierw serwer ustalony jako pierwszy a potem ten drugi.

service mysql restart

7. I to wszystko. Można sprawdzić, czy baza stworzona na jednej maszynie pojawia się na drugiej

Wyciąganie klucza SSL z pliku PFX

Zdaża się, że certyfikat, który miałeś otrzymać, zapisany jest w formie *.pfx
Co należy zrobić, aby uzyskać z tego certyfikat użyteczny do apacha ?

1. Wypakowywujemy klucz z certyfikatu.

 openssl pkcs12 -in nazwa_certyfikatu.pfx -nocerts -out nazwa_certyfikatu.tmp

Zapyta o hasło, a potem poprosi o podanie nowego.
2. Wytnijmy hasło z klucza :

openssl rsa -in nazwa_certyfikatu.tmp -out nazwa_certyfikatu.key

Zapyta o hasło wpisane poprzednio, o nowe już nie będzie pytał.

Instrucja skopiowana z innego blogu  : link