wtorek, 17 listopada 2009

Konfiguracja GPS po Bluetooth do pracy z Kismet

Kismet to program komputerowy pozwalający na pasywne wykrywanie bezprzewodowych sieci lokalnych. Umożliwia sniffing i posiada pewne cechy systemu IDS dla sieci 802.11. Kismet działa z dowolnymi kartami WiFi jednak karta musi obsługiwać tryb monitora. Kismet pozwala na przechwytywanie ramek warstwy drugiej 802.11b, 802.11a oraz 802.11g.
Jeśli posiadamy więc GPS z Bluetooth i chcielibyśmy go podłączyć do programu Kismet w celu logowania pozycji gdzie znaleziono dana sieć to musimy wykonać następujące czynności, na początek wyszukujemy urządzenia
hcitool scan
wynik powinien być podobny do
00:0B:0D:23:47:24 MAINNAV-GPS
w moim przypadku jest to GPS MAINNAV MG-950DL DataLogger, następnie edytujemy plik
/etc/bluetooth/rfcomm.conf
i dopisujemy
rfcomm0 {
# Automatically bind the device at startup
bind yes;

# Bluetooth address of the device
device 00:0B:0D:23:47:24;

# RFCOMM channel for the connection
channel 1;

# Description of the connection
comment "MAINNAV-GPS";
}
gdzie
00:0B:0D:23:47:24
to adres urządzenia uzyskany w wyniku wpisania pierwszej komendy, następnie powinniśmy wykonać reboot lub wydać komendę
rfcomm bind rfcomm0
w kolejnym kroku wydajemy komendę
dpkg-reconfigure gpsd
i jako urządzenie podajemy
/dev/rfcomm0
restartujemy gpsd
/etc/init.d/gpsd restart
sprawdzamy czy wszystko działa jak należy
# telnet localhost 2947
# r
powinien się wyświetlić log podobny do
$GPRMC,000000,V,5015.2810,N,01751.2797,E,0.0000,0.000,000000,,*38
$GPRMC,213558,V,5015.2810,N,01751.2797,E,0.0000,0.000,171109,,*3F
$GPGSA,A,1,,,,,,,,,,,,,,,,*32
$GPRMC,000000,V,5015.2810,N,01751.2797,E,0.0000,0.000,000000,,*38
$GPRMC,213559,V,5015.2810,N,01751.2797,E,0.0000,0.000,171109,,*3E
$GPGSA,A,1,,,,,,,,,,,,,,,,*32
jeśli tak się stało, oznacza to, że GPS działa już po Bluetooth, teraz mała uwaga, wysoce zalecam instalacje najnowszej wersji Kismeta, aktualnie jest to Kismet-2009-06-R1, ponieważ znacznie różni się od poprzednich wersji, łącznie z plikiem konfiguracyjnym
/usr/local/etc/kismet.conf
który powinien tak wyglądać w części z GPS
[...]
# Do we have a GPS?
gps=true
# Do we use a locally serial attached GPS, or use a gpsd server?
# (Pick only one)
gpstype=gpsd
# gpstype=serial
# What serial device do we look for the GPS on?
gpsdevice=/dev/rfcomm0
# Host:port that GPSD is running on. This can be localhost OR remote!
gpshost=localhost:2947
# Do we lock the mode? This overrides coordinates of lock "0", which will
# generate some bad information until you get a GPS lock, but it will
# fix problems with GPS units with broken NMEA that report lock 0
gpsmodelock=false
# Do we try to reconnect if we lose our link to the GPS, or do we just
# let it die and be disabled?
gpsreconnect=true
[...]
od najnowszej wersji Kismet ma również standardowo włączony GPS, we wcześniejszych wersjach trzeba edytować kismet.conf i dostosować go do powyższego wycinku z pliku konfiguracyjnego.

poniedziałek, 16 listopada 2009

Synchronizacja czasu

Wraz z rozwojem Internetu zwiększa się ilość spraw i transakcji obsługiwanych drogą elektroniczną. Wymusza to konieczność uporządkowania zdarzeń i ich rejestrację zgodną z chronologią czasu. Elektroniczne systemy bilingowe, elektroniczna bankowość, obsługa giełd i sklepów to jedynie wybrane przykłady e-biznesu w których czas jest krytyczny dla prawidłowego funkcjonowania całych rozwiązań.
Niestety współczesne zegary komputerowe nie należą do dobrych mierników czasu i dlatego ich synchronizację coraz częściej powierza się publicznym serwerom czasu dostępnym w Internecie.
Automatyczna synchronizacja czasu pod Debianem jest bardzo prosta, na początek instalujemy pakiet ntpdate
apt-get install ntpdate
następnie edytujemy plik konfiguracyjny
nano /etc/default/ntpdate
i zamieniamy jego zawartość (aktualna wersja 1:4.2.4p6+dfsg-2, w przyszłości format pliku może ulec zmianie) na
# The settings in this file are used by the program ntpdate-debian, but not
# by the upstream program ntpdate.

# Set to "yes" to take the server list from /etc/ntp.conf, from package ntp,
# so you only have to keep it in one place.
NTPDATE_USE_NTP_CONF=no

# List of NTP servers to use (Separate multiple servers with spaces.)
# Not used if NTPDATE_USE_NTP_CONF is yes.
NTPSERVERS="ntp1.tp.pl ns1.net.icm.edu.pl ntp.coi.pw.edu.pl ntp.us.edu.pl ntp.nask.pl"

