вторник, 9 марта 2010 г.

Безопасность apache

#Не сообщать информацию о версии сервера
ServerSignature Off
ServerTokens Prod

понедельник, 1 марта 2010 г.

инфа по физике сетевухи (linux)

[root@123 ~]# dmesg | grep -i duplex
bnx2: eth0 NIC Copper Link is Up, 100 Mbps full duplex, receive & transmit flow control ON
e1000e: eth2 NIC Link is Up 100 Mbps Full Duplex, Flow Control: RX/TX
e1000e: eth1 NIC Link is Up 100 Mbps Full Duplex, Flow Control: None
e1000e: eth1 NIC Link is Up 100 Mbps Full Duplex, Flow Control: None

Просмотр установленных драйверов

ethtool -i eth0
driver: bnx2
version: 2.1.11
firmware-version: bc 1.9.6
bus-info: 0000:03:00.0

ethtool -i eth3
driver: e1000e
version: 1.4.4-k
firmware-version: 5.11-2
bus-info: 0000:06:00.1

Просмотр статистики, то чего не должно быть выделено жирным

ethtool -S eth0
NIC statistics:
     rx_bytes: 191166177897
     rx_error_bytes: 0
     tx_bytes: 2285524683461
     tx_error_bytes: 0
     rx_ucast_packets: 1376418747
     rx_mcast_packets: 213363
     rx_bcast_packets: 1205607
     tx_ucast_packets: 1897974881
     tx_mcast_packets: 443
     tx_bcast_packets: 318966
     tx_mac_errors: 0
     tx_carrier_errors: 0
     rx_crc_errors: 0
     rx_align_errors: 0
     tx_single_collisions: 0
     tx_multi_collisions: 0
     tx_deferred: 0
     tx_excess_collisions: 0
     tx_late_collisions: 0
     tx_total_collisions: 0
     rx_fragments: 0
     rx_jabbers: 0
     rx_undersize_packets: 0
     rx_oversize_packets: 0
     rx_64_byte_packets: 564349475
     rx_65_to_127_byte_packets: 582392788
     rx_128_to_255_byte_packets: 170241876
     rx_256_to_511_byte_packets: 12601437
     rx_512_to_1023_byte_packets: 13261490
     rx_1024_to_1522_byte_packets: 34991571
     rx_1523_to_9022_byte_packets: 0
     tx_64_byte_packets: 58522065
     tx_65_to_127_byte_packets: 198585366
     tx_128_to_255_byte_packets: 77001638
     tx_256_to_511_byte_packets: 13877856
     tx_512_to_1023_byte_packets: 9683927
     tx_1024_to_1522_byte_packets: 1540623438
     tx_1523_to_9022_byte_packets: 0
     rx_xon_frames: 460
     rx_xoff_frames: 460
     tx_xon_frames: 0
     tx_xoff_frames: 0
     rx_mac_ctrl_frames: 0
     rx_filtered_packets: 922
     rx_ftq_discards: 0
     rx_discards: 0
     rx_fw_discards: 0

ethtool eth3
Settings for eth3:
        Supported ports: [ TP ]
        Supported link modes:   10baseT/Half 10baseT/Full
                                100baseT/Half 100baseT/Full
                                1000baseT/Full
        Supports auto-negotiation: Yes
        Advertised link modes:  10baseT/Half 10baseT/Full
                                100baseT/Half 100baseT/Full
                                1000baseT/Full
        Advertised auto-negotiation: Yes
        Speed: 100Mb/s
        Duplex: Full
        Port: Twisted Pair
        PHYAD: 1
        Transceiver: internal
        Auto-negotiation: on
        Supports Wake-on: d
        Wake-on: d
        Current message level: 0x00000001 (1)
        Link detected: yes

Скорость важна как и duplex режим. Если хотим вырубить avtonegotiation и форсировать режим для сетевухи

mii-tool -F 100baseTx-HD

Прописав

ethtool -s eth0 speed 100 duplex full
в /etc/rc.d/rc.local добьемся того же самого

[root@123 ~]# mii-tool
eth0: negotiated 100baseTx-FD flow-control, link ok
SIOCGMIIREG on eth1 failed: Input/output error
eth1: negotiated 100baseTx-FD, link ok
SIOCGMIIREG on eth2 failed: Input/output error
eth2: negotiated 100baseTx-FD flow-control, link ok

