Debian

В предыдущей статье я рассказал, как я подготавливаю Linux сервер к работе. Открывая тему моего набора инструментов на сервере, я хочу начать с первых программ, с помощью которых осуществляется подключение и работа в удаленном терминале. Это mosh, zsh и tmux.

mosh (mobile shell)

Mosh — современная замена старого доброго SSH. Ладно, это не полная его замена, поскольку для работы mosh нужен все тот-же ssh, можем сказать, что это новое дыхание для ssh ;). После того, как произошло соединение, запускается mosh-server с использованием одного из UDP портов в диапазоне от 60000 до 60010. Дальнейшее взаимодействие между клиентом и сервером происходит по UDP.

“А что это за программа такая?” — часто приходиться слышать, работая на сервере в SSH терминале, от человека, который подошел и уставился в мой монитор. Сегодня, дорогой друг, стоящий за моей спиной, я познакомлю тебя с ПО, которое использую в ежедневной работе. Но, начать надо с того, как все это добро попадает на тот самый Linux сервер.

Виртуальные машины приходят и уходят, иногда, десятками за неделю. Каждый раз настраивать “под себя” утомительно… Я нашел для себя решение задачи и теперь готов поделиться. Это ansible — простой инструмент, который через стандартное SSH подключение выполняет рутинные операции по подготовке сервера к работе. Все инструкции, что делать, описаны в файле playbook.yml. В качестве хоста, который будет настраивать, должна быть Linux либо OSX машина. Я это всегда делаю со своего MacBook либо с тестового Linux сервера в офисе. Но, в основном с MacBook. Сам рецепт приготовления сервера, я выложил на github и сейчас расскажу, как им пользоваться.

Процесс настройки состоит из нескольких этапов:

  1. Установка всего необходимого мне ПО.
  2. Создание пользователей и настройка ключей авторизации для SSH. Отключение регистрации по паролю и отключение root через ssh.
  3. Настройка firewall — опционально.
  4. Установка docker — опционально.

А теперь о каждом пункте детальный.

Після певних подій, сайти УГКЦ підпали під потужний DDoS штурм. Важко було не те, що на сайт зайти, а й підключитися по SSH до консолі. Боротьба тривала кілька днів. Розповім, що саме мені допомогло подолати цю напасть.

Тюнінг iptables
На рівні мережевого екрану, я додав додаткові правила:

# DDoS
# Не відповідаємо на ping
iptables -A INPUT -p icmp -j DROP --icmp-type 8
# Блокуємо більше 2-х звернень на головну сторінку з одного IP за 10 сек.
iptables -A INPUT -p tcp -m tcp --dport 80 -m string --string "GET / HTTP" --algo kmp --to 1024 -m recent --set --name httpddos --rsource
iptables -A INPUT -p tcp -m tcp --dport 80 -m string --string "GET / HTTP" --algo kmp --to 1024 -m recent --update --seconds 10 --hitcount 2 --name httpddos --rsource -j DROP
# Блокуємо більше 32 конектів з 1 IP
iptables -A INPUT -p tcp --dport 80 -m connlimit --connlimit-above 32 -j DROP
iptables -A INPUT -p tcp --dport 80 -j ACCEPT

Це дозволило трохи розвантажити Apache.

Обновил один из серверов с Debian lenny до squeeze. Все прошло гладко, только вот на одном из старых сайтов (joomla 1.0) посыпалась куча deprecated функций PHP. Не хотел трогать код этого сайта, решил запустить для него отдельно PHP5.2 на том же сервере. Вот как это я реализовал.

Устанавливаем зависимости, скачиваем PHP5.2 и распаковываем архив:

aptitude install libxml2-dev libmysqlclient-dev libcurl4-gnutls-dev libpng12-dev libjpeg62-dev
cd /tmp
wget http://www.php.net/get/php-5.2.17.tar.gz/from/ru.php.net/mirror -O php-5.2.17.tar.gz
tar zxvf php-5.2.17.tar.gz
cd php-5.2.17

Из исходников собираем PHP5.2 и устанавливаем в /opt/php5.2:

./configure --prefix=/opt/php5.2 --with-config-file-path=/opt/php5.2 --with-mysqli --with-mysql --with-curl --with-gd --with-jpeg-dir --enable-cli --enable-fastcgi --enable-discard-path --enable-force-cgi-redirect
make
make install

Проверяем:

/opt/php5.2/bin/php -v
PHP 5.2.17 (cli) (built: Oct 22 2011 15:05:51)
Copyright (c) 1997-2010 The PHP Group
Zend Engine v2.2.0, Copyright (c) 1998-2010 Zend Technologies

Запускать для этого сайта PHP5.2 будем через fastcgi.

aptitude install libapache2-mod-fastcgi
a2enmod cgi fastcgi actions
invoke-rc.d apache2 restart

Создадим исполняемый файл /opt/php5.2/bin/php-cgi, который содержит:

#!/bin/sh
PHPRC="/opt/php5.2/"
export PHPRC
PHP_FCGI_CHILDREN=4
export PHP_FCGI_CHILDREN
PHP_FCGI_MAX_REQUESTS=5000
export PHP_FCGI_MAX_REQUESTS
exec /opt/php5.2/bin/php-cgi

В виртуальном хосте нужного сайта добавляем:


SetHandler application/x-httpd-php5

ScriptAlias /php52-cgi /usr/lib/cgi-bin/php52-cgi
Action application/x-httpd-php5 /php52-cgi
AddHandler application/x-httpd-php5 .php

Перезапустим Apache и проверяем что наш сайт уже использует PHP 5.2, когда все остальные 5.3

invoke-rc.d apache2 restart

