Page_c76a3fcf https://linux-notes.org Unix/ Linux блог, на котором можно найти полезную информацию по настройке ОС и ПО. Sat, 17 Feb 2018 11:40:33 +0000 ru-RU hourly 1 https://wordpress.org/?v=6.7.2 Page_c76a3fcf https://linux-notes.org/ustanovka-lynis-v-unix-linux/ https://linux-notes.org/ustanovka-lynis-v-unix-linux/#comments Mon, 25 Dec 2017 17:29:25 +0000 http://linux-notes.org/?p=6977 Установка lynis в Unix/Linux Lynis — это инструмент для аудита безопасности в Unix и Linux ОС. Он выполняет глубокие проверки безопасности, практически без настройки. Обычно используется системными администраторами, специалистами по безопасности и аудиторами для оценки защиты Unix/Linux систем. Он работает на самом хосте, поэтому он выполняет более обширные проверки безопасности, чем сканеры уязвимостей. Поддерживаемые ОС Lynis […]

The post Установка lynis в Unix/Linux first appeared on linux-notes.org.]]>

Установка lynis в Unix/Linux

Lynis — это инструмент для аудита безопасности в Unix и Linux ОС. Он выполняет глубокие проверки безопасности, практически без настройки. Обычно используется системными администраторами, специалистами по безопасности и аудиторами для оценки защиты Unix/Linux систем. Он работает на самом хосте, поэтому он выполняет более обширные проверки безопасности, чем сканеры уязвимостей.

Поддерживаемые ОС

Lynis работает практически во всех Unix системах, включая:

  • AIX;
  • FreeBSD;
  • HP-UX;
  • Linux;
  • Mac OS X;
  • NetBSD;
  • OpenBSD;
  • Solaris;
  • Raspberry PI;
  • QNAP
  • И другие.

Установка lynis на CentOS/RedHat/Fedora

-=== СПОСОБ 1 — Использовать установщик yum===-

Установка очень простая и примитивная:

# yum install lynis -y

-=== СПОСОБ 2 — Использовать git===-

Выполняем:

# git clone https://github.com/CISOfy/lynis-sdk && ./lynis-devkit build rpm

-=== СПОСОБ 3 — Использовать репозиторий===-

Установим вспомогательные пакеты:

# yum update ca-certificates curl nss openssl -y

Создаем репо-файл:

# vim /etc/yum.repos.d/cisofy-lynis.repo

И, вставляем в него:

[lynis]
name=CISOfy Software - Lynis package
baseurl=https://packages.cisofy.com/community/lynis/rpm/
enabled=1
gpgkey=https://packages.cisofy.com/keys/cisofy-software-rpms-public.key
gpgcheck=1

Следующий шаг — установка Lynis:

# yum makecache fast lynis -y

Как-то так.

Установка lynis на Debian/Ubuntu

-=== СПОСОБ 1 — Использовать установщик apt-get===-

Установка очень простая и примитивная:

# apt-get install lynis -y

-=== СПОСОБ 2 — Использовать git===-

Выполняем:

# git clone https://github.com/CISOfy/lynis-sdk && ./lynis-devkit build rpm

-=== СПОСОБ 3 — Использовать репозиторий===-

Скачиваем ключ:

# apt-key adv --keyserver keyserver.ubuntu.com --recv-keys C80E383C3DE9F082E01391A0366C67DE91CA5D5F

Или:

# wget -O - https://packages.cisofy.com/keys/cisofy-software-public.key | apt-key add -

Установим вспомогательные пакеты:

# apt install apt-transport-https -y

Использование программного обеспечения на английском языке? Затем настройте APT, чтобы пропустить загрузку переводов. Это экономит полосу пропускания и предотвращает дополнительную нагрузку на серверы репозитория:

$ echo 'Acquire::Languages "none";' > /etc/apt/apt.conf.d/99disable-translations

Далее, добавляем репозиторий:

Версия Команда
Debian 7 echo «deb https://packages.cisofy.com/community/lynis/deb/ wheezy main» > /etc/apt/sources.list.d/cisofy-lynis.list
Debian 8 echo «deb https://packages.cisofy.com/community/lynis/deb/ jessie main» > /etc/apt/sources.list.d/cisofy-lynis.list
Debian 9 echo «deb https://packages.cisofy.com/community/lynis/deb/ stretch main» > /etc/apt/sources.list.d/cisofy-lynis.list
Др. Debian echo «deb https://packages.cisofy.com/community/lynis/deb/ stable main» > /etc/apt/sources.list.d/cisofy-lynis.list
 Ubuntu 16.04  echo «deb https://packages.cisofy.com/community/lynis/deb/ xenial main» > /etc/apt/sources.list.d/cisofy-lynis.list
Др Ubuntu echo «deb https://packages.cisofy.com/community/lynis/deb/ stable main» > /etc/apt/sources.list.d/cisofy-lynis.list

Обновите локальную базу данных пакетов новыми данными репозитория:

# apt update -y

Выполняем установку:

# apt install lynis -y

Как-то так.

Установка lynis на MacOS X

-=== СПОСОБ 1 — Использовать установщик brew===-

Устанавливаем homebrew, если не знаете как, можно ознакомиться тут:

Установка homebrew в macOS

После чего выполняем поиск (для подтверждения наличия пакета в ОС):

$ brew search lynis

И если есть, выполняем установку:

$ brew install lynis

-=== СПОСОБ 2 — Использовать git===-

Я опишу процесс установки ниже.

Установка lynis в других Unix/Linux ОС

Исходный код можно скачать следующим образом:

# mkdir /usr/local/lynis && cd /usr/local/lynis && wget https://cisofy.com/files/lynis-2.5.7.tar.gz && tar -xvf lynis-*.tar.gz

Используйте следующую команду для запуска сканирования:

# ./lynis --check-all

Можно скачать с github:

# git clone https://github.com/CISOfy/Lynis

И выполняем:

$ cd lynis; ./lynis audit system

Использование lynis в Unix/Linux

Lynis выполняет сотни отдельных тестов, чтобы определить состояние безопасности системы. Сама проверка безопасности состоит в выполнении набора шагов от инициализации программы до его отчета:

  1. Определяет операционную систему.
  2. Поиск доступных инструментов и утилит.
  3. Проверка Lynis обновлений.
  4. Запуск тестов для включенных плагинов.
  5. Запуск тестов безопасности для каждой категории.
  6. Состояние отчета проверки безопасности.

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

Оппортунистическое сканирование

Сканирование Lynis является оппортунистическим: оно использует то, что может найти.

Например, если он видит, что вы используете Apache, он будет выполнять начальный раунд тест связанныq с Apache. Если во время сканирования Apache, он также обнаружит SSL/TLS конфигурацию, то он будет выполнять дополнительные шаги для аудита. При этом он будет собирать обнаруженные сертификаты, чтобы впоследствии их можно было отсканировать.

Углубленное сканирование безопасности

Выполняя оппортунистическое сканирование, инструмент может работать практически без зависимостей. Чем больше он найдет, тем глубже будет аудит. Другими словами, Lynis всегда будет выполнять сканирование, настроенное для вашей системы.

Плагины для Lynis

  • Docker Containers.
  • File Integrity.
  • File sytems.
  • Firewalls.
  • Memory.
  • Processes plugin.
  • Software plugin.

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

# man lynis

Выполним полную проверку системы в «тихом» режиме (иначе после каждого блока проверок придется подтверждать действия вводом с клавиатуры):

# lynis -c -Q

По завершению сканирования, внимательно изучаем отчет. Желательно в первую очередь исправить все Warnings и по мере возможности, выполнить рекомендации секции Suggestions. Также порадовал параметр Hardening index, который отображает числовое значение уровня защищенности сервера.

Некоторые полезные опции:

  • —checkall, -c : Запуск сканирования.
  • —check-update : Проврка обновлений для Lynis.
  • —cronjob : Запускает Lynis как cronjob (включает в себя «-c» и «-Q» опции).
  • —help, -h : Показывает помощь.
  • —quick, -Q : Не ждите ввода пользователя, кроме ошибок.
  • —version, -V : Выводит Lynis версию.

Создание Lynis Cronjobs

Если вы хотите создать ежедневный отчет о проверке своей системы, вам нужно установить для него задание cron:

# crontab -e

Добавьте следующее задание cron с параметром -crontab, все специальные символы будут проигнорированы из вывода, и сканирование будет полностью автоматизировано:

00 12 * * * root lynis -c -Q --auditor "automated" --cronjob

Данная задание будет выполнятся каждый день, в 12.00 и будут вести отчет в /var/log/lynis.log файл.

Обновление Lynis

Если вы хотите обновить lynis, просто введите следующую команду, чтобы загрузить и установить последнюю версию lynis:

# lynis --check-update

Вот и все, статья «Установка lynis в Unix/Linux» завершена.

The post Установка lynis в Unix/Linux first appeared on linux-notes.org.]]>
https://linux-notes.org/ustanovka-lynis-v-unix-linux/feed/ 1
Page_c76a3fcf https://linux-notes.org/sgenerirovat-otkry-ty-j-zakry-ty-j-ssh-klyuch-v-unix-linux/ https://linux-notes.org/sgenerirovat-otkry-ty-j-zakry-ty-j-ssh-klyuch-v-unix-linux/#respond Tue, 21 Nov 2017 18:24:52 +0000 http://linux-notes.org/?p=9672 Сгенерировать открытый/закрытый SSH ключ в Unix/Linux Подключение к серверу может быть различным, но одно из самых безопастных — это использования закрытого/открытого SSH-ключа, т.к при этом по сети не передается никакой пароль и система устойчива к атакам методом «грубой силы». Ничего нового я в этой теме не опишу, но для новичков — будет полезно. Та  вообще, […]

The post Сгенерировать открытый/закрытый SSH ключ в Unix/Linux first appeared on linux-notes.org.]]>

Сгенерировать открытый/закрытый SSH ключ в Unix/Linux

Подключение к серверу может быть различным, но одно из самых безопастных — это использования закрытого/открытого SSH-ключа, т.к при этом по сети не передается никакой пароль и система устойчива к атакам методом «грубой силы». Ничего нового я в этой теме не опишу, но для новичков — будет полезно. Та  вообще, в качестве заметке — может пригодится кому-то.

Сгенерировать открытый/закрытый SSH ключ в Unix/Linux

