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

iptables ньюансы настройки

1). Критерий recent iptables позволяет запомнить не более 100 хостов, для увеличения нужно сделать (критерий служит для защиты от сканирования портов)
в /etc/modrobe.conf
для Debian
/sbin/modprobe ipt_recent ip_list_tot=100000
/sbin/modprobe xt_recent ip_list_tot=100000
RedHat, CentOS
options ipt_recent ip_list_tot=100000
Потом перезагрузка
для ядра Linux redhat 2.6.18-164.9.1.el5 есть баг, где это значение не может превысить 5000
2). ограничение количества одновременных соединений (10 штук в примере)
-m connlimit ! --connlimit-above 10 -j ACCEPT
3). борьба с нестандартными видами сканирования (nmap -sN (пакеты без флагов), -sF (FIN установлен) -sX (FIN, PSH и URG установлены))
запрет FIN-сканирования
iptables -A INPUT -p tcp -m tcp --tcp-flags FIN,ACK FIN -m comment --comment "запрет FIN-сканирования" -j DROP
запрет X-сканирования
iptables -A INPUT -p tcp -m tcp --tcp-flags FIN,SYN,RST,PSH,ACK,URG FIN,SYN,RST,PSH,ACK,URG -m comment --comment "запрет X-сканирования" -j DROP
запрет N-сканирования
iptables -A INPUT -p tcp -m tcp --tcp-flags FIN,SYN,RST,PSH,ACK,URG NONE -m comment --comment "запрет N-сканирования" -j DROP
запрет SYN/ACK- сканирования (nmap -sS - связь разрывается сразу после ответа на запрос открытия соединения) (поддержка только в версии 1.4.6)
iptables -I INPUT -p tcp -m osf --genre NMAP -j DROP
защита от тупого стандартного сканирования (nmap -sT - обычное TCP-сканирование состоящее в открытии соединения на порту и его завершения)
iptables -A INPUT -m recent --rcheck --second 3600 --hitcount 10 --rttl -m comment --comment "проверка на стук в нерабочие порты 10 в час" -j RETURN
iptables -A INPUT -m recent --rcheck --second 60 --hitcount 2 --rttl -m comment --comment "вторая проверка на стук в нерабочие порты 2 в минуту" -j RETURN
# Разрешаем рабочие порты
iptables -A INPUT -m state --state NEW -p tcp -m multiport --dport 21,25,53,80,110 -j ACCEPT
iptables -A INPUT -m state --state NEW -p udp -m multiport --dport 53 -j ACCEPT
iptables -A INPUT -m recent --set -m comment --comment "отбрасываем пакеты всех, кто превысил лимит на количество подключений" /proc/net/ipt_recent/DEFAULT - старые ядра (модуль поддерживает только IPv4) /proc/net/xt_recen/DEFAULT - новые (также IPv6) - если имя списка не задано, если задано тогда вместо дефолтного данное вами имя
Примечания - см. п.1, а также ОБЯЗАТЕЛЬНО УКАЗАТЬ ТОЛЬКО ВНЕШНИЙ ИНТЕРФЕЙС чтобы не попадали тачки из локалки (БУДЕТ ТОРБА ПОСКОЛЬКУ В ЛОКАЛКЕ КУЧА ШИРОКОВЕЩАТЕЛЬНЫХ ЗАПРОСОВ), а только из инета. ТАКЖЕ ДАННЫЕ ПРАВИЛА НУЖНО СТАВИТЬ В КОНЦЕ ЦЕПОЧКИ INPUT ЧТОБЫ ПРИ PING И ДРУГИХ ПОДКЛЮЧЕНИЯХ НЕ ПОПАДАТЬ В ДАННЫЙ ЛИСТ И НЕ БЛОКИРОВАТЬ СЕБЯ САМОГО.
можно установить пакет xtables-addons (содержит наработки проэкта patch-o-matic, получим доступ к модулю PSD (Port Scan Detect)) и 3 строки выше заменить одной
iptables -A INPUT -m psd -j DROP

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

1). Oтключаем использование команды LOAD DATA LOCAL INFILE. Это предотвратит несанкционированное чтение локальных файлов. Это также подходит против SQL-инъекций в PHP-сценариях.
Листинг 5.2: Отключение LOAD DATA LOCAL INFILE в разделе [mysqld] файла /etc/my.cnf
set-variable=local-infile=0
2). Если вы изменяли пароли в командной строке MySQL, то всегда очищайте ~/.mysql_history и /var/log/mysql/mysql.log, так как они сохраняют список выполненных SQL-команд с открытыми паролями.

Безопасность 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