понедельник, 28 сентября 2009 г.

Protocol filter(PF) от DDos атак на сервер под freeBSD

Защита от Doss-атак для web сервера
1) Фаервол
2) И грамотно настроенный веб сервер!

Пример:
1) Фаерволл PF.

Обозначаем фильтер протоколов в rc.conf
pf=YES
pf_rules=/etc/pf.conf

Код: /etc/pf.conf
set block-policy drop # Если кто то попал под правило block молча откидаем его пакеты
set fingerprints "/etc/pf.os" # Файл с всеми извесными ОС, PF может резать людей по версиям ОС
set loginterface $ext_if # С какого интерфейса статистику снимать будем.
set optimization normal # Нормализация хождения трафика
scrub in all # Нормализация входящего трафика
scrub out all # Нормализация исходящего трафика

table persist # Создаём таблицу DDOS
block quick from to any # Всех кто в таблице DDOS рубим и не смотрим на остальные правила

# Защита от ДДОС атак на WWW сервер
pass in on $ext_if proto tcp from any to $int_if port www flags S/SA keep state
( max-src-conn-rate 50/5, overload flush)
# Если кто то хочет создать больше чем 50 линков за 5 сек добавлять в таблицу DDOS

Посмотреть всех кто попался на удочку так pfctl -t ddos -T show а очистить таблицу так pfctl -t ddos -T flush

Мини мануал по командам PF
pfctl -f /etc/pf.conf - Загрузить правила из файла /etc/pf.conf
pfctl -nf /etc/pf.conf - Проверить валидность правил из файла /etc/pf.conf - НО НЕ ЗАГРУЖАТЬ
pfctl -Nf /etc/pf.conf - Загрузить только правила NAT
pfctl -Rf /etc/pf.conf - Загрузить только фильтрующие правила
pfctl -sn - Посмотреть активные правила NAT ТРАНСЛЯЦИИ
pfctl -sr - Посмотреть активные правила фильтра
pfctl -ss - Показать текущую таблицу состояний (state table)
pfctl -si - Показать статистику
pfctl -sa - Показать ВСЁ что можна

Другие примеры PF:

# added by defsite.ru

set loginterface em0
set optimization aggressive
set limit {states 120000, frags 10000}
set limit src-nodes 70000

set skip on { lo0 }

pass in quick on em0 inet proto tcp from any to 77.91.229.144 port 80 flags S/SA synproxy state (max 100000, source-track rule, max-src-states 60, max-src-conn 50, if-bound, adaptive.start 60000, adaptive.end 120000)

Дополнительная информация по PF

2. web server
Устанавливаем в паре 2 веб сервера Nginx and Apache
На порту 80 работает Nginx а на 8080 работает Apache
Дуступ к порту 8080 разрешен только из интерфейса lo0.

И того Nginx выступает в качестве кешырующего веб сервера а апач в качестве выполняймого.
И вот когда Вас ДОСЯТ или ДДОСЯТ, Nginx первый раз берет страничку у апачаИ того Nginx выступает в качестве кешырующего веб сервера а апач в качестве выполняймого.
И вот когда Вас ДОСЯТ или ДДОСЯТ Nginx первый раз берет страничку у апача а второй и все последующие отдайот из кеша и сразу рубает линк с ДДОСЕРОМ, а второй и все последующие отдаёт из кеша и сразу рубает линк с ДДОСЕРОМ.

среда, 2 сентября 2009 г.

Виртуализация сервера на KVM

Задача: установить debian5 и создать на нем виртуализацию windows srv 2003 с помощью KVM.
Установка KVM:
apt-get install gcc libsdl1.2-dev zlib1g-dev libasound2-dev linux-kernel-headers pkg-config libgnutls-dev libpci-dev

Установка qemu:
apt-get install qemu

Создание образа на HDD:
qemu-img create -f qcow2 /usr/local/vm/win2003.img 20G
Создается образ /usr/local/vm/win2003.img размером в 20Гб

Установка windows 2003:
qemu -cdrom /dev/hda -hda /usr/local/vm/win2003.img -m 1288 -boot d -kernel-kqemu -no-kqemu -vnc :0 -localtime -daemonize
Выделил ОЗУ 1288МЬ
-daemonize не держать процесс до завершения работы виртуальной машины.

Подключение к образу через VNC
При нажатие F8, меню сочетания клавишь.

Для подключение к установленному windows через rdp:
rdesktop 192.168.X.X:3389 -u admin -f -a 24
-f это fullscreen, a 24 - 24 бит цветности
crl+alt+enter - свернуть fullscreen

Чтобы виртуальная машина была в сети, необходимо создать для неё виртуальный интерфейс и сделать мост между им и реальном lan.

Для этого был написан скрипт /etc/script-ifup:

