Оторвитесь от компьютера, сделайте гимнастику для глаз

  1. Резко поднимите глаза вверх, опустите вниз, посмотрите направо и налево. Повторите 7–10 раз.
  2. Закройте глаза, положите на веки подушечки указательного, среднего и безымянного пальцев, слегка надавите. Очень осторожно и мягко круговыми движениями массируйте глазные яблоки сначала по часовой стрелке, а затем – в другую сторону.
  3. Расположите пальцы так же, как и в предыдущем упражнении. Делайте круговые движения глазами, преодолевая сопротивление рук. Сделайте 9 кругов в одну сторону и 9 — в другую.
  4. Представьте себе очень большой обруч. Обведите его глазами справа налево. То же самое сделайте в другом направлении. Выполняя упражнение, не двигайте головой, вращайте только глазами. Повторите 5–7 раз.
  5. Встаньте, смотрите только вперед на какой-либо предмет. Поверните голову направо, затем налево не отводя взгляда.. Повторите 8–10 раз в каждую сторону.
  6. Встаньте, смотрите только вперед на какой-либо предмет. Поднимите, затем опустите голову, не отводя взгляда. Повторите 10 раз.

Read the rest of this entry »

Мониторинг системы под FreeBSD

Системные команды, которыми можно проверить ресурсы системы:

top -mio – показать I/O по процессам
top -S – показать системные процессы в топе (по дефолту они не показываются)
gstat – нагрузка на диски
iostat -d -w1 -c7 – нагрузка на диски
systat -io start 1
diskinfo -t da0 – тест на дисковую производительность
tunefs -p /var/ – информация о настройках файловой системы
vmstat -z чего не хватает
vmstat -i прерывания по устройствам
netstat -i ошибки на интерфейсах
systat -ifstat – интенсивность передачи трафика
netstat -inb – передано через интерфейс в байтах
netstat -w1 – количество пакетов/ошибок/байт на интерфейсе
sysctl kern.ipc.numopensockets – количество открытых сокетов
df -H – количество свободного места
df -i – количество свободных инодов
freecolor – очень симпатичная утилита для мониторинга использования памяти (ставится из портов)

Для детальной информации по расходу памяти:

fetch -o /usr/local/bin/free http://people.freebsd.org/~rse/dist/freebsd-memory
chmod +x /usr/local/bin/free
free

Тюнинг FreeBSD 7-8 (sysctl, loader.conf)

Некоторые опции по тюнингу FreeBSD и описание к ним.

Предупреждение: Бездумное копирование опций не всегда приводит к приросту производительности!!!

/etc/sysctl.conf

 ###### Формат записей " параметр=значение # значение по умолчанию " 

NETWORK
Запрет ответа при обращении на закрытые порты. 
По стандарту, если на закрытый порт сервера приходит SYN-пакет, машина должна ответить RST-пакетом.
Это упрощает сканирование портов, а также дает достаточное количество информации (в виде ответов от сканируемого сервера) для определения версии ОС.
«Черные дыры» заставляют FreeBSD быть предельно лаконичной, не отсылая ничего в ответ на запросы к закрытым портам.

 net.inet.tcp.blackhole=2 # 0 net.inet.udp.blackhole=1 # 0 

Увеличение размера очереди.
Защита очереди от SYN атак

 kern.ipc.somaxconn=4096 # 128 

Чтобы сервер не стал жертвой DoS-атаки, можно включить механизм syncookies, который служит для защиты сервера от SYN-флуда. 
Когда новое соединение не помещается в переполненный syncache, FreeBSD переходит в режим «syncookies» (TCP SYN cookies).

При серьезной атаке может не менее серьезно выручить.

 net.inet.tcp.syncookies=1 # 1  Read the rest of this entry »

Некоторые опции sysctl

Озадачился собрать и попробовать всякие sysctl опции ядра, повышающие безопасность машины, и облегчающие её работу при попытках всяких атак и сканировании портов. А может, даже, просто те пункты, которые показались интересными и нужными – причём даже только начав, заметил одну вещщь – почти всё касается работы стека TCP/IP, что и неудивительно, ибо основное применение FreeBSD – это серверы. Порывшись в инете понял – 90% данных это скопированный друг у друга перевод какой-то буржуйской статьи. Собстно поэтому и начал ковыряться – остальные 10% – это далеко немало… Причина крайне проста – это самая недокументированная часть FreeBSD…

