lighttpd + fcgid | Lighttpd

Поскольку апач на одном из моих серверов начал потихоньку сдавать – начинаем искать ему альтернативы.
Начнём с lighttpd – быстрый фронтенд для fcgid который мы настроили ранее. Посмотрим.

Продолжить чтение →

Настраиваем DISA на Panasonic TD500 | УАТС

Задача следующая – нужно настроить приветствие OGM и DISA на городской многоканальный номер для того чтобы пользователь мог дозвониться по городскому номеру, услышать приветствие (OGM) и набрать внутренний номер абонента в тоновом режиме. То есть получаем не просто многоканальный номер а возможность дозвониться до любого внутреннего абонента, обслуживаемого УАТС.

Продолжить чтение →

Доступ к VNC по ssh при помощи putty | VNC

Задача описана в предыдущем посте: получить доступ к машине под виндой с VNC (или любой другой программой удаленного управления) за шлюзом.
Можно сделать простой проброс портов при помощи kernel NAT/natd на шлюзе (см. предыдущую статью). Но метод не совсем секьюрный поскольку мы просто пробрасываем порт который торчит наружу и доступен любому сканеру.
Гораздо проще получить доступ к серверу VNC через туннель ssh при помощи putty под Windows.

Продолжить чтение →

Проброс портов в ipfw | FreeBSD

Итак задача тривиальная – надо получить доступ к машине под Windows за натом.

Имеем:

- машину к которой нужно получить доступ под Windows с realVNC (к примеру)
- шлюз на FreeBSD с kernel NAT (ipfw)
- машину с Windows (с маршрутизируемым IP) c realVNC клиентом.

1. Ставим на машину с айпи, скажем, 172.16.5.233, к которой хотим коннектиться, сервер VNC.
2. На шлюзе в правилах фаерволла правим правило NAT:

${fwcmd} nat 1 config if ${LanOut} log redirect_port tcp 172.16.5.233:5900 5900

3. Перезапускаем сеть:

#/etc/netstart

4. Коннектимся к внешнему айпи шлюза на порт 5900 клиентом VNC.

Получаем доступ к виндовой машине за натом.

PS: Конечно порт нужно менять, ограничивать доступ и т.д. и т.п.

Как отключить alias на интерфейсе | FreeBSD

Элементарная вещь но поскольку приходится пользоваться нечасто запишу.
Итак как убрать alias с интерфейса не перегружая машину. Суть проблемы в следующем.
Добавляем alias к примеру прописав строчку в rc.conf:

ifconfig_bge1_alias0="inet 10.12.13.154 netmask 255.255.255.255"

И перегружаем интерфейсы:

#/etc/netstart

Делаем ifconfig – видим наш дополнительный айпишник на интерфейсе. Всё ок.

Теперь alias нужно убрать. Правим rc.conf – убираем строку отвечающую за псевдоним на интерфесе, делаем /etc/netstart и видим, что alias на интерфейсе в выводе ifconfig остался, что в принципе, совершенно естественно – в rc.conf у нас строка добавляющая алиас. Никаких инструкций по удалению псевдонима мы не давали.

Убрать alias можно командой:

#ifconfig em0 -alias 10.12.13.154

IPB 1.3 знаки вопросов вместо символов | IPB

В продолжение темы про IPB 1.3 – на одном из серверов импортировал правильный дамп в честном cp1251 и получил знаки вопросов вместо кириллицы. Как решить писал ранее – http://adminlog.ru/?p=391
Но часть таблиц (например статусы пользователей) всё равно отображались неверно несмотря на то что всё остальное было в порядке.
Исправил только поставив phpmyadmin и просмотрев данные и структуру таблицы. Кодировка оказалась неверная – дефолтная, как для для всего сервера latin1. При этом в дампе данные в cp1251, чарсет – latin1, и импорт происходит корректно для одних таблиц и некорректно для других.
В общем лечится просто указанием правильной кодировки через phpmyadmin.

Оптимизация Apache 2.2 | Apache

Смотрим вывод top обращаем внимание на размер процессов httpd.
У меня почти с дефолтным набором модулей размер SIZE (это показатель того сколько памяти резервирует под себя процесс) одного процесса httpd равен 82148k.