#!/bin/sh
ifconfig eth1 down
ifconfig eth1 0.0.0.0 up
brctl addbr mybridge
brctl addif mybridge eth1
ifconfig mybridge 192.168.7.22 netmask 255.255.255.0
route add default gw 192.168.7.1
ifconfig mybridge up
sleep 2
vde_tunctl -b
ifconfig tap0 0.0.0.0 promisc up
brctl addif mybridge tap0
sleep 2
echo "most rabotaet)"

В win2003 прописываем сетевые настройки.

Виртуальный сервер win2003 теперь в сети. Рекомендую сделать копию образа 2003.

P.S.
1. Запускаем сервер.
2. Запускаем скрипт для виртуального инетрфейста или моста(можно скрипт в автозапуск поставить).
3. Запускаем виртуальную машину с виртуальным интерфейсом:
qemu -hda /usr/local/vm/win2003.img -kernel-kqemu -net nic,model=rtl8139 -net tap,ifname=tap0 -vnc :0 -m 758 -daemonize

понедельник, 6 апреля 2009 г.

DNS клиент

nslookup -type=a domen.ru показывает А-зону для domen.ru
nslookup -type=mx domen.ru показывает MX-зону для domen.ru(ip mail server)
nslookup -type=soa domen.ru показывает SOA запись для domen.ru
whois domen.ru выводит всю информацию по domen.ru
dig domain.ru mx вывод развернутой информации по mx зоны
host domain.ru выводит инфо об узле domain.ru

понедельник, 26 января 2009 г.

Web сервер apache

Сервер установил внутри локальной сети с ip: 192.168.х.х. На маршрутизаторе сделал проброс по 80 порту до apache.

В httpd.conf Apache HTTP сервера устанавливается в /usr/local/etc/apache/httpd.conf
ServerAdmin you@your.address - Адрес, на который должны будут отправляться сообщения о проблемах с сервером.
DocumentRoot "/usr/local/www/data" - Каталог, внутри которого будут храниться документы.
ServerName domen.com - обозначение имени сервера
Поменять:
#Directory /#
AllowOverride all
Order deny,allow
Allow from all
#/Directory#

# Virtual hosts
Include conf/extra/httpd-vhosts.conf Конфигурация виртальных хостов

#
/usr/local/sbin/apachectl start(stop/restart) Запуска APACHE

# /usr/local/sbin/apachectl graceful Для перезапуска Apache без прерывания имеющихся соединений
Для запуска Apache при старте системы в /etc/rc.conf:
apache_enable="YES"


Виртуальные хостинги.
Физический сервер связан с одним IP адресом. Несколько доменных имен связываются с этим IP адресом. Все логические веб-сервера прослушивают один единственный порт. Сервер различает запросы, используя поле HOST, которое является обязательным в HTTP запросах в HTTP версии 1.1.
httpd-vhosts.conf:
#VirtualHost *:80#
ServerName www.holdwest.com
DocumentRoot /home/vital/sait/wwwholdwest
ErrorLog "/var/log/httpd_wwwholdwestcom.log"
#/VirtualHost#

#VirtualHost *:80#
ServerName talisman.holdwest.com
DocumentRoot /home/vital/sait/talisman
ErrorLog "/var/log/httpd_talismanholdwestcom.log"
#/VirtualHost#

#VirtualHost *:80#
ServerName www.talisman.holdwest.com
DocumentRoot /home/vital/sait/wwwtalisman
ErrorLog "/var/log/httpd_wwwtalismanholdwestcom.log"
#/VirtualHost#


Установка MySQL:
cd /usr/ports/databases/mysql50-server
make install clean
mysql_install_db установка базы

В
/etc/ rc.conf:
mysql_enable=”YES”

Запуск MySQL:
/usr/local/etc/rc.d/mysql-server start

При 1-м запуске ругался на то, что не существует /tmp/mysql.sock, после рестарта все ок
/usr/local/etc/rc.d/mysql-server restart

В MySQL 5.0 по умолчанию пользователь root, после первоначальной установки сервера, создается без пароля. Вернее с пустым паролем. Поэтому задаем его сами:
mysqladmin -u root password новый_пароль

/usr/local/bin/mysqladmin version показывает версию sql
после установки пароля на root в sql:
/usr/local/bin/mysqladmin version --u=root --password=Pass

После смены пароля root для sql входить:
mysql --user=root --password=Новый пароль
После каждой команды необходимо вводить ";:"
help;

Выводит базы sql:
mysqlshow --u=root --password=Pass

Установка PHP5:
cd /usr/ports/lang/php5
make install clean
cd /usr/ports/lang/php5-extensions
make install clean

В httpd.conf дописываем, что бы apache понимал файлы php и phps:
AddType application/x-httpd-php .php
AddType application/x-httpd-php-source .phps