Instalacja PHP APC cache w Ubuntu

Mechanizm PHP APC cache polega na buforowaniu skomplikowanego kodu PHP w pamięci operacyjnej lub na dysku serwera. Przy kolejnym zapytaniu o ten sam kod, APC sprawdza czy ma go w pamięci, jeśli tak PHP nie wykonuje ponownie kodu tylko jest on ładowany z pamięci.

Instalacji PHP APC cache w Ubuntu jest banalnie prosta i polega na wydaniu poniższego polecenia z konsoli:

root@server:# apt-get install php-apc

Alternatywnym sposobem instalacji jest wydanie poniższych poleceń z konsoli:

root@server:# apt-get install php-pear
root@server:# apt-get install php5-dev 
root@server:# apt-get install apache2-dev
root@server:# pecl install apc
root@server:# echo "extension=apc.so" > /etc/php5/apache2/conf.d /apc.ini
W obu przypadkach, po instalacji oczywiście musimy zrestartować serwer www poniższym poleceniem:
root@server:# /etc/init.d/apache2 restart

 

Instalacja bibliteki GD PHP 5 w Ubuntu

Jeśli integrujecie Uploadify z jQuery UI ze swoją stroną www i pojawia Wam się błąd „HTTP Error” lub chcecie skorzystać z funkcji imagecreatefromjpeg(), która nie działa, a w logach jest wpis „Call to undefined function imagecreatefromjpeg()” bardzo możliwe, że nie macie zainstalowanej biblioteki GD z PHP. Można to sprawdzić dodając do strony www napisanej w PHP poniższy wpis:

echo "<pre>"; print_r(gd_info()); echo "</pre>";

Jeśli wyświetlając stronę w przeglądarce otrzymamy wynik różny od poniższego:

Array
(
    [GD Version] => 2.0
    [FreeType Support] => 1
    [FreeType Linkage] => with freetype
    [T1Lib Support] => 1
    [GIF Read Support] => 1
    [GIF Create Support] => 1
    [JPEG Support] => 1
    [PNG Support] => 1
    [WBMP Support] => 1
    [XPM Support] =>
    [XBM Support] =>
    [JIS-mapped Japanese Font Support] =>
)

lub nie otrzymamy nic oznacza to, że musicie zainstalować bibliotekę GD w systemie. W tym celu wystarczy wydać poniższe polecenie z konsoli:

root@server:# apt-get install php5-gd

Pamiętajcie, aby przed instalacją biblioteki wykonać aktualizację systemu wydając poniższe polecenia:

root@server:# apt-get update
root@server:# apt-get upgrade

Po instalacji należy zrestartować serwer www wydając polecenie:

root@server:# /etc/init.d/apache2 restart

Jeśli dalej występują błędy, powodem jest coś innego, szukajcie na tym forum, powinno być rozwiązanie.

scp transfer plików przez ssh w linuxie

Za pomocą polecenia scp bezpośrednio z konsoli w linuxie możemy przesyłać bezpiecznie pliki .Aby wysłać plik o nazwie plik.tar z lokalnego katalogu home do katalogu home komputera o adresie IP: 82.1.1.1, do którego ma prawa do zapisu użytkownik root wystaczy wydać poniższe polecenie

root@server:# scp /home/plik.tar root@82.1.1.1:/home/

Powyższym poleceniem plik zostanie wystały na standardowy port 22. Jeśli chcemy użyć innego portu niż domyślny wystarczy dodać przełącznik -P, po którym podajemy nr portu jak poniżej.

root@server:# scp -P 5900 /home/plik.tar root@82.1.1.1:/home/

 

Serwer czasu NTP w Ubuntu 12.04

Instalacja serwera czas uw Ubuntu:

root@server:# apt-get install ntp

Program ntpd może w systemie pełnić zarówno funkcję serwera (być wzorcem czasu dla innych maszyn), jak również klienta (synchronizować lokalny zegar z serwerami czasu).

Warto po instalacji ntpd usunąć z systemu poprzedni – przestarzały program do synchronizacji czasy ntpdate.

root@server:# apt-get remove ntpdate

Następnym krokiem jest konfiguracja serwera czasu. Edytujemy plik konfiguracyjny:

root@server:# vim /etc/ntp.conf

Zamiast domyślnych wzorców czasu podajemy własne komentując jednocześnie pozostałe. Najlepiej jest podać kilka serwerów czasu zlokalizowanych blisko nas, do których pingi są najkrótsze.

server tempus1.gum.gov.pl iburst
server tempus2.gum.gov.pl
server ntp1.tp.pl
server ntp2.tp.pl

Powyżej najpopularniejsze serwery czasu w Polsce. Przy jednym z nich (który ma najmniejsze opóźnienie), na końcu warto dodać parametr iburst, który przyspieszy synchronizację czasu z tym serwerem.

