Archive

Archive for March, 2009

Проблема при переходе с MySQL 5.0 на MySQL 5.1

March 30th, 2009

Проблема проявляется при апдейте (yum –enablerepo=remi update mysql) мускула с уже существующими таблицами. Выглядит она как сообщение: “cannot proceed because system tables used by Event Sheduler were found damaged at server start” при попытке сбэкапить базу.
Для починки:

mysql_upgrade -f -p -v
service mysqld restart

mysql

Перенаправление почты root-а на внешний ящик (linux)

March 30th, 2009

Правим /etc/aliases (или /etc/mail/aliases, смотря какая система), пишем:

root: address@domain.com

Выполняем команду newaliases и все.

linux, почта ,

Блокировка консоли в Linux/FreeBSD

March 24th, 2009

Для настройки автологоута в bash надо поместить в ~/.bash_profile (время в секундах):

export TMOUT=600

Для настройки автологоута в tcsh надо поместить в ~/.cshrc или в ~/.tcshrc

set autologout = (VAL1 VAL2)

Где,
VAL1 : Время неактивности в минутах после которого происходит автоматический логоут
VAL2 : Время неактивности в минутах после которого происходит автоматическая блокировка

Для ручной блокировки консоли в Linux ставим

yum install vlock

Для ручной блокировки консоли во FreeBSD используется

lock

FreeBSD, linux

Использование ipfw table

March 19th, 2009

Использование таблиц файрвола IPFW в некоторых случаях может быть очень удобным. Например, если нужно заблокировать много ip при dos-атаке. Суть в том, что все ip-адреса помещаются в таблицу и в правилах файрвола оперируем уже таблицей целиком.

ipfw table 3 add 10.10.11.1 #добавление в таблицу
ipfw table 3 add 10.11.11.2/24 #добавление в таблицу
ipfw table 3 list #посмотреть что в таблице
ipfw add deny ip from table\(3\) to me #пример исп-я. Слэши нужны!
ipfw table 3 delete 10.10.11.1 #удаляем
ipfw table 3 flush #чистим всю таблицу

Оперативно обновлять таблицу можно, к примеру, так:

#!/bin/sh
ipfw table 3 flush
cat /etc/ip.txt | while read ip; do
  ipfw table 3 add $ip
done

FreeBSD ,

Установка модулей в php собранном из сорцов

March 18th, 2009

Например, может понадобиться добавить модуль для PHP, который поставлен DirectAdmin-ом (т.е. из исходников). Сделаем это на примере модуля для memcached (предварительно надо убедиться что в системе установлен autoconf):

cd /usr/local/directadmin/custombuild/php-5.2.8/ext
wget http://pecl.php.net/get/memcache-2.2.5.tgz
tar xvf ./memcache-2.2.5.tgz
cd ./memcache-2.2.5
phpize
./configure
make && make install

Осталось прописать extension=memcache.so в php.ini. Проверяем присутствие модуля:

php -i |grep memcache
memcache
memcache support => enabled
memcache.allow_failover => 1 => 1
memcache.chunk_size => 8192 => 8192
memcache.default_port => 11211 => 11211
memcache.default_timeout_ms => 1000 => 1000
memcache.hash_function => crc32 => crc32
memcache.hash_strategy => consistent => consistent
memcache.max_failover_attempts => 20 => 20
Registered save handlers => files user sqlite memcache

php , ,

Заметка о работе с Yum

March 16th, 2009
yum upgrade #Обновить все пакеты
yum install package #Установить пакет
yum remove package #Удалить пакет
yum update package #Обновить пакет
yum --enablerepo=remi update package #Обновить с приоритетом реп-я remi
yum search package #Поиск пакета по имени и описанию
yum list package #Поиск пакета по имени
yum list installed #список всех установленных пакетов
yum info package #Подробная информация о пакете
yum deplist package #Посмотреть зависимости пакета
yum localinstall path_to_package #Установить пакет с диска
yum clean all #часто помогает при глюках yum-а
yum --noplugins install package #отключить плагины на время операции. Использовать когда мало памяти

linux ,

Включение свопа в Linux

March 12th, 2009
swapon -s #смотрим состояние свопа
dd if=/dev/zero of=/swapfile bs=1024 count=4194304 # создаем файл, 4Г
mkswap /swapfile #подготавливаем своп
swapon /swapfile #включаем его в системе