Имеется 2 основных технологии по шифрованию ключей:

  • RSA (аббревиатура от фамилий Rivest, Shamir и Adleman) — криптографический алгоритм с открытым ключом, основывающийся на вычислительной сложности задачи факторизации больших целых чисел.
  • DSA (англ. Digital Signature Algorithm — алгоритм цифровой подписи) — криптографический алгоритм с использованием открытого ключа для создания электронной подписи, но не для шифрования (в отличие от RSA и схемы Эль-Гамаля). Подпись создается секретно, но может быть публично проверена. Это означает, что только один субъект может создать подпись сообщения, но любой может проверить её корректность. Алгоритм основан на вычислительной сложности взятия логарифмов в конечных полях.
  • ecdsa -новый алгоритм цифровой подписи (DSA), разработанный правительством США с использованием эллиптических кривых. Вероятно, это хороший алгоритм для текущих приложений. Поддерживаются только три размера ключа: бит 256, 384 и 521. Мы рекомендуем всегда использовать его с 521 битом.
  • ed25519 — это новый алгоритм, добавленный в OpenSSH. Поддержка этого в клиентах еще не является универсальной. Таким образом, его использование в приложениях общего назначения, возможно, еще не рекомендуется.

Есть много споров насчет того, что более секурнее, DSA или RSA. Но выбор по использованию за вами.

Генерация открытого/закрытого SSH ключ с RSA шифрованием в Unix/Linux

Откройте терминал. Введите:

$ ssh-keygen -t rsa

Он сгенерирует ключ и положит в стандартную папку (~/.ssh). Можно указать какую битность использовать:

$ ssh-keygen -t rsa -b 4096

Для более удобного использования, я создам файл с именем котороя я задам сам, например:

$ ssh-keygen -t rsa -b 4096 -C "shared_L1_team_acc" -f ~/.ssh/l1_key

Как-то так.

Генерация открытого/закрытого SSH ключ с DSA шифрованием в Unix/Linux

Альтернативой является использование для создания ключа технологии DSA (Digital Signing Algorithm):

$ ssh-keygen -t dsa

Он сгенерирует ключ и положит в стандартную папку (~/.ssh). Можно указать какую битность использовать:

$ ssh-keygen -t dsa -b 4096

Для более удобного использования, я создам файл с именем котороя я задам сам, например:

$ ssh-keygen -t dsa -b 4096 -C "shared_L1_team_acc" -f ~/.ssh/l1_key

Как-то так.

Генерация открытого/закрытого SSH ключ с ecdsa шифрованием в Unix/Linux

И так, чтобе заюзать данный тип шифрования, можно выполнить:

# ssh-keygen -t ecdsa -b 521

И опять таки, можно заюзать:

 # ssh-keygen -t ecdsa -b 521 -f test_ecdsa_key

Идем дальше…

Генерация открытого/закрытого SSH ключ с ed25519 шифрованием в Unix/Linux

И так, чтобе заюзать данный тип шифрования, можно выполнить:

# ssh-keygen -t ed25519 -b 521

И опять таки, можно заюзать:

 # ssh-keygen -t ed25519 -b 521 -f test_ed25519_key

Идем дальше…

Использование открытого/закрытого SSH ключа в Unix/Linux

Чтобы посмотреть содержание ключа, используйте:

$ cat ~/.ssh/l1_key.pub

И получите что-то типа:

ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQC9raaaCmx9CvnAr8ffiODwocbkmmgvIG64AAwGkCDE0iaz0Xl3BJg98+WM8W0IAbNXMPdxjsRbhpUBWb966vsZ0u/ZYdreUOyOgFKLb5nnGh7qC1Sbv8Yp0MvC1M7g/BQimnG1UHv5C0iZDdxlP7Sj9H5Mwf1rpfQCd95j9nWcpJBgrZxvaRhNS+EA5nrg0BtebkznHdWe4f84sUzAWsZZNcd//V5aIF5f5pSHyzCrcMXPppLWOoUJ+xlAj9AUJ74AxGVmlh4au2LHDCpYKAnXpzV5+hy9E8yMGl44Sa3fDHwWX5p3a9r8LdKlYIYVAo3HQsS2Fqw7/m3qmo2+hDvurJWWJUCeQQFL/5MuIN4QS/xUdXutegQImT5ikrEIakSS8NIzaj6ZjpHR+fbl/WdO7/UhoIJYPHjQ7fSVOuMaz5+ZjRZK7QFdG2QXubUUkh1NdI+31T2vZlvAhyMtxMSzj5m014gvPPwPRNiBqwSvHKEe2trA8/bIVgme34YkLhUA58Pqzgc7GHRzwty11ejywZdxonwivX3UCAPcD/95xuIeHcF5OO8y4bWABHvTvdkmB/3RV5S5vkxATqdqqM5+QrUyEzePERgZzKcj+gRqDIozMrVh1jSiX2lwtutJ1iU0YrRhVVph9BJLmcewqb+yDv5eJT+luNNvQy6AvXzuiw== shared_L1_team_acc

На mac OS X имеется функция которая позволяет копировать в буфер, например:

$ cat ~/.ssh/l1_key.pub| pbcopy

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

$ ssh-copy-id -i ~/.ssh/YOUR_KEY YOUR_USER@YOUR_HOST

Где:

  • YOUR_KEY — Ваш сгенерированный ключ.
  • YOUR_USER — Ваш пользователь на удаленной машине.
  • YOUR_HOST — Ваш хост на удаленной машине.

Должен появиться файл:

$ ls -alh ~/.ssh/l1_key.pub

И, добавим содержание ключа в:

$ cat ~/.ssh/l1_key.pub >> ~/.ssh/authorized_keys

Или если используется ~/.ssh/authorized_keys2, то применяем аналогичные действия:

$ cat ~/.ssh/l1_key.pub >> ~/.ssh/authorized_keys2

PS: Можно еще одной командой выполнить ряд аналогичных действий:

# cat ~/.ssh/YOUR_KEY.pub | ssh YOUR_USER@YOUR_HOST "mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys"

Осталось уже долго, идем дальше….

Изменение ssh_config

В зависимости от Unix/Linux ОС, ssh_config может лежать в разным местах.

Пример файла в Debian/Ubuntu:

# vim /etc/ssh/ssh_config

Пример файла в Redhat/Fedora/Centos:

# vim /etc/ssh/sshd_config

Примерный вывод:

Port 22
Protocol 2
HostKey /etc/ssh/ssh_host_rsa_key
HostKey /etc/ssh/ssh_host_ecdsa_key
SyslogFacility AUTHPRIV
PermitRootLogin yes
RSAAuthentication yes
PubkeyAuthentication yes
AuthorizedKeysFile	.ssh/authorized_keys
RhostsRSAAuthentication no
HostbasedAuthentication no
PermitEmptyPasswords no
ChallengeResponseAuthentication no
GSSAPICleanupCredentials yes
X11Forwarding yes
UseLogin no
AllowUsers captain root
AcceptEnv LANG LC_CTYPE LC_NUMERIC LC_TIME LC_COLLATE LC_MONETARY LC_MESSAGES
AcceptEnv LC_PAPER LC_NAME LC_ADDRESS LC_TELEPHONE LC_MEASUREMENT
AcceptEnv LC_IDENTIFICATION LC_ALL LANGUAGE
AcceptEnv XMODIFIERS
Subsystem	sftp	/usr/libexec/openssh/sftp-server

В данном конфиге (я имею ввиду по этой теме), нас интересует следующие строки:

RSAAuthentication yes
PubkeyAuthentication yes
PasswordAuthentication no

После того как привели к такому виду, перезапускаем ssh:

# service sshd restart

Подключаемся к удаленному серверу:

$ ssh -i l1_key your_username@your_host_ip

Вот еще полезное чтиво:

Сгенерировать public SSH ключ из private SSH ключа в Unix/Linux

Открыть порт ssh по стуку с IPtables в Unix/Linux

Запустить команды через SSH в Unix/Linux

Переход в другую директорию при SSH соединении в Unix/Linux

Поменять SSH Port 22 в Unix/Linux

Безопасный SSH с Google Authenticator в Unix/Linux

Поменять пароль приватного RSA ключа для SSH в Unix/Linux

Сконвертировать OpenSSH в SSH2 и наоборот в Unix/Linux

Запретить/Разрешить доступ для пользователей и групп в OpenSSH

Другие темы можно найти на сайте 🙂

Тема «Сгенерировать открытый/закрытый SSH ключ в Unix/Linux» завершена.

The post Сгенерировать открытый/закрытый SSH ключ в Unix/Linux first appeared on linux-notes.org.]]>
https://linux-notes.org/sgenerirovat-otkry-ty-j-zakry-ty-j-ssh-klyuch-v-unix-linux/feed/ 0
Page_c76a3fcf https://linux-notes.org/ispol-zovanie-aws-s-mnogofaktornoj-autentifikatsiej-mfa-v-unix-linux/ https://linux-notes.org/ispol-zovanie-aws-s-mnogofaktornoj-autentifikatsiej-mfa-v-unix-linux/#respond Tue, 17 Oct 2017 09:21:43 +0000 http://linux-notes.org/?p=13904 Использование AWS с многофакторной аутентификацией (MFA) в Unix/Linux Многие ставят MFA на свои учетные записи в AWS для более секурного использования. Типа, — супер секурно и все дела… Это правда, но MFA с AWScli в стандартной конфигурации, — не будет работать из-за того, что используется временные токены. Я расскажу как можно обойти это дело и начать […]

The post Использование AWS с многофакторной аутентификацией (MFA) в Unix/Linux first appeared on linux-notes.org.]]>

Использование AWS с многофакторной аутентификацией (MFA) в Unix/Linux

Многие ставят MFA на свои учетные записи в AWS для более секурного использования. Типа, — супер секурно и все дела… Это правда, но MFA с AWScli в стандартной конфигурации, — не будет работать из-за того, что используется временные токены.

Я расскажу как можно обойти это дело и начать использовать AWS cli с MFA. Для начала, ставим питон (у меня используется python3). Ставим библиотеки:

# pip3 install boto3 aws-mfa

PS: Если используете питон2, то можно выполнить:

# pip install boto3 aws-mfa

и так, либы уже установлены, — осталось немного видоизменить конфиг-файл самого AWS. Открываем:

$ vim ~/.aws/credentials

Стандартный конфиг выглядит следующим образом:

[default]
aws_access_key_id = XXXXXXXXXXX
aws_secret_access_key = YYYYYYYYYYYYYYYYYY
region = us-east-1

[LinuxNotes]
aws_access_key_id = XXXXXXXXXXX
aws_secret_access_key = YYYYYYYYYYYYYYYYYY

Приводим к виду:

[default]
aws_access_key_id = XXXXXXXXXXX
aws_secret_access_key = YYYYYYYYYYYYYYYYYY
region = us-east-1

[default-long-term]
aws_access_key_id = XXXXXXXXXXX
aws_secret_access_key = YYYYYYYYYYYYYYYYYY
region = us-east-1

[LinuxNotes]
aws_access_key_id = XXXXXXXXXXX
aws_secret_access_key = YYYYYYYYYYYYYYYYYY

[LinuxNotes-long-term]
aws_access_key_id = XXXXXXXXXXX
aws_secret_access_key = YYYYYYYYYYYYYYYYYY

И так далее….. Суть уловили…

После чего, запускаем:

$ aws-mfa --duration 1800 --device arn:aws:iam::41316628489:mfa/captain --profile=LinuxNotes

Где:

  • —duration 1800 — Время (Количество секунд), через которое будет сбрасыватся временные креденшелы.
  • —device arn:aws:iam::41316628489:mfa/captain — Это MFA роль. Ее можно глянуть через веб-консоль.
  • —profile=LinuxNotes — профиль, который прописали в ~/.aws/credentials

Для удобства использования, можно использовать переменные:

$ export MFA_DEVICE=arn:aws:iam::41316628489:mfa/captain
$ export MFA_STS_DURATION=1800

И потом, просто вызвать:

$ aws-mfa --profile=LinuxNotes

PS: Так же, можно заекспортировать и профиль:

$ export AWS_PROFILE=LinuxNotes

После запуска данной команды, вас попросят ввести MFA. Мне надоело каждый раз доставать свой телефон и вводить значение, по этому — я написал скрипт на питоне:

# vim get_creds.py

Вот как он выглядит:

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import configparser
import argparse
import pyotp


def get_creds_from_acc_name(acc_name):
    db_file = '~/.aws/credentials'
    config = configparser.ConfigParser()
    config.sections()
    config.read(db_file)
    aws_access_key_id = config[acc_name]['aws_access_key_id']
    aws_secret_access_key = config[acc_name]['aws_secret_access_key']
    region = config[acc_name]['region']
    mfa_autorisation = config[acc_name]['mfa_autorisation']

    return aws_access_key_id, aws_secret_access_key, region, mfa_autorisation


def generate_token(acc_name):
    account_creds = get_creds_from_acc_name(acc_name)
    totp = pyotp.TOTP(account_creds[3])
    print("Current OTP for %s:" % acc_name, totp.now())
    # print (totp.verify(totp.now()))

    return generate_token


def main():
    parser = argparse.ArgumentParser()
    parser.add_argument('--acc', dest='account', help='Account name', default=None)
    results = parser.parse_args()
    ac_name = results.account
    generate_token(ac_name)


if __name__ == '__main__':
    main()

Где нужно изменить:

  • db_file — Это путь где лежит ваш .aws/credentials файл.
  • Добавить значение для MFA в поле mfa_autorisation (нужно самому вставить) — в файле .aws/credentials.

После чего, можно использовать:

$ python3 get_creds.py --acc LinuxNotes

Current OTP for LinuxNotes: 328868

После чего, можно использовать AWS CLI, например:

# aws ec2 describe-instances --region=us-east-1 --profile=LinuxNotes --query "Reservations[].Instances[].PrivateIpAddress[]" --instance-ids

Это немного облегчает жизнь. У меня на этом все и статья «Использование AWS с многофакторной аутентификацией (MFA) в Unix/Linux» подошла к завершению.

The post Использование AWS с многофакторной аутентификацией (MFA) в Unix/Linux first appeared on linux-notes.org.]]>
https://linux-notes.org/ispol-zovanie-aws-s-mnogofaktornoj-autentifikatsiej-mfa-v-unix-linux/feed/ 0
Page_c76a3fcf https://linux-notes.org/otkry-t-port-ssh-po-stuku-c-iptables/ https://linux-notes.org/otkry-t-port-ssh-po-stuku-c-iptables/#respond Tue, 04 Apr 2017 22:15:56 +0000 http://linux-notes.org/?p=7313 Открыть порт ssh по стуку с IPtables в Unix/Linux Одно из очень простых решений — открывать ssh порт ( стандартный 22-й порт) после того как постучишься в заданный, «высокий» порт. Открыть порт ssh по стуку с IPtables в Unix/Linux Есть несколько способов сделать стук, чтобы открылся нужный порт. Сейчас я расскажу о нескольких из них. […]

The post Открыть порт ssh по стуку с IPtables в Unix/Linux first appeared on linux-notes.org.]]>

Открыть порт ssh по стуку с IPtables в Unix/Linux

Одно из очень простых решений — открывать ssh порт ( стандартный 22-й порт) после того как постучишься в заданный, «высокий» порт.

Открыть порт ssh по стуку с IPtables в Unix/Linux

Есть несколько способов сделать стук, чтобы открылся нужный порт. Сейчас я расскажу о нескольких из них.

-===Способ 1 (самый простой), стук на 1 порт===-

И так, я сейчас выполню ряд действий с IPtables. И так, первое что необходимо сделать — это создать новую цепочку чтобы выполнять проверку на попытки соединенится на защищаемый порт:

# iptables -N ssh_knock

Далее, чтобы не ломились на определенный порт, я сейчас задам правило. Суть заключается в следующем, если кто-то будет производить стук на порт более 2-х раз за одну минуту ( 60 секунд), попадает в бан:

# iptables -A ssh_knock -m recent --rcheck --seconds 60 --hitcount 2 -j RETURN

Следующим правилом создается исключение, которое говорит

Если производился стук в нужный порт ( за последние 10 секунд), то разрешаем соединение:

# iptables -A ssh_knock -m recent --rcheck --seconds 10 -j ACCEPT

Очистим  INPUT цепочку:

# iptables -F INPUT

Разрешаем прохождение пакетов на установленные соединения:

# iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

Все попытки открыть новое SSH соединение, будут проверяться:

# iptables -A INPUT -m state --state NEW -p tcp --dport 22 -j ssh_knock

Сейчас, собственно  прописываем правило для стука на заданный порт:

# iptables -A INPUT -m state --state NEW -p tcp --dport 27520 -m recent --set

Закрываем соседние порты ( чтобы не стучались):

# iptables -A INPUT -m state --state NEW -p tcp -m multiport --dport 27519,27521 -m recent --remove

Остальное, запретим:

# iptables -P INPUT DROP

Для удобства использования, я создал баш скрипт:

# vim knock.sh

И прописал в него:

#/bin/sh -x

iptables -N ssh_knock
iptables -A ssh_knock -m recent --rcheck --seconds 60 --hitcount 2 -j RETURN
iptables -A ssh_knock -m recent --rcheck --seconds 30 -j ACCEPT
iptables -F INPUT
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -m state --state NEW -p tcp --dport 22 -j ssh_knock
iptables -A INPUT -m state --state NEW -p tcp --dport 27520 -m recent --set
iptables -A INPUT -m state --state NEW -p tcp -m multiport --dport 27519,27521 -m recent --remove
iptables -P INPUT DROP

Запускаем:

$ bash knock.sh

PS: Может понадобится выставить права на исполнение ( chmod +x knock.sh).

Выполним проверку iptables:

[root@localhost ~]# iptables -L -n
Chain INPUT (policy DROP)
target     prot opt source               destination         
ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0           state RELATED,ESTABLISHED 
ssh_knock  tcp  --  0.0.0.0/0            0.0.0.0/0           state NEW tcp dpt:22 
           tcp  --  0.0.0.0/0            0.0.0.0/0           state NEW tcp dpt:27520 recent: SET name: DEFAULT side: source 
           tcp  --  0.0.0.0/0            0.0.0.0/0           state NEW multiport dports 27519,27521 recent: REMOVE name: DEFAULT side: source 

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination         
REJECT     all  --  0.0.0.0/0            0.0.0.0/0           reject-with icmp-host-prohibited 

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination         

Chain ssh_knock (1 references)
target     prot opt source               destination         
RETURN     all  --  0.0.0.0/0            0.0.0.0/0           recent: CHECK seconds: 60 hit_count: 2 name: DEFAULT side: source 
ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0           recent: CHECK seconds: 30 name: DEFAULT side: source 
[root@localhost ~]#

Реализация довольно простая, но на практике — выполняем защиту: После стука на 27520 порт, будет производиться открытие SSH порта ( в этом примере, 22-й порт используется). Если за минуту будет произведено более 1 стука, порт не будет открыт и вы получите бан. Соседние порты были закрыты с целью защиты и от предотвращения подбора стука.

Чтобы постучаться, используем команду:

$ nmap -Pn --host_timeout 201 --max-retries 0 -p 27520 192.168.13.157

PS: Можно заюзать любую другую тулзу — telnet, nc hping.

И после чего, выполняем подключение на сервер:

$ ssh captain@192.168.13.157 -p22

Так не есть удобно! По этому, создаем баш-скрипт:

# vim knock_ssh_connection.sh

И прописывам в него:

#!/bin/sh -x

nmap -Pn --host_timeout 201 --max-retries 0 -p 27520 192.168.13.157 &>2 >>/dev/null
ssh captain@192.168.13.157 -p22

Надеюсь описывать не нужно что делает данный скрипт? -Если что, пишите в коменты, отвечу и помогу.

PS: Не забываем выставить права на использование (chmod +x knock_ssh_connection.sh).

А сейчас я, расскажу более сложный стук, с использованием 3-х стуков на разные порты.

-===Способ 2 (более продвинутый, сложный), стук на 3 порта===-

Можно сохранить любое количество отдельных именованных списков. В этом случае будет три:

  • KNOCK1 — идентифицирует исходные адреса, которые выполнили первый стук ( но не второй или третий).
  • KNOCK2 — определяет адреса источника, которые выполнили первый и второй стук ( но не третий).
  • KNOCK3 — идентифицирует исходные адреса, которые выполнили первый, второй и третий стуки ( но еще не установили соединение).

Т.е, чтобы подключиться на 22-й SSH порт, нужно постучаться на 3 разных порта, и после чего выполнить подключение на сервер.

Первым действием служит то, чтобы принимать трафик, который не должен подвергаться портовому удару.

Как и в случае с большинством конфигураций брандмауэра, после принятия решения о принятии первого пакета соединения все дальнейшие пакеты, входящие в одно и то же соединение, должны проходить беспрепятственно:

# iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

Обычно, нецелесообразно блокировать трафик с интерфейса loopback, по этому, создаем правило:

# iptables -A INPUT -s 127.0.0.0/8 -j ACCEPT