Dodanie poniższych linijek na końcu listy serwerów czasu nie będzie powodowało błędów w działaniu naszego ntp w przypadku braku dostępu do Internetu.

server tempus1.gum.gov.pl iburst
server tempus2.gum.gov.pl
server ntp1.tp.pl
server ntp2.tp.pl
server 127.127.1.0
fudge 127.127.1.0 stratum 10

Ostatnia rzecz do ustawienia to pozwolenie naszym maszynom z sieci lokalnej na pobieranie czasu z serwera ntp. Dodajemy poniższą linijkę na końcu pliku konfiguracyjnego.

restrict 192.168.1.0 mask 255.255.255.0 notrap nomodify nopeer noquery

Po zmianie konfiguracji restartujemy serwer czasu:

root@server:#/ service ntp restart

W celu zmiany strefy czasowej w Ubuntu wydajemy z konsoli polecenie:

root@server:# dpkg-reconfigure tzdata

Jeśli chcemy, żeby system używał lokalnego czasu, wydajemy komendę:

root@server:# vim  /etc/default/rcS

i zmieniamy lub dodajemy poniższą sekcję do pliku konfiguracyjnego:

# Set UTC=yes if your hardware clock is set to UTC (GMT)
UTC=no

Sprawdzamy czy serwer ntp jest uruchomiony:

root@server:# /etc/init.d/ntp status

Sprawdzamy czy system potrafi rozwiązać nazwę serwera czasu na jego adres IP (zamiast ntp1.tp.pl wstawiamy serwery czasy umieszczone w pliku konfiguracyjnym ntp.conf)

root@server:# host ntp1.tp.pl

Sprawdzanie różnic pomiędzy naszym serwerem, a serwerami z konfigu:

root@server:# ntpq --numeric --peer

lub (pomijając parametr „n” adresy IP serwerów czasu  będą rozwiązane na ich nazwy):

root@server:# ntpq -n -p

Najlepiej jak w pierwszej kolumnie są * i dużo + przed adresami IP serwerów czasu natomiast parametr reach (cel) ma wartość 377. W polu when mamy podany czas w s jaki upłynął od ostatniego kontaktu z danym serwerem czasu.

Parametr delay (opóźnienie) jest podany w milisekundach. Dla lokalnej sieci powinien wynosić poniżej 1, serwerów ISP poniżej 10, idealny dla Wi-Fi poniżej 100. offset też jest wyrażony w milisekundach i oznacza bieżącą różnicę pomiędzy serwerami czasu, a naszym serwerem. Im mniejsza różnica tym lepiej. jitter oznacza oszacowany błąd wewnętrznego zegara – im mniej tym lepiej. Jeśli ten parametr jest stosunkowo wysoki może powodować to pływanie zegara systemowego, gdyż server ntp będzie dostosowywał zegar systemowy do czasu wzorcowego zbyt często.

Przydatnymi poleceniami mogą być:

root@server:# ntpdc -c loopinfo

różnica w sekundach pomiędzy zegarem systemowym, a zegarem serwera czasu obliczona podczas ostatniej synchronizacji,

root@server:# ntpdc -c kerninfo

wyświetlenia bieżącej, pozostałej do przeprowadzenia korekty czasu zegara systemowego.

Zabezpieczenie Binda w iptables

Jak odpowiadać na rekursywne ataki DNS, DoS lub DDoS?

Poniżej kilka przykładów konfiguracji iptables:

Objawem ataków jest wpis w logach Binda podobny do poniższego i powtarzający się nawet kilka razy na sekundę z różnych adresów IP lub cały czas z tego samego.

query (cache) 'isc.org/ANY/IN'

Na początku przed innymi regułami dotyczącymi DNS’a należy dodać poniższe wpisy i zrestartować firewalla:

PUBLIC_IF=eth0 //interfejs sieciowy publiczny
IPTABLES=/sbin/iptables //ścieżka do iptables

$IPTABLES -A INPUT -i $PUBLIC_IF -p udp --dport 53 -m recent --set
$IPTABLES -A INPUT -i $PUBLIC_IF -p udp --dport 53 -m recent --update --seconds 30 --hitcount 10 -j DROP

lub inny przykład:

PUBLIC_IF=eth0 //interfejs sieciowy publiczny
IPTABLES=/sbin/iptables //ścieżka do iptables

$IPTABLES -A INPUT -i $PUBLIC_IF -p udp --dport 53 -m recent --update --seconds 30 -j DROP
$IPTABLES -A INPUT -i $PUBLIC_IF -p udp --dport 53 -m recent --update --seconds 30 --hitcount 10 --rttl --set -j DROP

poniższe też może być ciekawe:

PUBLIC_IF=eth0 //interfejs sieciowy publiczny
IPTABLES=/sbin/iptables //ścieżka do iptables

$IPTABLES -A INPUT -i $PUBLIC_IF -d $MAIN_IP -p udp --dport 53 -m state --state ESTABLISHED,RELATED -j DROP

Log systemowy wyświetlany w konsoli | Ubuntu

W celu debugowania błędów systemowych możemy wyświetlać w czasie rzeczywistym log systemowy bezpośrednio w konsoli. Wystarczy wydać polecenie:

tail -f /var/log/syslog

wyświetlanie logów możemy zakończyć poprzez naciśnięcie CTRL+C.

SMART status w konsoli Ubuntu

Z konsoli możemy odczytać parametry SMART dysku poniższym poleceniem:

root@server:/# smartctl -i /dev/sda

powyższe wyświetli status dla pierwszego dysku SATA, dla drugiego zamiast sda należy użyć sdb.

Jeśli chcemy poznać wszystkie dostępne informacje wpisujemy w konsoli:

root@server:/# smartctl --all /dev/sda
Najważniejsze parametry będą w podobnej tabeli do poniższej:
SMART Attributes Data Structure revision number: 10
Vendor Specific SMART Attributes with Thresholds:
ID# ATTRIBUTE_NAME          FLAG     VALUE WORST THRESH TYPE      UPDATED  WHEN_FAILED RAW_VALUE
  1 Raw_Read_Error_Rate     0x000f   113   093   006    Pre-fail  Always       -       55265791
  3 Spin_Up_Time            0x0003   094   094   000    Pre-fail  Always       -       0
  4 Start_Stop_Count        0x0032   100   100   020    Old_age   Always       -       339
  5 Reallocated_Sector_Ct   0x0033   099   099   036    Pre-fail  Always       -       52
  7 Seek_Error_Rate         0x000f   084   060   030    Pre-fail  Always       -       9114224572
  9 Power_On_Hours          0x0032   070   070   000    Old_age   Always       -       26496
 10 Spin_Retry_Count        0x0013   100   100   097    Pre-fail  Always       -       0
 12 Power_Cycle_Count       0x0032   100   100   020    Old_age   Always       -       381
187 Reported_Uncorrect      0x0032   100   100   000    Old_age   Always       -       0
189 High_Fly_Writes         0x003a   100   100   000    Old_age   Always       -       0
190 Airflow_Temperature_Cel 0x0022   063   046   045    Old_age   Always       -       37 (Min/Max 37/38)
194 Temperature_Celsius     0x0022   037   054   000    Old_age   Always       -       37 (0 15 0 0)
195 Hardware_ECC_Recovered  0x001a   076   048   000    Old_age   Always       -       180860773
197 Current_Pending_Sector  0x0012   100   100   000    Old_age   Always       -       0
198 Offline_Uncorrectable   0x0010   100   100   000    Old_age   Offline      -       0
199 UDMA_CRC_Error_Count    0x003e   200   200   000    Old_age   Always       -       0
200 Multi_Zone_Error_Rate   0x0000   100   253   000    Old_age   Offline      -       0
202 Data_Address_Mark_Errs  0x0032   100   253   000    Old_age   Always       -       0

Jeśli nie mamy zainstalowanego powyższego programu wydajemy polecenie:

root@server:/# apt-get install smartmontools

Pomoc na temat opcji programu możemy uzyskać poprzez wpisanie:

root@server:/# smartctl --help

Interpretacja otrzymanych wyników w oddzielnym artykule.

Brakujące klucze GPG w repozytoriach Ubuntu

Zdarza się, że podczas aktualizowania repozytoriów ukaże nam się komunikat typu:

Błąd GPG: http://mirrors.dotsrc.org natty-getdeb Release: \
Następujące podpisy nie mogły zostać zweryfikowane z powodu \
braku klucza publicznego: NO_PUBKEY A8A515F046D7E7CF

aby to naprawić wydajemy z konsoli jako root poniższą komendę:

apt-get update 2 > /tmp/keymissing; for key in $(grep "NO_PUBKEY" /tmp/keymissing |sed "s/.*NO_PUBKEY //"); do echo -e "nProcessing key: $key"; gpg --keyserver subkeys.pgp.net --recv $key && sudo gpg --export --armor $key | apt-key add -; done

potem usuwamy plik keymissing:

rm /tmp/keymissing

Po tych operacjach nie powinno być problemu z kluczami

Zamiana lub usunięcie znaku końca linii ^M w vim’ie

Aby usunąć DOS’owy znak końca lini ^M widoczny w vim’ie wystarczy wydać w nim poniższe polecenie, które usunie wszystkie znaki ^M (aby wpisać znak końca linii wybieramy kombinacje Ctrl + v później Ctrl + m):

