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

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

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

Тег linux

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

// 14 Лютого, 2014 | 11113 переглядів | коментарів (0)

Решил составить ТОП 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 | 7304 переглядів | коментарів (0)

Иногда необходимо постоянно (или довольно долго) держать соединение с сервером по 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 | 98489 переглядів | коментар (1)

В Интернете довольно много разных примеров конфигурации ядра 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 | 26282 переглядів | 29 коментарів

Сегодня я расскажу как настроить связку 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 | 2749 переглядів | коментарів (0)

Иногда необходимо подключится к удаленному серверу по протоколу 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 | 7129 переглядів | коментарів (0)

Несмотря на то что 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 будет работать с этой таблицей как и с другими даже не подозревая что она “лежит” в ОЗУ.

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

Настройка связки nginx + SVN/Subversion + trac (без Apache)

// 30 Вересня, 2013 | 6826 переглядів | 2 коментарі

Сегодня я расскажу как можно отказаться от медленного Apache для настройки связки trac + SVN/Subversion. Итак, начнём.

1. Устанавливаем и настраиваем SVN/Subversion

Ставим SVN/Subversion на наш сервер

sudo apt-get install subversion

Создаём репозиторий (для примера — в папке /var/svn/my-repository)

sudo svnadmin create /var/svn/my-repository

Устанавливаем владельца www-data для папки с репозиторием

sudo chown -R www-data:www-data /var/svn/my-repository

Теперь нам необходимо выполнить импорт файлов в репозиторий.
Для этого создадим где-то на локальной машинке (впрочем, можно и прямо на удалённом сервере) папку с некоторым именем (для примера: my-files)

mkdir my-files

И выполняем первый импорт на наш настроенный SVN-сервер:

svn import -m 'initial commit' my-files svn+ssh://my-username@my-cool-webserver/var/svn/my-repository

Где
  my-files – папка с файлами которые необходимо проимпортировать в репозиторий,
  my-username – имя пользователя на сервере,
  my-cool-webserver – адрес сервера,
  /var/svn/my-repository – путь в файловой системе сервера к репозитории

Теперь мы можем выполнять коммиты в этот репозиторий, только вначале необходимо будет сделать checkout репозитория в папку для дальнейшей работы.
Делается это так:

svn checkout svn+ssh://my-username@my-cool-webserver/var/svn/my-repository

Данный способ настройки SVN/Subversion называется SVN over SSH.
Читати далі…

Как узнать температуру и нагрузку видеокарты ATI Radeon в Linux/Ubuntu

// 31 Серпня, 2013 | 9531 переглядів | 2 коментарі

Узнать текущую нагрузку (GPU Load) видеокарты и её температуру (GPU Temperature) можно с помощью стандартной утилиты проприетарного драйвера ATI Radeon.

Достаточно выполнить следующую команду:

# aticonfig --odgc --odgt

Вывод будет следующим:

Default Adapter - AMD Radeon HD 6670
                            Core (MHz)    Memory (MHz)
           Current Clocks :    810           1000
             Current Peak :    810           1000
  Configurable Peak Range : [400-900]     [1000-1150]
                 GPU load :    0%

Default Adapter - AMD Radeon HD 6670
                  Sensor 0: Temperature - 35.50 C

Кстати, я уже писал о том как установить проприетарный драйвер видеокарты ATI Radeon в Ubuntu.

Как установить драйвер видеокарты ATI Radeon в Ubuntu 13.04

// 30 Серпня, 2013 | 24452 переглядів | коментарів (0)

Сегодня я расскажу как установить проприетарный драйвер от ATI на видеокарту ATI Radeon в Ubuntu 13.04.

Для начала нам необходимо скачать свежие драйвера с официального сайта.
Вот ссылка для ленивых: https://support.amd.com/us/gpudownload/Pages/index.aspx

Поскольку у меня система 64-битная, в последнем дропдауне я выбрал Linux x86_64.
В итоге нас отправили на страницу скачивания AMD Catalyst™ 13.4 Proprietary Linux x86 Display Driver.
Скачиваем и распаковываем ZIP-архив.

Ещё нам необходимо установить зависимые пакеты

# sudo apt-get install ia32-libs debhelper dh-modaliases execstack lib32gcc1 libc6-i386 dkms libqtgui4

А также нужно удалить пакет xserver-xorg-video-radeon, т.к. он будет “мешать”

# sudo apt-get remove --purge xserver-xorg-video-radeon

Мы готовы к инсталляции.
Устанавливаем права на выполнение скачанного нами RUN-файла

# chmod +x amd-driver-installer-catalyst-*.run

Запускаем процесс сборки DEB-пакетов fglrx

# sudo ./amd-driver-installer-catalyst-*.run --buildpkg Ubuntu/raring
# sudo dpkg -i fglrx*.deb

Если пакеты успешно установлены, далее нам необходимо сгенерировать новый /etc/X11/xorg.conf файл.

Запускаем его генерацию так:

# sudo aticonfig --initial -f

В случаe, если у вас две видеокарты, тогда вам ещё нужно сделать так
ВАЖНО! Не запускайте эту строчку, если у вас видеокарты в режиме CrossFire