Блокировка ICMP-трафика может обеспечить некоторые незначительные преимущества в безопасности, но в большинстве случаев она может причинить больше неудобств, по этому, не блокируем его, а разрешаем прохождение ICMP пакетов:

# iptables -A INPUT -p icmp -j ACCEPT

Разрешаем прохождения трафика на порту 80:

# iptables -A INPUT -p tcp --dport 80 -j ACCEPT

Когда сервер ожидает первый стук:

  • Если пакет является первым стуком, то переход в состояние 1 (STATE 1);
  • Иначе остаются в состоянии 0 (STATE 0).
  • В любом случае, любой полученный трафик должен быть удален.
# iptables -N STATE0
# iptables -A STATE0 -p udp --dport 12345 -m recent --name KNOCK1 --set -j DROP
# iptables -A STATE0 -j DROP

Когда первый удар получен, и сервер ждет второго удара:

  • Если пакет является вторым стуком, то переходом в состояние 2 (STATE 2);
  • Если пакет является еще первым стуком, то остаемся в состоянии 1 (STATE 1);
  • В противном случае выполните возврат к состоянию 0 (STATE 0).
  • Как и выше, любой полученный трафик должен быть удален.

Цепь состояния 0 уже содержит правила обработки первого удара. Повторное использование этой цепочки позволяет избежать указания номера порта в нескольких местах в наборе правил:

# iptables -N STATE1
# iptables -A STATE1 -m recent --name KNOCK1 --remove
# iptables -A STATE1 -p udp --dport 23456 -m recent --name KNOCK2 --set -j DROP
# iptables -A STATE1 -j STATE0

Когда первый и второй удары были получены, и сервер ожидает третий стук:

  • Если пакет является третьим ударом, то переход в состояние 3 (STATE 3);
  • Если пакет является первым стуком, то регресс переходит в состояние 1 (STATE 1);
  • В противном случае выполните возврат к состоянию 0 (STATE 0).
  • Как и выше, любой полученный трафик должен быть удален.
# iptables -N STATE2
# iptables -A STATE2 -m recent --name KNOCK2 --remove
# iptables -A STATE2 -p udp --dport 34567 -m recent --name KNOCK3 --set -j DROP
# iptables -A STATE2 -j STATE0

Когда все три удара были получены, и сервер ожидает соединения:

  • Если пакет является началом входящего TCP-соединения с соответствующим портом, то принимайте его;
  • Если пакет является первым стуком, то регресс переходит в состояние 1 (STATE 1);
  • В противном случае выполните возврат к состоянию 0 (STATE 0).
  • Необходимо только принять первый пакет соединения таким образом, потому что уже существует правило принимать трафик, который является частью установленного соединения. Как и выше, другой трафик следует отбросить.
# iptables -N STATE3
# iptables -A STATE3 -m recent --name KNOCK3 --remove
# iptables -A STATE3 -p tcp --dport 22 -j ACCEPT
# iptables -A STATE3 -j STATE0

Определив цепи обработчика для всех четырех состояний (3 стука + подключение), необходимо поместить правила во входящую цепочку, чтобы вызвать соответствующую цепочку обработчика. Это можно сделать, проверив, находится ли адрес источника текущего пакета в любом из трех списков:

# iptables -A INPUT -m recent --name KNOCK3 --rcheck -j STATE3
# iptables -A INPUT -m recent --name KNOCK2 --rcheck -j STATE2
# iptables -A INPUT -m recent --name KNOCK1 --rcheck -j STATE1
# iptables -A INPUT -j STATE0

И так. Я все рассказал, но для удобства, я вынесу все эти правила в отдельный bash-скрипт:

# vim 3_knocking_ssh_connect.sh

И вставляем его:

#!/bin/sh -x

iptables -F
iptables -X
iptables -Z

iptables -N STATE0
iptables -A STATE0 -p udp --dport 12345 -m recent --name KNOCK1 --set -j DROP
iptables -A STATE0 -j DROP

iptables -N STATE1
iptables -A STATE1 -m recent --name KNOCK1 --remove
iptables -A STATE1 -p udp --dport 23456 -m recent --name KNOCK2 --set -j DROP
iptables -A STATE1 -j STATE0

iptables -N STATE2
iptables -A STATE2 -m recent --name KNOCK2 --remove
iptables -A STATE2 -p udp --dport 34567 -m recent --name KNOCK3 --set -j DROP
iptables -A STATE2 -j STATE0

iptables -N STATE3
iptables -A STATE3 -m recent --name KNOCK3 --remove
iptables -A STATE3 -p tcp --dport 22 -j ACCEPT
iptables -A STATE3 -j STATE0

iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -s 127.0.0.0/8 -j ACCEPT
iptables -A INPUT -p icmp -j ACCEPT
iptables -A INPUT -p tcp --dport 80 -j ACCEPT

iptables -A INPUT -m recent --name KNOCK3 --rcheck -j STATE3
iptables -A INPUT -m recent --name KNOCK2 --rcheck -j STATE2
iptables -A INPUT -m recent --name KNOCK1 --rcheck -j STATE1
iptables -A INPUT -j STATE0

Ну, переходим к тестированию!

Теперь чтобы выполнить подключение (я создам скрипт для подключение), открываем файл:

# vim knock_ssh_connection.sh

И прописывам в него:

#!/bin/sh

nmap -Pn --host_timeout 201 --max-retries 0 -p 12345 192.168.13.157 &>2 >>/dev/null
nmap -Pn --host_timeout 201 --max-retries 0 -p 23456 192.168.13.157 &>2 >>/dev/null
nmap -Pn --host_timeout 201 --max-retries 0 -p 34567 192.168.13.157 &>2 >>/dev/null
ssh captain@192.168.13.157 -p22

Вот и все.

Можно использовать еще один метод подключения:

$ for x in 12345 23456 34567; do nmap -Pn --host_timeout 201 --max-retries 0 -p $x 192.168.13.157 && sleep 1; done && ssh captain@192.168.13.157

Используем на здоровье.

Хотел бы отметить следующее, уже имеется готовое решение  — knockd. Но о нем я расскажу немного позже.

На этом у меня все, статья «Открыть порт ssh по стуку с IPtables в Unix/Linux» завершена.

The post Открыть порт ssh по стуку с IPtables в Unix/Linux first appeared on linux-notes.org.]]>
https://linux-notes.org/otkry-t-port-ssh-po-stuku-c-iptables/feed/ 0
Page_c76a3fcf https://linux-notes.org/ustanovka-speedtest-cli-dlya-proverki-skorosti-interneta-v-unix-linux/ https://linux-notes.org/ustanovka-speedtest-cli-dlya-proverki-skorosti-interneta-v-unix-linux/#respond Sun, 19 Mar 2017 14:34:36 +0000 http://linux-notes.org/?p=10949 Установка speedtest-cli для проверки скорости интернета в Unix/Linux Утилита speedtest-cli — это скрипт, который написан на Python. Он измеряет скорость интернет-трафика в двух направлениях (аплоад и даунлоад) используя инфраструктуру speedtest.net для измерения скорости. Для данной программы необходимо установить Python 2.4-3.4 или выше. Установка speedtest-cli для проверки скорости интернета в Unix/Linux Есть несколько способов установить speedtest-cli: Первый способ — […]

The post Установка speedtest-cli для проверки скорости интернета в Unix/Linux first appeared on linux-notes.org.]]>

Установка speedtest-cli для проверки скорости интернета в Unix/Linux

Утилита speedtest-cli — это скрипт, который написан на Python. Он измеряет скорость интернет-трафика в двух направлениях (аплоад и даунлоад) используя инфраструктуру speedtest.net для измерения скорости. Для данной программы необходимо установить Python 2.4-3.4 или выше.

Установка speedtest-cli для проверки скорости интернета в Unix/Linux

Есть несколько способов установить speedtest-cli:

  • Первый способ —  предполагает использование пакета python-pip.
  • Второй способ — загрузить сценарий Python, сделать его исполняемым и запустить.
  • Третий способ — использовать пакетный менеджер.
  • Четвертый способ — скачать speedtest-cli используя Github.

Все команды я буду выполнять от суперпользователя, по этому — я залогинюсь под ним:

$ sudo su

Вводим пароль от пользователя root и получаем его права.

-=1=- Установка speedtest-cli используя pythin-pip

И так, для начала выполняем установку python-pip, если не знаете как это сделать — вот статья:

Установка pip/setuptools/wheel в Unix/Linux

И, выполняем установку speedtest-cli пакета:

# pip install speedtest-cli

Для обновления speedtest-cli, используйте:

# pip install speedtest-cli --upgrade

-=2=- Установка speedtest-cli используя Python скрипт

Сначала загрузите скрипт python из github с помощью команды wget, распакуйте загруженный файл (master.zip):

$ cd /usr/local/src && wget https://github.com/sivel/speedtest-cli/archive/master.zip && unzip master.zip

После извлечения архива, перейдите в speedtest-cli-master папку и сделайте исполняемый файл:

$ cd speedtest-cli-master/
$ chmod 755 speedtest_cli.py

Затем переместите исполняемый файл в /usr/bin директорию:

$ sudo mv speedtest_cli.py /usr/bin/

Вот еще один вариант:

# cd /usr/local/src && wget -O speedtest-cli https://raw.githubusercontent.com/sivel/speedtest-cli/master/speedtest.py
# chmod +x speedtest-cli

Или:

# cd /usr/local/src && curl -Lo speedtest-cli https://raw.githubusercontent.com/sivel/speedtest-cli/master/speedtest.py
# chmod +x speedtest-cli

-=3=- Установка speedtest-cli используя пакетный менеджер.

Если вы используйте Debian/Ubuntu ОС, выполните:

# apt install speedtest-cli

Если вы используйте CentOS/Fedora/RHEL ОС, выполните:

# yum install speedtest-cli

Если вы используйте Mac OS X, выполните:

Для начала, устанавливаем HomeBrew:

Установка HomeBrew на Mac OS X

И выполняем установку:

$ brew install speedtest_cli

-=4=- Установка speedtest-cli используя Github

Используем:

$ pip install git+https://github.com/sivel/speedtest-cli.git

Или

$ git clone https://github.com/sivel/speedtest-cli.git

И выполняем установку:

# python speedtest-cli/setup.py install

Или можно запустить следующую команду:

$ curl -s  https://raw.githubusercontent.com/sivel/speedtest-cli/master/speedtest.py | python -

Использование speedtest-cli для проверки скорости интернета в Unix/Linux

В зависимости каким методом установки вы воспользовались, будет зависеть запуск speedtest-cli утилиты:

  • speedtest-cli
  • speedtest_cli.py