:%s/\r//g

Jeśli chcemy zamienić znak końca linii ^M na np. * wydajemy w vim’ie polecenie

:%s/\r/*/g

możemy też chcieć zatwierdzać każdą zmianę, wtedy wydajemy polecenie:

:%s/\r/*/gc

Usunięcie znaków końca linii ^M można również dokonać poniższą komendą wydaną z wiersza poleceń:

tr -d "\015" < plik_do_zmiany > plik_zmieniony

Konwersji plików z formatu DOS na format Linux możemy dokonać poniższym polecenie:

:e ++ff=dos
:setlocal ff=unix

w drugą stronę z Linux na DOS:

:e ++ff=dos

lub (znak ^V wybieramy wciskając dwukrotnie Ctrl + v)

:%s/\r/^V^M/gc

Oczywiście we wszystkich przypadkach po konwersji należy zapisać plik poleceniem:

:w

Zwiększenie rozdzielczości ekranu w Ubuntu na VirtualBox’ie

VirtualBox Oracla wspiera różne rodzaje systemów operacyjnych Linux w tym Ubuntu. Po zainstalowaniu Ubuntu (testowane na 11.10) domyślna rozdzielczość jest ustawiona na 1024 x 768 i nie ma możliwości jej zmiany, ani z poziomu VirtualBox’a ani w ustawieniach Ubuntu. Za pomocą narzędzia VirtualBox Guest Additionsz najdującego się w repozytoriach Ubuntu można zmieniać dynamicznie rozdzielczość podczas skalowania okna maszyny wirtualnej, udostępniać schowek hostowi oraz przesyłać pomiędzy hostem i maszyną wirtualną pliki oraz katalogi. W celu zainstalowania narzędzia VirtualBox Guest Additionsz wystarczy wydać z konsoli polecenie:

sudo apt-get install virtualbox-guest-dkms

Powyższe polecenie wydajemy oczywiście z konsoli gościa VirtualBox’a jakim w naszym przypadku jest Ubuntu. Po ponownym uruchomieniu systemu gościa będziemy mieli możliwość zmiany rozdzielczości ekranu, współdzielenia schowka oraz udostępniania plików i katalogów.

Porty VPN i RDP – konfiguracja firewall iptables

Windows 2008 server ma możliwość skonfigurowania dostępu RDP poprzez bezpieczny tunel VPN (opis w oddzielnym artykule). Jednak żeby to działało, należy otworzyć na Firewall’u i przekierować na routerze poniższe porty dla poszczególnych rodzajów połączeń:

  1. PPTP: 1723 TCP 47 GRE
  2. L2TP over IPSEC: 1701 TCP 500 UDP
  3. SSTP: 443 TCP

dla iptables:

adres_vpn_zewn=123.123.123.123 #podajemy swoje zewnętrzne IP
adres_vpn_wew=192.168.1.1 #podajemy adres IP serwera Windows 2008
IPTABLES=/sbin/iptables #podajemy ścieżkę do iptables

$IPTABLES -t nat -A PREROUTING -d $adres_vpn_zewn -p tcp --dport 1723 -j DNAT --to $adres_vpn_wew:1723
$IPTABLES -t nat -A PREROUTING -d $adres_vpn_zewn -p gre -j DNAT --to $adres_vpn_wew

może być potrzeba dodania regułek forward z zewnątrz w iptables:

$IPTABLES - A FORWARD -i eth0 -d $adres_vpn_wew -p tcp --dport 1723 -j ACCEPT
$IPTABLES - A FORWARD -i eth0 -d $adres_vpn_wew -p gre -j ACCEPT

i ewentualnie z wewnątrz (w zależności od konfiguracji firewalla):

$IPTABLES - A FORWARD -i eth1 -s $adres_vpn_wew -p gre -j ACCEPT

Powyższe powinno działać dla wszystkich wersji serwerowych Microsoftu, które posiadają możliwość skonfigurowania tunelu VPN.

Jeśli chcemy mieć dostęp z zewnątrz do pulpitu zdalnego lokalnego komputera, wystarczy przekierować port 3389 jak poniżej:

ETH2=eth0 #podajemy nazwę interfejsu zewnętrzengo
adres_vpn_zewn=123.123.123.123 #podajemy swoje zewnętrzne IP
adres_vpn_wew=192.168.1.100 #podajemy adres IP komputera z systemem Windows
IPTABLES=/sbin/iptables #podajemy ścieżkę do iptables

$IPTABLES -t nat -A PREROUTING -d $adres_vpn_zewn -p tcp --dport 3389 -j DNAT --to $adres_vpn_wew:3389
$IPTABLES -A FORWARD -i $ETH0 -d 192.168.1.100 -p tcp --dport 3389 -j ACCEPT