Posts Tagged ‘ Shell

Полезные «однострочники»

Иногда мы очень ждем какогото события, например добавления записи в DNS, чтобы оперативно получить информацию и не долбить без конца одну и ту же команду по клавиатуре можно сделать так:

while [ $? -eq 0 ];do host site.com.ua;sleep 3;done

Сравнить 2 столбика, и вывести только те строки, содержание которых не совпадает

awk '{if ($1 != $2)print $1,$2}' < aliases.txt

Вывести список установленных пакетов по маске (без версий):

root@srv:~# dpkg -l |grep php |awk '{print $2}' |sed '{:q;N;s/\n/\ /g;t q}'
libapache2-mod-php5 php-pear php5 php5-cgi php5-cli php5-common php5-curl php5-dbg php5-gd php5-imagick php5-json php5-mcrypt php5-memcache php5-mhash php5-mysql php5-readline php5-sasl php5-tidy php5-xmlrpc php5-xsl
root@srv:~#

Восстановить заархивированный архив SQL дампа:

gunzip -c xxx.sql.gz |mysql -u root -p db

Бекап всего блочного устройства удаленно с помощью ssh и dd.
С удаленного хоста:

$ dd if=/dev/sda | gzip -1 - | ssh user@local dd of=image.gz

С локального хоста на удаленный:

$ ssh user@remote "dd if=/dev/sda | gzip -1 -" | dd of=image.gz

Найти файлы и которые содержат «MY PATTERN» и скопировать в /dest/dir :

find . -type f -exec grep -ilR "MY PATTERN" {} \; | xargs -I % cp % /dest/dir/

Проверка FTP, или просто коннект в active mode с debug:

lftp -e 'debug 10;set ftp:passive-mode off; set ftp:auto-passive-mode no; ls; bye;' -u user,password ftp://ftp.site.com

Построить рейтинг стран источников пакетов из дамп-файла (должны быть установлены пакеты geoip-bin geoip-database):

tcpdump -ntr somedump.out |sed -e 's/IP\ //g' -e 's/\ .*//'|cut -d'.' -f1-4 |uniq | xargs -n 1 geoiplookup { } |sort | uniq -c | sort -n

Отрезать кусочек видео от (время 00:00:00) до (время 00:39:03) без перекодирования:

ffmpeg -i VIDEO.mp4 -vcodec copy -acodec copy -ss 00:00:00 -t 00:39:03 VIDEO_Cutted.mp4

Будет дополняться …

Хай щастить!

Debian Jessie: настройка бэкапа баз MySQL

Это заметка из цикла стетей моего небольшого HowTo по Debian Jessie.

Бэкапы и тормоза придумали трусы … это понятно. Непонятно только что делать когда железка померла или сайт похакали. Чтобы не попадать в такую непонятную и неприятную ситуацию — настроим автобэкап. Сразу скажу, что это только первый этап бэкапа, он делается на тот же хост где расположен mysql, следующим этапом будет настройка bacula — она заберет и файлы баз и директории с сайтами на удаленное хранилище … что обеспечит сохранность данных даже в случае поломки сервера.

У меня LVM, поэтому директорию для хранения бэкапов баз я решил расположить на отдельном LV.
Примерно прикиньте размер своих баз, учтите что храниться будет несколько бэкапов в заархивированном виде. В моем случае вполне хватит 2GB.
Создаем LV размером 2GB:

gw:~$ sudo lvcreate -L 2g -n lv_backup vgraid1
  Logical volume "lv_backup" created
gw:~$

Форматируем новый LV в ext4:

gw:~$ sudo mkfs.ext4 -L BACKUP /dev/mapper/vgraid1-lv_backup
mke2fs 1.42.12 (29-Aug-2014)
Creating filesystem with 524288 4k blocks and 131072 inodes
Filesystem UUID: b75fc3b1-4089-445b-8077-0840ad049348
Superblock backups stored on blocks:
    32768, 98304, 163840, 229376, 294912

Allocating group tables: done                            
Writing inode tables: done                            
Creating journal (16384 blocks): done
Writing superblocks and filesystem accounting information: done

