Слава нації
#StandWithUkraine

Роман Теличко

Блог з програмування, оптимізації та адміністрування систем

Ускоряем Chromium за счёт tmpfs в Linux

// 6 Червня, 2014 | 8204 переглядів

Есть довольно простой способ ускорить работу браузера Chromium (Google Chrome) явно указав путь к папке с временными файлами что будет находиться в оперативной памяти (ОЗУ). Этот приём будет особенно полезен владельцам SSD-дисков ресурс перезаписи которых очень ограничен.

Добавляем временное хранилище размером в 1GB (должно хватить), что будет находиться в оперативной памяти (ОЗУ):

sudo mkdir /ram
sudo vi /etc/fstab
tmpfs    /ram    tmpfs    defaults,noatime,mode=1777,size=1024M    0    0

Монтируем:

sudo mount -a

Смотрим:

df -h

Должно быть что-то такое:

Ф. система   Розм     Вик       Дост      Вик%      змонтований на
tmpfs        1,0G     0         1,0G      0%        /ram

Теперь редактируем файл с default-настройками Chromium, явно указывая ему путь к нашему временному хранилищу:

sudo vi /etc/chromium-browser/default

Меняем строчку

CHROMIUM_FLAGS=""

На следующую:

CHROMIUM_FLAGS="--disk-cache-dir=/ram"

Перезапускаем браузер Chromium и смотрим на использование ОЗУ диска:

df -h

Если у вас в колонке “Использовано” что-то большее нуля, то вы всё сделали правильно.

Ф. система   Розм     Вик       Дост      Вик%      змонтований на
tmpfs        1,0G     17M       1008M     2%        /ram

В результате Chromium стал реактивным 🙂
Это всё.
Удачи!

Linux. Список сервисов в автозагрузке

// 3 Червня, 2014 | 12989 переглядів

Самый простой и наглядный способ вывести список сервисов/программ, находящихся в автозагрузке, с возможностью их редактирования – это использовать консольную утилиту sysv-rc-conf

Ставим

sudo apt-get install sysv-rc-conf

Запускаем

sudo sysv-rc-conf

и получаем картину:

sysv-rc-conf

Теперь с помощью пробела мы можем включить или выключить автозагрузку сервиса, - – остановит сервис, а +/= – запустит.
Пользуйтесь!

Управление менеджером терминалов tmux

// 27 Травня, 2014 | 2928 переглядів

tmux — свободная консольная утилита-мультиплексор, предоставляющая пользователю доступ к нескольким терминалам в рамках одного экрана. tmux может быть отключен от экрана: в этом случае он продолжит исполняться в фоновом режиме; имеется возможность вновь подключиться к tmux, находящемуся в фоне.

При старте tmux создаёт новую сессию с единственным окном и отображает её на экране. В статусной строке в самом низу экрана отображается информация о текущей сессии; эта же строка используется для ввода команд tmux.

Это как screen, только намного лучше 🙂

  • Очень хороший способ запустить tmux. Делая так, вы сперва пытаетесь подключиться к уже существующему серверу tmux, если он существует; если такого ещё нет — создаёте новый

    tmux attach || tmux
  • Вывести список существующих сессий

    tmux ls

Попав в tmux вы можете давать команды управления им только после нажатия сочетания CTRL + b.

Важно сказать что вы может не просто создавать новые окна, а ещё и добавлять панели в каждое окно. Например вы можете разделить одно окно на 2 части (панели) – верхнюю и нижнюю или левую и правую.

Небольшая шпаргалка управления tmux:

CTRL+b c Создать новое окно
CTRL+b 0..9 Переход между окнами 0..9
CTRL+b p Перейти в предыдущее окно
CTRL+b n Перейти в следующее окно
CTRL+b l Перейти в предыдущее активное окошко (из которого вы переключились в текущее)
CTRL+b w Список всех окон
CTRL+b & Закрыть окно (или можно набрать просто exit)
CTRL+b % Разделить текущую панель на две, по вертикали
CTRL+b " Разделить текущую панель на две, по горизонтали
CTRL+b →←↑↓ Переход между панелями одного окна
CTRL+b x Закрыть панель
CTRL+b d Отключится (прервать соединение)
CTRL+b ? Справка обо всех комбинациях клавиш
CTRL+b & Отобразить часы (закрыть их можно нажатием любой кнопки)