Обслуговую багато віддалених Linux маршрутизаторів, а проблема одна й та сама — не дає працівникам спокою соціальна мережа! 🙂 Потрібно заблокувати з використанням iptables. Найшов просте рішення:

# deny rules
$IPTABLES -A FORWARD -m string --string "odnoklassniki.ru" --algo kmp --to 65535 -j DROP
$IPTABLES -A FORWARD -m string --string "facebook.com" --algo kmp --to 65535 -j DROP
$IPTABLES -A FORWARD -m string --string "vkontakte.ru" --algo kmp --to 65535 -j DROP
$IPTABLES -A FORWARD -m string --string "vk.com" --algo kmp --to 65535 -j DROP

Усе дуже просто: необхідно заблокувати певним адресатам писати нам листи 🙂
Встановлено postfix, створюємо файл /etc/postfix/sender_access, куди заносимо наших небежених друзів:

user@bad.com REJECT

Створюємо базу:

postmap hash:sender_access

Прописуємо у конфіг main.cf

smtpd_recipient_restrictions = check_sender_access hash:/etc/postfix/sender_access

Та перезапускаємо! Тепер наш «товариш» отримає:

This message was created automatically by mail delivery software.

A message that you sent could not be delivered to one or more of its
recipients. This is a permanent error. The following address(es) failed:

me@it-sfera.com.ua
SMTP error from remote mail server after RCPT TO::
host postfix [192.168.22.13]: 554 5.7.1 :
Sender address rejected: Access denied

—— This is a copy of the message, including all the headers. ——

Asterisk LogoМы уже имеем настроенный сервер Asterisk через который Oktell осуществляет звонки на мобильные. Вся статистика храниться в /var/log/asterisk/cdr-csv/Master.csv Не очень удобно в плане работы… Вот и хочу перенести все в MySQL, а потом смогу эту информацию использовать в сценариях Oktell. Как и в предыдущей статье все будим собирать с исходников на Ubuntu Linux.
Приступим!

Сьогодні потрібно було обмежети для одного працівника (192.168.0.2) швидкість до 512 Кб/с на вхід та вихід. Допоміг ось такий скрипт:

#!/bin/bash
#
#  tc uses the following units when passed as a parameter.
#  kbps: Kilobytes per second
#  mbps: Megabytes per second
#  kbit: Kilobits per second
#  mbit: Megabits per second
#  bps: Bytes per second
#       Amounts of data can be specified in:
#       kb or k: Kilobytes
#       mb or m: Megabytes
#       mbit: Megabits
#       kbit: Kilobits
#  To get the byte figure from bits, divide the number by 8 bit
#
TC=/sbin/tc
IF=eth1                 # Interface
DNLD=512kbps        # DOWNLOAD Limit
UPLD=512kbps        # UPLOAD Limit
IP=192.168.0.2      # Host IP
U32="$TC filter add dev $IF protocol ip parent 1:0 prio 1 u32"

start() {

    $TC qdisc add dev $IF root handle 1: htb default 30
    $TC class add dev $IF parent 1: classid 1:1 htb rate $DNLD
    $TC class add dev $IF parent 1: classid 1:2 htb rate $UPLD
    $U32 match ip dst $IP/32 flowid 1:1
    $U32 match ip src $IP/32 flowid 1:2

}

stop() {

    $TC qdisc del dev $IF root

}

restart() {

    stop
    sleep 1
    start

}

show() {

    $TC -s qdisc ls dev $IF

}

case "$1" in

  start)

    echo -n "Starting bandwidth shaping: "
    start
    echo "done"
    ;;

  stop)

    echo -n "Stopping bandwidth shaping: "
    stop
    echo "done"
    ;;

  restart)

    echo -n "Restarting bandwidth shaping: "
    restart
    echo "done"
    ;;

  show)

    echo "Bandwidth shaping status for $IF:\n"
    show
    echo ""
    ;;

  *)

    pwd=$(pwd)
    echo "Usage: $(/usr/bin/dirname $pwd)/tc.bash {start|stop|restart|show}"
    ;;

esac

exit 0

Asterisk LogoРасскажу о своем опыте создания SIP-GSM шлюза на базе Asterisk и подключение его к Oktell. У нас в офисе кроме сервера с установленным Oktell есть еще сервер для раздачи Интернета, на котором установлен Debian «Squeeze» Linux (Ubuntu тоже подойдет). Вот на нем и будем экспериментировать! 😉

1. Установка Asterisk
Мне нужна последняя стабильная версия Asterisk, та что имеется в репах не подходит.

mkdir ~/tmp && cd ~/tmp
aptitude install g++ libncurses-dev libxml2-dev subversion usb-modeswitch-data
wget http://downloads.asterisk.org/pub/telephony/asterisk/asterisk-1.6.2-current.tar.gz
tar xzvf asterisk-1.6.2-current.tar.gz
cd asterisk-1.6.2-current
./configure
make install
make config
make samples

Если до этого момента Вам еще не стало страшно, тогда продолжаем!

Системный Администратор - 2010
Системный Администратор - 2010
В этом году решил тоже пройти тестирование в конкурсе «Системный Администратор — 2010». Вот результат:

Подведены итоги конкурса «Системный Администратор — 2010».

В этом году в конкурсе приняли участие более 47 тысяч системных администраторов. Если представить стадион, на котором проходили игры Чемпионата мира по футболу в этом году, то участники конкурса заняли бы все трибуны!

Из всех участников 10 процентов получили рейтинг Гуру. Еще 20% стали Профи, 18% — опытные и 22% — начинающие системные администраторы. Среднее время прохождения теста — около часа.

Поздравляем, Вы показали отличные знания, получив рейтинг Гуру!