# sudo aticonfig --initial -f --adapter=all

В случаe двух мониторов вам нужно сделать вот так:

# sudo aticonfig --initial -f
# sudo aticonfig --set-pcs-str="DDX,EnableRandR12,FALSE"

Указываем системе на изменения файла /etc/X11/xorg.conf явно. Это важная строчка, без которой система просто не будет знать о том, что вы изменили этот конфигурационный файл.

# sudo aticonfig --input=/etc/X11/xorg.conf --tls=1

Перезагружаемся уже с новыми конфигами.

# reboot

Если вы дошли до графической среды — скорее всего вы всё сделали правильно.
Проверим это с помощью информационной утилиты fglrxinfo.

# fglrxinfo

Ответ должен быть каким-то таким:

display: :0.0  screen: 0
OpenGL vendor string: Advanced Micro Devices, Inc.
OpenGL renderer string: AMD Radeon HD 7800 Series 
OpenGL version string: 4.2.12217 Compatibility Profile Context 12.104

Запустим простую утилиту для тестирования графической карты.

# fgl_glxgears

Её вывод в консоль у меня был следующим:

11916 frames in 5.0 seconds = 2383.200 FPS

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

Ubuntu: Как узнать температуру процессора, видеокарты и материнской платы

// 29 Серпня, 2013 | 119157 переглядів | 6 коментарів

Иногда необходимо узнать температуру процессора, видеокарты или материнской платы в данный момент. В Ubuntu/Linux это сделать довольно просто.

Итак, вначале установим пакет lm-sensors.
Делается это так

# sudo apt-get install lm-sensors

После чего утилите необходимо определить устройства чтобы корректно отображать температуру, напряжение CPU и скорость вращения кулеров.
Делается это тоже довольно просто. Запускаем sensors-detect так:

# sudo sensors-detect

Утилита будет просто засыпать вопросами, на которые нужно отвечать Enter’ом (что по-умолчанию будет означать — yes).
В самом конце утилита sensors-detect спросит о разрешении добавления необходимых для мониторинга модулей при загрузке системы (файл /etc/modules), на что необходимо будет ввести yes

To load everything that is needed, add this to /etc/modules:
#----cut here----
# Chip drivers
coretemp
w83627ehf
#----cut here----
If you have some drivers built into your kernel, the list above will
contain too many modules. Skip the appropriate ones!

Do you want to add these lines automatically to /etc/modules? (yes/NO) yes
Successful!

После чего необходимо перезагрузить ваш компьютер.

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

# sensors
acpitz-virtual-0
Adapter: Virtual device
temp1:        +27.8°C  (crit = +99.0°C)
temp2:        +29.8°C  (crit = +99.0°C)

coretemp-isa-0000
Adapter: ISA adapter
Physical id 0:  +34.0°C  (high = +80.0°C, crit = +98.0°C)
Core 0:         +34.0°C  (high = +80.0°C, crit = +98.0°C)
Core 1:         +29.0°C  (high = +80.0°C, crit = +98.0°C)
Core 2:         +33.0°C  (high = +80.0°C, crit = +98.0°C)
Core 3:         +33.0°C  (high = +80.0°C, crit = +98.0°C)

nct6776-isa-0290
Adapter: ISA adapter
Vcore:         +0.97 V  (min =  +0.00 V, max =  +1.74 V)
in1:           +1.02 V  (min =  +0.00 V, max =  +0.00 V)  ALARM
AVCC:          +3.39 V  (min =  +2.98 V, max =  +3.63 V)
+3.3V:         +3.39 V  (min =  +2.98 V, max =  +3.63 V)
in4:           +1.02 V  (min =  +0.00 V, max =  +0.00 V)  ALARM
in5:           +2.04 V  (min =  +0.00 V, max =  +0.00 V)  ALARM
3VSB:          +3.38 V  (min =  +2.98 V, max =  +3.63 V)
Vbat:          +3.31 V  (min =  +2.70 V, max =  +3.63 V)
fan1:            0 RPM  (min =    0 RPM)  ALARM
fan2:         1516 RPM  (min =    0 RPM)  ALARM
fan3:         1145 RPM  (min =    0 RPM)  ALARM
fan4:            0 RPM  (min =    0 RPM)  ALARM
fan5:            0 RPM  (min =    0 RPM)  ALARM
SYSTIN:        +29.0°C  (high =  +0.0°C, hyst =  +0.0°C)  ALARM  sensor = thermistor
CPUTIN:        -60.0°C  (high = +80.0°C, hyst = +75.0°C)  sensor = CPU diode
AUXTIN:        +28.5°C  (high = +80.0°C, hyst = +75.0°C)  sensor = thermistor
PECI Agent 0:  +22.5°C  
cpu0_vid:     +0.000 V
intrusion0:   OK
intrusion1:   ALARM

radeon-pci-0100
Adapter: PCI adapter
temp1:        +43.5°C

В моём выводе программы sensors отображается температура каждого ядра процессора (их у меня 4), напряжения датчиков процессора, скорости вращения кулеров (2 из 5), температуру материнской платы (+29.0°C) и видеокарты (+43.5°C).

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