flow-control важен поскольку если его нет то скорость на интерфейсе может быть не ахти

Тестирование (при удаленном доступе лучше не делать)

ethtool -t ethX [offline|online]

offline - вырубает карточку из сетевого обмена

для дебиана тогда прописываем в постапе

sleep 3
ethtool -s eth1 speed 100 duplex full advertise 0x008
ethtool -A eth1 autoneg off rx on tx on


Webalizer + geoip

1. Установка Webalizer со статистикой по странам
Хочется статистику по странам - заодно и установим Webalizer ->
apt-get install webalizer
ln -s /var/www/webalizer /home/sites/plusminus1.com/www/webal
обновляем GeoIP для корректного отображения стран:
wget http://geolite.maxmind.com/download/geoip/database/GeoLiteCountry/GeoIP.dat.gz
gunzip GeoIP.dat.gz
копируем ее в папку /usr/share/GeoIP
раскомментируем в /etc/webalizer 2 строки, связанные с GeoIP
если нужно, настраиваем формат лог apache - "combined" дает например детальную статистику, но плодит километров логов.
Потом пишем скрипт (например webstat):
====
webalizer /home/sites/plusminus1.com/logs/custom_log
======
запускаем наш webstat
по адресу http://plusminus1.com/webal видим нашу статистику
2. Использование GeoIP в Apache
apt-get install libapache2-mod-geoip
/etc/init.d/apache2 restart
скриптик для проверки:
=====

$ip= getenv("REMOTE_ADDR");
$country_code = apache_note("GEOIP_COUNTRY_CODE");
$region = apache_note("GEOIP_REGION");
$country_name = apache_note("GEOIP_COUNTRY_NAME");
$city = apache_note("GEOIP_CITY");
echo "Откуда припёрся: " . $ip . "\n";
echo "Код страны: " . $country_code . "\n";
echo "Регион: " . $region . "\n";
echo "Имя страны: " . $country_name . "\n";
echo "Город: " . $city . "\n";
?>

======
Откуда припёрся: 86.57.220.209
Код страны: BY
Регион:
Имя страны: Belarus
Город:
$region и $city не показывает - для этого нужны другие базы (кроме умолчательной /usr/share/GeoIP/GeoIP.dat)
скачаем базу GeoLiteCity:
wget http://geolite.maxmind.com/download/geoip/database/GeoLiteCity.dat.gz
и разархивируем ее в /usr/share/GeoIP.
настройки для apache2 находятся в файле /etc/apache2/mods-available/geoip.conf
напишем там:
GeoIPDBFile /usr/local/share/GeoIP/GeoIP.dat
GeoIPDBFile /usr/local/share/GeoIP/GeoLiteCity.dat
после перезагрузки apache2 видим, что город определился, но он - Новолукомль, а не Витебск (база бесплатная, поэтому такие накладочки)
Откуда припёрся: 86.57.220.209
Код страны: BY
Регион: 07 Имя страны: Belarus
Город: Novolukoml
3. PHP и GeoIP
А если уже есть 10000 IP в моей базе юзеров и нужно узнать, откуда они ходили. Для PHP есть extension с аналогичным названием. Для debian-lenny можно установить пакет php5-geoip. Для более ранних версий - компилировать. Но повторимся - используя lite-базу - будем иметь погрешность в определении города.
Можно попользоваться плагином с geoplugin.net - но там вроде-бы есть ограничения на количество запросов - в общем, как тулзину для своих целей, если php-скрипт нужно запускать изредка, то можно, но нет гарантии что будет доступно/ не сделают платным.

источник: http://www.cooldrinking.com/index.php?option=com_content&view=article&id=18:webalizer&catid=5:linux-&Itemid=10

пятница, 26 февраля 2010 г.

wine etersoft problem (виснет при загрузке 1с)

источник http://cgroup.drohobych.com.ua/index.php?option=com_content&task=view&id=113&Itemid=128&limit=1&limitstart=10
При использовании ресурсоёмких win-приложений могут возникать проблемы, связанные с установленными в системе ограничениями.
Лимит на количество открытых файлов