# Additional options to pass to ntpdate
NTPOPTIONS=""
w dowolnym momencie możemy również synchronizować zegar ręcznie po przez wydanie komendy
ntpdate ntp.icm.edu.pl
oczywiście możemy wybrać dowolne serwery czasu, ich lista znajduje się na oficjalnej stronie www.ntp.org żeby sprawdzić czy nasz system synchronizuje zegar automatycznie należy sprawdzić logi systemowe
cat /var/log/syslog | grep ntpdate | tail -5

sobota, 14 listopada 2009

Przygotowanie ZyDAS ZD1211 do pracy z aircrack-ng suite

ZyDAS ZD1211 jest kartą WiFi, którą standardowo dostajemy przy zakupie Neostrady z routerem Livebox (Sagem F@st 3202) w Telekomunikacji Polskiej. Karta idealnie współpracuje z programami ze stajni aircrack-ng w tym obsługuje wstrzykiwanie pakietów (injection). Na początek instalujemy firmware
wget http://kent.dl.sourceforge.net/sourceforge/zd1211/zd1211-firmware-1.4.tar.bz2
tar jxvf zd1211-firmware-1.4.tar.bz2
mv zd1211-firmware /lib/firmware/zd1211
rm zd1211-firmware-1.4.tar.bz2
następnie
wget http://wireless.kernel.org/download/compat-wireless-2.6/compat-wireless-2.6.tar.bz2
tar xfj compat-wireless-2.6.tar.bz2
cd compat-wireless-*
wget http://www.zlaten.biz/tmp/zd1211rw-inject+dbi-fix-2.6.26.patch
wget http://patches.aircrack-ng.org/mac80211.compat08082009.wl_frag+ack_v1.patch
patch -Np0 -i zd1211rw-inject+dbi-fix-2.6.26.patch
patch -Np1 -i mac80211.compat08082009.wl_frag+ack_v1.patch
make
make install
make unload
modprobe zd1211rw
przypadku wystąpienia błędu
make: *** /lib/modules/2.6.30-2-686/build: No such file or directory. Stop.
pod Debianem wpisujemy
apt-get install linux-headers-$(uname -r)
na koniec pozostaje przetestowanie wstrzykiwania pakietów
airmon-ng start wlan0
aireplay-ng -9 mon0
jeśli wynikiem powyższych komend jest
# aireplay-ng -9 mon0
14:03:53 Trying broadcast probe requests...
14:03:53 Injection is working!
to znaczy, że wszystko przebiegło poprawnie.

czwartek, 12 listopada 2009

Grsecurity

Grsecurity jest popularną łatą nakładaną na kod źródłowy jądra Linux, zwiększającą jego bezpieczeństwo, dzięki czemu możemy uniknąć wielu ataków zdalnych i lokalnych. Na wstępnie chciałbym zaznaczyć, że nie polecam instalowania grsec na desktopach, a jedynie serwerach, ponieważ wynika z tego powodu wiele problemów, m.in. z odpaleniem środowiska graficznego. Instalacja nie jest zbytnio skomplikowana, opiszę ją tradycyjnie na przykładzie dystrybucji Debian GNU/Linux oraz wersji kernel 2.6.31.5, w przypadku instalacji nowszej wersji potrzeba tylko zwrócić uwagę żeby zmienić numer wersji w komendach. Mała uwaga, przykładowy plik z patchem grsec ma nazwę
grsecurity-2.1.14-2.4.37.7-200911101931.patch
oznacza to, że łatka jest w wersji 2.1.14 dla kernela 2.4.37.7 (wiec trzeba korzystać dokładnie z tych źródeł kernela) oraz data jej wydania. Na początek instalujemy wymagane pakiety
apt-get update;apt-get install kernel-package libncurses5-dev build-essential
następnie ściągamy kernela oraz łatkę
cd /usr/src
wget http://grsecurity.net/test/grsecurity-2.1.14-2.6.31.5-200910312135.patch
wget http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.31.5.tar.bz2
rozpakowujemy kernela oraz patchujemy go
tar -xjf linux-2.6.31.5.tar.bz2
patch -p0 < grsecurity-2.1.14-2.6.31.5-200910312135.patch
następnie wybór polityki grsec
cd linux-2.6.31.5
make menuconfig
w menu wybieramy
Security options > Grsecurity > Security Level > High
Security options > Grsecurity > Sysctl support > Sysctl support
Security options > Grsecurity > Sysctl support > Turn on features by default
w tym wypadku wybraliśmy najwyższą politykę bezpieczeństwa grsec, ich dokładny opis można przeczytać pod tym adresem, następnie przechodzimy do kompilacji kernela
make-kpkg clean
make-kpkg --initrd kernel_image kernel_headers
po kompilacji instalujemy gotowe paczki
cd /usr/src
dpkg -i linux-headers-2.6.31.5.10112009-grsec_2.6.31.5.10112009-grsec-10.00.Custom_i386.deb
dpkg -i linux-image-2.6.31.5.10112009-grsec_2.6.31.5.10112009-grsec-10.00.Custom_i386.deb
tworzymy plik initrd
update-initramfs -k 2.6.31.5.10112009-grsec -c
na koniec trzeba jeszcze tylko edytować menu gruba
/boot/grub/menu.lst
i upewnić się czy wszystko jest dobrze dopisane analogicznie do standardowego wpisu z pierwotnie zainstalowanym kernelem
title Debian GNU/Linux, kernel 2.6.31.5-grsec
root (hd0,0)
kernel /boot/vmlinuz-2.6.31.5-grsec root=/dev/sda1 ro
initrd /boot/initrd.img-2.6.31.5-grsec
prawdopodobnie będzie brakowało linijki
initrd /boot/initrd.img-2.6.31.5-grsec
która trzeba będzie dopisać ręcznie, następnie restartujemy system i przy starcie w menu gruba wybieramy nowy kernel :-).