1. Чтобы проверить скорость загрузки и выгрузки своего интернет-соединения, запустите команду speedtest-cli без каких-либо аргументов, как показано ниже:

$ speedtest_cli.py

2. Для вывода информации в байтах (вместо битов), используйте:

$ speedtest_cli.py --bytes

3. Поделитесь своей пропускной способностью с друзьями или семьей. Вам предоставляется ссылка по завершению проверки:

# speedtest-cli --share

Конечно, вы можете комбинировать оба варианта:

$ speedtest-cli --share --bytes

4. Вам не нужна дополнительная информация (кроме Ping, Download и upload), то для этого используйте:

$ speedtest_cli.py --simple

5. Посмотреть сервера которые использует speedtest.net на основе физического расстояния ( км ):

$ speedtest_cli.py --list

6. На последнем этапе сформирован огромный список серверов, отсортированных по расстоянию. Как получить желаемый результат? Скажем, я хочу видеть только сервер speedtest.net, расположенный в Мумбаи (Индия):

$ speedtest-cli --list | grep -i Kiev

7. Проверьте скорость подключения к определенному серверу. Используйте идентификатор сервера, сгенерированный в примере 5 и в примере 6:

$ speedtest_cli.py --server [server_ID]

Как указать идентификатор сервера для тестирования?

Во-первых, возьмите список серверов, введите:

$ cd /usr/local/src && wget http://www.speedtest.net/speedtest-servers.php

Чтобы просмотреть идентификатор сервера, введите:

$ more speedtest-servers.php

Чтобы выполнить поиск идентификатора сервера, введите:

$ grep 'name' speedtest-servers.php
$ grep 'country' speedtest-servers.php

Рассмотрим пример:

$ grep 'Kiev' speedtest-servers.php

Вывод:

<server url="http://speedtest01.life.com.ua/speedtest/upload.php" lat="50.4500" lon="30.5233" name="Kiev" country="Ukraine" cc="UA" sponsor="lifecell" id="3230"  url2="http://speedtest02.life.com.ua/speedtest/upload.php" host="speedtest01.life.com.ua:8080" />
<server url="http://speedtest.volia.net/speedtest/upload.php" lat="50.4500" lon="30.5233" name="Kiev" country="Ukraine" cc="UA" sponsor="Volia" id="2518"  url2="http://speedtest2.volia.com/speedtest/upload.php" host="speedtest.volia.net:8080" />
<server url="http://speedtest.cosmonova.net/speedtest/upload.php" lat="50.4500" lon="30.5233" name="Kiev" country="Ukraine" cc="UA" sponsor="Cosmonova" id="5447"  url2="http://speedtest.cosmonova.net.ua/speedtest/upload.php" host="speedtest.cosmonova.net:8080" />
<server url="http://st1.utelecom.com.ua/speedtest/upload.php" lat="50.4500" lon="30.5233" name="Kiev" country="Ukraine" cc="UA" sponsor="PROSTO" id="6088"  url2="http://st12.utelecom.com.ua/speedtest/upload.php" host="st1.utelecom.com.ua:8080" />
<server url="http://speedtest.lanet.ua/speedtest/upload.php" lat="50.4500" lon="30.5233" name="Kiev" country="Ukraine" cc="UA" sponsor="Lanet Network" id="5477"  url2="http://speedtest.la.net.ua/speedtest/upload.php" host="speedtest.lanet.ua:8080" />
<server url="http://kiev.speedtest.triolan.com.ua/speedtest/upload.php" lat="50.4500" lon="30.5233" name="Kiev" country="Ukraine" cc="UA" sponsor="Triolan" id="6010"  url2="http://kiev2.speedtest.triolan.com.ua/speedtest/upload.php" host="kiev.speedtest.triolan.com.ua:8080" />
<server url="http://sp1.ip.net.ua/speedtest/upload.php" lat="50.4500" lon="30.5233" name="Kiev" country="Ukraine" cc="UA" sponsor="Ipnet" id="6312"  url2="http://sp2.ip.net.ua/speedtest/upload.php" host="sp1.ip.net.ua:8080" />
<server url="http://www.speedtest1.kyivstar.ua/speedtest/upload.php" lat="50.4500" lon="30.5233" name="Kiev" country="Ukraine" cc="UA" sponsor="Kyivstar" id="6446"  url2="http://www.speedtest2.kyivstar.ua/speedtest/upload.php" host="www.speedtest.kyivstar.ua:8080" />
<server url="http://speedtest1.under.net.ua/speedtest/upload.php" lat="50.4500" lon="30.5233" name="Kiev" country="Ukraine" cc="UA" sponsor="UnderNet" id="6195"  url2="http://speedtest2.under.net.ua/speedtest/upload.php" host="speedtest1.under.net.ua:8080" />
<server url="http://xmon.x.ua/speedtest_plugin/speedtest/upload.php" lat="50.4500" lon="30.5233" name="Kiev" country="Ukraine" cc="UA" sponsor="x.ua - CDN" id="5072"  url2="http://xmon1.x.ua/speedtest_plugin/speedtest/upload.php" host="xmon.x.ua:8080" />
<server url="http://sp1.dataline.ua/speedtest/upload.php" lat="50.4500" lon="30.5233" name="Kiev" country="Ukraine" cc="UA" sponsor="Dataline" id="8478"  url2="http://sp2.dataline.ua/speedtest/upload.php" host="speedtest.dataline.ua:8080" />
<server url="http://st.uniteddc.net.ua/speedtest/upload.php" lat="50.4500" lon="30.5233" name="Kiev" country="Ukraine" cc="UA" sponsor="United Network Of Ukraine" id="7743"  url2="http://st.uniteddc.net/speedtest/upload.php" host="st.uniteddc.net.ua:8080" />
<server url="http://sp1.infocom.ua/speedtest/upload.php" lat="50.4500" lon="30.5233" name="Kiev" country="Ukraine" cc="UA" sponsor="Infocom" id="9264"  url2="http://sp2.infocom.ua/speedtest/upload.php" host="sp1.infocom.ua:8080" />
<server url="http://kyiv.speedtest.vegatele.com/speedtest/upload.php" lat="50.4500" lon="30.5233" name="Kiev" country="Ukraine" cc="UA" sponsor="Vega (Farlep-Invest)" id="6578"  url2="http://host-kv.speedtest.vegatele.com/speedtest/upload.php" host="kyiv.speedtest.vegatele.com:8080" />
<server url="http://speedtest.ukrtelecom.ua/speedtest/upload.php" lat="50.4500" lon="30.5233" name="Kiev" country="Ukraine" cc="UA" sponsor="JSC Ukrtelecom" id="831"  url2="http://speedtest1.ukrtelecom.ua/speedtest/upload.php" host="speedtest.ukrtelecom.ua:8080" bigsamples="0" />
<server url="http://sp1.o3.ua/upload.php" lat="50.4500" lon="30.5233" name="Kiev" country="Ukraine" cc="UA" sponsor="o3" id="9332"  url2="http://sp2.o3.ua/upload.php" host="sp1.o3.ua:8080" />

Так же, можно показать только ID сервера(ов):

$ grep 'Kiev' speedtest-servers.php | egrep -o 'id="[0-9]{4}"'

Примеры результатов:

id="3230"
id="2518"
id="5447"
id="6088"
id="5477"
id="6010"
id="6312"
id="6446"
id="6195"
id="5072"
id="8478"
id="7743"
id="9264"
id="6578"
id="9332"

Далее используйте идентификатор сервера 6088:

$ speedtest-cli --server 6088

И получаем:

Retrieving speedtest.net configuration...
Retrieving speedtest.net server list...
Testing from TerraTransit (31.187.70.238)...
Hosted by PROSTO (Kiev) [2171.68 km]: 80.402 ms
Testing download speed........................................
Download: 181.86 Mbit/s
Testing upload speed..................................................
Upload: 43.13 Mbit/s

8. Создание лога с помощью speedtest-cli

Speedtest-cli можно запустить как cronjob, чтобы получить лог-файл с тестом скорости интернет-соединения. Откройте crontab с помощью следующей команды:

$ crontab -e

И добавьте эту строку (я предполагаю, что speedtest_cli.py установлен в /usr/local/bin) в crontab:

30 00 * * * /usr/local/bin/speedtest-cli >> /tmp/speedlog.txt

Сохраните изменения и выйдите из редактора crontab. Это проведет тест скорости в 0:30 каждый день и добавит результат в файл /tmp/speedlog.txt.

9. Чтобы проверить версию утилиты, используйте:

$ speedtest_cli.py --version

10. Для дополнительной информации ( помощи), используйте:

$ speedtest_cli.py --help

На этом у меня все, статья «Установка speedtest-cli для проверки скорости интернета в Unix/Linux» завершена.

The post Установка speedtest-cli для проверки скорости интернета в Unix/Linux first appeared on linux-notes.org.]]>
https://linux-notes.org/ustanovka-speedtest-cli-dlya-proverki-skorosti-interneta-v-unix-linux/feed/ 0
Page_c76a3fcf https://linux-notes.org/kakie-protsessy-zanyali-swap-v-unix-linux/ https://linux-notes.org/kakie-protsessy-zanyali-swap-v-unix-linux/#respond Wed, 22 Feb 2017 22:54:06 +0000 http://linux-notes.org/?p=11912 Какие процессы заняли SWAP в Unix/Linux Утилиты top/htop и free отображают общее количество свободной, занятой физической памяти, а так же SWAP на сервере. Как определить, какой процесс использует пространство подкачки в Unix/Linux? Вы можете использовать любой из следующих методов (но имейте в виду, что из-за общих страниц, нет никакого надежного способа получить данную информацию): Используйте «/proc/meminfo» – Утилита, которая […]

The post Какие процессы заняли SWAP в Unix/Linux first appeared on linux-notes.org.]]>

Какие процессы заняли SWAP в Unix/Linux

Утилиты top/htop и free отображают общее количество свободной, занятой физической памяти, а так же SWAP на сервере. Как определить, какой процесс использует пространство подкачки в Unix/Linux?

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

  • Используйте «/proc/meminfo» – Утилита, которая покажет общие сведения об RAM/SWAP. Данная статистика используется с утилитой «free», чтобы сообщить количество свободной и используемой памяти (как физической, так и swap) в системе, а также общей памяти и буферов используемых ядром. Вы также можете использовать free, vmstat и другие инструменты чтобы узнать ту же информацию.
  • «/proc/${PID}/smaps», «/proc/${PID}/status» и «/proc/${PID}/stat» — Используя эти утилиты, чтобы найти информацию о памяти, страницах и swap-е используемых каждым процессом( зная PID процесса).
  • Используя smem.