Ещё одна сторона совместной работы: одновременное использование большего количества ресурсов, что может приводить к превышению стандартных лимитов, используемых по умолчанию в различных Unix-системах. Лимиты могут определяться как в момент компиляции ядра, так и настраиваться в любой момент в процессе работы.

В контексте использования WINE наиболее актуален лимит на открытые файлы. Если в приложении не открываются большие файловые базы или невозможно работать более чем 3-м пользователям одновременно, это может означать, что превышен лимит на открытые файлы.

Лимит на открытые файлы двухуровневый: с одной стороны, имеется лимит ядра на общее число всех открытых файлов, с другой стороны, для каждой командной оболочки пользователя также может быть выставлен лимит на число открытых файлов.

Узнать текущее значение лимита ядра можно через команду winediag. Обычно это значение достаточно велико.

Чтобы разово изменить это значение в Linux можно посредством той же proc, для этого нужно просто записать новое значение в файл file-max (потребуются права суперпользователя):

# echo "104854" > /proc/sys/fs/file-max
# cat /proc/sys/fs/file-max
104854

Пример 19. Изменение лимита на открытые файлы

Чтобы настройка лимитов сохранялась между перезагрузками, необходимо внести нужные значения в файл /etc/sysctl.conf:

# Maximum number of open files permitted
fs.file-max = 104854

Пример 20. Настройка sysctl.conf

Лимит по количеству открытых файлов для командной оболочки пользователя можно контролировать при помощи подсистемы авторизации PAM. Для этого в конфигурационном файле /etc/security/limits.conf выставляются необходимые значения:

* soft nofile 5000
* hard nofile 5000

можно заменить
* - nofile 5000

Пример 21. Указание лимитов в /etc/security/limits.conf

В данном случае указанлимит в 5000 файлов. Чтобы лимит применялся при регистрации пользователей в системе, в файле /etc/pam.d/system-auth должна быть строка:

session required /lib/security/pam_limits.so

Пример 22.

После повторного входа в систему выставленное вами значение лимита должно быть отображено в выводе команды ulimit -n.

GeoIP и ее использование

http://www.find-ip-address.org/ip-country/ - генерит сети (файл .htaccess для apache - вибираешь Allow или Deny) чтобы потом им рубить всякие нехорошие страны откуда рулит спам и т.д.
http://ipinfodb.com - аналог

Ставим:geoip
Переносим тестовый конфиг в рабочий: mv /etc/GeoIP.conf.default /etc/GeoIP.conf (не нужно идентичные)
Теперь пробуем для любого (я делал для своего) определить принадлежность IP адреса стране:
geoiplookup 95.79.205.111
GeoIP Country Edition: RU, Russian Federation
Теперь получим список всех клиентов, подключенных к нашему серверу:
netstat -apnt | awk '{print $5}' | tr ':' ' ' | awk '{print $1}' | sort | uniq > /tmp/ips
А теперь получаем список стран, соответствующих IP адресам наших клиентов:
for ip in `cat /tmp/ips`; do geoiplookup $ip; done | tr ',' ' ' | awk '{print $4}' | sort | uniq -c
лучше $5 - там имя страны полностью !
Теперь, если вы точно уверены, что, например, посетителей с Зимбабве в числе 1500 человек у Вас ну точно нету, то можете написать скрипт, который забанит неугодных ботов :) Кроме этого, есть модуль для iptables, который позволяет отсекать посетителей в зависимости от страны.

Прикручивает скриптом к айпитейблз (не забываем создать цепочку iptables -N drop_nets)
#!/bin/sh
#
# Get lists http://www.find-ip-address.org/ip-country/
# putting prefixes to deny, and output in the CIDR.
# Farewell China!
#
# ps: Do not forget to edit the list in the call zcat.
#
sudo iptables -F drop_nets
for LDENY in $( zcat \
AP_cidr_deny.txt.gz \ # Asia/Pacific region
CN_cidr_deny.txt.gz \ # China
IN_cidr_deny.txt.gz \ # India
KR_cidr_deny.txt.gz \ # Korea
MY_cidr_deny.txt.gz # Malasia
); do
echo $LDENY | grep "[0-9]*\.[0-9]*\.[0-9]*\.[0-9]*/[0-9]*" >/dev/null&& \
sudo iptables -A drop_nets -s $LDENY -j DROP
done