niedziela, 12 kwietnia 2009

Ściąganie plików z wrzuta.pl

Ostatnio serwis wrzuta.pl "zabezpieczył się" przed ściąganiem plików znanym już wszystkim sposobem. Przełamanie tych "zabezpieczeń" nie należy do najtrudniejszych rzeczy, wystarczy odpalić pierwszy lepszy sniffer.



powyższy przykład dla pliku "Inna - Hot (Radio Edit).mp3", dostajemy 2 linki
http://djlora.wrzuta.pl/sr/f/3xvGQzK5dah
http://c.wrzuta.pl/wa9735/31adfe7a00190817490b02c4/0/inna%20-%20hot%20%28radio%20edit%29.mp3

jak widać cała filozofia sprowadza się do zamiany fragmentu linku
/audio/
na
/sr/f/

Powyższy sposób działa praktycznie na wszystkie serwisy tego typu.

czwartek, 2 kwietnia 2009

Budowanie paczek deb

deb - format pakietu instalacyjnego używanego przez system operacyjny Debian GNU/Linux i jego pochodne np. Ubuntu. Pakiet deb (i jego instalator dpkg) posiada zaawansowaną kontrolę powiązań i zależności pomiędzy poszczególnymi składnikami systemu - programami i używanymi przez nie bibliotekami. Dzięki temu instalując nowy program ma się pewność, że nie będzie miał miejsca konflikt z innymi zainstalowanymi programami. W przeciwnym wypadku instalowany program mógłby przerwać funkcjonowanie z powodu braku poszczególnych składników, które są wymagane do prawidłowego działania.
Po krótkim wstępie, przejdźmy do sedna sprawy, wbrew pozorom, budowa paczek deb nie należy do najłatwiejszych rzeczy, szczególnie jeśli budujemy paczki do oficjalnego repozytorium. Na początek musimy wybrać oczywiście jakiś program (bądź bibliotekę itp.) z którego chcemy zrobić paczkę w tym przykładzie omówię budowę paczki mpview, którą zbudowałem do oficjalnego repozytorium Debiana (i swoją drogą nie została dodana, przynajmniej do czasu, aż nie ukaże się nowa wersja programu, ponieważ sądzą, że projekt mpview umarł, jednak nikt nie raczył zdjąć flagę RFP - Request For Packing). Na początek oczywiście musimy pobrać program z którego będziemy robić paczkę, następnie tworzymy jakiś katalog, np. debian, przenosimy do niego archiwum ściągniętego programu. Ogólnie mówiąc w katalogu debian powinniśmy mieć teraz
mpview-0.4.1/
mpview-0.4.1.tar.gz
ależy tutaj zwrócić uwagę na format
program-wersja/
program-wersja.tar.gz
archiwum programu musi mieć rozszerzenie tar.gz, jeśli nie ma, to musimy przepakować, następnie wpisujemy
export DEBFULLNAME="Imię Nazwisko"
i w katalogu
mpview-0.4.1/
wydajemy polecenie
dh_make -e adres@e-mail -c licencja -f ../archiwum.tar.gz
przy parametrze -c możemy wybrać gpl, lgpl, artistic, bsd, jeśli program nie jest pod żadną z tych licencji, opuszczamy parametr, po wydaniu powyższego polecenia w katalogu powinien pojawić się podkatalog o nazwie debian, jeśli budujemy nieskomplikowaną paczkę potrzebne będą nam tylko pliki
changelog
compat
control
copyright
rules
watch
do pliku compat wystarczy wpisać 7
echo 7 > compat
na początek zajmijmy się najważniejszym plikiem, którym jest control
Source: mpview
Section: graphics
Priority: optional
Maintainer: Adam Ziaja <adam{@}ziaja.name>
Build-Depends: debhelper (>= 7), autotools-dev, libbz2-1.0 (>= 1.0.5-1~), libexpat1 (>= 2.0.1-4), libfftw3-dev (>= 3.1.2-3.1), libfontconfig1 (>= 2.6.0-3), libfreetype6-dev (>= 2.3.7-2), libgmp3c2 (>= 2), libice6 (>= 2), libjpeg62-dev (>= 6b-14), libpng12-dev (>= 1.2.27-2), libsm6 (>= 2), libtiff4-dev (>= 3.8.2-11), libx11-6 (>= 2), libxau6 (>= 1), libxcb1 (>= 1.1-1.1), libxdmcp6 (>= 1), libxext6 (>= 2), libxt6 (>= 1), zlib1g-dev (>= 1), qt4-qmake, libqt4-dev
Standards-Version: 3.8.1
Homepage: http://mpview.sourceforge.net