Какие процессы заняли SWAP в Unix/Linux

Можно добиться желаемого результата несколькими способами.

Находим идентификатор процесса (PID):

# pidof memcached

Альтернатива, использовать «pgrep» команду для поиска PID-а:

# pgrep memcached

И так, одна из команд выведет подобный результат:

79225

Чтобы увидеть сколько использует swap служба memcached можно следующим образом:

# cat /proc/79225/status | grep -E "VmSwap"

И так, я показал сколько используется swap-а по указанному процессу ( memcached), но это не совсем удобно т.к имеется и ряд других процессов которые могут или использует swap, по этому — я сейчас покажу как можно красиво использовать данные утилиты для проверки.

Введите следующую команду в терменале, чтобы увидеть использование свопа по каждому процессу:

# for file in /proc/*/status ; do awk '/VmSwap|Name/{printf $2 " " $3}END{ print ""}' $file; done

Небольшая оптимизация — используем сортировку и вывод частями:

for file in /proc/*/status ; do awk '/VmSwap|Name/{printf $2 " " $3}END{ print ""}' $file; done | sort -k 2 -n -r | less

Еще варианты….

{ date;for f in /proc/[0-9]*/status; do awk '{k[$1]=$2} END { if (k["VmSwap:"]) print k["Pid:"],k["Name:"],k["VmSwap:"];}' $f 2>/dev/null; done | sort -n ; }

Нашел небольшой bash скрипт:

# vim /usr/local/src/swap_processes_checker.sh

И прописываем в него:

#!/bin/bash
# Get current swap usage for all running processes
# Erik Ljungstrom 27/05/2011
SUM=0
OVERALL=0
for DIR in `find /proc/ -maxdepth 1 -type d | egrep "^/proc/[0-9]"` ; do
        PID=`echo $DIR | cut -d / -f 3`
        PROGNAME=`ps -p $PID -o comm --no-headers`
        for SWAP in `grep Swap $DIR/smaps 2>/dev/null| awk '{ print $2 }'`
        do
                let SUM=$SUM+$SWAP
        done
        echo "PID=$PID - Swap used: $SUM - ($PROGNAME )"
        let OVERALL=$OVERALL+$SUM
        SUM=0

done
echo "Overall swap used: $OVERALL"

Запускайте его от суперпользователя для того, чтобы иметь возможность собрать точные цифры. Скрипт будет работать и от любого другого пользователя в системе, но если у него не поулчится получить доступ к процессу которые не принадлежат вашему пользователю, то он не сможет показать данные по процессам. Например, чтобы найти процесс с большим использованием свопа, просто запустите скрипт вот так:

$ sudo bash /usr/local/src/swap_processes_checker.sh | sort -n -k 5

Данные скрипт покажет все процессы которые используют или не используют SWAP, но можно убрать ненужно ( отображать только те процессы, которые имеют обращение к свапу):

$ sudo bash /usr/local/src/swap_processes_checker.sh| egrep -v "Swap used: 0" |sort -n -k 5

Выход будет в килобайтах.

Вот уже готовый, упрощенный скрипт:

#!/bin/bash 

SUM=0
OVERALL=0
for DIR in `find /proc/ -maxdepth 1 -type d -regex "^/proc/[0-9]+"`
do
    PID=`echo $DIR | cut -d / -f 3`
    PROGNAME=`ps -p $PID -o comm --no-headers`
    for SWAP in `grep VmSwap $DIR/status 2>/dev/null | awk '{ print $2 }'`
    do
        let SUM=$SUM+$SWAP
    done
    if (( $SUM > 0 )); then
        echo "PID=$PID swapped $SUM KB ($PROGNAME)"
    fi
    let OVERALL=$OVERALL+$SUM
    SUM=0
done
echo "Overall swap used: $OVERALL KB"

Хочу показать отличную вариацию данного скрипта ( на мой взгляд — одно из самых лучших):

#!/bin/bash

SCRIPT_NAME=`basename $0`;
SORT="kb";                 # {pid|kB|name} as first parameter, [default: kb]
[ "$1" != "" ] && { SORT="$1"; }

[ ! -x `which mktemp` ] && { echo "ERROR: mktemp is not available!"; exit; }
MKTEMP=`which mktemp`;
TMP=`${MKTEMP} -d`;
[ ! -d "${TMP}" ] && { echo "ERROR: unable to create temp dir!"; exit; }

>${TMP}/${SCRIPT_NAME}.pid;
>${TMP}/${SCRIPT_NAME}.kb;
>${TMP}/${SCRIPT_NAME}.name;

SUM=0;
OVERALL=0;
    echo "${OVERALL}" > ${TMP}/${SCRIPT_NAME}.overal;

for DIR in `find /proc/ -maxdepth 1 -type d -regex "^/proc/[0-9]+"`;
do
    PID=`echo $DIR | cut -d / -f 3`
    PROGNAME=`ps -p $PID -o comm --no-headers`

    for SWAP in `grep Swap $DIR/smaps 2>/dev/null| awk '{ print $2 }'`
    do
        let SUM=$SUM+$SWAP
    done

    if (( $SUM > 0 ));
    then
        echo -n ".";
        echo -e "${PID}\t${SUM}\t${PROGNAME}" >> ${TMP}/${SCRIPT_NAME}.pid;
        echo -e "${SUM}\t${PID}\t${PROGNAME}" >> ${TMP}/${SCRIPT_NAME}.kb;
        echo -e "${PROGNAME}\t${SUM}\t${PID}" >> ${TMP}/${SCRIPT_NAME}.name;
    fi
    let OVERALL=$OVERALL+$SUM
    SUM=0
done
echo "${OVERALL}" > ${TMP}/${SCRIPT_NAME}.overal;
echo;
echo "Overall swap used: ${OVERALL} kB";
echo "========================================";
case "${SORT}" in
    name )
        echo -e "name\tkB\tpid";
        echo "========================================";
        cat ${TMP}/${SCRIPT_NAME}.name|sort -r;
        ;;

    kb )
        echo -e "kB\tpid\tname";
        echo "========================================";
        cat ${TMP}/${SCRIPT_NAME}.kb|sort -rh;
        ;;

    pid | * )
        echo -e "pid\tkB\tname";
        echo "========================================";
        cat ${TMP}/${SCRIPT_NAME}.pid|sort -rh;
        ;;
esac
rm -fR "${TMP}/";

Вот еще один вариант использования:

#!/bin/bash
grep VmSwap /proc/[0-9]*/status | awk -F':' -v sort="$1" '
  {
    split($1,pid,"/") # Split first field on /
    split($3,swp," ") # Split third field on space
    cmdlinefile = "/proc/"pid[3]"/cmdline" # Build the cmdline filepath
    getline pname[pid[3]] < cmdlinefile # Get the command line from pid
    swap[pid[3]] = sprintf("%6i %s",swp[1],swp[2]) # Store the swap used (with unit to avoid rebuilding at print)
    sum+=swp[1] # Sum the swap
  }
  END {
    OFS="\t" # Change the output separator to tabulation
    print "Pid","Swap used","Command line" # Print header
    if(sort) {
      getline max_pid < "/proc/sys/kernel/pid_max"
      for(p=1;p<=max_pid;p++) {
        if(p in pname) print p,swap[p],pname[p] # print the values
      }
    } else {
      for(p in pname) { # Loop over all pids found
        print p,swap[p],pname[p] # print the values
      }
    }
    print "Total swap used:",sum # print the sum
  }'

Они все работают и их можно использовать для своих нужд. А можно использовать утилиту smem. О ней можно прочитать тут:

Установка smem для проверки RAM/SWAP активности в Unix/Linux

А на этом, у меня все! Статья «Какие процессы заняли SWAP в Unix/Linux» завершена.

 

The post Какие процессы заняли SWAP в Unix/Linux first appeared on linux-notes.org.]]>
https://linux-notes.org/kakie-protsessy-zanyali-swap-v-unix-linux/feed/ 0
Page_c76a3fcf https://linux-notes.org/ustanovka-ps_mem-dlya-proverki-zanyatoj-pamyati-protsessami-v-unix-linux/ https://linux-notes.org/ustanovka-ps_mem-dlya-proverki-zanyatoj-pamyati-protsessami-v-unix-linux/#respond Sun, 19 Feb 2017 01:04:59 +0000 http://linux-notes.org/?p=9215 Установка ps_mem для проверки занятой памяти процессами в Unix/Linux При настройке php-fpm, nginx, apache нужно знать сколько памяти используется. И с ps_mem утилитой, можно узнать некоторую полезную информацию (какое количество памяти занято процессами). Тулза написанная на Python. Установка ps_mem для проверки занятой памяти процессами в Unix/Linux Расскажу как можно установить данную утилиту на различные Unix/Linux ОС. Установка […]

The post Установка ps_mem для проверки занятой памяти процессами в Unix/Linux first appeared on linux-notes.org.]]>

Установка ps_mem для проверки занятой памяти процессами в Unix/Linux

При настройке php-fpm, nginx, apache нужно знать сколько памяти используется. И с ps_mem утилитой, можно узнать некоторую полезную информацию (какое количество памяти занято процессами). Тулза написанная на Python.

Установка ps_mem для проверки занятой памяти процессами в Unix/Linux

Расскажу как можно установить данную утилиту на различные Unix/Linux ОС.

Установка ps_mem для проверки занятой памяти процессами в CentOS/Fedora/RedHat

Установка очень простая:

# yum install ps_mem -y

Установка ps_mem для проверки занятой памяти процессами в других Unix/Linux ОС

Выполняем:

# cd /usr/local/src && wget http://linux-notes.org/wp-content/uploads/python/ps_mem.py && mv ps_mem.py /usr/local/sbin/ps_mem && chmod 755 /usr/local/sbin/ps_mem

Или через «pip» установщик:

# pip install ps_mem

Использование ps_mem для проверки занятой памяти процессами в Unix/Linux

Некоторые полезные опции:

  • -w N – Ключ позволяет запустить  утилиту через N секунд;
  • -p – Ключ позволяет выводить информацию только по указанном PID-у (можно использовать несколько PID-ов, но использую разделитель — запятая);
  • -s – Ключ который позволяет выводить команду полностью, а не только имя процесса.

Мне хватает запуска:

# ps_mem 
 Private  +   Shared  =  RAM used	Program 