Если хотим прикрутить как модуль айпитейбл, тогда:

Фильтрация пакетов по географическому признаку с помощью iptables и geoip
Брутфорс-атаки не должны представлять реальной угрозы для хорошонастроенного сервера, но, тем не менее, они отвлекают и засоряютлог-файлы. Существуют различные решения для предотвращения подобныхатак. В этой заметке я расскажу вам о еще одном из них: GeoIP
GeoIP - это модуль для netfilter/iptables, который позволяет фильтровать приходящие пакеты по их географическому местоположению.
Этот модуль может быть использован не только для предотвращениябрутфорса. Например, его можно использовать для так называемой“расистской маршрутизации”, т.е. для ограничения доступа к серверупользователям из определенных стран. Оставим цели использования насовести системных администраторов, а в этой заметке я просто опишуустановку и настройку модуля
Все проверялось на Debian 4.0, но ничего debian-специфичного в процессенет, так что все должно работать и на других дистрибутивах GNU/Linux.Для установки нам понадобятся новый модуля для ядра, библиотеки дляiptables и база соответствия IP-адресов странам. Пересобирать ядро ненужно.
Итак:Подготовка
Первым делом нам понадобятся исходные тексты ядра, которое используется в системе. Для Debian Etch это 2.6.18# apt-get install linux-source-2.6.18Скачанные исходники будут лежать в /usr/src. Распакуем их:# tar xjf /usr/src/linux-source-.tar.bz2 -C /usr/src/Замените на версию вашего ядра. Для распакованного архива понадобится около 300 Мб свободного места.Теперь нам нужны исходные тексты iptables. Нет необходимостипересобирать сам iptables, но исходники понадобятся для сборки модуля.Для работы с ними удобно использовать временную директорию# mkdir ~/geoip
# cd ~/geoip/
# apt-get source iptablesВнимание, для использования apt-get source в вашей системе должен быть установлен пакет dpkg-devТеперь не хватает только самого geoip# wget http://people.netfilter.org/peejix/patchlets/geoip.tar.gzДля дальнейшей работы нам понадобится patch-o-matic-ng, его можно найти на Если у вас старое ядро, то, возможно, вам придется выбрать более старуюверсию, но для нашей заметки актуален последний снапшот:# wget http://ftp.netfilter.org/pub/patch-o-matic-ng/snapshot/patch-o-matic-ng-20070414.tar.bz2Распакуем полученный архив:# tar xjf patch-o-matic-ng-20070414.tar.bz2И распакуем исходники geoip в поддиректорию patchlets/ пакета patch-o-matic-ng# tar xzf geoip.tar.gz -C patch-o-matic-ng-20070414/patchlets/Наложение патчей
Применим необходимые патчи к ядру и iptables# cd patch-o-matic-ng-20070407/
# KERNEL_DIR=/usr/src/linux-source-/ IPTABLES_DIR=~/geoip/iptables-/iptables/ ./runme geoipНе забудьте заменить на используемые в вашей системе версии ядра и iptables.
Если все прошло успешно, то patch-o-matic-ng предоставит информацию о полученном патче и предложит применить его. Ответьте y.Сборка и установка модуля для ядра
Для сборки нам понадобится пакет build-essential. Если вы работаете нес Debian, то установите средства для разработки: gcc, make и т.д.# apt-get install build-essentialТак как нам потребуется немного переконфигурировать ядро, мы возьмем за основу уже имеющуюся конфигурацию:# cd /usr/src/linux-source-/
# make oldconfigНа вопрос:geoip match support (IP_NF_MATCH_GEOIP) [N/m/?] (NEW)Ответьте m, чтобы собрать geoip как модуль.Выполните подготовку для сборки модулей:# make modules_prepareЗатем соберите модули.. К сожалению, я не знаю как собрать толькоодин необходимый модуль, так что собираем все модули netfilter, покакто-нибудь не предложит лучший способ :)# make -C $(pwd) M=net/ipv4/netfilter/ modulesЕсли все нормально, то файл ipt_geoip.ko должен появиться в net/ipv4/netfilter/. Скопируем его к остальным модулям системы# cp net/ipv4/netfilter/ipt_geoip.ko /lib/modules/$(uname -r)/kernel/net/ipv4/netfilter/И активируем его:# depmod
# modprobe ipt_geoip
# echo “ipt_geoip” >> /etc/modulesСборка и установка библиотек iptables
Соберем библиотеку:# cd ~/geoip/iptables-/iptables/
make KERNEL_DIR=/usr/src/linux-source-/ extensions/libipt_geoip.soНе забывайте заменять !!!Скопируем полученный файл к другим библиотекам iptablescp extensions/libipt_geoip.so /lib/iptables/Создание файла привязок IP-адресов к странам
Мы будем использовать свободно распространяемую базу с MaxMind. Она имеет заявленную точность в 98% и обновляется раз в месяц. Если длявас этого недостаточно, можно купить более точную платную версию тамже. Скачайте и распакуйте базу:# cd ~/geoip/
# wget http://www.maxmind.com/download/geoip/database/GeoIPCountryCSV.zip
# unzip GeoIPCountryCSV.zipВы можете открыть полученный файл в любом редакторе и увидите, чтоэто просто список, со значениями, разделенными запятыми. Поиск в такомфайле будет занимать много времени, поэтому мы преобразуем его вбинарный формат, используя утилиту csv2bin, также предоставленнуюавтором geoip.# wget http://people.netfilter.org/peejix/geoip/tools/csv2bin-20041103.tar.gz
# tar xzf csv2bin-20041103.tar.gz
# cd csv2bin/
# make
# ./csv2bin ../GeoIPCountryWhois.csvОна создаст два файла geoipdb.bin и geoipdb.idx, которые необходимо положить в /var/geoip# mkdir /var/geoip
# mv geoipdb.* /var/geoip/Теперь вы можете выполнять фильтрацию по географическому признаку :)# # Блокировка доступа к SSH всем, кроме Афганистана
# iptables -A INPUT -p tcp –dport 22 -m geoip ! –src-cc AF -j REJECT
# # Запрет на пинг хостов, расположенных во Франции, Италии и Испании
# iptables -A OUTPUT -p icmp -m geoip –dst-cc FR,IT,ES -j REJECT
# # Помощь
# iptables -m geoip –help

