четверг, 18 октября 2012 г.

iptables защита ssh от перебора паролей

Правила хитрые, но с комментариями. По сути тут даже не защита от перебора паролей, а полный запрет для всех чужих IP, разрешен лишь белый список и всего 3 попытки ввести неверный пароль.
Скрипт - bash.

#!/bin/bash
# Даем 3 попытки стукнуться в ssh, иначе баним на 10 минут
iptables -A INPUT -p TCP -i eth0 --syn --dport 22 -m recent --name radiator --set
iptables -A INPUT -p TCP -i eth0 --syn --dport 22 -m recent --name radiator --update --seconds 600 --hitcount 2 -j DROP

## Местоположение файлов
WHITELIST=guest.txt

## Белый список ip, с которых можно зайти по ssh:
for x in `grep -v ^# $WHITELIST | awk '{print $1}'`; do
echo "Разрешение $x..."
iptables -A INPUT -p tcp --dport 22 --src $x -j ACCEPT
done

## Блокируем все IP, которые не в белом списке
iptables -A INPUT -p tcp --dport 22 -j DROP

## Даем 3 попытки стукнуться в ssh, иначе баним на 10 минут
#iptables -A INPUT -p TCP -i eth0 --syn --dport 22 -m recent --name radiator --set
#iptables -A INPUT -p TCP -i eth0 --syn --dport 22 -m recent --name radiator --update --seconds 600 --hitcount 2 -j DROP
exit 0


Небольшое пояснение - ssh должен быть запущен на стандартном, 22 порту. Правила смотрят на количество отправленных пакетов syn - установку соединения. Если соединение не удалось установить - значит ssh сбрасывает его, обычно из-за неверного пароля или имени пользователя. Как видно из правила, мы слушаем интерфейс eth0, если сервер смотрит в сеть другим интерфейсом - его надо изменить. В файл guest.txt можно класть как одиночные ip, так и сразу с маской сети, главное - каждый ip или подсеть в новой строке.
Так же можно защищать и FTP, и любые другие подобные сервисы, если по каким-то причинам не установлен fail2ban. Правило было подсказано на linux.org.ru и доработано мной

Закрыл apache в связке с nginx

Собственно, все очень просто. Допустим, apache у нас на порту 81, nginx - 80. А IP сервера - 1.2.3.4. Тогда правила выглядят так:

iptables -A INPUT -p tcp --src 127.0.0.1 --dport 81 -j ACCEPT  
iptables -A INPUT -p tcp --src 1.2.3.4 --dport 81 -j ACCEPT
iptables -A INPUT -p tcp --dport 81 -j DROP

Собственно обязательно разрешить оба варианта - и localhost и внешний IP сервера, чтобы он как бы сам на себя мог ходить.
Не помню, хоть убейте, как UDP резать. 

пятница, 7 сентября 2012 г.

Cisco и MSS


Собственно, случай с работы - стоит 2 Cisco 1760. На каждой подключен провайдер через ADSL, в моем случае - Атлант-Телеком и Byfly. С byfly творятся странные вещи - любой сайт прекрасно пингуется, как с операционной системы, так и с cisco, а вот в браузере половина сайтов не открывается. Иногда страница вообще жутко тупит и думает, иногда загрузится половина страницы и дальше видно, что браузер ожидает ответа от какого-нибудь поддомена. Подсказали мне, что собака зарыта в MSS.

MSS – это Максимальный Размер Сегмента ( Maximum Segment Size ). В момент инициализации tcp сессии устройства договариваются размере пакетов, который не будет превышаеть определенное значение – MSS. В моем случае, сервер посылает слишком длинный пакет, в ответ на размер пакета в cisco. Возможно где-то фаерволл или оборудование провайдера не пропускает слишком длинные пакеты, возможно что-то еще. Возможно, сам web сервер работает некорректно. Другой причиной может быть активность вируса или внешней программы, которые внедряют свои данные в чужой трафик. 
Исправляется с помощью
int dialer1
ip tcp adjust-mss 1452


Вероятно, необходимо поиграться с mss в сторону уменьшения, для корректной работы.


среда, 29 августа 2012 г.

Windows 7 USB - создаем загрузочную флешку в Linux