200.0 KiB +  36.0 KiB = 236.0 KiB	varnishlog
220.0 KiB +  31.0 KiB = 251.0 KiB	atd
240.0 KiB +  24.0 KiB = 264.0 KiB	agetty (2)
328.0 KiB +  63.0 KiB = 391.0 KiB	fcgiwrap
392.0 KiB +  39.5 KiB = 431.5 KiB	systemd-udevd
364.0 KiB + 100.0 KiB = 464.0 KiB	varnishncsa (2)
548.0 KiB +  69.0 KiB = 617.0 KiB	rpcbind
448.0 KiB + 201.0 KiB = 649.0 KiB	avahi-daemon (2)
328.0 KiB + 337.0 KiB = 665.0 KiB	mysqld_safe
664.0 KiB +  41.0 KiB = 705.0 KiB	memcached
712.0 KiB +  35.5 KiB = 747.5 KiB	crond
780.0 KiB + 346.5 KiB =   1.1 MiB	bash
  1.0 MiB + 157.0 KiB =   1.2 MiB	dbus-daemon
  1.2 MiB + 152.5 KiB =   1.4 MiB	systemd-logind
  2.3 MiB +  76.5 KiB =   2.4 MiB	systemd
  2.1 MiB + 662.0 KiB =   2.8 MiB	sshd (2)
 10.2 MiB +   3.7 MiB =  13.9 MiB	systemd-journald
 16.2 MiB + 527.5 KiB =  16.8 MiB	nagios (8)
 32.0 MiB +   5.8 MiB =  37.9 MiB	nginx (6)
 82.3 MiB + 299.0 KiB =  82.6 MiB	snmpd
180.5 MiB + 421.5 KiB = 180.9 MiB	mysqld
894.0 MiB + 107.9 MiB =   1.0 GiB	php-fpm (41)
---------------------------------
                          1.3 GiB
=================================

Утилита очень помогает при настройке php-fpm, apache, nginx. У меня все, статья «Установка ps_mem для проверки занятой памяти процессами в Unix/Linux» завершена.

The post Установка ps_mem для проверки занятой памяти процессами в Unix/Linux first appeared on linux-notes.org.]]>
https://linux-notes.org/ustanovka-ps_mem-dlya-proverki-zanyatoj-pamyati-protsessami-v-unix-linux/feed/ 0
Page_c76a3fcf https://linux-notes.org/primery-ispol-zovaniya-openssl-v-unix-linux/ https://linux-notes.org/primery-ispol-zovaniya-openssl-v-unix-linux/#respond Sun, 20 Nov 2016 10:44:38 +0000 http://linux-notes.org/?p=9560 Примеры использования OpenSSL в Unix/Linux При работе с SSL, нужно уметь работать с утилитой OpenSSL чтобы создавать, конвертировать, управляют SSL-сертификатами. В этой статье «Примеры использования OpenSSL в Unix/Linux» я буду говорить о примерах использования OpenSSL. Некоторые из сокращений, связанных с сертификатами: SSL – Secure Socket Layer (Безопасный уровень сокета). CSR – Certificate Signing Request (Запрос […]

The post Примеры использования OpenSSL в Unix/Linux first appeared on linux-notes.org.]]>

Примеры использования OpenSSL в Unix/Linux

При работе с SSL, нужно уметь работать с утилитой OpenSSL чтобы создавать, конвертировать, управляют SSL-сертификатами. В этой статье «Примеры использования OpenSSL в Unix/Linux» я буду говорить о примерах использования OpenSSL.

Некоторые из сокращений, связанных с сертификатами:

  • SSL – Secure Socket Layer (Безопасный уровень сокета).
  • CSR – Certificate Signing Request (Запрос на подпись сертификата).
  • TLS – Transport Layer Security (Транспортный уровень безопастности).
  • PEM – Privacy Enhanced Mail
  • DER – Distinguished Encoding Rules
  • SHA – Secure Hash Algorithm (Безопасный hash алгорит).
  • PKCS – Public-Key Cryptography Standards (Стандарты шифрования публичных ключей).

Создание нового приватного ключа (Private Key) и Certificate Signing Request (CSR).

Выполняем команду:

# openssl req -out linux-notes.org.csr -newkey rsa:2048 -nodes -keyout linux-notes.org.key

Команда выше будет генерировать CSR и 2048-битный RSA ключ. Если вы собираетесь использовать этот сертификат в Apache или Nginx, то вам необходимо отправить этот CSR файл в службу сертификации и они дадут вам подписанный сертификат в «der» или «pem» формате. После чего вы настроите его на веб-сервере Apache или Nginx.

Так же, можно использовать такой вариант:

$ openssl req -new -newkey rsa:2048 -nodes -out linux-notes.org.csr -keyout linux-notes.org.key -subj "/C=US/ST=Wisconsin/L=Waukesha/O=IT Dept/OU=Linux Notes/CN=linux-notes.org"

Создание самоподписанного сертификата (Self-Signed Certificate).

Выполняем команду:

# openssl req -x509 -sha256 -nodes -newkey rsa:2048 -keyout LN-selfsigned.key -out LN-cert.pem

Команда выше будет генерировать самоподписанный сертификат (self-signed) и 2048-битный RSA ключ. Я также использую алгорит шифрования — SHA256. Так как он считается наиболее безопасным в данный момент.

Замечание: По умолчанию, будет сгенерирован ключ толкьо на 1 месяц, если нужно создать на более длительное время — используйте опцию «–days», пример использования ниже.

Пример: Чтобы создать self-signed сертификат на 2 год, используйте:

# openssl req -x509 -sha256 -nodes -days 730 -newkey rsa:2048 -keyout LN-selfsigned.key -out LN-cert.pem

Проверка CSR файла.

Выполням проверку:

# openssl req -noout -text -in linux-notes.org.csr

и вы получите информацию.

Проверка подписи (signature):

$ openssl req -in linux-notes.org.csr -noout -verify

Кем(кому) был выдан сертификат:

$ openssl req -inlinux-notes.org.csr -noout -subject

Показать открытый ключ (public key):

$ openssl req -inlinux-notes.org.csr -noout -pubkey

Создать приватный RSA  ключ (Private Key).

Чтобы это сделать, выполните:

# openssl genrsa -out my_private_rsa.key 2048

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

Удалить ключевую фразу (Passphrase) с ключа.

# openssl rsa -in linux-notes.org.key -check -out nopassphrase.key

Если вы установили ключевую фразу для ключа, то при каждом старте веб-сервера (Apache/Nginx) вы должны будите вводить пароль. Если это вас злит, вы можете с легкостью удалить  passphrase с RSA ключа.

Проверка приватного ключа (Private Key)

# openssl rsa -in my_private.key -check

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

Проверка сертификата (Certificate).

Если вы хотите проверить данные сертификата( CN, OU, и т.д.), то вы можете использовать команду, которая даст вам сведения о сертификате:

# openssl x509 -in certfile.pem -text –noout

Команда довольна простая в использовании.

Проверка подписанного сертификата (Certificate Signer Authority).

# openssl x509 -in some_cert.pem -noout -issuer -issuer_hash

Можно узнать много полезного.

Создать тестовый SSL сервер.

Команда OpenSSL s_server реализует общий SSL/TLS-сервер. Она должна использоваться только для целей тестирования. В приведенном ниже примере данный сервер прослушивает соединения на порту 8080 и возвращает отформатированную HTML страницу статуса, который включает много информации о ciphers:

$ openssl s_server -key key.pem -cert cert.pem -accept 8080 -www

Проверить хеш вашего сертификата.

# openssl x509 -noout -hash -in my_cert.pem

Конвертирование сертификатов с DER в PEM формат.

# openssl x509 -inform der -in LN.der -out LN.pem

Как правило, при покупке SSL сертификатов, его отдают вам в формате .der и если вам нужно использовать его в веб-сервере или .pem формате, вы можете использовать команду выше, чтобы преобразовать такие сертификаты.

Конвертирование сертификатов с PEM в DER формат.

В случае, если вам необходимо изменить .pem формат в .der:

# openssl x509 -outform der -in linux-notes.pem -out linux-notes.der

Конвертирование CSR c DER в PEM формат.

$ openssl req -in csr.der -inform DER -out csr.pem -outform PEM

Конвертирование сертификата и приватного ключа  в PKCS#12 фотмат.

# openssl pkcs12 –export –out sslcert.pfx –inkey key.pem –in sslcert.pem

Если вам необходимо использовать сертификат с приложением Java или с любым другим, кто принимает формат PKCS# 12.

Совет: Вы можете включить «chain certificate» используя «-chain» опцию:

# openssl pkcs12 -export -out my_cert.pfx -inkey my_key.pem -in your_cert.pem -chain the_cert.pem

Создание CSR используя  приватный ключ (private key).

# openssl req -out some_cert.csr -key exists.key -new

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

Проверьте содержимое сертификата в PKCS12 формате.

# openssl pkcs12 -info -nodes -in my_certificate.p12

PKCS12 — это двоичный формат, так что вы не сможете просматривать содержимое в блокноте или другом редакторе. Таким образом, вы должны использовать команду что выше, для просмотра содержимого файла формата PKCS12.

Конвертирование PKCS12 формата в PEM сертификат.

# openssl pkcs12 -in my_certificat.p12 -out the_certificat.pem

Получить SHA-1 отпечаток сертификата или CSR

Чтобы получить отпечаток SHA1 сертификата с использованием OpenSSL, используйте команду, приведенную ниже:

$ openssl dgst -sha1 my_cert.der

Чтобы получить SHA1 отпечаток пальца CSR с использованием OpenSSL, используйте команду, приведенную ниже:

$ openssl dgst -sha1 the_csr.der

Получить MD5 отпечаток сертификата или CSR

Чтобы получить отпечаток MD5 сертификата с использованием OpenSSL, используйте команду, приведенную ниже:

$ openssl dgst -md5 cert.der

Чтобы получить MD5 отпечаток пальца CSR с использованием OpenSSL, используйте команду, приведенную ниже:

$ openssl dgst -md5 my_csr.der

Тестирование SSL сертификата по URL.

# openssl s_client -connect linux-notes.org:443 -showcerts

Я использую это довольно часто для проверки SSL-сертификатов по URL с сервера. Это очень удобно для проверки некоторых деталей протокола, шифров и CERT.

Узнать версию OpenSSL

 # openssl version

Поверка PEM сертификата на завершение (Expiration Date).

# openssl x509 -noout -in cert.pem -dates

Пример:

# openssl x509 -noout -in bestflare.pem -dates
notBefore=Jul 4 14:02:45 2015 GMT
notAfter=Aug 4 09:46:42 2015 GMT