источник: http://eaglebearsecurity.com/news/filtracija_paketov_po_geograficheskomu_priznaku_s_pomoshhju_iptables_i_geoip/2009-09-27-489

вторник, 26 января 2010 г.

cisco debug and packet logging

Для переключения логирования на виртуальный терминал telnet:
    terminal monitor
Для включения сообщений отладки:
    undebug all
    conf t
    logging monitor debugging
    logging on
    exit
Теперь можно включить вывод отладочных сообщений какой либой функции роутера, к примеру isdn:
    debug isdn events   
    debug ip http url
    debug frame-relay packet interface Serial0/1:1.1 dlci 99 (поинформативней)
Как все вернуть обратно?
    undebug all
    terminal no monitor
    conf t
    no logging monitor
    exit

Важно:
1). no logging console - лучше использовать когда дебуг идет не в консоль
2). Включение msec временных штампов:
           router(config)#service timestamps debug datetime msec
                router(config)#service timestamps log datetime msec
Добавляется временные штампы в debugs в формате MMM DD HH:MM:SS согласно системных часов, если они не
установлены, то (*) будут.
3). Ограничение дебуга ip пакетов создать access-list на debug. Только пакеты попавшие под критерии access-list будут дебужиться. Его не нужно вешать ни на какой интерфейс, но применить на операции дебуга.
Перед debugging ip packet, не забываем за режим роутера по умолчанию CEF (или fast-switching), это означает что пакеты не попадают в процессор и дебуг не покажет ничего. Надо cef вирубить - no ip cef (no ip route-cache (for unicast packets) or no ip mroute-cache (for multicast packets)). Будет применено на интерфейсах где трафик предположительно проходить (flow). Проверте show ip route командой.
Отключение cef на загруженном роутере приведет к почальной ситуации. Не используйте это на роутерах с MPLS, посольку MPLS не работает без CEF.