Понадобилось сегодня установить Windows 2008R2 на локальный сервер, а заодно сделать флешку с Windows 7 для рабочих компьютеров, поскольку в офисе почти все компьютеры без привода. Из-за под windows делать загрузочную флешку очень просто - есть куча простых утилит, есть и command line, о которой расскажу в следующей записи. У меня на рабочем компьютере стоит CentOS, поэтому обычные утилиты не подходят.

Нам понадобится лишь установить ms-sys - это установочник загрузчика Windows 7 на флешку.
# yum install ms-sys

Вернемся пока к нашей флешке. Допустим, в системе флешка наша /dev/sdb. Конкретно букву флешки можно посмотреть через
# df -h

Вывод выглядит примерно так:
Файловая система      Разм  Исп  Дост  Исп% смонтирована на
/dev/hda1             6,1G  4,4G  1,8G  72% /
/dev/hda4              22G   14G  7,8G  63% /home
/dev/sdb                4G    4G    0G  100% /media/New Volume

Создадим файловую систему NTFS на флешке:
# mkfs.ntfs -f /dev/sdb

Примонтируем образ:
# mount -o loop win7.iso /mnt/iso

Дальше скопируем файлы из с /mnt/iso на флешку любым удобным способом (cp, mv, mc, rsync - это не существенно)
Записываем Windows 7 MBR(загрузочную запись) на usb-накопитель:
# ms-sys -7 /dev/sdb

После перезагрузки, выбираем загрузку с флешки и устанавливаем Windows 7.
Как ни странно, dd не справляется с копированием образа - компьютер не загружается.

суббота, 25 августа 2012 г.

Горячая замена - где бывает?

Горячая замена (Hot Swap) — термин, обозначающий, что оборудование можно отключать без остановки сервера и отключения питания.

Горячую замену поддерживают такие стандарты: PCMCIA, USB, FireWire, Fibre Channel и eSATA. Это flash-накопители, некоторые жесткие диски, карты расширения форматов PCI-X, PCI Express, ExpressCard (PCMCIA, также ранее называемые PC Cards), находящие применение в ноутбуках и даже некоторые блоки питания (актуально для серверов).
Не поддерживает полноценную горячую замену дисковые интерфейсы SATA и полностью не поддерживает протокол IDE (IDE поддерживает горячее подключение).
Однако, личный опыт говорит о том, что SATA жесткий диск, с переходником для SAS, вполне умеет горячую замену. Вероятно, в режиме AHCI SATA тоже умеет горячую замену, но я не проводил опыты.

hint: Многие устройства, которые поддерживают горячую замену, имеют парочку контактов, которые первыми входят в контакт с гнездом, обеспечивая таким образом заземление.

CentOS настройка сети

Файл конфигурации сети в CentOS сильно отличается от такого в Debian. Сначала сделаем ifconfig и посмотрем наши интерфейсы. Допустим, кабель вставлен в eth0. Тогда:
nano /etc/sysconfig/network-scripts/ifcfg-eth0



Сам файл конфигурации сети выглядит так:
DEVICE=eth0
BOOTPROTO=static
DHCPCLASS=
HWADDR=00:00:17:EA:18:99
ONBOOT=yes
TYPE=Ethernet
IPADDR=192.168.1.2
NETMASK=255.255.255.0
BROADCAST=192.168.1.255
NETWORK=192.168.1.0
Сохраним изменения.
Сеть мы настроили, не хватает только шлюза и DNS серверов.
Шлюз укажем в файле:
nano /etc/sysconfig/network
Таким образом:
GATEWAY=192.168.1.1

Осталось указать DNS. Их нужно указывать в файле
nano /etc/resolv.conf
В таком виде:
nameserver 127.0.0.1
nameserver 192.168.0.1

Перезапустим сеть:
ifdown eth0
ifup eth0
Либо же
service network restart


Для сравнения - файл конфигурации сети в Ubuntu:
nano /etc/network/interfaces

auto eth0
ifcae eth0 inet static
    address 192.168.1.2
    netmask 255.255.255.0
    network 192.168.1.0
    broadcast 192.168.1.255
    gateway 192.168.1.1

пятница, 17 августа 2012 г.

Нативная ZFS на Linux