gw:~$

Создаем директорию для бэкапов:

gw:~$ sudo mkdir /backup

Для автомонтирования раздела при старте сервера прописываем в /etc/fstab

gw:~$ sudo vim /etc/fstab

Вот такую строчку:

/dev/mapper/vgraid1-lv_backup /backup ext4 noatime,nodiratime,nodev,nosuid,noexec 1 2

Монтируем новый раздел:

gw:~$ sudo mount -a

Создаем директорию на lv_backup для будущих бэкапов mysql баз:

gw:~$ sudo mkdir /backup/mysql

Не забываем что это бэкапы баз, там есть много разной инфы, в том числе и приватной, поэтому не забываем урезать права на директорию. Доступ только тем что имеет sudo:

gw:~$ sudo chmod 0700 /backup/mysql

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

gw:~$ sudo mkdir /root/scripts

Создаем скрипт который будет бекапить базы:

gw:~$ sudo vim /root/scripts/mysql_db_backup.sh

С вот таким содержимым (не забываем сменить BASES_FOR_BACKUP и mysql_root_passwd_here на свои значения):

#!/bin/bash
# Script for BackUP MySQL bases
# Wrote at night 12.07.2010
# By Black_13

DATE=`date +%F`
BACKUP_DIR="/backup/mysql"
BASES_FOR_BACKUP="wordpress drupal6 evedb bmwdb"

# <Clean Old Archives> #
find ${BACKUP_DIR} -ctime +15 -exec rm -f  '{}' \;

cd ${BACKUP_DIR}

for DATABASE in ${BASES_FOR_BACKUP}
 do
    mysqldump --user='root' --password='mysql_root_passwd_here' ${DATABASE} > ${DATABASE}-${DATE}.sql
    bzip2 -9 ${DATABASE}-${DATE}.sql
done

Также обратите внимание на команду find в скрипте:

find ${BACKUP_DIR} -ctime +15 -exec rm -f  '{}' \;

Это очистка архивов старше 15-ти дней. Если вам нужно больше/меньше — просто исправьте данную циферку на нужную.

Даем скрипту права на выполнение:

gw:~$ sudo chmod +x /root/scripts/mysql_db_backup.sh

Итак, на данный момент директория с бекапами пуста, проверим это:

gw:~$ sudo ls -l /backup/mysql/
total 0
gw:~$

Пробуем запустить скрипт (не делайте это если база в активном использовании, лучше это делать когда база в минимальной нагрузке):

gw:~$ sudo /root/scripts/mysql_db_backup.sh

В случае корректного выполнения никакого вывода скрипт не дает, только если есть ошибки. У меня отработал без ошибок, вот листинг директории /backup/mysql после выполнения скрипта:

gw:~$ sudo ls -l /backup/mysql/
total 1324
-rw-r--r-- 1 root root 1257639 Oct 14 10:37 wordpress-2015-10-14.sql.bz2
-rw-r--r-- 1 root root   92233 Oct 14 10:38 evedb-2015-10-14.sql.bz2
...
gw:~$

Теперь добавим скрипт бэкапа в root-овый crontab чтобы он выполнялся автоматически каждый день в 03:00 ночи:

gw:~$ sudo crontab -e

Пишем вот следующее (не забывайте в конце оставлять пустую строку):

# m h  dom mon dow   command
0       3       *       *       *       /root/scripts/mysql_db_backup.sh

Завтра проверяйте содержимое директории /backup/mysql, там должны быть свежие бекапы …

Хай щастить!

Debian Jessie: Трюки вокруг доступа к sshd (iptables, ipset, geoip)

Это заметка из цикла стетей моего небольшого HowTo по Debian Jessie.