Чтобы он остался и после ребута, добавляем в fstab:

/swapfile swap swap defaults 0 0

linux ,

Установка и настройка Tripwire

March 11th, 2009

Tripware это система для контроля за целостностью и изменениями файлов. Очень хорошее подспорье для повышения безопасности сервера и обнаружения вторжений. Например поможет определить, что сломали ваше веб-приложение и залили какой-нибудь веб-шелл.
Установка (FreeBSD):

cd /usr/ports/security/tripwire && make install

Там надо будет проскроллить лицензионное соглашение и ввести “accept”.
В процессе установки будет создан файл-ключей и подписан файл политики.
Сам файл с описанием политики проверки /usr/local/etc/tripwire/twpol.txt
Правим его, добавляем свои папки. Обращаем внимание на уровень критичности и рекурсивность проверки $(SEC_CRIT) (recurse = true). В глобальной конфигурации прописываем e-mail для отчетов:
GLOBALEMAIL=admin@domain.com;

Потом обновляем политику (она преобразуется из текстового файла в свой формат) и инициализируем базу:

/usr/local/sbin/twadmin --create-polfile /usr/local/etc/tripwire/twpol.txt
/usr/local/sbin/tripwire --init

Запустить проверку вручную:

/usr/local/sbin/tripwire --check

В crontab на ежедневный запуск:

/usr/local/sbin/tripwire --check --email-report --email-report-level 1

В дополнение более полная статья о tripware

безопасность

MySQL, mysqldump и кодировки

March 9th, 2009

При переносе базы с одного сервера на другой посмотреть в какой кодировке создана база (show create database base_name) и таблица (show create table table_name). Так же необходимо знать в какой кодировке были сами данные.

сделать дамп:

mysqldump -ubackup -pPassword base_name --allow-keywords --create-options --complete-insert --default-character-set=latin1 --add-drop-table --single-transaction > ./base_name.sql

если заливать надо будет на MySQL 4 то так:

mysqldump -ubackup -pPassword base_name --allow-keywords --create-options --complete-insert --default-character-set=latin1 --add-drop-table --single-transaction --skip-add-locks --skip-disable-keys --no-tablespaces > ./base_name.sql

где latin1 – кодировка самих таблиц исходной базы, а не данных! Тогда при создании дампа данные не будут перекодироваться и отдадуться в правильном виде.

Далее надо открыть дамп в редакторе поддерживащем UTF8, например, в Notepad++ и проверить, что данные нормально читаются. Потом отредактировать этот дамп и поменять в операторах создания базы и таблиц latin1=>utf8. Потом уже заливать в новое место как UTF8.

ЗЫ. Если после всех этих телодвижений wordpress показывает кракозябры – надо прописать define(‘DB_CHARSET’, ‘utf8’); в wp-config.php

mysql , ,

Оптимизация sysctl в linux

March 6th, 2009
net.core.somaxconn=16384
net.ipv4.tcp_tw_reuse=1
net.ipv4.tcp_tw_recycle=1
net.core.wmem_max=8388608
net.core.rmem_max=8388608
net.core.netdev_max_backlog=2500
net.ipv4.conf.all.arp_filter=1
net.ipv4.conf.all.rp_filter=1
net.ipv4.tcp_max_syn_backlog=4096
net.ipv4.tcp_fin_timeout=25
net.ipv4.tcp_timestamps=0
net.core.rmem_default=262144
net.core.wmem_default=262144
net.ipv4.tcp_keepalive_time=1800
net.ipv4.netfilter.ip_conntrack_max = 131072

Чтобы применить на лету:

sysctl -p

Необходимо учесть, что с таким кипаливом через полчаса будут рваться неактивные tcp-соединения. Например, ssh-сессии.

linux ,

Установка RAID1 на работающей Linux-системе

March 6th, 2009

Нюанс с GeoIP, nginx, apache-1.3, mod_rpaf

March 3rd, 2009

При реализации указанной связки необходимо проследить что модули в httpd.conf указаны в следующем порядке:

LoadModule geoip_module       libexec/apache/mod_geoip.so
LoadModule rpaf_module        libexec/apache/mod_rpaf.so

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

Apache , ,

Установка OpenVPN на Linux (в OpenVZ контейнер)

March 2nd, 2009

Ставим openvpn из yum-а или из RPM http://dag.wieers.com/rpm/packages/openvpn/