Читати далі…

Linux. Настройка двухэтапной аутентификации для пользователя root

// 15 Квітня, 2014 | 2357 переглядів

Сегодня я расскажу как настроить двухэтапную аутентификацию для пользователя root на вашем сервере по временному одноразовому паролю, что будет генерировать приложение на телефоне или же простая консоль. Смысл в том, что при переходе в суперпользователя на вашем сервере вначале будет запрошен временный (одноразовый) пароль и только затем — пароль рута. Это поможет вам более качественно защитить ваш сервер от несанкционированного доступа.

Начнём с установки OATH Toolkit что уже есть в репозитории Debian.

apt-get install oathtool libpam-oath

Далее нам потребуется сгенерировать случайную строку (секретную фразу) на основе которой и будут генерироваться случайные временные одноразовые ключи. Поэтому стоит держать эту строку в секрете.

head -c 4096 /dev/urandom | md5sum | awk '{print $1}'
6819c89679c56508fec770362e312c4e

В данном примере секретная фраза это 6819c89679c56508fec770362e312c4e.

Теперь нам необходимо создать файл (/etc/users.oath) с описанием алгоритмов работы, пользователя и его секретной фразы.

echo "HOTP/T30 root - 6819c89679c56508fec770362e312c4e" > /etc/users.oath
chown root:root /etc/users.oath
chmod 600 /etc/users.oath

Далее – редактирование файла /etc/pam.d/su.
Вам необходимо дописать после

auth       sufficient pam_rootok.so

строку

auth requisite  pam_oath.so usersfile=/etc/users.oath window=10 digits=6

Где
usersfile – путь к файлу с описанием пользователей и их секретных фраз,
window – размер “окна”. Поскольку временный одноразовый ключ создаётся относительно времени, то окно – это расхождение серверного времени от времени клиента/приложения. Одно “окно” – 30 секунд. Т.е. мы задали максимальное расхождение ключей в 5 минут.
digits – необходимое количество цифр во временном одноразовом ключе.

Теперь пробуем получить одноразовый временный пароль с нашей секретной фразой:

oathtool --verbose --totp 6819c89679c56508fec770362e312c4e

На что получим что-то следующее:

Hex secret: 6819c89679c56508fec770362e312c4e
Base32 secret: NAM4RFTZYVSQR7WHOA3C4MJMJY======
Digits: 6
Window size: 0
Step size (seconds): 30
Start time: 1970-01-01 00:00:00 UTC (0)
Current time: 2014-04-15 05:36:28 UTC (1397540188)
Counter: 0x2C6D360 (46584672)

385762

385762 – это и есть наш одноразовый временный пароль, а вот строку Base32 secret мы будем использовать когда будем настраивать приложение для телефона (только вводить мы будем этот код без знаков “=”, т.е. как NAM4RFTZYVSQR7WHOA3C4MJMJY).

У Google есть отличная программа для генерирования временных (одноразовых) ключей – Google Authenticator
На официальной странице детально расписано как установить это приложение для телефонов на базе Android, iOS, Blackberry и т.п. поэтому на этом шаге я останавливаться не буду.

И наконец тестируем!

Подключаемся к серверу другим соединением (на всякий случай не закрывайте сессию root!) и пробуем сделать su
Система должна нас вначале спросить одноразовый временный пароль.