Тут я уже описывал ранее вариант фильтрации доступа к ssh по GeoIP. На этот раз покажу вам более интересный вариант с ipset и модуль TARPIT для IPTABLES. Сразу скажу пару слов об этих новых сущностях:
ipset — модуль поддержки таблиц для iptables с сопутствующей обвязкой для управления этими самими таблицами: создание, удаление, работа с элементами таблицы и тп. Сам по себе модуль весьма хорош и здорово повышает эффективность работы iptables с большим количеством ip-адресов и сетей. Но если разсметривать реализацию iptables + ipset вцелом — то оно мне напоминает пятиколесный велосипед с деревянными спицами. Уж простите за такую ассоциацию у человека несколько лет админившего всякие там pf/ipfw в BSD-ях. На High-Load юзать можно и нужно!
TARPIT модуль для IPTABLES — это модуль для it-весельчаков. Суть работы этого модуля заключается в том что он какбы держит открытым указанный TCP порт, но при попытке клиента соединиться — не шлет в ответ абсолютно ничего. Это такой себе blackhole или nullroute на уровне фаервола. Это приводит к «зависшему» соединению с возможностью закрыть его только автоматически по истечению таймаута. Задумка модуля в том чтобы не просто блокировать бота, а истощать его ресурсы на соединение, мизерные, конечно, но всеже … На High-Load юзать не желательно, лучше пользуйте DROP!

Ранее при настройке proftpd мы уже установили geoip, но для тех кто не делал этого понадобится установленный geoip и его база:

gw:~$ sudo apt-get install geoip-bin geoip-database

В Debian модуль TARPIT находится в пакете дополнительных модулей iptables. Установим их:

gw:~$ sudo apt-get install xtables-addons-dkms

Ставим необходимый пакет для добавления ipset:

gw:~$ sudo apt-get install ipset

Одной из приятных фишек таблиц ipset является опция timeout. Она задает количество времени (в секундах) которое элемент содержится в таблице. По истечении timeout-а — элемент автоматически удаляется из таблицы.

Пример борьбы с ssh брутфорсерами:
1. Создаем таблицу, в нее скриптом проверки geoip будем добавлять ботов, timeout ставим 2 часа:

gw:~$ sudo ipset create ssh_bots hash:ip hashsize 16384 timeout 7200

2. Загрузим модуль ядра для действия iptables TARPIT:

gw:~$ sudo modprobe xt_TARPIT

3. Напомню что вот здесь мы базово настроили iptables. Сразу перед правилом розрешающим конект на port 22 добавим правило для блокировки ssh ботов из таблицы ssh_bots. Должно получиться вот так:

...
# Allow DNS connections from anywhere
-A INPUT -p udp --dport 53 -j ACCEPT
-A INPUT -p tcp --dport 53 -j ACCEPT

# TARPIT ssh_bots table
-A INPUT -m set --match-set ssh_bots src -p TCP --dport 22 -j TARPIT

# Allows SSH connections
# The --dport number is the same as in /etc/ssh/sshd_config
-A INPUT -p tcp -m state --state NEW --dport 22 -j ACCEPT
...

4. Теперь сооружаем чуть модифицированный скрипт проверки geoip — /usr/local/bin/ssh_geoip.sh:

gw:~$ sudo vim /usr/local/bin/ssh_geoip.sh

Вставляем туда следующее …

#!/usr/bin/env bash

PATH="/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/sbin:/usr/local/bin:/root/bin"

ALLOW_COUNTRIES="UA"