ZFS (Zettabyte File System) — файловая система, изначально созданная в Sun Microsystems для операционной системы Solaris. Эта файловая система поддерживает большие объёмы данных, объединяет концепции файловой системы и менеджера логических дисков (томов) и физических носителей, новаторскую структуру данных на дисках, легковесные файловые системы (англ. lightweight filesystems), а также простое управление томами хранения данных. ZFS является проектом с открытым исходным кодом и лицензируется под CDDL (Common Development and Distribution License).

Максимальные возможности

ZFS — это 128-битная файловая система, что позволяет ей хранить в 18,4 × 1018 раз больше данных, чем нынешние 64-битные системы. ZFS спроектирована так, чтобы её ограничения были настолько малы, что они никогда не встретятся на практике. Как заявил руководитель проекта Бонвик, «заполнение 128-битных файловых систем превысит квантовые возможности хранения данных на Земле.
Некоторые теоретические пределы в ZFS:
  • 248 — Количество снимков (snapshot) в любой файловой системе (2 × 1014)
  • 248 — Количество файлов в любой индивидуальной файловой системе (2 × 1014)
  • 16 эксабайт (264 byte) — Максимальный размер файловой системы
  • 16 эксабайт (264 byte) — Максимальный размер одного файла
  • 16 эксабайт (264 byte) — Максимальный размер любого атрибута
  • 3 × 1023 петабайт — Максимальный размер любого пула хранения (zpool)
  • 256 — Количество атрибутов файла (фактически ограничивается 2 48 на количество файлов в файловой системе ZFS)
  • 256 — Количество файлов в директории (реально ограничен 2 48 на количество файлов в файловой системе ZFS)
  • 264 — Количество устройств в любом zpool
  • 264 — Количество zpool’ов в системе
  • 264 — Число файловых систем в zpool

Дополнительные возможности

  • Конкретный I/O приоритет со сроком планирования.
  • Оптимальный в глобальном масштабе I/O сортировки и агрегации (aggregation).
  • Несколько независимых потоков с упреждением автоматического обнаружения длины и шага.
  • Параллельная, постоянная времени операций с каталогами.
  • Интеллектуальная очистка и коррекция.
  • Загрузка и совместное использование дисков в пуле.
  • Те же блоки: Метаданные воспроизводятся внутри пула, два или три раза (согласно значимости метаданных). Если пул состоит из нескольких устройств, ZFS будет пытаться воспроизводить данные на разных устройствах. Даже в пуле без избыточности можно потерять данные, но даже если Вы обнаружите поврежденные секторы, то метаданные должны создать достаточную безопасность, даже при таком сценарии.
  • Дизайн ZFS (копия-по-записи + uberblocks) даёт бо́льшую безопасность при использовании дисков с возможностью записи в кэш, то есть если они реагируют и повинуются на кэш-флэш команды выданные ZFS. Эта особенность обеспечивает безопасность и значительное повышение производительности по сравнению с другими ФС.
  • Учитывая предыдущий пункт, когда все диски находятся в ZFS пуле, ZFS автоматически включает функцию записи в кэш для них. Это не применимо, если не только ZFS одновременно управляет дискретными разделами диска, например если вы используете ФС без функции безопасной записи в кеш, например UFS (и множество других).
Информация про ZFS взята с wikipedia

А теперь самое "вкусное":
Долгое время в Linux перенос ZFS на уровень ядра считался юридически невозможным из-за несовместимости лицензий CDDL, под юрисдикцией которой находится ZFS, и GNU GPL, под юрисдикцией которой находится Linux. Однако в мае 2010 года Брайан Белендорф (Brian Behlendorf) представил новую версию проекта, в рамках которого ведется работа по реализации родной поддержки файловой системы ZFS для Linux. Для обхода лицензионного ограничения Белендорф воспользовался простым и очевидным методом — он решил распространять свой продукт целиком под лицензией CDDL в виде отдельно загружаемого модуля, который поставляется отдельно от ядра.
И самое-самое главное:

http://zfsonlinux.org/faq.html#HowDoIInstallIt

вторник, 14 августа 2012 г.

Скриншот через консоль

Открыл консольную утилиту xwd, позволяющую делать снимки экрана. Xwd весит 25Кб и должна входить в состав Х11.

Пример использования xwd:
$ xwd -root > file.xwd

Формат изображения понимается Gimp-ом и утилитой convert из ImageMagick.
После такой команды файл на выходе будет в формате PNG:
$ xwd -root | convert - file.png