$ su
One-time password (OATH) for `root':

Генерируем одноразовый временный пароль либо через консоль с помощью команды oathtool, либо через приложение на вашем телефоне и вводим его.
Если вы всё сделали правильно, то после ввода временного пароля система вам предложит ввести пароль рута.

Это всё. Удачи!

ТОП 15 продвинутых команд для работы с tcpdump

// 14 Лютого, 2014 | 11028 переглядів

Решил составить ТОП 15 самых интерестных способов использования программы анализатора траффика (сниффера) tcpdump.

  • Получение всей полезной информации о пакете.
    tcpdump -nnvvXSs 1514 -i $INTERFACE
  • Перехват логина и пароля для протоколов pop3, imap, smtp и http
    tcpdump -i $INTERFACE port http or port smtp or port imap or port pop3 -l -A \
    | egrep -i 'pass=|pwd=|log=|login=|user=|username=|pw=|passw=|passwd=|password=|pass:|user:|username:|password:|login:|pass |user '
  • Сниффинг HTTP траффика
    tcpdump -i $INTERFACE port 80 -w - 
  • Анализирует траффик удаленно через SSH с помощью Wireshark
    ssh root@HOST tcpdump -U -s0 -w - 'not port 22' | wireshark -k -i -
  • Отображает пропускную возможность сети.
    tcpdump -w - | pv -bert >/dev/null 
  • Сниффинг удаленной сети для получения pcap файла в режиме командной строки.
    Прервать сбор можно нажатием CTRL+C, после чего открыть его с помощью wireshark для более детального анализа так: wireshark /tmp/sniff.pcap
    Запускается на удалённом хосте.

    tcpdump -v -i $INTERFACE -s 0 -w /tmp/sniff.pcap port  
  • Анализ SMTP. Вы можете запустить это на почтовом сервере, чтобы посмотреть отправителей электронной почты и получателей.
    tcpdump -l -s0 -w - tcp dst port 25 | strings | grep -i 'MAIL FROM\|RCPT TO'
  • Захват 1500 байт данных в ASCII-режиме на 80-ом порту.
    tcpdump -i $INTERFACE -n tcp port 80 -A -s1500
  • Захват траффика memcached
    tcpdump -i $INTERFACE -s 65535 -A -ttt port 11211
  • Сниффинг траффика и переадресация его в snort на машину 192.168.0.2

    Запускается на удалённом хосте.

    tcpdump -nn -i $INTERFACE -w - | nc 192.168.0.2 666
  • Получение информации о Cisco-сети (VLAN тэг, порт, switch, …)
    tcpdump -nn -v -i $INTERFACE -s 1500 -c 1 'ether[20:2] == 0x2000'
  • Отображение SYN-пакетов для всех сетевых интерфейсов
    tcpdump -i any -n tcp[13] == 2
  • Сниффинг всех DNS запросов и ответов
    tcpdump -i $INTERFACE 'udp port 53'

  • Сниффинг TCP и UDP траффика, исключая SSH
    tcpdump -n -v tcp or udp or icmp and not port 22

Увеличиваем таймаут разрыва соединения с сервером через SSH

// 13 Лютого, 2014 | 7233 переглядів

Иногда необходимо постоянно (или довольно долго) держать соединение с сервером по SSH. Но это наталкивает на проблему разрыва соединения с сервером из-за длительной неактивности клиента. Существует 2 варианта решения этой проблемы.

Способ №1.
Если у вас есть root-доступ к серверу, то вы можете просто установить значение в файле конфигурации SSH /etc/ssh/sshd_config

ClientAliveInterval 60

Эта строчка устанавливает интервал времени ожидания в секундах, после которого демон SSH sshd отправит клиенту NULL-пакет для поддержания соединения.
По умолчанию, значение этой переменной 0, что означает что сервер не будет поддерживать соединение с клиентом и разорвёт его после длительного отсутствия активности.
Не забудьте перезапустить sshd на сервере после сохранения файла.

Способ №2.
Второй способ проще и его можно применить ко всем вашим SSH-подключениям сразу.
Просто добавьте эти строчки в файл ~/.ssh/config на вашей локальной машине:

Host *
  ServerAliveInterval 60

Если у вас не было этого файла, тогда создайте его, установив ему права 600:

chmod 600 ~/.ssh/config

Эти строчки заставляют отправлять ваш ssh-клиент каждые 60 секунд KeepAlive сообщения для всех серверов к которым вы будете подключаться, тем самым поддерживая с ними постоянное соединение.

Это всё.

Настройка Linux для высоконагруженных проектов и защиты от DDoS

// 16 Грудня, 2013 | 97541 переглядів

В Интернете довольно много разных примеров конфигурации ядра Linux для поддержания большого количества соединений, высоконагруженных веб проектов и противодействия DDoS-атакам. Вот ещё один из примеров, что я уже смог попробовать на практике. Скажу сразу — мне более чем помогло. Попробуйте и вы.

Вот опции, что необходимо добавить в конец /etc/sysctl.conf

net.ipv4.conf.all.accept_redirects = 0
net.ipv4.conf.all.secure_redirects = 0
net.ipv4.conf.all.send_redirects = 0
net.ipv4.tcp_max_orphans = 65536
net.ipv4.tcp_fin_timeout = 10
net.ipv4.tcp_keepalive_time = 1800
net.ipv4.tcp_keepalive_intvl = 15
net.ipv4.tcp_keepalive_probes = 5
net.ipv4.tcp_max_syn_backlog = 4096
net.ipv4.tcp_synack_retries = 1
net.ipv4.tcp_mem = 50576   64768   98152
net.ipv4.tcp_rmem = 4096 87380 16777216
net.ipv4.tcp_wmem = 4096 65536 16777216
net.ipv4.tcp_orphan_retries = 0
net.ipv4.tcp_syncookies = 0
net.ipv4.netfilter.ip_conntrack_max = 16777216
net.netfilter.nf_conntrack_max = 16777216
net.ipv4.tcp_timestamps = 1
net.ipv4.tcp_sack = 1
net.ipv4.tcp_congestion_control = htcp
net.ipv4.tcp_no_metrics_save = 1
net.ipv4.route.flush = 1
net.ipv4.conf.all.rp_filter = 1
net.ipv4.conf.lo.rp_filter = 1
net.ipv4.conf.eth0.rp_filter = 1
net.ipv4.conf.default.rp_filter = 1
net.ipv4.conf.all.accept_source_route = 0
net.ipv4.conf.lo.accept_source_route = 0
net.ipv4.conf.eth0.accept_source_route = 0
net.ipv4.conf.default.accept_source_route = 0
net.ipv4.ip_local_port_range = 1024 65535
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_window_scaling = 1
net.ipv4.tcp_rfc1337 = 1
net.ipv4.ip_forward = 0
net.ipv4.icmp_echo_ignore_broadcasts = 1
net.ipv4.icmp_echo_ignore_all = 1
net.ipv4.icmp_ignore_bogus_error_responses = 1
net.core.somaxconn = 65535
net.core.netdev_max_backlog = 1000
net.core.rmem_default = 65536
net.core.wmem_default = 65536
net.core.rmem_max = 16777216
net.core.wmem_max = 16777216
fs.inotify.max_user_watches = 16777216

А теперь о каждой опции более детально.
Читати далі…

Настройка nginx + php5-fpm под Linux/Debian

// 15 Грудня, 2013 | 26163 переглядів

Сегодня я расскажу как настроить связку nginx + php5-fpm под Debian.

Начнём с инсталляции nginx.
И тут же мы сталкиваемся с тем, какой именно пакет ставить, т.к. их существует аж три:

  • nginx-light
  • nginx-full
  • nginx-extras

Отличаются они только поставкой дополнительных модулей.
Вызовем описание пакета nginx-light

aptitude show nginx-light

aptitude покажет какие именно дополнительные модули входят в “лёгкую” версию nginx

STANDARD HTTP MODULES : Core, Access, Auth Basic, Auto Index, Charset, Empty GIF, FastCGI, 
                        Gzip, Headers, Index, Log, Map, Proxy, Rewrite, Upstream. 
OPTIONAL HTTP MODULES : Gzip Precompression, IPv6, SSL, Stub Status.  
THIRD PARTY MODULES   : Echo.

А теперь для сравнения выведем список модулей “расширенной” версии nginx

aptitude show nginx-extras
STANDARD HTTP MODULES : Core, Access, Auth Basic, Auto Index, Browser, Charset, Empty GIF, 
                        FastCGI, Geo, Gzip, Headers, Index, Limit Requests, Limit Zone, Log, 
                        Map, Memcached, Proxy, Referer, Rewrite, SCGI, Split Clients, SSI, 
                        Upstream, User ID, UWSGI.  
OPTIONAL HTTP MODULES : Addition, Debug, Embedded Perl, FLV, GeoIP, Gzip Precompression, 
                        Image Filter, IPv6, MP4, Random Index, Real IP, Secure Link, SSL, 
                        Stub Status, Substitution, WebDAV, XSLT. 
MAIL MODULES          : Mail Core, IMAP, POP3, SMTP, SSL. 
THIRD PARTY MODULES   : Auth PAM, Chunkin, DAV Ext, Echo, Embedded Lua, HttpHeadersMore, 
                        http push, Nginx Development Kit, Upload module, Upload Progress, 
                        Upstream Fair Queue.

Как видите, список модулей и дополнений впечатляет.
С их подробной конфигурацией вы можете ознакомиться здесь и здесь.
Я рекомендую ставить nginx-light, т.к. чем меньше будет доставлено пакетов, тем меньше памяти будет “кушать” ядро nginx. Но также необходимо учитывать нужные модули для работы.
Читати далі…

Подключаемся к удаленному серверу по SSH через SOCKS 5 прокси

// 21 Листопада, 2013 | 2647 переглядів

Иногда необходимо подключится к удаленному серверу по протоколу SSH через существующий SOCKS 5 прокси, что может быть создан как из SSH-подключения к другому серверу, так и другими способами.
Сегодня я расскажу об этом.

В этой статье я уже писал как создать SOCKS 5 прокси на сервере имея SSH-доступ к нему. Для примера сделаем SOCKS 5 на одном сервере и подключимся через него к второму.

На сервере с SOCKS 5 прокси (если он создаётся через SSH, а не другими способами) в файле настроек SSH /etc/ssh/sshd_config должна быть строчка разрешающая пересылку TCP-пакетов:

AllowTcpForwarding yes

Без неё у вас врядли что-то получится.

Итак, используя шаблон

ssh -f -C2qTnN -D <порт> <удаленный_пользователь>@<удаленный_сервер>

запустим прокси на порту 1080 для сервера 8.8.8.8 например так

ssh -f -C2qTnN -D 1080 [email protected]

Теперь сама строчка подключения к второму удаленному серверу по протоколу SSH через SOCKS 5 прокси:

ssh -o ProxyCommand="nc -x 127.0.0.1:1080 %h %p" [email protected]

Где
127.0.0.1:1080 – IP и порт SOCKS 5 прокси
roman – это ваш логин на сервер
8.8.4.4 – адрес вашего сервера

Это всё.
Удачи!

PostgreSQL. Храним таблицу в оперативной памяти (RAM)

// 7 Листопада, 2013 | 7040 переглядів

Несмотря на то что PostgreSQL является довольно мощной базой данных, в ней отсутствует полноценная поддержка хранения таблиц в оперативной памяти.
Ниже я расскажу как заставить PostgreSQL хранить выбранные таблицы в оперативной памяти для быстрых операций с ними.
Всё будет происходить в Debian.

Создадим пустую папку для монтирования

mkdir /mnt/ramfs

И смонтируем в неё ramfs

mount -t ramfs none /mnt/ramfs

Создадим папку для PostgreSQL и назначим на неё права.

mkdir /mnt/ramfs/pgdata
chown postgres:postgres /mnt/ramfs/pgdata
chmod 600 /mnt/ramfs/pgdata

Далее зайдём под суперпользователем базы данных PostgreSQL – postgres

su postgres
psql

И создадим новый TABLESPACE, размещение которого мы укажим в папке с смонтированной ramfs

postgres=# CREATE TABLESPACE ram LOCATION '/mnt/ramfs/pgdata';

Выдадим права на работу с этом TABLESPACE нашему пользователю (например myuser)

postgres=# GRANT CREATE ON TABLESPACE ram TO myuser;

Теперь нам осталось только создать новую таблицу и указать при её создании TABLESPACE ram.
Например:

CREATE TABLE mytesttable (
    begin_ip ip4 NOT NULL,
    end_ip ip4 NOT NULL,
    begin_num bigint NOT NULL,
    end_num bigint NOT NULL,
    country_code character(2) NOT NULL,
    country_name character varying(255) NOT NULL,
    ip_range ip4r
)
TABLESPACE ram;

Теперь PostgreSQL будет работать с этой таблицей как и с другими даже не подозревая что она “лежит” в ОЗУ.

Это всё.
Удачи.