Задача – сделать процесс апача как можно легче минимальными усилиями. Будем отключать загрузку модулей в конфиге(httpd.conf). Наверное правильнее перекомпилировать апач, но такой вариант позволяет более оперативно управлять конфигурацией сервера, что-то оперативно включать, что-то удалять.

Продолжить чтение →

IPB 1.3 и кодировки Mysql | IPB

Если у вас на сервере дефолтная кодировка mysql – latin1, а в секции [mysqldump] в файле my.cnf указана кодировка дампа – cp1251 и дамп IPB у вас в правильном cp1251, то после того как мы залили дамп в базу (скажем во время восстановления из дампа) – можем получить знаки вопросов вместо кириллицы. И промучиться с кодировками можно довольно долго…

Лечится правкой файла IPB 1.3 – mySQL.php (лежит в sources/Drivers)

if ( !mysql_select_db($this->obj['sql_database'], $this->connection_id) )
{     echo ("ERROR: Cannot find database ".$this->obj['sql_database']);}
mysql_query("SET NAMES 'cp1251'");

За решение спасибо song’у:
http://www.sysman.ru/index.php?showtopic=7164

Перенос структуры базы Mysql | MYSQL

Иногда необходимо перенести только структуру базы данных mysql без данных.
Делается это просто (команда в одну строку):

#mysqldump -u use -p --databases base_name --add-drop-table 
--force --no-data > /home/userdir/base.sql

Ключевая директива mysqldump: --no-data
Получаем файл с описанием таблиц базы без данных.

ВНИМАНИЕ! Когда вы создали дамп базы и хотите на его основе сделать новую – проверьте нет ли упоминания имени старой базы в дампе (оператор drop database) – при попытке залить структуру в новую базу на той же площадке – потрете старую базу!

ipfw: install_state: Too many dynamic rules | FreeBSD

Если ipfw во FreeBSD выбрасывает на консоль ошибку:

ipfw: install_state: Too many dynamic rules

Может помочь увеличение переменной net.inet.ip.fw.dyn_max
Смотрим значение переменной:

#sysctl net.inet.ip.fw.dyn_max

Рекомендуют выставлять net.inet.ip.fw.dyn_max=16384
Делаем

#sysctl net.inet.ip.fw.dyn_max=16384

Или прописываем переменную в sysctl.conf

Просмотреть текущее значение можно командой:

#sysctl net.inet.ip.fw.dyn_count

У меня сообщение ipfw: install_state: Too many dynamic rules иногда проскакивает по причине ограничения одновременных подключений с одного айпи на 80 порт.

Есть ещё один совет – просмотреть количество незакрытых соединений:

#netstat -na | grep FIN_WAIT_2 | wc -l

Если количество около 4000 – запретить ожидание:

#sysctl net.inet.ip.fw.dyn_keepalive=0

По умолчанию переменная установлена – в 1.

Активность по ip адресу | Apache

Иногда полезно просмотреть с какого айпи чаще всего пользователи заходят на Ваш веб сайт. Ну скажем если вы подозреваете что кто-то злоупотребляет количеством одновременных соединений с одной машины.
Парсим лог апача выбираем уникальные айпи и количество хитов.

#sort /var/log/httpd-access.log | awk '{print $1}' | uniq -c | sort -n > /tmp/who

Получаем список – количество вхождений, и айпи.

23 182.24.23.5
24 23.10.234.54
27 129.34.25.333
и т.д.

Кстати ограничить количество соединений на 80 порт можно строкой фаервола (ipfw):

${fwcmd} add allow tcp from any to me 80 limit src-addr 200

После src-addr пишем количество одновременных коннектов с одного айпи.

Настройка сетевого интерфейса в OpenBSD | OpenBSD

Настройка сетевого интерфейса в OpenBSD не совсем обычна для администратора, к примеру, FreeBSD. В OpenBSD для каждого интерфейса создается вручную файл с именем – hostname + псевдоним сетевого интерфейса. Например:

#cd /etc/
#touch hostname.em0

В файл прописываем настройки интерфейса:

inet 10.0.0.1 255.255.255.0 NONE

Собственно зачем стал писать об этой в общем тривиальной вещи – недавно на одном из довольно загруженных шлюзов заметил сильные тормоза, большое количество коллизий и потери пакетов.