yum install openvpn lzo-devel
chkconfig openvpn on

Если ставится версия 2.0 то лучше поставить поверх из исходников последнюю версию (2.1 или старше) и переписать бинарник /usr/local/sbin/openvpn -> /usr/sbin/openvpn

На хост машине для контейнера надо разрешить tun-устройства и модули ната для iptables:

vzctl set 900 --save --devnodes net/tun:rw
vzctl stop 900
vzctl set 900 --save --iptables "ip_conntrack iptable_filter iptable_mangle ipt_state iptable_nat ip_nat_ftp ip_conntrack_ftp"
vzctl start 900

Затем подготавливаем папки конфигов:

cp -R /usr/share/openvpn/easy-rsa/2.0 /etc/openvpn/easy-rsa
cd /etc/openvpn/easy-rsa
chmod 777 *
mkdir /etc/openvpn/keys

Для версии 2.2 и старше будет чуть по другому:

cp -R /usr/share/doc/openvpn-2.2.0/easy-rsa /etc/openvpn/easy-rsa
cd /etc/openvpn/easy-rsa/2.0
chmod 777 *
mkdir /etc/openvpn/keys
touch /etc/openvpn/keys/index.txt
echo "01" > /etc/openvpn/keys/serial

в vars-файле в /etc/openvpn/easy-rsa/2.0 заменяем строку:

export KEY_DIR=...

на

export KEY_DIR=/etc/openvpn/keys

Генерируем все сертификаты:

cd /etc/openvpn/easy-rsa
. ./vars
./clean-all
./build-ca
./build-key-server server
./build-dh
openvpn --genkey --secret /etc/openvpn/keys/ta.key
./build-key client1
./build-key client2

В процессе генерации сертификатов можно ничего не вводить. Все оставить по дефолту.
Последняя строчка делается столько раз, сколько надо ключей для клиентов.
Не забыть, что если дата на клиенте меньше чем дата на сервере в момент генерации сертификата – подключение не пройдет.

Включаем роутинг:

echo 1 > /proc/sys/net/ipv4/ip_forward

и правим соотвествующую строчку в sysctl.conf

Конфиг для сервера /etc/openvpn/server.conf:

proto tcp
dev tun
ca /etc/openvpn/keys/ca.crt
cert /etc/openvpn/keys/server.crt
key /etc/openvpn/keys/server.key
dh /etc/openvpn/keys/dh1024.pem
tls-server
tls-auth /etc/openvpn/keys/ta.key 0
server 10.10.10.0 255.255.255.0
ifconfig-pool-persist /etc/openvpn/ipp.txt
client-to-client
duplicate-cn
keepalive 10 60
ping-timer-rem
comp-lzo
user nobody
group nobody
persist-key
persist-tun
verb 4
mute 10
log /var/log/openvpn/openvpn.log
status /var/log/openvpn/openvpn-status.log
push "dhcp-option DNS 208.67.222.222"

Ставим, включаем и делаем роутинг в iptables:

yum install iptables
# делаем автостарт файрволу
chkconfig iptables on
# правило для нат-а, VE_IP_ADDRESS заменить на IP, который будет у вас "исходящим" для впн-трафика
iptables -t nat -A POSTROUTING -s 10.10.10.0/255.255.255.0 -o venet0 -j SNAT --to-source VE_IP_ADDRESS
# сохраняем правила
/etc/init.d/iptables save
# еще раз смотрим на сохраненные правила и проверяем
iptables -t nat -L
mkdir /var/log/openvpn
chmod 777 /var/log/openvpn
service openvpn start

Конфиг одного клиента (будет работать для Windows XP, Windows Vista и Windows 7):

dev tun
proto tcp
remote vpn.domain.com
client
resolv-retry infinite
redirect-gateway def1
ca ca.crt
cert client1.crt
key client1.key
tls-client
tls-auth ta.key 1
cipher BF-CBC
ns-cert-type server
comp-lzo
persist-key
persist-tun
verb 4
route-metric 1
route-method exe
route-delay 2

Для Windows Vista, Windows 7 запускать клиента надо с админскими правами через батник:

cd c:\vpn\
"c:\program files\openvpn\bin\openvpn.exe" c:\vpn\client1.ovpn
pause

ЗЫ. На хостовой ноде может быть не загружен модуль ядра tun. Тогда:

modprobe tun
modprobe -l |grep tun

linux , ,