Package: mpview
Architecture: any
Depends: ${shlibs:Depends}, ${misc:Depends}
Description: MP View is cross-platform image viewer with possibility of image manipulation
MP View is cross-platform image viewer with possibility of image
manipulation (crop, resize, running filters), based on CImg and Qt.
Być może zauważyłeś, że Debian jest podzielony na następujące sekcje: main (zawiera wolne oprogramowanie), non-free (zawiera oprogramowanie, które nie jest wolne) i contrib (zawiera wolne oprogramowanie, które zależy od oprogramowania, które nie jest wolne). Dodatkowo każda z sekcji dzieli się na logiczne podsekcje, które skrótowo opisują, do czego służy dany pakiet. Mamy zatem sekcję admin, która zawiera programy przeznaczone tylko dla administratora systemu, base z podstawowymi narzędziami, devel z narzędziami programistów, doc z dokumentacją, libs z bibliotekami, mail z programami do obsługi poczty elektronicznej, net z aplikacjami sieciowymi i demonami usług sieciowych, sound z aplikacjami muzycznymi, graphics z aplikacjami graficznymi, x11 z programami dla systemów X11, które nie pasują nigdzie indziej i wiele innych. Zmieńmy zatem Section na graphics. Prefiks "main/" jest przyjmowany domyślnie, więc możemy go pominąć. W kolejnej linii mamy Priority, pełną listę priorytetów można znaleść tutaj. Maintainer to oczywiście, osoba, która stworzyła paczkę, Build-Depends chwilowo pomińmy, Homepage to strona domowa programu, Architecture opisuje architekturę procesora, dla którego może być skompilowany pakiet. Pozostawimy w niej any, gdyż pakiet dpkg-gencontrol(1) sam wstawi w tym miejscu odpowiednią wartość dla każdego typu maszyny, na której kompilowany jest pakiet. Description jest opisem paczki, format powinien wyglądać następująco
Description: Krótki opis
[dwie spacje odstępu]dłuższy opis, dłuższy opis, dłuższy opis, załamanie linii
[dwie spacje odstępu]dalszy ciąg opisu
[dwie spacje odstępu]opcjonalnie kolejne linie
wróćmy teraz do Build-Depends, jest to lista zależności pakietów, które wymagane są do poprawnej instalacji naszej paczki i działania samego programu. Aby stworzyć taką wstępną listę, można posłużyć się skryptem
#!/bin/bash
strace -f -o /tmp/log ./configure
# or make instead of ./configure, if the package doesn't use autoconf
for x in `dpkg -S $(grep open /tmp/log|\
perl -pe 's!.* open\(\"([^\"]*).*!$1!' |\
grep "^/"| sort | uniq|\
grep -v "^\(/tmp\|/dev\|/proc\)" ) 2>/dev/null|\
cut -f1 -d":"| sort | uniq`; \
do \
echo -n "$x (>=" `dpkg -s $x|grep ^Version|cut -f2 -d":"` "), "; \
done
należy tutaj pamiętać o jak najbardziej optymalnym doborze parametrów do ./configure listę tych parametrów możemy zobaczyć wpisując
./configure --help
w głownym katalogu programu, skrypt wypisze nam listę wymaganych pakietów, niestety jeśli ma to być paczka do oficjalnego repozytorium to nie jest to koniec :-P, w całej liście edytujemy ciąg znaków (występuje w wersji pakietu)
-1)
i
-1 )
zamieniając go ciągiem
-1~)
następnie usuwany pakiety, które są wymagane w systemie jak np.
locales (>= 2.7-18)
i pakiety, które są wymagane przez inne pakiety wchodzące w listę wymaganych przez nas pakietów (masło maślane ;-P), założenie jest takie, że lista powinna być jak najkrótsza i zawierać tylko rzeczywiście wymagane pakiety. Przejdźmy do kolejnego pliku którym jest rules, przy opisie poprzedniego, nie na daremno zostawiłem opis Build-Depends na koniec, teraz musimy dopisać do pliku rules w odpowiednim miejscu parametry, które dopisaliśmy w skrypcie do generowania listy wymaganych pakietów, a także inne wymagane komendy (jeśli takie były wymagane, np. export jakieś wartości) do kompilacji programu. Przejdźmy zatem do kolejnego pliku, watch jest plikiem dzięki, któremu repozytorium może kontrolować czy nie zostały wydane nowsze wersje programu, standardowo mamy w tym pliku (watch.ex od example, z ang. przykład) różne przykłady dla popularnych stron, np. dla tego programu zawartość pliku była następująca
version=3
http://sf.net/mpview/mpview-(.*)\.tar\.gz
ponieważ strona programu znajduje się na sourceforge.net (sf.net), następnym plikiem, który omówię będzie changelog, jest to plik, który powinien zawierać odnotowane wszystkie dokonywane zmiany, przykładowo plik dla tego programu wygląda
mpview (0.4.1-1) unstable; urgency=low