Делаем:

#netstat -aI em1

И в полях Oerrs, Ierrs, Colls смотрим количество ошибок при приёме передаче и количество коллизий.

Сделал ifconfig и увидел что интерфейс на стомегабитном канале автоселектом перешёл в half-duplex. Скорее всего на другом конце оборудование переходило в состояние полудуплекса и наш шлюз подстроился автоматически, либо были другие причины. В любом случае делаем:

#ifconfig em1 media 100baseTX mediaopt full-duplex

И пишем в файл настройки интерфейса:

inet 10.0.0.1 255.255.255.0 NONE media 100baseTX mediaopt full-duplex

В общем очевидные вещи про которые забываем…

Software caused connection abort: mod_fcgid: error reading data from FastCGI server, referer | Apache

Продублирую описание ошибки из предыдущей статьи потому как в рунете решения не нашёл, а видно что случается…

Если после настройки fcgid под apache22 мы получили при заходе на страницу Internal Server Error, а в логах апача такую строку:

[warn] [client 223.45.3.19] (53)Software caused connection abort: mod_fcgid: error reading
 data from FastCGI server, referer: http://server.ru/index.php
[error] [client client 223.45.3.19] Premature end of script headers: index.php, referer: 
http://server.ru/

Стоит проверить права на запуск скрипта php-wrapper (или как он у вас называется) и php-cgi. Скрипт должен быть доступен на запуск для пользователя (или группы) под которым работает апач.

Настраиваем fcgid под apache22 во FreeBSD | Apache, FreeBSD

Для увеличения производительности веб сервера сегодня ставим fcgid на апач (сервера у меня не настолько загружены чтобы переходить на nginix или lighttpd). Mod_fcgid написан специально для апача второй ветки и является продолжением разработки fastCGI.

Продолжить чтение →

reject_unknown_client. Исключения | Postfix

Как настроить ограничение reject_unknown_client я уже писал (см. здесь) но почтовые сервера у которых отсутствует PTR запись в днс зоне не такая редкость. Если нам нужно внести ограничение на действие директивы reject_unknown_client можно создать карту исключений.

Создаем файл с именами, айпи адресами и т.д. Например /usr/local/etc/postfix/client_access

Пишем в него:

@mail.ru   OK
193.33.24.24   OK
mail.ru   OK
info@server.ru   OK

В нашем случае, когда в логе мы видим что отрабатывает правило reject_unknown_client и имя машины у нас unknown[193.33.24.24]:

postfix/smtpd[99471]: NOQUEUE: reject: RCPT from unknown[193.33.24.24]: 450 Client host 
rejected: cannot find your hostname

Важно добавить в карту именно айпишник сервера с которого нам шлют почту:

193.33.24.24 OK

Далее делаем:

#postmap hash:/usr/local/etc/postfix/maps/client_access

Получаем файл client_access.db

Прописываем в набор ограничений в файл main.cf (ставим ссылку на хэш до ограничивающей директивы):

smtpd_recipient_restrictions =
        check_client_access hash:/usr/local/etc/postfix/client_access,
        permit_mynetworks,
        permit_sasl_authenticated,
        reject_unauth_destination,
        reject_unknown_sender_domain,
        reject_unlisted_sender,
        reject_unknown_client,
        reject_rbl_client sbl-xbl.spamhaus.org

Запятые – не обязательно если директивы идут с новой строки. Обращаем внимание последовательность применения наборов у postfix следующая:

1. smtpd_client_restrictions
2. smtpd_helo_restrictions
3. smtpd_sender_restrictions
4. smtpd_recipient_restrictions
5. smtpd_data_restrictions

То есть в принципе мы могли бы добавить наши директивы в первый набор smtpd_client_restrictions.

Не забываем про директиву:

smtpd_delay_reject = yes

Хотя это поведение postfix по умолчанию, но на всякий случай. Директива smtpd_delay_reject позволяет нашему серверу получить заголовки письма, и лишь потом применить к ним правила.

Для удобства просмотра лога в реальном времени не забываем про tail
Делаем.

#tail -f /var/log/maillog | grep @server.ru

И просим прислать с вражеского сервера письмо.