Install VmWare Tools
mount /dev/cdrom /media/cdrom
cp /media/cdrom/VMware*.tar.gz /tmp
umount /media/cdrom
cd /tmp
tar xzvf VMware*.gz
cd vmware-tools-distrib/
./vmware-install.pl
cd ..
rm VMwareTools-*
rm -r vmware-*
HTTPS Apache
openssl req -new -x509 -days 365 -keyout server.key -out server.pem
После ответа на все вопросы в директории должны появиться два новых файла - server.pem и server.crt (ключ и сертификат, соответственно).
Cнимаем пароль с ключа:
cp server.key server.key.orig
openssl rsa -in server.key.orig -out server.key
rm server.key.orig
Скопируем их в /etc/ssl и назначим файлу ключа права чтения только администратору:
cp server.key /etc/ssl/private/
chmod 0600 /etc/ssl/private/server.key
2. Включаем поддержку mod_ssl в Apache
a2enmod ssl
3. Настройка mod_ssl в a Apache
sudo a2ensite default-ssl
vi etc/apache2/ sites-enabled/default-ssl
SSLCertificateKeyFile /etc/ssl/private/ssl-cert-snakeoil.key
меняем их на:
SSLCertificateFile /etc/ssl/certs/server.pem
SSLCertificateKeyFile /etc/ssl/private/server.key
/etc/init.d/apache2 restart
apache2: Could not reliably determine the server's fully qualified domain name, using 127.0.1.1 for ServerName
Не удалось достоверно определить полное доменное имя севера, используя 127.0.0.1 для ServerName.
echo "ServerName localhost" > /etc/apache2/httpd.conf
/etc/init.d/apache2 restart
Как отключить PC Speaker
modprobe -r pcspkr
спикер будет молчать до следующей перезагрузки.
2) Если же вы хотите отключить PC Speaker навсегда, нужно добавить его в «блэклист». Для этого открываем на редактирование файл /etc/modprobe.d/blacklist-pcspkr.conf:
vim /etc/modprobe.d/blacklist-pcspkr.conf
и добавляем туда строку:
blacklist pcspkr
Описание команд и параметров OpenVPN
В данной статье я попытаюсь наиболее подробно описать основные команды, используемые в OpenVPN.
Приведенные в статье команды без -- (двумя знаками дефиса) перед командой должны быть использованы в конфигурационном файле, команды с -- в начале используются только из командной строке. Подробности использования команд и их параметры - man openvpn.
remote <> - определяет удаленный конец туннеля. Могут использоваться записи IP и DNS.
local <> - определяет локальный ip или имя хоста, на котором будет работать OpenVPN. Актуально, если на локальной машине несколько адресов.
dev <> - определяет какой использовать тип устройства tun или tap. Например:
dev tun
или
dev tap
При одном из таких указаний будет использован свободный интерфейс tun или tap. Так же можно явно указывать номер виртуального интрефейса, например tun0.
port <> - указывает на каком порту будет работать OpenVPN (локально и удаленно).
proto <> - какой протокол будет использоваться. Возможные значения: udp, tcp, tcp-client, tcp-server. С первыми двумя все ясно, а на последних двух остановимся чуть подробнее:
tcp-client - сам пытается установить соединение
tcp-server - только ждет подключений
Примечательно, что с использованием протокола udp VPN будет работать чуть быстрее, чем tcp. Но в плане стабильности работы лучше выбирать tcp (как показывает практика, VPN-соединение более устойчиво)
remote-random - если указана данная опция и в random перечисленно несколько удаленных хостов, то OpenVPN в случайном порядке будет к ним подключатся. Применятся для балансировки нагрузки.
float - позволяет удаленному хосту изменять IP во время работы туннеля. Соединение при этом не разрывается.
ipchange <> - выполняет скрипт или команду указанную в <>, если IP сменился. Пример:
ipchange script-ip.sh
connect-retry <> - пробует переподключится через указанное время в секундах, если соединение было разорвано.
connect-retry-max <> - максимальное количество повторов если соединение было разорвано
resolv-retry <> - если OpenVPN не удалось узнать имя удаленного хоста по DNS, то через указанное количество секунд попытаться переподключится.
lport <> - указывает на локальный порт для использования OpenVPN
rport <> - аналогично для удаленного порта. Пример:
rport 8000 - OpenVPN будет пытаться подключится к удаленному порту 8000
nobind - использовать динамический порт для подключения (только для клиента)
shaper <> - указывает скорость передачи данных в байтах для исходящего трафика (только для клиента)
tun-mtu <> - устанавливает максимальный размер MTU. По умолчанию tun-mtu равен 1500. Использование:
tun-mtu 1200
dev-node <> - устанавливает имя виртуального интерфейса. Например:
dev-node openvpn1
ifconfig - устанавливает локальный IP и маску подсети для туннельного интерфейса. Например:
ifconfig 10.3.0.1 255.255.255.0
server <> <> - автоматически присваивает адреса всем клиентам (DHCP) в указанном диапазоне с маской сети. Данная опция заменяет ifconfig и может работаеть только с TLS-клиентами в режиме TUN, соответственно использование сертификатов обязательно. Например:
server 10.3.0.0 255.255.255.0
Подключившиеся клиенты получат адреса в диапазоне между 10.3.0.1 и 10.3.0.254.
server-bridge <> <> <> - сервер в режиме моста для TAP устройств. Пример:
server bridge 10.3.0.1 255.255.255.0 10.3.0.128 10.3.0.254
Клиентам будут выданы адреса в диапазоне 10.3.0.128 - 10.3.0.254, в качестве шлюза будет указан 10.3.0.1.
mode server - переключает OpenVPN в режим сервера (начиная с 2-й версии)
mode p2p - данная опция идет по умолчанию.
Опции в режиме сервера
push <> - передача клиенту конфигурационных параметров. Пример:
push "route 192.168.0.0 255.255.255.0"
Аналогично с помощью push клиенту могут передаватся следующие параметры:
route
route-gateway
route-delay
redirect-gateway
inactive
ping, ping-exit, ping-restart
persist-key, persist-tun
comp-lzo
dhcp-option
ip-win32
Последние две опции применимы только для Window-клиентов. Например передадим Windows-клиенту адрес DNS-сервера 11.11.11.11:
push "dhcp-option DNS 11.11.11.11"
comp-lzo - параметр сжатия трафика, идущего через виртуальный туннель. Может принимать значения yes, no, adaptive. Последнее используется по умолчанию.
Например:
comp-lzo yes - принудительно включить сжатие
comp-lzo no - принудительно отключить сжатие
comp-lzo adaptive - адаптивный режим.
Команды и параметры при работе с сертификатами x509 и параметрами шифрования
cipher <> - указываем алгоритм шифрования. Например:
cipher AES-256-CBC
Рекомендуется использование шифров в режиме CBC (Cipher Block Chaining).
keysize <> - размер ключа в битах. Например:
keysize 128
auth <> - алгоритм хэширования. Пример:
auth SHA1
df <> - файл с ключем Диффи-Хелмана
ca <> - файл сертификата для CA
cert <> - сертификат локальной машины
key <> - локальный ключ машины
tls-server - явно указывает, что данный хост является tls-server
tls-client - соответственно tls-client
pkcs12 <> - указываем файл (PKCS12), который содержит в себе сертификат, ключ и CA в одном файле. Пример:
pkcs12 /file
crl-verify <> - список отозванных сертификатов, т.е. blacklist.
no-replay - отключает защиту OpenVPN от атаки повторного воспроизведения (replay attack). Крайне не рекомендуется отключать!
no-iv - отключает использование вектора инициализации шифра (IV). Крайне не рекомендуется отключать!
Последние две опции очень сильно снижаю безопасность OpenVPN, крайне не рекомендуется их использование.
secret <> - включает режим шифрования и аутентификации на статических ключах. В качестве параметра использует заранее сгенерированный, командой --genkey, файл. Например:
secret key.txt
Все доступные алгоритмы шифрования можно просмотреть выполнив из командной строки:
openvpn --show-ciphers
Алгоритмы хэширования:
openvpn --show-digests
Показать все доступные TLS-шифры (TLS используется только для шифрования канала управления)
openvpn --show-tls
Показать все доступные крипто-устройства в системе (если такие имеются):
openvpn --show-engines
Для улучшения безопасности рекомендовано запускать все сервисы с минимальными правами. Следующими двумя командами мы укажем с правами какого пользователя и группы будет работать openvpn:
user nobody
group nogroup
Где, соответственно, nobody и nogroup имена пользователя и группы.
Команды для управления маршрутизацией
Обозначение: VPN-хост - удаленная сторона (удаленный хост)
route <> - устанавливает указанную маршрутизацию на VPN-хосте, после успешного запуска туннеля. Пример:
route 10.0.10.0 255.255.255.252
route-gateway <> - устанавливает шлюз на VPN-хосте. Пример:
route-gateway 192.168.0.22
После успешного запуска виртуального туннеля клиенту будет задан шлюз 192.168.0.22
route-delay <> - указывает подождать n-секунд перед установкой маршрутов. Пример:
route-delay 5
Т.е. через 5 секунд после установки туннеля будут заданы маршруты.
route-up <> - выполнить скрипт или программу <> после установкий маршрутов. Пример:
route-up /script.sh
redirect-gateway - установить шлюзом по умолчанию удаленный сервер. Т.е. когда удаленный пользователь подключается к нашему серверу, то ему будет задан шлюз по умолчанию на наш сервер.
Команды для управления туннелем
ping <> - указывает отсылать ping на удаленный конец тунеля после указанных n-секунд, если по туннелю не передавался никакой трафик. Пример:
ping 10
ping-restart <> - если за указанное время не было получено ни одного пакета с удаленной стороны, то перезапускать туннель. Пример:
ping-restart 60 - если в течении 60 секунд не было получено ни одного пакета, то туннель будет перезапущен.
ping-timer-rem - позволяет перезапускать туннель, только когда указан удаленный адрес.
persist-tun - данная опция оставляет без изменения устройства tun/tap при перезапуске OpenVPN.
persist-key - указывает не перечитавать файлы ключей при перезапуске туннеля.
resolv-retry <> - устанавливает время в секундах для запроса об удаленном имени хоста. Актуально только если используется DNS-имя удаленного хоста. Пример:
resolv-retry 86400
inactive <> - после n-секунд неактивности устройство TUN/TAP автоматически отключется. Пример:
inactive 120
ping-exit <> - если за указанные n-секунд не было получено ни одного пакета, то отключать OpenVPN. Пример:
ping-exit 120
keepalive <> <> - является совмещением сразу двух команд - ping и ping-restart. Использует сразу два параметра в секундах, перечисленных через пробел. Пример:
keepalive 10 180
Означает следующее: каждые 10 секунд посылать ping на удаленный хост, и, если за 180 секунд не было получено ни одного пакета - то перезапускать туннель.
persist-local-ip <> - оставлять неизменными локальный IP адрес и номер порт, если туннель был перезапущен.
persist-remote-ip <> - оставлять неизменными удаленный IP адрес и номер порт, если туннель был перезапущен.
persist-remote-ip 192.168.50.1
Методы аутентификации
auth-user-pass-verify <> <> - указывается только на серверной стороне.
<> - путь к скрипту, который будет производить авторизацию. Скрипт должен возвращать 0 если авторизация успешна, и соответственно, 1 если авторизация не успешна.
<> - метод авторизации, может быть двух типов: via-env и via-file
auth-user-pass <>- указывается на клиентской стороне. Параметр не обязателен, если он отсутствует то будет предложено ввести пару логин/пароль.
должен содержать имя пользователя и пароль в двух строчках:
username
password
client-cert-not-required - отключает авторизацию по сертификатам.
Работа с прокси
OpenVPN без проблем может работать через http и socks прокси.
http-proxy <> - указываем адрес и порт прокси-сервера.
http-proxy 192.168.0.12 8080
Если требуется авторизация на прокси-сервере:
http-proxy <> - где authfile - файл содержащий две строки (имя пользователя и пароль) или stdin (будет запрошено имя пользователя и пароль).
Так же после authfile требуется указать метод авторизации. Можно оставить auto для автоматического выбора метода авторизации или указать явно через auth-method.
auth-method может быть трех видов "none", "basic" или "ntlm".
Используется в OpenVPN начиная с версии 2.1.
http-proxy-retry - переподключатся если соединение было разорвано.
http-proxy-timeout <> - считать соедение с прокси-сервером разорванным после n-секунд неактивности. Например:
http-proxy-timeout 5
socks-proxy <> - указываем сокс-прокси сервер. Пример:
socks-proxy 192.168.0.12 8080
socks-proxy-retry - переподключатся если соединение было разорвано.
auto-proxy - автоматически определять прокси-сервер. Требуется версия OpenVPN 2.1 и выше.
Скриптинг
up <>- выполнить команду после запуска устройства TUN/TAP. Пример:
up script-up.sh
up-delay <> - подождать n-секунд перед запуском команды указанной в up. Пример:
up-delay 5
down <> - выполнить команду когда интерфейс TUN/TAP выключится. Пример:
down script-down.sh
down-pre - выполнить команду, указанную в down перед выключением интерфейса TUN/TAP
up-restart <> - выполнить команду после каждого реконнекта
route-up <> - выполнить команду после устрановки серевых маршрутов. Пример:
route-up script.sh
learn-address <> - выполнить указанную команду, если ip удаленной стороны изменился.
ipchange <> - выполнить команду, если ip сервера изменился.
client-connect <> - выполнить команду, когда клиент подключился.
client-disconnect <> - выполнить команду, когда клиент отключился.
Команды отладки и поиска неисправностей
verb <> - устанавливает уровень информативности отладочных сообщений. Может принимать параметр от 0 до 11. По умолчанию verb равен 1.
При уровне verb 5 и выше в логе будут встречатся подобные записи: RwrW. R (read), W (write) - соответственно чтение и запись. Большая буква обозначает, что пакет был считан (R) или записан (W) на виртуальном устройстве TUN/TAP, а маленькие считан (r) и записан (w) в туннеле.
mute <> - если значение установлено в 10, то в лог будет записываться только по 10 сообщений из одной категории.
Логирование
log <> - указываем лог-файл. Если данный параметр не указан, то весь вывод openvpn будет производится в stdout.
log-append <> - дописывать сообщения в лог-файл, а не перезаписывать.
status <> - указывает путь к статус-файлу, в котором содержится информация о текущих соединениях и информация о интерфейсах TUN/TAP.
В. Чем отличаются виртуальные устройства tun и tap?
О. TUN - туннель, соединение по которому указывается по типу: локальный IP < --- > удаленный IP. Например, при явном указании ifconfig:
--ifconfig 10.3.0.2 10.3.0.1
в этом примере 10.3.0.2 - локальный IP, 10.3.0.1 - удаленный IP
TAP - эмулирует виртуальную ethernet карточку, для которой требуется указывать локальный IP и маску подсети. Например:
--ifconfig 10.3.0.2 255.255.255.0
В. Для чего нужны файлы serial и index.txt при генерации ключей с easy-rsa?
О. Эти два файла используются в качестве временной базы данных, используемой при генерации ключей. Должны находиться в том каталоге, где и ключи.
DDOS
DoS-атаки подразделяются на локальные и удаленные. К локальным относятся различные эксплойты, форк-бомбы и программы, открывающие по миллиону файлов или запускающие некий циклический алгоритм, который сжирает память и процессорные ресурсы. На всем этом мы останавливаться не будем. А вот удаленные DoS-атаки рассмотрим подробнее. Они делятся на два вида:
Удаленная эксплуатация ошибок в ПО с целью привести его в нерабочее состояние.
Flood - посылка на адрес жертвы огромного количества бессмысленных (реже – осмысленных) пакетов. Целью флуда может быть канал связи или ресурсы машины. В первом случае поток пакетов занимает весь пропускной канал и не дает атакуемой машине возможность обрабатывать легальные запросы. Во втором - ресурсы машины захватываются с помощью многократного и очень частого обращения к какому-либо сервису, выполняющему сложную, ресурсоемкую операцию. Это может быть, например, длительное обращение к одному из активных компонентов (скрипту) web-сервера. Сервер тратит все ресурсы машины на обработку запросов атакующего, а пользователям приходится ждать.
В традиционном исполнении (один атакующий - одна жертва) сейчас остается эффективным только первый вид атак. Классический флуд бесполезен. Просто потому что при сегодняшней ширине канала серверов, уровне вычислительных мощностей и повсеместном использовании различных анти-DoS приемов в ПО (например, задержки при многократном выполнении одних и тех же действий одним клиентом), атакующий превращается в надоедливого комара, не способного нанести какой бы то ни было ущерб. Но если этих комаров наберутся сотни, тысячи или даже сотни тысяч, они легко положат сервер на лопатки. Толпа - страшная сила не только в жизни, но и в компьютерном мире. Распределенная атака типа "отказ в обслуживании" (DDoS), обычно осуществляемая с помощью множества зомбифицированных хостов, может отрезать от внешнего мира даже самый стойкий сервер, и единственная эффективная защита - организация распределенной системы серверов (но это по карману далеко не всем, привет Google).
Методы борьбы
Опасность большинства DDoS-атак – в их абсолютной прозрачности и "нормальности". Ведь если ошибка в ПО всегда может быть исправлена, то полное сжирание ресурсов - явление почти обыденное. С ними сталкиваются многие администраторы, когда ресурсов машины (ширины канала) становится недостаточно, или web-сайт подвергается слэшдот-эффекту (twitter.com стал недоступен уже через несколько минут после первого известия о смерти Майкла Джексона). И если резать трафик и ресурсы для всех подряд, то спасешься от DDoS, но потеряешь добрую половину клиентов.
Выхода из этой ситуации фактически нет, однако последствия DDoS-атак и их эффективность можно существенно снизить за счет правильной настройки маршрутизатора, брандмауэра и постоянного анализа аномалий в сетевом трафике. В следующей части статьи мы последовательно рассмотрим:
способы распознавания начинающейся DDoS-атаки;
методы борьбы с конкретными типами DDoS-атак;
универсальные советы, которые помогут подготовиться к DoS-атаке и снизить ее эффективность.
В самом конце будет дан ответ на вопрос: что делать, когда началась DDoS-атака.
Борьба с flood-атаками
Итак, существует два типа DoS/DDoS-атак, и наиболее распространенная из них основана на идее флуда, то есть заваливания жертвы огромным количеством пакетов. Флуд бывает разным: ICMP-флуд, SYN-флуд, UDP-флуд и HTTP-флуд. Современные DoS-боты могут использовать все эти виды атак одновременно, поэтому следует заранее позаботиться об адекватной защите от каждой из них.
1. ICMP-флуд.
Очень примитивный метод забивания полосы пропускания и создания нагрузок на сетевой стек через монотонную посылку запросов ICMP ECHO (пинг). Легко обнаруживается с помощью анализа потоков трафика в обе стороны: во время атаки типа ICMP-флуд они практически идентичны. Почти безболезненный способ абсолютной защиты основан на отключении ответов на запросы ICMP ECHO:
# sysctl net.ipv4.icmp_echo_ignore_all=1
Или с помощью брандмауэра:
# iptables -A INPUT -p icmp -j DROP --icmp-type 8
2. SYN-флуд.
Один из распространенных способов не только забить канал связи, но и ввести сетевой стек операционной системы в такое состояние, когда он уже не сможет принимать новые запросы на подключение. Основан на попытке инициализации большого числа одновременных TCP-соединений через посылку SYN-пакета с несуществующим обратным адресом. После нескольких попыток отослать ответный ACK-пакет на недоступный адрес большинство операционок ставят неустановленное соединение в очередь. И только после n-ой попытки закрывают соединение. Так как поток ACK-пакетов очень велик, вскоре очередь оказывается заполненной, и ядро дает отказ на попытки открыть новое соединение. Наиболее умные DoS-боты еще и анализируют систему перед началом атаки, чтобы слать запросы только на открытые жизненно важные порты. Идентифицировать такую атаку просто: достаточно попробовать подключиться к одному из сервисов. Оборонительные мероприятия обычно включают в себя:
Увеличение очереди "полуоткрытых" TCP-соединений:
# sysctl -w net.ipv4.tcp_max_syn_backlog=1024
Уменьшение времени удержания "полуоткрытых" соединений:
# sysctl -w net.ipv4.tcp_synack_retries=1
Включение механизма TCP syncookies:
# sysctl -w net.ipv4.tcp_syncookies=1
Ограничение максимального числа "полуоткрытых" соединений с одного IP к конкретному порту:
# iptables -I INPUT -p tcp --syn --dport 80 -m iplimit --iplimit-above
10 -j DROP
3. UDP-флуд.
Типичный метод захламления полосы пропускания. Основан на бесконечной посылке UDP-пакетов на порты различных UDP-сервисов. Легко устраняется за счет отрезания таких сервисов от внешнего мира и установки лимита на количество соединений в единицу времени к DNS-серверу на стороне шлюза:
# iptables -I INPUT -p udp --dport 53 -j DROP -m iplimit --iplimit-above 1
4. HTTP-флуд.
Один из самых распространенных на сегодняшний день способов флуда. Основан на бесконечной посылке HTTP-сообщений GET на 80-ый порт с целью загрузить web-сервер настолько, чтобы он оказался не в состоянии обрабатывать все остальные запросы. Часто целью флуда становится не корень web-сервера, а один из скриптов, выполняющих ресурсоемкие задачи или работающий с базой данных. В любом случае, индикатором начавшейся атаки будет служить аномально быстрый рост логов web-сервера.
Методы борьбы с HTTP-флудом включают в себя тюнинг web-сервера и базы данных с целью снизить эффект от атаки, а также отсеивание DoS-ботов с помощью различных приемов. Во-первых, следует увеличить максимальное число коннектов к базе данных одновременно. Во-вторых, установить перед web-сервером Apache легкий и производительный nginx – он будет кэшировать запросы и отдавать статику. Это решение из списка "must have", которое не только снизит эффект DoS-атак, но и позволит серверу выдержать огромные нагрузки. Небольшой пример:
# vi /etc/nginx/nginx.conf
# Увеличиваем максимальное количество используемых файлов
worker_rlimit_nofile 80000;
events {
# Увеличиваем максимальное количество соединений
worker_connections 65536;
# Использовать эффективный метод epoll для обработки соединений
use epoll;
}
http {
gzip off;
# Отключаем таймаут на закрытие keep-alive соединений
keepalive_timeout 0;
# Не отдавать версию nginx в заголовке ответа
server_tokens off;
# Сбрасывать соединение по таймауту
reset_timedout_connection on;
}
# Стандартные настройки для работы в качестве прокси
server {
listen 111.111.111.111 default deferred;
server_name host.com www.host.com;
log_format IP $remote_addr;
location / {
proxy_pass http://127.0.0.1/;
}
location ~* \.(jpeg|jpg|gif|png|css|js|pdf|txt|tar)$ {
root /home/www/host.com/httpdocs;
}
}
В случае необходимости можно задействовать nginx-модуль ngx_http_limit_req_module, ограничивающий количество одновременных подключений с одного адреса (http://sysoev.ru/nginx/docs/http/ngx_http_limit_req_module.html). Ресурсоемкие скрипты можно защитить от ботов с помощью задержек, кнопок "Нажми меня", выставления кукисов и других приемов, направленных на проверку "человечности".
Универсальные советы
Чтобы не попасть в безвыходное положение во время обрушения DDoS-шторма на системы, необходимо тщательным образом подготовить их к такой ситуации:
Все сервера, имеющие прямой доступ во внешнюю сеть, должны быть подготовлены к простому и быстрому удаленному ребуту (sshd спасет отца русской демократии). Большим плюсом будет наличие второго, административного, сетевого интерфейса, через который можно получить доступ к серверу в случае забитости основного канала.
ПО, используемое на сервере, всегда должно находиться в актуальном состоянии. Все дырки - пропатчены, обновления установлены (простой, как сапог, совет, которому многие не следуют). Это оградит тебя от DoS-атак, эксплуатирующих баги в сервисах.
Все слушающие сетевые сервисы, предназначенные для административного использования, должны быть спрятаны брандмауэром ото всех, кто не должен иметь к ним доступ. Тогда атакующий не сможет использовать их для проведения DoS-атаки или брутфорса.
На подходах к серверу (ближайшем маршрутизаторе) должна быть установлена система анализа трафика (NetFlow в помощь), которая позволит своевременно узнать о начинающейся атаке и вовремя принять меры по ее предотвращению.
Добавь в /etc/sysctl.conf следующие строки:
# vi /etc/sysctl.conf
# Защита от спуфинга
net.ipv4.conf.default.rp_filter = 1
# Проверять TCP-соединение каждую минуту. Если на другой стороне - легальная
машина, она сразу ответит. Дефолтовое значение - 2 часа.
net.ipv4.tcp_keepalive_time = 60
# Повторить пробу через десять секунд
net.ipv4.tcp_keepalive_intvl = 10
# Количество проверок перед закрытием соединения
net.ipv4.tcp_keepalive_probes = 5
Следует отметить, что все приемы, приведенные в прошлом и этом разделах, направлены на снижение эффективности DDoS-атак, ставящих своей целью израсходовать ресурсы машины. От флуда, забивающего канал мусором, защититься практически невозможно, и единственно правильный, но не всегда осуществимый способ борьбы заключается в том, чтобы "лишить атаку смысла". Если ты заимеешь в свое распоряжение действительно широкий канал, который легко пропустит трафик небольшого ботнета, считай, что от 90% атак твой сервер защищен. Есть более изощренный способ защиты. Он основан на организации распределенной вычислительной сети, включающей в себя множество дублирующих серверов, которые подключены к разным магистральным каналам. Когда вычислительные мощности или пропускная способность канала заканчиваются, все новые клиенты перенаправляются на другой сервер (или же постепенно "размазываются" по серверам по принципу round-robin). Это невероятно дорогая, но очень стойкая структура, завалить которую практически нереально.
Другое более-менее эффективное решение заключается в покупке дорогостоящих хардварных систем Cisco Traffic Anomaly Detector и Cisco Guard. Работая в связке, они могут подавить начинающуюся атаку, но, как и большинство других решений, основанных на обучении и анализе состояний, дают сбои. Поэтому следует хорошенько подумать перед тем, как выбивать из начальства десятки тысячи долларов на такую защиту.
Кажется, началось. Что делать?
Перед непосредственным началом атаки боты "разогреваются", постепенно наращивая поток пакетов на атакуемую машину. Важно поймать момент и начать активные действия. Поможет в этом постоянное наблюдение за маршрутизатором, подключенным к внешней сети (анализ графиков NetFlow). На сервере-жертве определить начало атаки можно подручными средствами.
Наличие SYN-флуда устанавливается легко - через подсчет числа "полуоткрытых" TCP-соединений:
# netstat -na | grep ":80\ " | grep SYN_RCVD
В обычной ситуации их не должно быть совсем (или очень небольшое количество: максимум 1-3). Если это не так - ты атакован, срочно переходи к дропанью атакующих.
С HTTP-флудом несколько сложнее. Для начала нужно подсчитать количество процессов Apache и количество коннектов на 80-ый порт (HTTP-флуд):
# ps aux | grep httpd | wc -l
# netstat -na | grep ":80\ " | wc -l
Значения, в несколько раз превышающие среднестатистические, дают основания задуматься. Далее следует просмотреть список IP-адресов, с которых идут запросы на подключение:
# netstat -na | grep ":80\ " | sort | uniq -c | sort -nr | less
Однозначно идентифицировать DoS-атаку нельзя, можно лишь подтвердить свои догадки о наличии таковой, если один адрес повторяется в списке слишком много раз (да и то, это может говорить о посетителях, сидящих за NAT'ом). Дополнительным подтверждением будет анализ пакетов с помощью tcpdump:
# tcpdump -n -i eth0 -s 0 -w output.txt dst port 80 and host IP-сервера
Показателем служит большой поток однообразных (и не содержащих полезной информации) пакетов от разных IP, направленных на один порт/сервис (например, корень web-сервера или определенный cgi-скрипт).
Окончательно определившись, начинаем дропать неугодных по IP-адресам (будет гораздо больше эффекта, если ты сделаешь это на маршрутизаторе):
# iptables -A INPUT -s xxx.xxx.xxx.xxx -p tcp --destination-port http -j
DROP
Или сразу по подсетям:
# iptables -A INPUT -s xxx.xxx.0.0/16 -p tcp --destination-port http -j
DROP
Это даст тебе некоторую фору (совсем маленькую; зачастую IP-адрес источника спуфится), которую ты должен использовать для того, чтобы обратиться к провайдеру/хостеру (с приложенными к сообщению логами web-сервера, ядра, брандмауэра и списком выявленных тобой IP-адресов). Большинство из них, конечно, проигнорируют это сообщение (а хостинги с оплатой трафика еще и порадуются - DoS-атака принесет им прибыль) или просто отключат твой сервер. Но в любом случае это следует сделать обязательно, – эффективная защита от DDoS возможна только на магистральных каналах. В одиночку ты справишься с мелкими нападками, направленными на истощение ресурсов сервера, но окажешься беззащитным перед более-менее серьезным DDoS'ом.
Как добавить Skype-контакты в Pidgin.
Для добавления Skype-контактов в Pidgin, воспользуемся Skype API Plugin для Pidgin, который поможет нам реализовать наше “желание”.
Скачаем его, выполнив в консоли команду:
$ wget http://eion.robbmob.com/skype4pidgin.deb
Установим пакет skype4pidgin, выполнив:
$ sudo dpkg -i skype4pidgin.deb
Теперь, для корректной работы, нам необходимо выкачать и добавить в систему библиотеку libskype.so.
Для 32-битных систем, она доступна здесь. Владельцам 64-битных нужна эта ссылка.
После того, как мы успешно скачали необходимую нам библиотеку (например при помощи той же команды wget), необходимо поместить ее в каталог /usr/lib/purple-2/.
Теперь, когда все сделано, просто перезапустите Pidgin и выберите в его опциях возможность использования Skype. И это будет работать!
Удаление файлов конфигурации от удаленных ранее пакетов
# dpkg -l | grep '^rc'
а удалить их:
# dpkg -P имя_пакета
или для большого количества:
# dpkg -l | awk '/^rc/{print $2}' | xargs dpkg -P
Установка webmin
cd /root
wget http://www.webmin.com/jcameron-key.asc
apt-key add jcameron-key.asc
Добавляем источник приложений
vi /etc/apt/sources.list
В текстовом редакторе добавляем строку
deb http://download.webmin.com/download/repository sarge contrib
Сохраняем, закрываем редактор. Обновляем и устанавливаем
apt-get update
apt-get -y install webmin
Осталось только открыть любимый браузер, и перейти по адресу https://localhost:10000/
декодер BIOS
dmidecode- type {KEYWORD / Number }
В качестве ключевого слова (KEYWORD) могут использоваться:
bios
system
baseboard
chassis
processor
memory
cache
connector
slot
Для получения более подробной информации вы можете использовать один извозможных типов DMI, при этом команда dmidecode приобретет следующий вид:
$ dmidecode -type {Number}
где {Number} - цифровое обозначение типа DMI.
типы DMI с их кратким описанием:
0 BIOS
1 Система
2 Материнская плата
3 Корпус
4 Процессор
5 Контроллер памяти
6 Модуль памяти
7 Кэш-память
8 Разъемы портов
9 Системные разъемы
10 Интегрированные устройства
11 OEM строка
12 Опции системной конфигурации
13 Язык BIOS
14 Групповые ассоциации
15 Журнал системных событий
16 Массив физической памяти
17 Устройство памяти
18 32-битные ошибки памяти
19 Отображаемый адрес массива памяти
20 Отображаемый адрес устройства памяти
21 Встроенное указывающее устройство
22 Портативная батарея
23 Перезапуск системы
24 Аппаратная безопасность
25 Система управления электропитанием
26 Датчик напряжения
27 Охлаждающее устройство
28 Датчик температуры
29 Датчик текущих параметров электропитания
30 Внешний удаленный доступ
31 Службы целостности загрузки
32 Загрузка системы
33 64-битовые ошибки памяти
34 Управляющее устройство
35 Компоненты управляющего устройства
36 Пороговые данные управляющего устройства
37 Канал памяти
38 IPMI Устройство
39 Блок питания
например, для отображения информации о блоке питания, введите:
# dmidecode --type 39
для отображения информации о процессоре, введите:
# dmidecode --type processor
vim: избавляемся от dos-овых концов строк (\r\n -> \n)
:set ff=unix
:w
Если vim автоматически не распознал DOS line ends, то в конце строк будут символы ^M. Удалить их можно простой заменой:
:%s/^M//g
Символ ^M при этом вводится как Ctrl-V Ctrl-M.
Настройка .vimrc
set tabstop=4
set shiftwidth=4
set smarttab
set et — включим автозамену по умолчанию
set wrap — попросим Vim переносить длинные строки
set ai — включим автоотступы для новых строк
set cin — включим отступы в стиле Си
Далее настроим поиск и подсветку результатов поиска и совпадения скобок
set showmatch
set hlsearch
set incsearch
set ignorecase
set lz — ленивая перерисовка экрана при выполнении скриптов
Показываем табы в начале строки точками
set listchars=tab:··
set list
syntax on - включить подсветку синтаксиса
Anonymous SSH Sessions With TOR
vi /etc/apt/sources.list
deb http://mirror.noreply.org/pub/tor lenny main
apt-key adv --recv-keys --keyserver subkeys.pgp.net 0x94C09C7F
apt-get update && apt-get install -y tor
apt-get install -y connect-proxy
Setup OpenSSH to use TOR for all connections
vi ~/.ssh/config
Host *
CheckHostIP no
Compression yes
Protocol 2
ProxyCommand connect -4 -S localhost:9050 $(tor-resolve %h localhost:9050) %p
Set up OpenSSH to use TOR for a specific connection
Host mydomain
HostName mydomain.com
User myaccount
CheckHostIP no
Compression yes
Protocol 2
ProxyCommand connect -4 -S localhost:9050 $(tor-resolve %h localhost:9050) %p
Ubucleaner. Простая очистка системы.
Возможности:
Очистка кеша apt
Удаление конфигурационных файлов удаленных программ
Удаление неиспользуемых ядер (работает только на Debian-based дистрибутивах)
Очистка корзин каждого пользователя (включая root).
Скрипт предполагает использование aptitude, а не apt-get или dpkg. Если вы хотите их использовать просто отредактируйте соответсвующие строки.
Использование довольно тривиально.
Качаем файл
wget http://www.opendesktop.org/CONTENT/content-files/71529-ubucleaner.sh
Даем права на запуск:
sudo chmod +x 71529-ubucleaner.sh
Запускаем:
sudo ./71529-ubucleaner.sh
Удаленное выключение Windows из под Linux
На Linux машине установлена и настроена Samba.
net rpc SHUTDOWN -C "enter a comment to display at shutdown" -f -I x.x.x.x -U username%password
x.x.x.x - ip :-)
ID3 теги в mp3
find -iname '*.mp3' -print0 | xargs -0 mid3iconv -eCP1251 --remove-v1
Перекодируем все файлы с тегами в кодировке cp1251 в кодировку utf8, попутно удаляем тег первой версии, дабы Amarok не обращал на него внимания.
Клонирование Debian
На исходной системе:
dpkg --get-selections > installed-software.log
На новой системе:
sudo dpkg --set-selections
Осталось только скопировать конфигурационные файлы и отредактировать их.
Информация выводимая командой ntpq -p
пробел - слишком большой страт, цикл или явная ошибка
x - фальшивый источник по алгоритму пересечения
. - исключен из списка кандидатов из-за большого расстояния
- - удалено из списка кандидатов алгоритмом кластеризации
+ - входит в конечный список кандидатов
# - выбран для синхронизации, но есть 6 лучших кандидатов
* - выбран для синхронизации
o - выбран для синхронизации, но используется PPS
remote - имя удаленного ntp сервера. Если использовать ключик -n, то будет показан IP
refid - показывает откуда этот сервер берет время. Тут может быть имя (или IP) другого сервера или что то типа .GPS., .PPS. и т. п.
st - Stratum - слой в котором работает данный сервер, число от 1 до 16 указывающее удаление от источника синхронизации (например GPS или PPS). Слой данного сервера на 1 больше слоя сервера по которому идет синхронизацию.
t - Тип удаленного сервера (local, unicast, multicast or broadcast)
when - сколько секунд назад был получен последний пакет от данного сервера
poll - период опроса сервера, секунд.
reach - Шестнадцатеричное представление массива из 8-ми бит, в котором фиксируется 8 последних попыток синхронизации. Если попытка была успешной, то устанавливается 1. Значение 377 говорит о том, что все 8 последних попыток были удачными.
delay - вычисленная задержка ответов от сервера (RTT) в миллисекундах
offset - разница во времени между локальным и удаленным сервером, мс. Одно из наиболее важных значений. Чем оно меньше тем точнее время.
jitter - дисперсия отклонения удаленных часов относительно локальных, вычисленная по нескольким последним запросам, мс. Чем меньше это значение тем более точная возможно синхронизация.
Подмена time.windows.com локальным ntp-сервером
На DNS сервере создадим интересующую нас зону следующего содержания:
/etc/bind/zones/prime/time.windows.com
; time.windows.com.
$TTL 86400
@ in soa time.windows.com. hostmaster.office.example. (
2009060200 ;serial
8H ;refresh
2H ;retry
1W ;expiration
1D ) ;minimum
ns ns.serv.example.
time.windows.com. a 192.168.0.2
где 192.168.0.2 — ip-адрес локального ntp-сервера
В конфигурационный файл /etc/named.conf добавляем строки:
zone "time.windows.com" in {
type master;
file "prime/time.windows.com";
};
Перегружаем Bind:
rndc reload
Если все правильно в логе /var/log/messages появится подобная строчка:
Jun 2 09:49:09 minotaur named[3930]: zone time.windows.com/IN: loaded serial 2009060200
ifconfig
1. Просмотр настроек для сетевого интерфейса
При вызове команды Ifconfig без аргументов мы получим список всех активных интерфейсов. Если в качестве аргументы вы укажите имя интерфейса, отобразиться только статистика по данном интерфейсу.
eth0 Link encap:Ethernet HWaddr 00:2D:32:3E:39:3B
inet addr:192.168.2.2 Bcast:192.168.2.255 Mask:255.255.255.0
inet6 addr: fe80::21d:92ff:fede:499b/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:977839669 errors:0 dropped:1990 overruns:0 frame:0
TX packets:1116825094 errors:8 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:2694625909 (2.5 GiB) TX bytes:4106931617 (3.8 GiB)
Interrupt:185 Base address:0xdc00
2. Отображение всех интерфейсов, включая отключенные
3. Выключаем интерфейс
4. Запускаем интерфейс
5. Назначаем интерфейсу IP адрес
# ifconfig eth0 192.168.2.2
Изменим сетевую маску на интерфейсе eth0.
# ifconfig eth0 netmask 255.255.255.0
Изменим бродкаст адрес для интерфейса eth0.
# ifconfig eth0 broadcast 192.168.2.255
Назначаем IP адрес, маску и бродкаст одной командой.
# ifconfig eth0 192.168.2.2 netmask 255.255.255.0 broadcast 192.168.2.255
6. Изменяем MTU
# ifconfig eth0 mtu XX
7. Promiscuous mode
Следующуая команда переводи интерфейс в promiscuous mode.
# ifconfig eth0 promisc
Следующуая команда переводи интерфейс в нормальный режим.
# ifconfig eth0 -promisc