if [ $# -ne 1 ]; then
  echo "Usage:  `basename $0` <ip>" 1>&2
  exit 0 # return true in case of config issue
fi

COUNTRY=`geoiplookup $1 |sed -e 's/^.*Edition\:\ //' -e 's/\,.*$//'`

if [[ ${COUNTRY} =~ ${ALLOW_COUNTRIES} ]]; then
    logger "sshd ALLOW connection from IP $1 - [${COUNTRY}]"
    exit 0
  else
    logger "sshd DENY connection from IP $1 - [${COUNTRY}]"
    ipset add ssh_bots $1
    exit 1
fi

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

gw:~$ sudo chmod +x /usr/local/bin/ssh_geoip.sh

5. Теперь подправим конфиг /etc/hosts.deny добавив туда:

sshd: ALL

6. Теперь подправим конфиг /etc/hosts.allow добавив туда:

# Whitelist for LAN network 192.168.0.0/16
sshd: 192.168.
# Check Access by GeoIP
sshd: ALL: aclexec /usr/local/bin/ssh_geoip.sh %a

Итак, теперь соединение к ssh-серверу проходит так:
— конект на 22-й порт
— если ip клиента из сети 192.168.0.0/16 — пускаем сразу (см. whitelist в файле /etc/hosts.allow)
— проверка прав дотупа через скрипт /usr/local/bin/ssh_geoip.sh (розрешено только для UA ip-адресов)
— если права даны — приглашение к авторизации
— если права не даны — добавление ip бота в таблицу ssh_bots и сброс соединения
— следующая попытка соединения на порт 22 ведет в модуль TARPIT iptables-а
спустя 7200 секунд (2 часа) ip бота автоматически удаляется из таблицы ssh_bots и может коннектиться снова

Все прохождения через скрипт логируются в /var/log/messages в таком виде:
удачные:

Nov 22 14:14:11 gw logger: sshd ALLOW connection from IP 77.91.130.111 - [UA]

неудачные:

Nov 22 11:30:44 gw logger: sshd DENY connection from IP 123.151.42.61 - [CN]

Посмотреть листинг таблицы ssh_bots:

gw:~$ sudo ipset list ssh_bots
Name: ssh_bots
Type: hash:ip
Revision: 3
Header: family inet hashsize 16384 maxelem 65536 timeout 7200
Size in memory: 295304
References: 1
Members:
222.186.34.74 timeout 2075
43.229.53.69 timeout 3998
gw:~$

Хай щастить!

Debian Jessie: Начальная настройка системы

Статья из разряда «Что вы делаете сразу после установки Debian GNU Linux (или другого дистрибутива) на сервер?»
Чуть ниже я опишу свое видение необходимых начальных настроек системы. Также установку некоторых пакетов и коротко опишу их назначение.

Сразу после свежей установки Debian (любого, но в данном случае Jessie) меня раздражают 2 вещи:
1. Отсутствие моего любимого текстового редактора vim. Есть, правда, дико обрезанный в функциональности vim.tiny (по сути это самый обычный олдскульный vi) да nano — печальная картина. Хотя подозреваю что это необходимая мера чтобы вписаться в минималистичные размеры сборки netinstall.
2. «Бедный» конфиг источников пакетов /etc/apt/sources.list Я не против минимализма и чистоты системы от non-free скверны, но можно же хоть закоменченные строчки contrib/non-free репов в конфиг вписать … Unix way елки-палки. Ubuntu, например, имеет в системе изначально довольно широкий список sources.list с закоменченными опциональными репами. Уважаю в этом плане бубунту.

Порядок решения этих неприятностей обратный, сначала составляем жизненно необходимый конфиг /etc/apt/sources.list, а потом уже можно заняться установкой пакетов и всякими настройками системы.

Для удобства использования из консоли я выложил свой sources.list в виде архива по адресу http://diff.org.ua/configs/deb8_sources_list.gz (ниже есть листинг содержимого, если вы имеете красивый доступ в web, а сервер настраиваете через SSH — то лучше сделайте привычный copy/paste прямо из браузера в консоль ssh)
Использовать его очень просто, после входа на сервер по ssh, переходим под root (у нас пока нету sudo, так как в netinstall он не предустановлен):

user@deb:~$ su -
password:
root@deb:~#

скачиваем архив с помощью wget-а (благо он есть по умолчанию даже в netinstall сборке Debian):

root@deb:~$ wget -c http://diff.org.ua/configs/deb8_sources_list.gz

Дальше мы будем заменять системный конфиг, если Вы совсем новичок, рекомендую перед каждой правкой системных конфигов делать бэкап оригинала. Например для /etc/apt/sources.list это может выглядеть так:

root@deb:~# cp /etc/apt/sources.list /etc/apt/sources.list_orig

Теперь нужно заменить оригинальный конфиг скачанным:

root@deb:~# zcat deb8_sources_list.gz > /etc/apt/sources.list

Убедиться в том что конфиг обновился, можно так:

root@deb:~# cat /etc/apt/sources.list
# Main Debian Jessie Repository - UA Mirror #
deb http://ftp.ua.debian.org/debian/ jessie main contrib non-free
#deb-src http://ftp.ua.debian.org/debian/ jessie main contrib non-free

# Main Security Repository #
#deb http://security.debian.org/ jessie/updates main contrib non-free
#deb-src http://security.debian.org/ jessie/updates main contrib non-free

# Security Updates - UA Mirror #
deb http://ftp.ua.debian.org/debian-security/ jessie/updates main contrib non-free

# Jessie-updates, previously known as 'volatile' - UA Mirror #
deb http://ftp.ua.debian.org/debian/ jessie-updates main contrib non-free
#deb-src http://ftp.ua.debian.org/debian/ jessie-updates main contrib non-free

# Multimedia Updates - UA Mirror #
deb http://ftp.ua.debian.org/debian-multimedia/ jessie main non-free

# Proposed Updates - UA Mirror #
deb http://ftp.ua.debian.org/debian/ jessie-proposed-updates main contrib non-free

# Jessie Backports - UA Mirror #
deb http://ftp.ua.debian.org/debian/ jessie-backports main contrib non-free
root@deb:~#

Как видно, обновился 🙂
После обновления сорс-листа необходимо перечитать источники пакетов, тоесть репозитарии:

root@deb:~# apt-get update

После исправления sources.list у меня возникает вот такая ошибка:

W: GPG error: http://ftp.ua.debian.org jessie InRelease: The following signatures couldn't be verified because the public key is not available: NO_PUBKEY 5C808C2B65558117

Решается она просто, импортом нужного ключа:

root@deb:~# gpg --keyserver pgpkeys.mit.edu --recv-key 5C808C2B65558117
...
root@deb:~# gpg -a --export 5C808C2B65558117 | sudo apt-key add -
OK
root@deb:~#

Также рекомендую выполнить обновление системы такой командой:

root@deb:~# apt-get dist-upgrade

Если APT предложит обновить какието пакеты — смело соглашайтесь (жмите Y на клавиатуре и Enter), на данный момент у нас свежая чистая система — ломаться особо нечему.

Теперь, когда мы настроили sources.list и сделали apt-get update, apt-get dist-upgrade — можно приступать к установке дополнительных полезных пакетов. Вот перечень того что я устанавливаю в первую очередь:
sudo — отличный системный инструмент позволяющий очень гибко настраивать доступ к администрированию системы. Например можно пользователю либо группе дать доступ хоть на одно хоть на несколько админских действий … вплоть до полного root-доступа. Гибко, удобно и просто.
tree — удобная консольная утилита для визуализации содержимого каталогов
mc — консольный двухпанельный олдскульный файловый менеджер. Удобный в работе и весьма функциональный.
screen — нечто наподобии оконного менеджера для консоли. Долго вникал в эту утилиту — но не зря, весьма удобно.
rsync — консольная утилита/сервис для синхронизации файлов
tcpdump — сетевая консольная утилита для просмотра траффика в реальном времени. Чтото типа wireshark.
mtr-tiny — сетевая консольная утилита для троссировки маршрутов. Аля tracert под виндой
vim — очень мощный консольный текстовый редактор
dmidecode — системная утилита для просмотра информации о железе сервера
curl — консольная утилита для работы с web контентом. Аля wget но более функциональная
dnsutils — пакет сетевых DNS утилит. Чаще всего из него я использую утилиты host и dig
git-core — git клиент, для клонирования проектов с git-репозиториев, таких например как github

Для установки данных пакетов использую стандартный инструмент — apt-get:

root@deb:~# apt-get install sudo tree mc screen rsync tcpdump mtr-tiny vim dmidecode curl dnsutils git-core

Ждем пока отработает команда по установке пакетов и потихоньку читаем дальше …

Перво наперво в новой системе я настраиваю sudo. Настройка sudo очень простая.
Открываем основной конфиг:

root@deb:~# visudo

Обычно в Debian даны права sudo для пользователей в группе sudo. Убедимся в этом:

%sudo   ALL=(ALL:ALL) ALL

добавить пользователя в группу sudo (это дает пользователю административные права, будьте осторожны!) можно так:

root@deb:~# gpasswd -a someuser sudo
Adding user someuser to group sudo
root@deb:~#

Если пользователь someuser был залогинен в системе — нужно перелогиниться чтобы применить настройки групп.
Вот и вся настройка, теперь пользователь someuser может с помощью sudo выполнять админские команды со своим паролем, например просмотр messages лога:

deb$ sudo cat /var/log/messages

Мне очень не нравится дэфолтная поддержка IPv6, не то чтобы я был совсем против данной технологии — просто она мне абсолютно не нужна. Да и к тому же портит вид выхлопа таких команд как:

$ ip a
$ ifconfig
$ netstat

и тп

Поддержку IPv6 можно легко выключить, совсем 🙂 Чем и предлагаю заняться.

Отключаем IPv6:
Тут есть 2 варианта, первый — отключить в загрузчике, и второй — с помощью sysctl. Я пользуюсь первым вариантом.
Открываем конфиг загрузчика:

deb$ sudo vim /etc/default/grub

и прописываем в параметр GRUB_CMDLINE_LINUX вот что:

GRUB_CMDLINE_LINUX="ipv6.disable=1"

Обновляем настройки Grub:

deb$ sudo update-grub

После перезагрузки получите систему с выключенным ipv6 🙂 Пока не перегружаемся, это мы сделаем чуть позже …

Небольшая оптимизация APT:
Еще один момент про apt — если вы используете в системе locale отличную от en_US.* то apt тянет все доступные переводы для пакетной базы (украинские, русские, румынские, африканские и тд.), размер их не то чтобы огромный, но приличный — десятки мегабайт в сумме, обвновляются каждый запуск apt-get update … незнаю как вам, но мне такие переводы абсолютно не нужны. Проверить locale можно одноименной командой:
вот так у меня:

deb:~$ locale
LANG=en_US.UTF-8
LANGUAGE=
LC_CTYPE="en_US.UTF-8"
LC_NUMERIC="en_US.UTF-8"
LC_TIME="en_US.UTF-8"
LC_COLLATE="en_US.UTF-8"
LC_MONETARY="en_US.UTF-8"
LC_MESSAGES="en_US.UTF-8"
LC_PAPER="en_US.UTF-8"
LC_NAME="en_US.UTF-8"
LC_ADDRESS="en_US.UTF-8"
LC_TELEPHONE="en_US.UTF-8"
LC_MEASUREMENT="en_US.UTF-8"
LC_IDENTIFICATION="en_US.UTF-8"
LC_ALL=
deb:~$

в моем случае ничего делать не надо, если у вас локаль отличная от en_US.* — рекомендую отключить загрузку ненужных переводов, как это делать — я описывал ранее.

Настройка vim:
Две важные настройки без которых я жить не могу 🙂
Открываем основной конфиг:

deb:~$ sudo vim /etc/vim/vimrc

розкомментировать строчки:

syntax on
set background=dark

а вообще vim очень мощный инструмент и настроек у него огромное количество, почитайте о нем на досуге.

Также неплохо бы хоть базово настроить bash, не хочу повторяться, гляньте тут, возможно захотите поменять некоторые параметры 🙂

Настроить timezone можно простой перенастройкой пакета tzdata:

deb:~$ sudo dpkg-reconfigure tzdata

Я там говорил про ребут, пока еще не время 🙂
Сначала рекомендую настроить базовые сервисы, а потом уже можно reboot!

Хай щастить!

Debian Jessie: Update BIOS Asus C60M1-I by flashrom

Итак, в домашнем использовании имеется материнка Asus C60M1-I. Захотелось глянуть какой там стоит BIOS — вдруг есть обновления? Для просмотра различных параметров «железа» в Linux есть прекрасная утилита — dmidecode. Она была у меня установлена, пользовать так:

root@debian:~# dmidecode --string bios-version
0205
0205
root@debian:~#

На сайте ASUS уже есть версия 0502 — нужно обновить BIOS! Вспомнил что когдато у меня была подобная материнка и я без проблем обновлял BIOS прямо из Windows — это было просто и удобно. Вдруг что-то подобное возможно в Linux? Быстрое гугление показало что это более чем возможно, так как существует множество различных программ нужного функционала. Читать полностью

FreeBSD + IPFW: Блокируем SMTP Bruteforce

На предыдущей работе досталось в подчинение пара почтовых серваков с оооочень древними доменами, огромным количеством ящиков и не менее огромным количеством бесконечных брутфорсов. Не знаю что было причиной бесконечных атак на эти серваки, но то что он был в like list у всевозможных ботов — это уж точно! Почта была критичным сервисом, но ближайшие планы включали миграцию на MS Exchange, поэтому позиция руководства была примерно такой «Ну онож работает? Да! Вот и не трогаем пока … нам бы побыстрее мигронуть на эксчендж да вырубить их нафик!» Но один раз случился инцидент который заставил изменить позицию неприкосновения. Несмотря на рендомные пароли, один ящик был сбрутен, и как результат — отправка через наш сервак порядка 40.000 спам писем со ссылками на различные ресурсы интимного направления 🙂
Короче было дано задание «Чтото с этим сделать!» Читать полностью

ssh — Ограничение доступа по GeoIP

Последнее время обьем говнотрафика в Интернете вырос в разы. Если раньше auth.log насчитывал примерно до 10 SSH ботов в сутки, то на данный момент этот показатель вырос до сотен уникальных ip. Боты в основном из Китая/Тайвани/Кореи… Фаервол конечно спасает, но хочется чегото изощреннее …
На просторах Интернета когдато нашел рецепт ограничения доступа к sshd по GeoIP. Решил опробовать.
Задача: дать доступ по SSH только ip адресам из Украины — остальным зась!
Для начала установил необходимые пакеты:

root@host:~# apt-get install geoip-bin geoip-database

И поехали ваять скрипты … настраивать конфиги!
Читать полностью

MySQL — online change storage engine.

Достались мне в наследство некоторые MySQL базы. Случайно обратил внимание что таблицы а базе используют MyISAM Engine. Поскольку базы создавались «за царя Гороха», а свежий MySQL Server был жестко оптимизирован конфигом под InnoDB Engine — решено сменить storage engine с MyISAM на InnoDB «на лету».
Делается это очень просто … Читать полностью

ESXi 5.0 — Firewall rules by SSH

Понадобилось както розковырять в фаерволе доступ для сети к ESXi 5.0 хосту через SSH. Было стрёмно, но не так уж и сложно:

~ # esxcli network firewall ruleset allowedip add -r sshServer -i 190.100.200.0/24
~ # esxcli network firewall ruleset allowedip add -r vSphereClient -i 190.100.200.0/24

Эти чудесные команды открыли доступ ssh клиентом и vSphereClient-ом на хост ESXi для сети 190.100.200.0/24
Хай щастить!

ESXi 5.x — смена сетевых настроек хоста

В ESXi версии 5.x (думаю что в предыдущих тоже) есть одна неприятная проблемка с сетевыми настройками. Сменить IP Address и Default GW одновременно и применить новые настройки нельзя. Можно только чтото одно, либо GW, либо IP/Mask … выбирайте, как говорится, пользователи дорогие … что вам важнее. Свинство как по мне! Життя таке бентежне 🙂 Но мы же хитрые — выкрутимся!
Для наглядности укажу некие потолочные настройки и сформирую задание.
К примеру есть ESXi host с сетевыми настройками:

ip: 100.100.100.100
netmask: 255.255.255.0
gw: 100.100.100.1

И задача: сменить его сетевые настройки на такие:

ip: 99.0.0.100
netmask: 255.255.255.0
gw: 99.0.0.1

При этом никаких других серверов ни в старой ни в новой у нас нету, тоесть если мы потеряем сетевую связь с ESXi хостом … то усе! Придется ехать за много-много километров в датацентр чтобы получить физический доступ к серверу и непосредственно с direct console перенастроить сеть. Читать полностью