Если xwd запустить без ключа -root, то будет предложено выбрать окно, которое нужно заскриншотить.
Если нету Gimp-а и ImageMagick-а, посмотреть файл XWD можно утилитой xwud:

$ xwud -in file.xwd

среда, 8 августа 2012 г.

iptables vs php-proxy

Достану из заначки свой iptables:

#!/bin/bash
WHITELIST=guest.txt
iptables -A OUTPUT --dst 127.0.0.0/8 -m owner --uid-owner 33 -p ALL -m state --state RELATED,ESTABLISHED,NEW -j ACCEPT

       for x in `grep -v ^# $WHITELIST | awk '{print $1}'`; do
iptables -A OUTPUT -p tcp -m state --state NEW -m owner --uid-owner 33 --dst $x -j ACCEPT
       done

iptables -A OUTPUT -p tcp -m state --state NEW -m owner --uid-owner 33 -m multiport --dport 80,443 -j DROP
exit 0



А теперь - обьясню, что это. Есть такая гадкая вещь - php-proxy. Хостеры явно ее не любят. В файл guest.txt кладем ip или диапазоны, куда php прокся может ходить - к примеру, это какие-то локальные зоны или прочее.
Затем: разрешаем apache (uid = 33) ходить на localhost, то есть самостоятельно устанавливать соединения (на основе этого и работают php-proxy).
Затем из файла с разрешенными диапазонами построчно вбиваем правила, на какие ip наш apache может устанавливать соединения, иначе говоря - куда наша php-proxy может зайти.

И финал - запрещаем устанавливать новые соединения на порты 80 (http) и 443 (https) юзеру с uid=33 (apache).

При желании uid может быть любым, однако если у вас apache-itk - придеться помучаться, ибо uid будет не 33, а индивидуальный для каждого юзера.
Входящий трафик так резать не получиться, только исходящий, что в случае php-proxy нам и необходимо

О файловых системах дума ночная

Ненавижу ext4. Запомнилась она падениями, причем часто с потерей данных.
Однажды дома моргнул свет, это было во времена 8й Ubuntu - раздел с ubuntu стал девстенно чист. Трижды падало на продакшен-сервере, правда там специфические условия - mdadm (софтварный raid1) + примерно 40 миллионов мелких файлов. От такого на интенсивном чтении/записи сыпались иноды и сервер ложился.
Последний раз - я был в Минске, в офисе моргнул свет и локальный сервер лишился инфы на диске. Сейчас на локальном сервере стоит FreeBSD + ZFS Raid Z. А на продакшене - ext3, она не подводила еще.

понедельник, 6 августа 2012 г.

Dell PowerEdge 2950

Приехало 4 таких игрушки - сервер Dell PowerEdge 2950.
2 Unit, 6 HDD 3.5", железный рейд, ip-kvm, 2 блока питания по 750 ватт или 1000 ватт, в зависимости от сервера. 2 quad Xeon E5450, 16 Gb DDRII ECC FB-DIMM, 2х1 gbit ethernet.

Общие впечатления:
Можно на горячую менять блоки питания, винчестеры. Через специальную небольшую плату ставяться обычные SATAII винчестеры, в моем случае - 6х1Тб. Железный рейд чертовски шустрый, 6 HDD в RAID 50 дают линейное чтение около 420 мб/сек. В биосе можно настроить конфигурацию и уровни рейда, поменять выводимый на экранчик текст (удобно искать сервер в стойке). Горячая замена винчестеров прекрасна и удобна, особенно если сравнить со старыми серверами - 1U, raid1 софтварный, из 2х винчестеров. Там, в 1U сервере, винты менялись при выключении сервера. Можно менять на горячую кулера, однако для меня это скорее приятная мелочь. Есть ip-kvm ставиться отдельной железкой. Работает только в IE6, требует ActiveX. Приятно шумит, ощущается мощь. К сожалению, нету PS/2 входа для клавиатуры, но это не смертельно. К серверам куплены металлические крышки с перфорацией, скорее как декоративный элемент. Сервер тяжелый, килограммов 40 - ощутил, когда затаскивал его в офисы. Порадовало шасси своей жесткостью - старые 1u сервера изгибаются в руках, это неприятно и есть риск треснуть материнку.