* Initial release (Closes: #469088).

-- Adam Ziaja <adam{@}ziaja.name> Thu, 26 Mar 2009 12:26:55 +0100
w tym wyypadku Closes: #469088 odpowiada za zamknięcie "bug'u" numer 469088, oczywiście cały plik musi mieć wyżej napisany format, czyli przykładowo w ostatniej linii na początku przed myślnikami musi być spacja itp, niczego nie robiłem, żeby ładnie wyglądało, wszystko to jest wymagane, aby oprogramowanie mogło automatycznie odczytywać treść po przez parsowanie wszystkich tych plików, ostatnim już wymaganym (przynajmniej w przypadku tego programu, w rzeczywistości może okazać się, że będzie Wam potrzeby któryś z pozostałych plików) plikiem jest copyright, w nim muszą być dodane wszystkie licencje z programu, jeśli jakiś choćby jeden plik ma inna licencję to trzeba go dopisać według obowiązującego formatu, przykładowo plik dla mojej paczki wyglądał następująco
This package was debianized by Adam Ziaja <adam{@}ziaja.name> on
Thu, 26 Mar 2009 12:26:55 +0100.

It was downloaded from http://mpview.sourceforge.net

Upstream Author:

Martin Petricek <martin{@}petricek.net>

Files: *

Copyright:

Copyright (C) 2007-2009 Martin Petricek

License:

This package is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.

This package is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.

You should have received a copy of the GNU General Public License
along with this package; if not, write to the Free Software
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA

On Debian systems, the complete text of the GNU General
Public License can be found in `/usr/share/common-licenses/GPL'.

Files:

src/cimg/CImg.h

Copyright:

Copyright (C) 2008 David Tschumperle

License:

This software is governed by the CeCILL-C license under French law and
abiding by the rules of distribution of free software. You can use,
modify and or redistribute the software under the terms of the CeCILL-C
license as circulated by CEA, CNRS and INRIA at the following URL
"http://www.cecill.info".

As a counterpart to the access to the source code and rights to copy,
modify and redistribute granted by the license, users are provided only
with a limited warranty and the software's author, the holder of the
economic rights, and the successive licensors have only limited
liability.

In this respect, the user's attention is drawn to the risks associated
with loading, using, modifying and/or developing or reproducing the
software by the user in light of its specific status of free software,
that may mean that it is complicated to manipulate, and that also
therefore means that it is reserved for developers and experienced
professionals having in-depth computer knowledge. Users are therefore
encouraged to load and test the software's suitability as regards their
requirements in conditions enabling the security of their systems and/or
data to be ensured and, more generally, to use and operate it in the
same conditions as regards security.

The fact that you are presently reading this means that you have had
knowledge of the CeCILL-C license and that you accept its terms.

The Debian packaging is (C) 2009, Adam Ziaja <adam{@}ziaja.name> and
is licensed under the GPL, see above.
następnie jeśli chcielibyśmy zamieścić paczkę w oficjalnym repozytorium, trzeba posiadać klucz GPG, ale to już temat na oddzielny artykuł, wpisujemy w głównym katalogu programu
debuild
następnie podajemy dwa razy hasło do naszego klucza GPG, przy wydaniu powyższego polecenia może wystąpić wiele błędów np. jeśli jest błąd w linii 1319 to w głównym katalogu programu musi znajdować się plik o nazwie ChangeLog (dokładnie z C i L duże, jeśli jest inaczej to musimy poprawić), jeśli debuild dojdzie do końca, możemy zweryfikować poprawność paczki po przez wydanie polecenia
lintian -Ii *.dsc
w katalogu który utworzyliśmy na początku (~/debian), jeśli paczka nie zawiera żadnych błędów i chcielibyśmy dodać ją do oficjalnego repozytorium to trzeba będzie zarejestrować się na http://mentors.debian.net i dodać nasz klucz GPG, którym podpisaliśmy paczkę, opis budowy pliku konfiguracyjnego programu dupload (który służy do wysyłania paczki na serwer) znajduje się pod tym adresem. Aby załadować paczkę na serwer wydajemy polecenie
dupload -t mentors *.changes
w katalogu ~/debian, następnie logujemy się na stronę i wybieramy opcję, że szukamy sponsora (deweloper Debiana, który może dodać naszą paczkę do oficjalnego repozytorium). Uff, koniec i niech ktoś teraz powie, że budowa takiej paczki to łatwa sprawa, a są osoby (deweloperzy Debiana) które zbudowały po ~100 takich paczek, jednak opisałem tylko sposób budowy prostej paczki, budowa niektórych pakietów jest o wiele trudniejsza :-). PS: w całym opisie pozamieniałem znaczki @ na {@} aby uniknąć spamu.

środa, 1 kwietnia 2009

BIND - konfiguracja serwera DNS

BIND jest jednym z najpopularniejszych serwerów DNS wykorzystywanym w systemach Linux i Unix. BIND stanowi niezmiernie ważny składnik zapewniający poprawne działanie systemu nazw w Internecie. Wielu użytkowników globalnej sieci bezwiednie korzysta z serwera BIND, kiedy ich przeglądarka WWW odpytuje go o adres IP komputera udostępniającego interesującą ich stronę.
Nowa wersja BIND 9 została napisana od zera, aby rozwiązać część problemów z architekturą poprzednich wydań tego programu. Dlatego też warto byłoby nauczyć się go konfigurować dla swoich potrzeb. Artykuł ten będzie opisem konfiguracji serwera DNS pod kontrola systemu operacyjnego Linux Debian, jednak w rzeczywistości jedyne różnice jakie mogą wystąpić to inne ścieżki do plików konfiguracyjnych. Głównym plikiem konfiguracyjnym serwera jest
/etc/bind/named.conf
w nim też będziemy dodawać wszystkie domeny, przykładowo opiszę zaparkowanie domeny ziaja.name, na dole pliku named.conf dodajemy
zone "ziaja.name" IN {
type master;
file "/var/cache/bind/ziaja.name";
allow-update { none; };
allow-transfer { none; };
notify yes;
};
szczególną uwagę należy zwrócić na linie rozpoczynające się od allow, w allow-update dopisujemy IP serwerów, które będą mogły aktualizować naszą strefę, jeśli nasz serwer jest na domowe potrzeby powinniśmy wpisać none, drugi wpis tj. allow-transfer mówi o IP, które mogą widzieć wpisy w naszej domenie, jeśli przykładowo nie uwzględnimy przy parkowaniu allow-transfer, to każda osoba będzie mieć możliwość podglądu wszystkich wpisów w tej domenie po przez wydanie polecenia
dig @IPserweraDNS domena axfr
tak więc warto na to zwrócić uwagę, bo jednak często nawet największe serwisy o to nie dbają, m.in. gov.pl pozwala na taki export po przez dwa serwery dns cocos.fuw.edu.pl i dns3.atman.pl
dig @193.0.80.11 gov.pl axfr
dig @217.17.34.50 gov.pl axfr
również gmach.sejm.gov.pl pozwala na export, tylko w tym wypadku sejm.gov.pl
dig @195.187.137.108 sejm.gov.pl axfr
narzuca się pytanie, czy wszyscy muszą znać np. adres bramy
brama.sejm.gov.pl. 86400 IN A 195.187.136.89
czyli jak już wspomniałem wcześniej, nie jest to raczej korzystne i należy o to zadbać. Następnie powinniśmy utworzyć plik konfiguracyjny strefy
/var/cache/bind/ziaja.name
a w nim
$TTL 120 ; Domyślny TTL
$ORIGIN ziaja.name.
@ IN SOA dns.linux.pl. adam.ziaja.name. (
200901269 ; Numer seryjny
3600 ; Częstość odświeżania (refresh)
1800 ; Częstość powtórek (retry)
1209600 ; Czas wygaśnięcia (expire)
86400 ; Negatywne buforowanie TTL
)
@ IN NS dns.linux.pl.
@ IN A 213.135.50.73
gdzie fragment adam.ziaja.name to adres e-mail admina pisany z kropką zamiast małpy, a dns.linux.pl to adres naszego serwera DNS, przy czym należy pamiętać o kropkach na końcu i o każdorazowej zmianie numeru seryjnego np. na datę z godziną przy zmianie jakiegokolwiek elementu strefy oraz o odświeżeniu stref za pomocą komendy
rndc reload
Na końcu można dopisać dowolną ilość adresów różnego typu, w tym wypadku dopisany jest adres IP 213.135.50.73 IN A dla domeny ziaja.name (należy tutaj zaznaczyć że główny adres w domenie, ten bez subdomen musi wskazywać na IP IN A), kolejnym interesującym nas plikiem konfiguracyjnym będzie
/etc/bind/named.conf.options
w jego zawartości można wpisać np.
options {
directory "/var/cache/bind";
statistics-file "/var/cache/bind/bind.stats";
dump-file "/var/cache/bind/bind.dump";
allow-recursion { 127.0.0.1; };
allow-transfer { none; };
notify yes;
transfer-format many-answers;
listen-on { any; };
listen-on-v6 { any; };
auth-nxdomain yes;
query-source address * port 53;
transfer-source * port 53;
notify-source * port 53;
version "Microsoft DNS Server v1.5 (WinME)";
forwarders { 62.129.252.30; 213.25.47.166; 194.204.159.1; 194.204.152.34; 208.67.222.222; 208.67.220.220; 212.76.33.1; 62.179.1.60; 213.134.134.134; 217.17.34.10; 195.114.173.153; };
};

logging {
channel security_file { file "/var/log/named/security.log" versions 3 size 30m; severity dynamic; print-time yes; };
channel default_file { file "/var/log/named/default.log" versions 3 size 5m; severity dynamic; print-time yes; };
channel general_file { file "/var/log/named/general.log" versions 3 size 5m; severity dynamic; print-time yes; };
channel database_file { file "/var/log/named/database.log" versions 3 size 5m; severity dynamic; print-time yes; };
channel security_file { file "/var/log/named/security.log" versions 3 size 5m; severity dynamic; print-time yes; };
channel config_file { file "/var/log/named/config.log" versions 3 size 5m; severity dynamic; print-time yes; };
channel resolver_file { file "/var/log/named/resolver.log" versions 3 size 5m; severity dynamic; print-time yes; };
channel xfer-in_file { file "/var/log/named/xfer-in.log" versions 3 size 5m; severity dynamic; print-time yes; };
channel xfer-out_file { file "/var/log/named/xfer-out.log" versions 3 size 5m; severity dynamic; print-time yes; };
channel notify_file { file "/var/log/named/notify.log" versions 3 size 5m; severity dynamic; print-time yes; };
channel client_file { file "/var/log/named/client.log" versions 3 size 5m; severity dynamic; print-time yes; };
channel unmatched_file { file "/var/log/named/unmatched.log" versions 3 size 5m; severity dynamic; print-time yes; };
channel queries_file { file "/var/log/named/queries.log" versions 3 size 5m; severity dynamic; print-time yes; };
channel network_file { file "/var/log/named/network.log" versions 3 size 5m; severity dynamic; print-time yes; };
channel update_file { file "/var/log/named/update.log" versions 3 size 5m; severity dynamic; print-time yes; };
channel dispatch_file { file "/var/log/named/dispatch.log" versions 3 size 5m; severity dynamic; print-time yes; };
channel dnssec_file { file "/var/log/named/dnssec.log" versions 3 size 5m; severity dynamic; print-time yes; };
channel lame-servers_file { file "/var/log/named/lame-servers.log" versions 3 size 5m; severity dynamic; print-time yes; };

category security { security_file; };
category default { default_file; };
category general { general_file; };
category database { database_file; };
category security { security_file; };
category config { config_file; };
category resolver { resolver_file; };
category xfer-in { xfer-in_file; };
category xfer-out { xfer-out_file; };
category notify { notify_file; };
category client { client_file; };
category unmatched { unmatched_file; };
category queries { queries_file; };
category network { network_file; };
category update { update_file; };
category dispatch { dispatch_file; };
category dnssec { dnssec_file; };
category lame-servers { lame-servers_file; };
};
gdzie version odpowiada za to jak będzie się przedstawiać nasz serwer DNS, jak zawsze nie jest wskazane korzystanie z oryginalnych bannerów ze względów bezpieczeństwa, forwarders są to adresy IP serwerów DNS do których będą przekazywane zmiany w strefach naszego serwera DNS w celu szybszego rozpropagowania dokonanych zmian, elementy w sekcji logging służą za logowanie poszczególnych zdarzeń, jedyne co można tutaj zmodyfikować to ścieżkę do logów, jeśli nie chcemy logować danych zdarzeń należy usunąć linię odpowiadająca za te zdarzenie. Jęśli posiadamy firewalla (np. iptables) to trzeba będzie dopisać jeszcze reguły
iptables -A INPUT -p tcp --dport 53 -j ACCEPT
iptables -A INPUT -p udp --dport 53 -j ACCEPT
To by było na tyle jeśli chodzi o podstawową konfigurację serwera BIND9 :-).

wtorek, 31 marca 2009

DenyHosts - zaawansowana konfiguracja

DenyHosts jest programem napisanym w Pythonie i jest jednym z najlepszych narzędzi do zabezpieczania SSH przeciw ataków brute force stosowanymi najczęściej przez boty.
Plik konfiguracyjny mieści się w
/etc/denyhosts.conf
w nim będziemy dokonywać całą konfigurację programu, na początek najważniejsza opcja
SECURE_LOG
odpowiada za ścieżkę do logów SSH
HOSTS_DENY
opcja tyczy się również położenia pliku z logami, jeśli instalowaliśmy program z paczki (np. pod Debianem) to nie trzeba tych dwóch pierwszych opcji modyfikować
PURGE_DENY
odpowiada za czas po jakim IP będą odblokowywane, jeśli opcja jest bez parametrów to oznacza to, że nigdy
BLOCK_SERVICE
tutaj ustawiamy czy blokowany ma być dostęp tylko do SSH czy do wszystkich usług serwera, standardowo opcja jest ustawiona na ALL, czyli blokowanie dostępu do wszystkich usług
DENY_THRESHOLD_INVALID
po ilu nieudanych próbach logowania na konta których nie ma w /etc/passwd (ogólnie mówiąc plik z listą kont w systemie) ma być blokowany dostęp, jest to opcja zabezpieczająca przeciw atakom słownikowym
DENY_THRESHOLD_VALID
natomiast ta opcja odpowiada za ilość prób logowania na konta, które istnieją w /etc/passwd
DENY_THRESHOLD_ROOT
ilość prób logowania na konto root (główne konto administratora systemu)
DENY_THRESHOLD_RESTRICTED
odpowiada za ilość prób logowania na konta znajdujące się w /var/lib/denyhosts/restricted-usernames (standardowo), polecam ustawić wartość 1, a do pliku /var/lib/denyhosts/restricted-username dopisać konta, które nigdy nie powinny mieć możliwości logowania na SSH np. mysql, więcej tutaj
ADMIN_EMAIL
tutaj możemy ustawić adres e-mail admina na który mają dochodzić powiadomienia o blokowaniu danego IP, raczej nie polecam ustawiania tej opcji na większych serwerach :-), wszystkie opcje zaczynające się od
SMTP_
odpowiadają za sposób wysyłania poczty i dane konta z którego będzie wysyłane powiadomienie o blokadzie, natomiast wszystkie opcje zaczynające się od
AGE_RESET_
odpowiadają za czas naliczania prób logowania
SYNC_SERVER
bardzo przydatna opcja pozwalająca na synchronizację bazy blokowanych adresów IP, szczerze polecam
SYNC_INTERVAL
czas co ile lista będzie synchronizowana baza
SYNC_UPLOAD
czy program ma wysyłać zablokowane przez nasz serwer adresy IP
SYNC_DOWNLOAD
czy program ma ściągać listę IP zablokowanych adresów przez innych użytkowników programu, polecam obie powyższe opcje włączyć (yes)
SYNC_DOWNLOAD_THRESHOLD
bardzo ważna opcja, ile różnych serwerów musi wysłać dane IP, żeby zostało zablokowane na naszym serwerze, polecam wartość 3 lub więcej, to by było na tyle w temacie konfiguracji DenyHosts :).

Fail2ban - podstawy konfiguracji

Fail2ban jest jednym z podstawowych narzędzi wspomagających zabezpieczanie serwerów opartych o system Linux. Program ten napisany jest w Pythonie i w skrócie mówiąc kontroluje logi, a gdy zachodzi taka potrzeba to dodaje regułę do firewalla, aby odciąć dostęp intruzowi (zazwyczaj botom).
Najważniejszym plikiem konfiguracyjnym programu jest
/etc/fail2ban/jail.conf
i to właśnie nim się zajmiemy.
Pierwsza sekcja nosi nazwę
[DEFAULT]
w niej znajdują się globalne ustawienia programu
ignoreip = 192.168.0.0/16
na początku jest bardzo ważna opcja, odpowiada za ignorowanie IP, czyli dane IP nie będą wycinane na firewallu, w tym wypadku został wpisany LAN 192.168.*.*
bantime = 3600
maxretry = 3
wartości te odpowiadają odpowiednio za czas w sekundach przez jaki będzie wycięte IP i za ilość prób logowania po jakim IP zostanie wycięte na firewallu, pozostałe wartości lepiej zostawić tak jak są standardowo, przejdźmy teraz do części
JAILS
każda sekcja odpowiada za jakąś usługę, jeśli dane więzienie (ang. jail) ma być włączone to ustawiamy
enabled = true
jeśli wylączone to
enabled = false
ważnym parametrem jest
logpath
w którym to musimy podać dobrą ścieżkę do logów z danej usługi, ponieważ program został bardzo przemyślanie napisany i żeby nie obciążać systemu monitorując ruch, monitoruje tylko logi, jeśli nic nie modyfikowaliśmy, to nie trzeba zazwyczaj poprawiać ścieżek do logów
maxretry
jak już wcześniej pisałem, odpowiada za ilość prób logowanie przed wycięciem IP na firewallu, pozostałych opcji nie trzeba modyfikować, a wręcz nie powinno się. Na koniec warto zaznaczyć, że jeśli ręcznie modyfikujemy jakieś ustawienia firewalla, to trzeba później zrestartować fail2ban.

piątek, 13 marca 2009

Konfiguracja Samby

Samba jest nazwą oprogramowania, przeznaczonego dla serwera plików oraz drukarek, współpracującego z platformą Windows, przeznaczonego dla platformy Linux/Unix. Przyjmijmy, że mamy w swojej sieci lokalnej dwa serwery postawione na Linuksie pierwszy niech będzie oparty o dystrybucję Ubuntu, drugi o dystrybucję Debian, a także komputer typu desktop oparty o system Windows XP. Teraz trzeba przyjąć założenia do czego ma być wykorzystywana nasza Samba, przyjmijmy więc, że na obu serwerach chcielibyśmy mieć jeden folder pozwalający wszystkim na odczyt i drugi pozwalający wszystkim na odczyt oraz zapis. Na obu serwerach musimy więc odpowiednio skonfigurować Sambę, plik konfiguracyjny Samby to /etc/samba/smb.conf - edytujemy go dowolnym edytorem tekstowym np. gedit lub nano. Plik konfiguracyjny na pierwszym serwerze powinien wyglądać tak
[global]
workgroup = nazwa grupy roboczej (np. WORKGROUP), nazwa musi być identyczna jak pod systemem Windows
netbios name = nazwa serwera (np. Serwer1)
server string = komentarz serwera (np. Samba na Ubuntu)
wins support = yes
name resolve order = lmhosts host wins bcast
map to guest = Bad User
invalid users = root
guest account = nobody
log file = /var/log/samba/log.%m
max log size = 1000
socket options = TCP_NODELAY SO_SNDBUF=16384 SO_RCVBUF=16384 IPTOS_LOWDELAY
security = share
dns proxy = No
unix charset = UTF8
display charset = UTF8
dos charset = CP852
preferred master = yes
interfaces = klasa IP (np. 192.168.0.0/16) lub nazwa interfejsu sieciowego (np. eth0) bądź też oba naraz
bind interfaces only = yes
character set = UTF-8
client code page = 852

[write]
comment = read & write
path = /write
create mask = 0777
directory mask = 0777
browsable = yes
writable = yes
guest ok = yes

[read]
comment = read
path = /read
read only = yes
guest ok = yes
na drugim serwerze wstawiamy ten sam plik konfiguracyjny usuwając z niego jedynie
wins support = yes
name resolve order = lmhosts host wins bcast
następnie tworzymy oba katalogi
mkdir /read;mkdir /write;chmod 0777 /write
przy czym oczywiście nazwy mogą być dowolne, musimy pamiętać tylko o zmianie parametru
path
w pliku konfiguracyjnym. Następnie restartujemy Sambę na obu serwerach
/etc/init.d/samba restart
i możemy cieszyć się działającymi serwerami Samba :). Oczywiście należy pamiętać, że jeśli posiadamy firewalla to trzeba dopisać do jego reguły
/sbin/iptables -A INPUT -p tcp --dport 139 -j ACCEPT
/sbin/iptables -A INPUT -p tcp --dport 445 -j ACCEPT
w celu ewentualnej diagnostyki mogą pomóc polecenia
testparm
które służy do sprawdzenia poprawności pliku konfiguracyjnego, oraz polecenie
smbclient -d 10 -L IP_serwera_samby
dzięki któremu przeprowadzimy próbę połączenia do serwera Samby.