Рейтинг
+4.52

Linux

14 читателей, 55 топиков

Неувядающий SSH-туннель

  • Linux
Как известно, SSH-туннели смертны. Помирают они по самым разным, порой непредсказуемым причинам, так что все возможные казусы одним лишь рихтованием настроек SSH предусмотреть наперёд невозможно. Понятно, что так жить нельзя, и с этим разумеется, нужно было позавчера что-то делать :)
На счастье в *nix кроме монстроидальных ужасных by design вещей типа upstart или systemd есть ещё и маленькие надёжные программы, решающие свою узкую задачу просто, предсказуемо и прямолинейно, то есть в так называемом unix-way стиле. К числу таковых относится и так называемый супервизор RunIt. Почитать о нём подробно можно, например, на хабре, здесь же я приведу готовое решение проблемы рушащегося на головы туннеля:

sudo apt-get install runit
sudo mkdir /etc/sv/unbreak-tun
cat <<'EOF' | sudo tee /etc/sv/unbreak-tun/run
#!/bin/bash
exec 2>&1
chpst  -u gideon:gideon ssh -i /home/gideon/.ssh/unsecure.rsa -p 5714 -L 1234:localhost:4567 melpomena@remote.host
EOF
sudo chmod +x /etc/sv/unbreak-tun/run
sudo ln -s '../sv/unbreak-tun' /etc/service/

Собственно, вот и всё решение!
Поменяйте номера портов, имена хостов и логины пользователей на нужные перед копированием этого кода в консоль — и получите туннель который уж если работает, то убить его будет решительно невозможно. А вот штатным образом остановить службу — пожалуйста: sudo sv stop unbreak-tun.

Shell скрипт для получения whois информации о домене

  • Linux
Тестировалось на Ubuntu 10.04. Доставляем пакет whois, если его нет.
apt-get install whois

Создаем скрипт
_dom=$@