Пример
access-list 105 permit icmp host 10.10.10.2 host 13.1.1.1
access-list 105 permit icmp host 13.1.1.1 host 10.10.10.2
router_122(config)#interface virtual-template 1
router_122(config-if)#no ip route-cache
router_122(config-if)#end
debug ip packet detail 105
http://www.cisco.com/en/US/tech/tk801/tk379/technologies_tech_note09186a008017874c.shtml
Пример дебуга тригерного
debug serial interface
traxbol#debug interface serial 3
    Condition 1 set
Используйте данну команду для проверки условий дебуга
    traxbol#show debug condition
    Condition 1: interface Se3 (1 flags triggered)
    Flags: Se3
    traxbol#
undebug interface - выключение (лучше undebug all)
http://www.cisco.com/en/US/docs/ios/12_3/debug/command/reference/dbg_02g.html - еще примеры


Включение/выключение режима монитора:
terminal monitor / terminal no monitor
Выключение режима дебуга
no debug all

Одна из опций использовать log или log-input параметры в конце ACL. Основное отличие между ними, что log-input показывает вх. интерфейс принятых пакетов и MAC-адрес источника. (оба этих параметра отключают CEF switching, который серйозно воздествует на производительность. Потому, используйте функцию логирования для to идентифицировать атаку включая жертву и атакующего а потом уберите log или log-input параметры с ACL).
Пример:
Router(config)# access-list 100 deny icmp any any echo reply log-input
Лучше вырубить логированние в консоль и включить логирование в буфер (поскольку консольный интерфейс будет в шоке от количества событий)
Особенности:
1). включение логирования не стоит делать на роутерах с загрузкой процессора >80% особенно при ACL на высокоскоростных интерфейсах.
2). если команда show access-list выводит совпадения в списках ACl и при добавлении log параметра в ACL ничего нет, нужно попробовать очистить route cache (clear arp-cache) для форсирования пакетов process-switched вместо cef (для уменьшения проблем при перестройке кеша на сильно загруженных роутерах используйте девайсы с поддержкой cef)
3). ACL logging не показывает каждый пакет, что подпадает под ACL, по крайнет мере будет виден первый в сессии и через определенные периоды. Cisco IOS испльзует rate limiting для предотвращения перегрузки логированием процессора. То есть вы не будете видеть пакеты подпадающие под ACL при включенном логировании.
4). когда много рефлекторов (атакующих) ACL устанавливается на одного из них и логинг включается для него, поскольку очень много информации.
Будь конкретен в своих ACL листах когда анализируешь DoS атак. Используй log-input для получения информации об интерфейсе с которого идет атака. Если есть несколько интерфейсов эта информация будет включать MAC адреса next-hop маршрутизатора; используй show ip arp MAC_address команду для узнавания IP адреса маршрутизатора.

Поскольку ACL очень грузят роутер можно задействовать механизм netflow
1). включаем его на интерфейсе, где планируется атака
Router(config)# interface type [slot_#/]port_#
Router(config-if)# ip route-cache flow
или при поддержке роутером distributed switching (7500 with RSP and VIP модулями)
Router(config-if)# ip route-cache distributed
2). експорт данных netflow
Router(config)# ip flow-export IP_address UDP_port_# [version 5]
3). проверка
Router# show ip cache [prefix mask] [type number] [verbose] flow
обратите внимание номера портор в 16-тиричной системе
rcIf SrcIPaddress DstIf DstIPaddress Pr SrcP DstP Pkts (4)
Et1 200.1.1.1 Et0 192.1.1.1 01 0000 0800 5
очиста статистики - clear ip flow stats (всегда нужно делать перед исследованием)

источник http://www.informit.com/articles/article.aspx?p=345618

четверг, 21 января 2010 г.

saslauth CENTOS (REDHAT) проблемы авторизации

Добавить в /etc/sysconfig/saslauthd параметр
FLAGS="-r"
Без него saslauthd будет передавать MySQL параметры так
Query SELECT password FROM mailbox WHERE username = 'admin' (то есть не будет передавать "@домен")
Поскольку в базе сохранен полный адресс то нужен ключ -r и тогда будет передавать полный електронный адресс
Query SELECT password FROM mailbox WHERE username = 'admin@example.org'