Следующие два пункта касаются поведения ОС при попытке подключиться на порты, которые не слушаются приложениями. При штатных настройках, в таком случае, система посылает пакет с флагом RST, и закрывет подключение. Удалённый хост получает примерно следующее (если пробовать telnet`ом подключиться): Connection reset by peer.
net.inet.tcp.blackhole=2 – данный пункт указывает, что происходит при получении TCP-пакета на закрытый порт (не слушаемый никакими приложениями)Если стоит «1″, то SYN пакеты (пакет, устанавливающий соединение) на закрытый порт будут отклоняться без отсылки отправителю RST пакета (перезагрузка (соединения, не машины :) )). При установке в «2″, вообще все (а не только SYN) пакеты на закрытый порт отбрасываются без каких-либо действий. Данный пункт позволяет разгрузить ЦП, т.к. обработка пакетов не производится, и интернет-канал сервера – т.к. не надо слать ответных пакетов.

net.inet.udp.blackhole=1 – очень похож на предыдущий пункт, по результату, но для протокола UDP. Ввиду того, что протокол UDP работает без установки соединения, есть только два, а не три варианта установки, когда эта переменная установлена в 1, то отбрасываются все UDP пакеты, адресованые закрытым портам.

kern.ipc.somaxconn=1024 – увеличивает размер очереди для сокетов, чем помогает предотвратить SYN-атаку, когда очередь сокета переполняется некорректными попытками соединений. Конечно от мощной атаки это не спасёт, но от слабой и средней – должно помочь. Значение по дефолту – 128.

Следующие 4 пункта необходимы для невозможности удалённого изменения таблицы маршрутизации на Вашем хосте. Надо заметить, что установив эти пункты как указано, я столкнулся с проблемами в собственной сети – как оказалось между некоторыми подсетями маршрутизация была криво настроена (причём сам же знал, что криво, сам же криво и делал – быстрей, быстрей! – а потом всё недосуг было заняться) – соответственно клиентские компы начали терять некоторые сети. Пришлось сделать всё по-уму :)

net.inet.icmp.drop_redirect=1 – уничтожать icmp-датаграммы переадресации

net.inet.icmp.log_redirect=1 – записывать в журнал событий icmp-датаграммы с указанием переадресации

net.inet.ip.redirect=0 – может ли эта машина посылать дейтаграммы переадресации другим (вот из-за изменения этого пункта у меня сеть и плющщило, но менять его надо, просто надо сразу сетку корректно настраивать)

net.inet6.ip6.redirect=0 – предыдущий пункт, но для IPv6

Read the rest of this entry »

Конвертируем все php-файлы проекта в UTF-8

Проблема с кодировками является достаточно распространенной. Часто при создании проекта требуется использовать всем одну кодировку например UTF-8, но порой просто не уследишь за всеми добавленными в проект файлами. Конечно можно потратить много времени и сил перекодируя все текстовым редакторе, но если точно знаем из какой кодировки в какую надо конвертить то просто выполняем в консоли команду

find . -name '*.php' | while read i; do iconv -f WINDOWS-1251 -t UTF-8 "$i" >tmp; mv tmp "$i"; done

и все файлы *.php в этой папке перекодируются в UTF-8.
Список доступных кодировок можно вывести командой iconv -l

Перенос FreeBSD на другой диск

Если диск начал грязно ругаться в dmesg на ошибки чтения-записи, значит пора переезжать. Допустим у нас FreeBSD версии 7.0…

Выключаемся, вставляем новый диск (у меня он ad2). Он у меня немного поменьше, потому внимательно смотрим

$ df -m

- и думаем, какую файловую систему насколько можно ужать.
Подумали – можно приступать.

# sysinstall

идем в меню Configure->Fdisk, в нем удаляем существующие партиции и создаем одну новую на весь диск. Сложностей никаких. Есть тонкость – выходить нужно по Q, не нажимая W. (Если в задумчивости нажали, катастрофы нет – но перед следующей операцией придется перегружаться).

На вопрос про Boot Manager отвечаем Standard.

Переходим в пункт меню Label.

Здесь нас поджидает еще одна тонкость. Будущий корневой раздел должен быть создан с меткой ad2s1a, но sysinstall не позволяет задавать метку вручную, а при указании точки монтирования отличной от / автоматически присваеват имя ad2s1d. У меня сработала такая последовательность: сперва создал раздел с точкой монтирования / – и он получил правильную метку, а потом нажал M – и изменил точку монтирования на /tmp/root.

Далее без каких-либо сложностей создаются раздел подкачки ad2s1b и файловые системы с точками монтирования /tmp/usr и /tmp/var (соотношение меток и точек монтирования сверяйте с вашим /etc/fstab – если, конечно, у вас нет охоты переделать все по-новому).
Выход из Label нажатием W (появляется большое ругательное окно, с вопросом, понимаете ли вы, что творите. Нужно ответить Yes) и потом Q.

Выходим из sysinstall и смотрим на новые файловые системы:

$ mount

Теперь переносим на них содержимое старого диска:

# cd /
# find . -xdev -print | cpio -p -m /tmp/root
# cd /usr
# find . -xdev -print | cpio -p -m /tmp/usr
# cd /var
# find . -xdev -print | cpio -p -m /tmp/var

Чтобы веселее было ждать конца копирования, у cpio можно добавить опцию –verbose
(команда копирования может быть и такой:

pax -rw -X -pe . /tmp/root

– так короче, но вариант find+cpio просто привычнее – и переносимее – кто-нибудь видел pax напр. под Linux? – про другие unix-like системы уже молчу).
Вот и весь процесс. Выключаемся, ставим новый диск на место старого – и грузим систему.

Удобный конфиг для tcsh

кладем в .tcshrc и радуемся

#
# File   : tcsh config for Frenzy 1.0
# Author : Sergei Mozhaisky (technix@frenzy.org.ua)
# 

setenv	EDITOR		vi
setenv	PAGER		more
setenv	BLOCKSIZE	K

set path = (/sbin /bin /usr/sbin /usr/bin /usr/local/sbin /usr/local/bin /usr/X11R6/bin $HOME/bin)

# if this is not interactive shell - exit
if ($?USER == 0 || $?prompt == 0) exit

set autocomplete
set autoexpand
set autolist
set filec
set ellipsis
#set nobeep
set listjobs
set rmstar
set prompt = "%{\033[31m%}%n@%m:%{\033[34m%}%c02%{\033[0m%}%# "
set prompt2 = "%R?"
set history = 10000
set savehist = (10000 merge)
set inputmode = insert
set symlinks = chase
limit coredumpsize 0
unset autologout
        set mail = (/var/mail/$USER)
        if ( $?tcsh ) then
                bindkey "^W" backward-delete-word
                bindkey -k up history-search-backward
                bindkey -k down history-search-forward
        endif

## Alias section
alias today     "date '+%Y%m%d'"
alias mess      'clear ; tail -f /var/log/messages'
alias ff        'find . -name $*'
alias h		'history 25'
alias j 	'jobs -l'
alias la	'ls -a'
alias lf	'ls -FA'
alias ll	'ls -lA'

# enter command name and press F1 to see man on this prog
alias helpcommand man

## Bindkey section

# F1 : help on command currently typed(if 'ls passwd', help on 'ls').
bindkey ^[[M run-help
bindkey [OP  run-help

if ($term == "xterm" || $term == "vt100" || $term == "vt102" || $term !~ "con*") then
# bind keypad keys for console, vt100, vt102, xterm
bindkey "\e[1~" beginning-of-line  # Home
bindkey "\e[7~" beginning-of-line  # Home rxvt
bindkey "\e[2~" overwrite-mode     # Ins
bindkey "\e[3~" delete-char        # Delete
bindkey "\e[4~" end-of-line        # End
bindkey "\e[8~" end-of-line        # End rxvt
else
# INSERT : toggles overwrite or insert mode.
bindkey ^[[L  overwrite-mode
bindkey ^[[2~ overwrite-mode        # for x
# DELETE : delete char at cursor position.
bindkey ^?    delete-char
bindkey ^[[3~ delete-char           # for x
# HOME : go to the beginning of the line.
bindkey ^[[H beginning-of-line
# END : go to the end of the line.
bindkey ^[[F end-of-line
endif

Для того, что бы история сохранялась более надёжно (не только по команде exit) нужно добавить в файл .logout строчку

history -S

Лишние символы перед тегом html, странные цифры в начале и в конце страницы в выдаче веб-сервера

Если выводится странные цифры перед тегом <html> после тега </html> а также внутри самой страницы и вас это пугает, то вот вам решение:

Проблема связана с тем, что некоторые прокси не могут адекватно обрабатывать http 1.1 headerы, которые шлются из php.

Решение – добавить в файл .htaccess строчку:

SetEnv force-no-vary

Объяснение значения отсюда: http://httpd.apache.org/docs/2.2/env.html

force-no-vary

This causes any Vary fields to be removed from the response header before it is sent back to the client. Some clients don’t interpret this field correctly; setting this variable can work around this problem. Setting this variable also implies force-response-1.0.

Можно поробовать еще:

downgrade-1.0

This forces the request to be treated as a HTTP/1.0 request even if it was in a later dialect.

force-response-1.0

This forces an HTTP/1.0 response to clients making an HTTP/1.0 request. It was originally implemented as a result of a problem with AOL’s proxies. Some HTTP/1.0 clients may not behave correctly when given an HTTP/1.1 response, and this can be used to interoperate with them.

Управление портами в FreeBSD

В системах FreeBSD, OpenBSD и NetBSD существует два подхода к установке
дополнительного программного обеспечения, так называемых портов и пакетов,
в данном руководстве я буду опираться лишь на подход в OS FreeBSD:

ports, packages.

Packages или пакеты, это уже собранные(binaries – исполняемый код) пакеты
для того или иного FreeBSD RELEASE из портов для этих RELEASE.

Порты постоянно обновляются, поэтому готовые пакеты собираются и проверяются
только для выпускаемого RELEASE. Термин port – сокращение от portability,
портабельность, существует много программного обеспечения Freeware или под
лицензиями GPL (http://www.gnu.org/licenses/licenses.html) и «AS IS» BSD-лицензия (http://www.bsdnewsletter.com/bsd/license.html), команда разработчиков
FreeBSD занимается адоптацией или портированием такого программного обеспечения
для OS FreeBSD. Read the rest of this entry »

Converting SSL-certificates from CRT format to PEM

Dovecot, for example, seems to expect pem-files, while RapidSSL only issues crt-files. The solution? Use OpenSSL to convert (via the DER-format) to pem:

openssl x509 -in input.crt -out input.der -outform DER

then

openssl x509 -in input.der -inform DER -out output.pem -outform PEM