Проверка завершения SSL сертификата (Expiration Date) по URL.

# openssl s_client -connect linux-notes.org:443 2>/dev/null | openssl x509 -noout -enddate

Проверить поддержку SSL версии V2/V3  по URL.

Проверка SSL версии V2:

# openssl s_client -connect linux-notes.org:443 -ssl2

Проверка SSL версии V3:

# openssl s_client -connect linux-notes.org:443 -ssl3

Проверка TLS 1.0:

# openssl s_client -connect linux-notes.org:443 -tls1

Проверка TLS 1.1:

# openssl s_client -connect linux-notes.org:443 -tls1_1

Проверка TLS 1.2:

# openssl s_client -connect linux-notes.org:443 -tls1_2

Проверка поддержки cipher для сайта по URL.

# openssl s_client -cipher 'ECDHE-ECDSA-AES256-SHA' -connect linux-notes.org:443

Какой алгоритм используется в сертификате (проверка).

$ openssl req -noout -text -in mycert.csr | grep 'Signature Algorithm'

Или, используя URL:

openssl s_client -connect linux-notes.org:443 < /dev/null 2>/dev/null | openssl x509 -text -in /dev/stdin | grep "Signature Algorithm"

Получить сертификат по URL

Команда что ниже, сохранит сертификат в файл прямо по URL сайта:

$ echo -n | openssl s_client -connect linux-notes.org:443 | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' > pem.cert

Если веб-сервер имеет несколько сертификатов на один IP-адрес, то вам нужно будет сообщить OpenSSL, какой сертификат будет использоваться, пример ниже:

$ echo -n | openssl s_client -connect linux-notes.org:443 -servername linux-notes.org | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' > pem.cert

Вот и все, много полезностей и все в одной статье «Примеры использования OpenSSL в Unix/Linux».

The post Примеры использования OpenSSL в Unix/Linux first appeared on linux-notes.org.]]>
https://linux-notes.org/primery-ispol-zovaniya-openssl-v-unix-linux/feed/ 0
Page_c76a3fcf https://linux-notes.org/perehod-s-sha-1-na-sha2-iz-za-uyazvimosti-v-unix-linux/ https://linux-notes.org/perehod-s-sha-1-na-sha2-iz-za-uyazvimosti-v-unix-linux/#respond Fri, 18 Nov 2016 01:53:52 +0000 http://linux-notes.org/?p=9557 Переход с SHA-1 на SHA2 из-за уязвимости в Unix/Linux Стало известно что сайты с поддержкой SHA-1 алгоритма — уязвимы к атаке, которую исслeдователи назвали «freestart collision». Атака опирается на коллизии хеш-фукнций, и о том, что подобное вoзможно, еще в 2012 году говорил известный криптограф и писатель Брюс Шнайер (Bruce Schneier). Тем немее существующие сертификаты с SHA-1 по-прежнему […]

The post Переход с SHA-1 на SHA2 из-за уязвимости в Unix/Linux first appeared on linux-notes.org.]]>

Переход с SHA-1 на SHA2 из-за уязвимости в Unix/Linux

Стало известно что сайты с поддержкой SHA-1 алгоритма — уязвимы к атаке, которую исслeдователи назвали «freestart collision». Атака опирается на коллизии хеш-фукнций, и о том, что подобное вoзможно, еще в 2012 году говорил известный криптограф и писатель Брюс Шнайер (Bruce Schneier). Тем немее существующие сертификаты с SHA-1 по-прежнему доверяют современные браузеры и операционные системы. Как правило, они будут удаления с поддержки с 1 января 2017 года. Но если люди заказали сертификат 31 декабря 2015 аж на 39 месяцев, то можно будет видеть что он истечет аж 2019.

Проверка SHA

Т.к SHA-1 — уязвим, то проверим не уязвим сайт, самый быстрый способ — это заюзать онлайн чекер:

URL: https://shaaaaaaaaaaaaa.com/

Так же, вот некоторые подобные сайты:

  • https://www.sha2sslchecker.com
  • https://geekflare.com/ssl-test-certificate/
  • http://sha1affected.com/
  • https://shachecker.com/

Но я воспользуюсь командной строкой и получу всю информацию через нее:

# openssl s_client -connect linux-notes.org:443 < /dev/null 2>/dev/null | openssl x509 -text -in /dev/stdin | grep "Signature Algorithm"
    Signature Algorithm: sha256WithRSAEncryption
    Signature Algorithm: sha256WithRSAEncryption

Видим что у меня используется SHA256 — это защищенный алгоритм и мне ничего не нужно делать, но если у вас просто «sha*», то нужно от него избавляться и переходить на SHA-2 сертификат используя OpenSSL утилиту:

# openssl req -new -sha256 -key some_domain_name.key -out some_domain_name.csr

Так же, можно воспользоваться и онлайн генератором сертификата:

URL: https://certificatesssl.com/ssl-tools/csr-generator.html

Вот и все, статья «Переход с SHA-1 на SHA2 из-за уязвимости в Unix/Linux» завершена.

The post Переход с SHA-1 на SHA2 из-за уязвимости в Unix/Linux first appeared on linux-notes.org.]]>
https://linux-notes.org/perehod-s-sha-1-na-sha2-iz-za-uyazvimosti-v-unix-linux/feed/ 0
Page_c76a3fcf https://linux-notes.org/ustanovka-ntail-dlya-prosmotra-log-ov/ https://linux-notes.org/ustanovka-ntail-dlya-prosmotra-log-ov/#respond Tue, 04 Aug 2015 21:01:34 +0000 http://linux-notes.org/?p=6895 Установка ntail для просмотра log-ов ntail — это аналог утилиты tail для просмотра log файлов который поддерживает фильтрацию и парсинг. Данная утилита имеет подсвечивание для различных ошибок от ответа веб-сервера. В своей статье «Установка ntail для просмотра log-ов» я расскажу как установить и использовать ntail для просмотра log-ов. Для начала, нужно установить вспомогательные пакеты. Для CentOS/Fedora/RedHat: # yum install […]

The post Установка ntail для просмотра log-ов first appeared on linux-notes.org.]]>

Установка ntail для просмотра log-ов

ntail — это аналог утилиты tail для просмотра log файлов который поддерживает фильтрацию и парсинг. Данная утилита имеет подсвечивание для различных ошибок от ответа веб-сервера. В своей статье «Установка ntail для просмотра log-ов» я расскажу как установить и использовать ntail для просмотра log-ов.

Для начала, нужно установить вспомогательные пакеты.

Для CentOS/Fedora/RedHat:

# yum install ruby rubygems -y

Для Debian/Ubuntu:

# apt-get install ruby-full rubygems

Для MacOS:

Дополнительных пакетов устанавливать не нужно. Просто нужно выполнить установку ntail.

Для всех остальных, можно скачать через GIT:

# cd /usr/local/src && wget https://github.com/pvdb/ntail.git

Установка ntail для просмотра log-ов

И собственно после установления пакетов с ruby, выполняем установку ntail:

# gem install ntail

После этого вы должны иметь исполняемый файл в /usr/bin/ntail или /usr/local/bin/ntail. Для правильной работы ntail необходимо убедиться что установлен относительный путь к утилите в переменной окружения $ PATH.

Использование ntail для просмотра log-ов в Unix/Linux

Сейчас, я расскажу как можно использовать ntail в ОС Unix/Linux.

Основы использования Ntail

Обработать весь log-файл  веб-сервера nginx и вывести разобранную и отформатированную строку в STDOUT:

# ntail /var/log/nginx/access.log

Обработать весь log-файл  веб-сервера nginx и передать через пайп (трубу) розпарсенную и отформатированную строку в браузере (в зависимости от дополнительного bcat gem):

# ntail /var/log/nginx/access.log | bcat

Запустить tail  и отображать лог-файл на экран в режиме реального времени передаваемый через пайп ntal-у и выводит (для остановки используйте комбинацию клавиш ctrl + C):

# tail -f /var/log/nginx/access.linux-notes.org.log | ntail

Запустить tail  и отображать лог-файл на экран в режиме реального времени передаваемый через пайп ntal-у розпарсенную и отформатированную строку в браузере (для остановки используйте комбинацию клавиш ctrl + C):

# tail -f /var/log/nginx/access.linux-notes.org.log | ntail | bcat

Расширенный Примеры

Считать из стандартного ввода информацию и вывести каждую строку  на STDOUT ( остановка ^D):

$ ntail

Считать из стандартного ввода информацию и вывести длину каждой строки (для иллюстрации служит опция «-e»):

$ ntail -e 'puts size'

Считать из стандартного ввода информацию и вывести только не пустые строки (для иллюстрации служит опция «-f»):

$ ntail -f 'size != 0'

Следующие вызовы команд работают так же (чтобы проиллюстрировать нужны опции «-e» и «-f»):

$ ntail
$ ntail -f 'true' -e 'puts self'

Вывести все HTTP запросы, которые приходят из конкретного IP-адреса:

$ ntail -f 'remote_address == "66.66.66.66"' /var/log/nginx/access.linux-notes.org.log

Найти все HTTP запросы, которые вызвали ошибки в «5xx» Ошибка HTTP/код состояния (например, Rails 500 errors):

$ gunzip -S .gz -c access.log-20150804.gz | ntail -f 'server_error_status?'

Генерировать сводный отчет кодов состояния HTTP для всех не-HTTP запросов с кодом 200 (ОК):

$ ntail -f 'status != "200"' -e 'puts status' access.linux-notes.org.log | sort | uniq -c

Показать местоположение для каждого запроса HTTP  с использованием GeoIP (зависит от дополнительного Geoip gem)

$ ntail -e 'puts [to_country_s, to_city_s].join("\t")' /var/log/nginx/access.linux-notes.org.log

PS: для использования geoIP, необходимо установить его.

# gem install geoip  geoip-c

Вывести список IP-адресов с именами хостов для каждого запроса HTTP (замедляет из-за вызова NSlookup):

$ ntail -e 'puts [remote_address, to_host_s].join("\t")' /var/log/nginx/access.linux-notes.org.log

Разобрать лог-файл через визуализатора gltail  в реальном времени:

$ ntail -v --raw --sleep 0.1 /var/log/nginx/access.linux-notes.org.log > parsed-access.linux-notes.org.log

Вот и все. Данная утилита очень мне понравилась и я советую ее использовать. Данная тема «Установка ntail для просмотра log-ов» завершена.

The post Установка ntail для просмотра log-ов first appeared on linux-notes.org.]]>
https://linux-notes.org/ustanovka-ntail-dlya-prosmotra-log-ov/feed/ 0