Из минусов запомнилось две вещи:
1. Debian не устанавливается. В сервере стоят сетевые карты Marvell Xtreme, Debian по лицензионным соображаниям не включает драйвера на сеть в установочный образ.
2. Установлена CentOS 6.3. Установочник Anaconda не сумел правильно разбить 4 Тб пул, пришлось делать руками.

По общим впечатлениям: приятные сервера. Мощные, есть горячая замена винчестеров, что для меня критично. Есть ip-kvm, теперь не надо бегать в датацентр по каждой мелочи.

Cisco 2950 - portfast

Поскольку в моем владении всего 2 cisco - 1760 и 2950, буду писать то, что делал на них. Вероятно, на других это тоже сработает, но гарантии не даю.
Собственно, 2950 - свич. Картинка - сверху. В моем случае на 24 порта. Некоторые юзеры жаловались, что у них очень долго включается порт на свиче.
Лечится это так:
sw(config)# spanning-tree portfast default
Глобально на всех интерфейсах в режиме access.
Описание:
  Portfast — функция, которая позволяет порту пропустить состояния listening и learning и сразу же перейти в состояние forwarding. Настраивается на портах уровня доступа, к которым подключены пользователи или сервера.
Порт с включенной функцией Port Fast проходит через обычный цикл состояний spanning-tree, когда коммутатор перезагружается.
Цель функции Port Fast минимизировать время, которое необходимо для того чтобы порт перешел в состояние forward. Поэтому она эффективна только когда применена к портам, к которым подключены хосты. Если включить Port Fast на портах, которые соединены с другими коммутаторами, то есть риск создания петли. Включение этой функции, так же препятствует возникновению сообщений о изменении состояния порта TCN BPDU (topology change notification Bridge Protocol Data Unit) 

Отключить Port Fast на интерфейсе:
sw(config-if)# spanning-tree portfast disable
 

Cisco 1760 - adsl + nat для локалки

AtlantTelecom-ISP#show running-config
Building configuration...
Current configuration : 1578 bytes
!
! Last configuration change at 10:03:44 UTC Wed Jan 28 2009
! NVRAM config last updated at 10:03:49 UTC Wed Jan 28 2009
!
version 12.3
service timestamps debug datetime msec
service timestamps log datetime msec
no service password-encryption
!
hostname AtlantTelecom-ISP
!
boot-start-marker
boot-end-marker
!
logging console alerts
!
mmi polling-interval 60
no mmi auto-configure
no mmi pvc
mmi snmp-timeout 180
no aaa new-model
ip subnet-zero
ip cef    
!         
ip name-server 192.168.1.10
vpdn enable
!         
vpdn-group 1
request-dialin
 protocol pppoe
!         
no ftp-server write-enable
!               
bridge irb
!         
interface ATM0/0
mac-address 000b.fdc9.0001
no ip address
no atm ilmi-keepalive
bundle-enable
dsl operating-mode auto
hold-queue 224 in
pvc 0/33
pppoe-client dial-pool-number 1
!         
interface FastEthernet0/0
ip address 192.168.1.3 255.255.255.0
ip nat inside
ip route-cache flow
no ip mroute-cache
speed auto
full-duplex
no cdp enable
!         
interface Dialer1
ip address negotiated
ip information-reply
ip mtu 1492
ip nat outside
encapsulation ppp
no ip mroute-cache
dialer pool 1
dialer-group 1
no cdp enable
ppp authentication chap pap callin
ppp chap hostname _USERNAME_          // Для байфлая - не указывать вообще строку
ppp chap password 0 _PASSWORD_
ppp pap sent-username _USERNAME_ password 0 _PASSWORD_
!         
ip nat inside source list 1 interface Dialer1 overload
ip classless
ip route 0.0.0.0 0.0.0.0 Dialer1
ip http server
!         
logging trap debugging
access-list 1 permit 192.168.1.0 0.0.0.255
dialer-list 1 protocol ip permit
no cdp run
!             
end       


Конфиг Cisco 1760, для доступа в интернет. Обязательно вручную на ATM указывать mac, иначе провайдер может тупо не пустить в сеть. Так же настроен NAT, сама цыска воткнута в свич, в который воткнуты и юзеры. 

Вероятно, надо бы настроить acl на fa0/0, чтобы подключаться могли лишь нужные юзеры, однако пока я не на работе - я это не сделаю. 
Вообще, ip http server рекомендую выключать - шибко любопытные могут там полазить.