# Die if no domains are given
[ $# -eq 0 ] && { echo "Usage: $0 domain1.com domain2.com ..."; exit 1; }
for d in $_dom
do
        _ip=$(host $d | grep 'has add' | head -1 | awk '{ print $4}')
        [ "$_ip" == "" ] && { echo "Error: $d is not valid domain or dns error."; continue; }
        echo "Getting information for domain: $d [ $_ip ]..."
        whois "$_ip" | egrep -w 'OrgName:|City:|Country:|OriginAS:|NetRange:'
        echo ""
done

Читать дальше →

Примеры использования Iptables

  • Linux
В Linux встроен брандмауэр называемый Netfilter. По данным официального сайта проекта:

netfilter это набор системных сообщений внутри ядра Linux, которые позволяют модулям ядра зарегистрировать функции обратного вызова с сетевого стека. Зарегистрированная функция обратного вызова обрабатывает каждый пакет проходящий через сетевой стек.

Брандмауэр в Linux управляется программой iptables, которая имеет функции фильтрации IPv4, ip6tables фильтрует IPv6. Данное руководство рассказывает как научится пользоваться Netfilter (iptables) в CentOS / RHEL / Fedora / Redhat Enterprise Linux. В этой статье можно найти основные примеры настройки iptables в Linux для защиты от вторжений.

Читать дальше →

Удаление и новая установка MySQL в Ubuntu 10.x

  • Linux
Если Вам друг потребуется переустановить MySQL как мне, сначала скопируйте папку с базой MySQL если она Вам нужна, затем приступайте к удалению MySQL 5.1 из Ubuntu 10.x. Данный метод удалит все, что связано с MySQL в ubuntu! Установка MySQL будет как на чистой системе.

Удалить можно с помощью apt:
apt-get --purge remove mysql-server
apt-get --purge remove mysql-client
apt-get --purge remove mysql-common

apt-get autoremove
apt-get autoclean

Читать дальше →

Защита от Apache от DDOS-атак

  • Linux
Пару недель назад позвонил один знакомый и пожаловался, что плохо работает сайт и канал поменяли на FTTX с xDSL и тариф выбрали со скоростью повыше, но помогло мало — пользователи жалуются на HTTP/1.1 403 Forbidden. Сервер настраивал им не я, благо что установлена Ubuntu 10.04 LTS — люблю продукты семейства long time support — очень уж они хорошо. Получив доступ начал ковырять систему — первое что бросилось в глаза — практически пустой фаейр — десятка 2 правил на вход-выход ЛВС и сайта в мир. Набрав в консоли команду
netstat -n --tcp | grep SYN_RECV
— несколько секунд наблюдал строчки вида:
tcp     0   0 xxx.xxx.xxx.xxx:80    206.192.175.100:1084    SYN_RECV   
tcp     0   0 xxx.xxx.xxx.xxx:80    206.192.175.100:1228    SYN_RECV   
tcp     0   0 xxx.xxx.xxx.xxx:80    206.192.175.100:2652    SYN_RECV   
tcp     0   0 xxx.xxx.xxx.xxx:80    206.192.175.100:3446    SYN_RECV
Сразу стало понятно — что сайт завален большим количеством syn-пакетов, потому так плохо и работает.
Читать дальше →

Назад в будущее

  • Linux
Что делать если tar при попытке разархивировать выдает ошибку «timestamp in the future»? Нужно добавить в опции параметр m.
tar -xmvf archive.tar
и если запаковано в .gz, то
tar -xmzvf archive.tar.gz

Установка драйвера и подключение раздела exFAT в Linux с возможностью записи

  • Linux
Для добавления возможности подключения ExFat разделов в Ubuntu выполните в консоли команды:

sudo -s
apt-get install python-software-properties
apt-add-repository ppa:relan/exfat
apt-get update
apt-get install fuse-exfat

Читать дальше →

Замена BIND на Unbound на Ubuntu 11.10

  • Linux
То что BIND достаточно неповоротлив знают наверно все. А тут еще захотелось чтобы и рекурсии было и производительность повыше да и кэширование не помешает. Курение гугла выдало несколько вариантов, одно заинтересовало: кеширующий и рекурсивный DNS сервер Unbound, хорошо мониторится работа в Cacti/Munin и других программах.
Итак приступаем. Исходные данные: Ubuntu Server 11.10 (LAMP+SQUID+SAMS+…
Читать дальше →

Включаем IP Forwarding в Linux

  • Linux
По умолчанию в большинстве дистрибутивов IP Forwarding выключен, но форвардинг может понадобится если на сервере будет подниматься VPN или например это будет роутер.
Проверить включен ли IP Forwarding можно так:
sysctl net.ipv4.ip_forward
cat /proc/sys/net/ipv4/ip_forward

Включить можно так (действовать будет до перезагрузки):
sysctl -w net.ipv4.ip_forward=1

или
echo 1 > /proc/sys/net/ipv4/ip_forward

Или жётско включить (действовать будет и после перезагрузки):
# grep forward /etc/sysctl.conf
net.ipv4.ip_forward = 1

В RedHat подобных:
# grep -i forward /etc/sysconfig/network
FORWARD_IPV4=true

в Debian (Ubuntu):
# grep -i forward /etc/network/options
ip_forward=yes

После правки конфигов (перманентное включение) необходимо перезапустить сеть. например, /etc/init.d/network restart
Note that: В OpenVPN используется первый способ (изменение на лету), это прописано в стартап скриптах.

Читать дальше →

Продолжаем защищаться или fail2ban на страже сервера

  • Linux
Предистория: Недавно настраивал в одной небольшой конторе внешний мультисервер — squid/postfix/apache и так далее. Доступ естественно по ssh, в конторе сразу попросили настроить защиту с мира на все что возможно. «Громкая просьба», но заказчик в данном случае прав — защита нужна, хотя бы от тупых халявщиков и прочей бредни. Естественно пожелание было учтено.
Вообще эпопея началась сразу: как только поднял ssh и proftpd (делал большую часть удаленно), в логи посыпался перебор паролей, на первом этапе быстренько подцепил sshguard — на первое время так сказать хватит. Так как в мир смотрело много сервисов — включая POP3/IMAP4 (ну возжаждал так клиент, web-морды для почты им мало) и прочее, решил поискать что-нибудь поинтересней. Google как говориться в помощь. Плутая в дебрях инета нашол простенькую, но интересную прогу из боекомплекта linux — fail2ban, быстренько пробежался по описанию — дружит почти со всем что можно и нельзя, умеет баннить и jail-ить. Ну что ж — вперед, на танки как говориться.
Читать дальше →

Повышаем защищенность php в apache

  • Linux
Те кто сталкивался с php-скриптом 57shell.php знают наверно, что неприятно когда в твоей системе роются и творят что хотят, но как правило в более чем половине случаев виноват настройщик.
Итак смотрим в чем дело: сей скрипт при внедрении на машину позволяет творить на ней все что угодно. Можно выполнять команды, редактировать и создавать файлы. Доступно содержимое каталога /root (в Ubuntu 8 и 9 по-умолчанию права над каталогом выставлены 0755(!!!) ).
Что делать?

1 — sudo chmod 700 /root (для версии Ubuntu 8/9(!))
2 — правим файл настроек php: sudo nano /etc/php5/apache2/php.ini — изменяем строки:
safe mode = off на safe mode = on
;open_basedir = на open_basedir = /var/www
3 — sudo service apache2 restart

Итог: это запретит выполнять команды на сервере с помощью php, но мы все равно сможем просматривать все файлы и редактировать через шелл файлы на которые у нас есть доступ как у пользователя/группы www-data(0644), но теперь просмотр ограничен только содержимым каталога /var/www. Конечно это не полная панацея и можно выведать пароли от баз данных ваших cms-движков, но тем не менее, это повышает защиту системы в целом и заставляет делать лишние телодвижения со стороны взломщика.

Перезагрузка Dlink DIR-100 скриптом

  • Linux
У меня 2 DIR-100 в разных районах «смотрят в Ланту». Один из них раз в недельку позволяет себе отвалить WAN без объяснения причин. И помогает бедолаге только перезагрузка.

Я решил перезагрузку автоматизировать. Ибо следить за ним визуально поднадоело.

Читать дальше →

Защита ssh и ftp от брутфорса

  • Linux
Настраивал одной конторе сервер на ubuntu 10.04 tls2, через несколько дней ребята позвонили и сказали что после публикации ssh(22) и ftp(21) в мир для своих нужд в логах посыпался перебор паролей. Ковырять port-knokking на linux было неохота, потому набрав команду
sudo apt-cache search ssh | less
бегло пробежался по тому что предлагалось. Одна утилитка меня заинтересовала —
sshguard - Protects from brute force attacks against ssh
пробежавшись в google по применению нашел простой вариант.

Читать дальше →

Генерим правильный пароль в консоли

  • Linux
Уже давно писали миру что надо пользоваться правильными паролями, а не 123456789 или QWERTY1.
Сидеть и придумывать пароли дело не благодарное, но вот имея под рукой unix/linux консоль дело можно автоматизировать. Рассмотрим 2 варианта:
1 — генерация штучных паролей через random:
</dev/urandom tr -dc '12345!@#$%qwertQWERTasdfgASDFGzxcvbZXCVB' | head -c8; echo
— суть команды в следующем — генератор случайных символов (/dev/urandom) из заданной последовательности tr -dc '12345!@#$%qwertQWERTasdfgASDFGzxcvbZXCVB' сформирует некую строку, которая будет обрезана при выводе командой head -c8 до 8 знаков (кому мало меняем 8 на нужное вам число в разумный пределах), ну а команда echo — распечатает результат. Есть неудобство — если нужно много паролей, надо генерить и копипастить каждый пароль отдельно.
2 — (например сделаем это на Ubuntu). Ставим утилиту pwgen
sudo apt-get install pwgen
— это генератор сложных паролей. При запуске без ключей получим сразу кучу 8-ми разрядных паролей:
# pwgen
oi7Iegah jo6gah2E uFe5ohni sae4Uch6 iet7Aino ieJaer2w cae0jaeT ohY2thie
oov8Caeg O......
Для задания необходимой разрядности пароля используем ключ -n и указываем количество разрядов, например 10:
pwgen -n 10
— будет выведена последовательность из 10-разрядных паролей

Sudo не видит некоторые системные команды

  • Linux
Не раз уже говорилось что безопасность прежде всего. К чему это я? Да к тому что игры с правами суперпользователя root — дело плохое и потому используется чудная команда
sudo
А так как в консоли работать хочется по-комфортнее, то запускаем MidnigthCommander
sudo mc
Но вот беда, у команды sudo есть особенность: она не видит некоторые системные команды, например размещенные в каталоге /sbin: ifconfig и другие. Беда конечно, но сделано это из соображений безопасности. Как быть? Ведь нам надо работать. Оказывается есть решение, довольно простое:
sudo su -c mc
— произойдет запуск mc от имени root без пароля, на медленных консолях используйте
sudo su -c mc -s
— отключит псевдографику и ускорит работу.

P.S.: Не забывайте только сделав всё необходимое от имени root'а своевременно выйти из режима суперпользователя.

Настройка рассылки SMS сообщений через gsm модем с linux сервера [2]

  • Linux
Топик в продолжение темы, где я обещал выложить доработанный скрипт. Последняя версия может рассылать пользователям или группе пользователей смс сообщения с использованием кириллицы и может вставлять заготовленный текст в поле сообщения. Удобно для однообразных рассылок, в которых меняется несколько символов.

Читать дальше →