Версия для печати

Архив документации на OpenNet.ru / Раздел "Документация для Linux" (Многостраничная версия)
LASGR
(Linux Administrator's Security Guide Russian)

Перевод на русский выполнен Алексеем Паутовым в рамках проекта Russian LDP, <rldp@ftp.botik.ru>


Основано на Linux Administration's Security Guide

By Kurt Seifried ( seifried@seifried.org, encryption keys here), LASG распространяется по лицензии OpenContent (http://www.opencontent.org).

Оригинал LASG доступен на http://www.securityportal.com/lasg


Первые шаги: основные концепции

Установка Linux: как поставить linux безопасно

Системная безопасность: физическая и защита загрузки системы

Аутенфикация: PAM, smartcards, passwords

Файлы и файловые системы: права доступа, системные файлы

Шифрование: файловые системы и файлы

Сетевая безопасность: PPP, TCP-IP и прочее

Сетевые сервисы: E-mail, FTP, WWW, SSH и многие другие

Firewalling: IPFWADM, IPCHAINS, IPFW, Phoenix, Sinus

IPSec: установка IP Security (рекомендуется для VPN)

VPN: альтернатива IPSec

Утилиты алминистрирования: см. shell-серверы для удаленного доступа

Контроль и ограничение пользователей: ulimit, ttysnoop, quotas и другое

Основные приемы защиты: chroot, non root user, subDomain и прочее

Протоколирование системы и пользователей: syslog

Обнаружение атак: audits, logging и baselines

Утилиты сканирования системы: инструменты для попыток атак на систему. Лучше найти дырки самому...

Программное обеспечение: обновление, методы защиты, безопасное программирование

Вирусы: антивирусные сканеры для Linux (тонкие windows-клиенты)

Информация о дистрибутивах: специфика, как связаться с разработчиком и тому подобное

Резервирование: резервное копирование данных

Ядро Linux: обновление, безопасность и патчи

Checklists: что надо сделать

Приложения

Contributors


Сетевое разделение файлов - AFS

Есть коммерческий протокол разделения файлов по сети для больших инсталляций с высокой защитой и требованиями к эффективности. FAQ доступно на: http://www.angelfire.com/hi/plutonic/afs-faq.html. Свободная клиентская реализация AFS для ряда систем (включая Linux, конечно) доступна на: http://www.stacken.kth.se/projekt/arla/.

Back

Security Portal

Written by Kurt Seifried


Приложения

 

Приложение A: Книги и журналы

Приложение C: Прочие сведения по безопасности в Linux

Приложение D: Интерактивная документация по безопасности

Приложение E: Основные сайты по security

Приложение F: Основные сайты по Linux

 

Приложение A: Книги и журналы

 

Sendmail - http://www.oreilly.com/catalog/sendmail2
Linux Network Admin Guide (NAG): http://www.oreilly.com/catalog/linag
Running Linux - http://www.oreilly.com/catalog/runux2/noframes.html
DNS & BIND - http://www.oreilly.com/catalog/dns3
Apache - http://www.oreilly.com/catalog/apache2
Learning The Bash Shell - http://www.oreilly.com/catalog/bash2
Building Internet Firewalls - http://www.oreilly.com/catalog/fire
Computer Crime - http://www.oreilly.com/catalog/crime
Computer Security Basics - http://www.oreilly.com/catalog/csb
Cracking DES - http://www.oreilly.com/catalog/crackdes
Essential System Administration: http://www.oreilly.com/catalog/esa2
Linux in a nutshell - http://www.oreilly.com/catalog/linuxnut2
Managing NFS and NIS - http://www.oreilly.com/catalog/nfs
Managing Usenet - http://www.oreilly.com/catalog/musenet/
PGP - http://www.oreilly.com/catalog/pgp
Practical Unix and Internet Security: http://www.oreilly.com/catalog/puis
Running Linux - http://www.oreilly.com/catalog/runux2
Using and Managing PPP - http://www.oreilly.com/catalog/umppp/
Virtual Private Networks - http://www.oreilly.com/catalog/vpn2/

Red Hat/SAMS also publish several interesting books:
Maximum RPM (available as a postscript document on http://www.rpm.org)
Red Hat User's Guide (available as HTML on ftp://ftp.redhat.com)

SNMP, SNMPv2 and RMON - W. Stallings (ISBN: 0-201-63479-1)

Magazines:
Linux Journal (of course, monthly)
Sys Admin (intelligent articles, monthly)
Perl Journal (quarterly) 
Information Security - http://www.infosecuritymag.com

 

Приложение C: Прочие сведения по безопасности в Linux

 

Firewalling and Proxy Server HOWTO
http://metalab.unc.edu/LDP/HOWTO/Firewall-HOWTO.html

Linux IPCHAINS HOWTO
http://metalab.unc.edu/LDP/HOWTO/IPCHAINS-HOWTO.html

Linux NETFILTER HOWTO
http://netfilter.kernelnotes.org

Linux Security HOWTO
http://metalab.unc.edu/LDP/HOWTO/Security-HOWTO.html

Linux Shadow Password HOWTO
http://metalab.unc.edu/LDP/HOWTO/Shadow-Password-HOWTO.html

The Linux CIPE + Masquerading mini-HOWTO
http://metalab.unc.edu/LDP/HOWTO/mini/Cipe+Masq.html

Firewall Piercing mini-HOWTO
http://metalab.unc.edu/LDP/HOWTO/mini/Firewall-Piercing.html

Quota mini-HOWTO
http://metalab.unc.edu/LDP/HOWTO/mini/Quota.html

Secure POP via SSH mini-HOWTO
http://metalab.unc.edu/LDP/HOWTO/mini/Secure-POP+SSH.html

The VPN HOWTO (using SSH)
http://metalab.unc.edu/LDP/HOWTO/mini/VPN.html

Red Hat Knowledge Base
http://www.redhat.com/cgi-bin/support?faq

 

Приложение D: Интерактивная документация по безопасности

 

Bugtraq Archives
http://www.geek-girl.com/bugtraq

CERT Incident Reporting Guidelines
http://www.cert.org/tech_tips/incident_reporting.html

SECURITY RISK ANALYSIS AND MANAGEMENT
http://www.norman.com/local/whitepaper.htm

An Introduction to Information Security
http://www.certicom.com/ecc/wecc1.htm

Site Security Handbook
http://sunsite.cnlab-switch.ch/ftp/doc/standard/rfc/21xx/2196

Guidelines for the Secure Operation of the Internet
http://sunsite.cnlab-switch.ch/ftp/doc/standard/rfc/12xx/1281

How to Handle and Identify Network Probes
http://www.network-defense.com/papers/probes.html

Free Firewall and related tools (large)
http://sites.inka.de/sites/lina/freefire-l/index_en.html

Internet FAQ Consortium (You want FAQ’s? We got FAQ’s!)
http://www.faqs.org

An Architectural Overview of UNIX Network Security
http://www.alw.nih.gov/Security/Docs/network-security.html

The human side of computer security (an article on social engineering)
http://www.sunworld.com/sunworldonline/swol-07-1999/swol-07-security.html

IBM Redbooks
http://www.redbooks.ibm.com/

AES Algorithm Efficiency
http://www.seven77.demon.co.uk/cryptography_technology/Aes/index.htm

General security research and development
http://www.sekure.net/

Some general whitepapers and articles
http://www.enteract.com/~lspitz/pubs.html

COAST Library
http://www.cerias.purdue.edu/coast/coast-library.html

Coast hotlist (hugelist of resources)
http://www.cerias.purdue.edu/coast/hotlist

D.O.E. Sysworks
http://members.aol.com/jpeschel/index.htm

 

Приложение E: Основные сайты по security

SecurityPortal, has a Linux section, this document and my weekly column (it's a great site!).
http://www.securityportal.com

Open Security Solutions
http://www.opensec.net

SANS
http://www.sans.org

Security Mailing Lists
http://www.iss.net/vd/mail.html

Computer Security Information
http://www.alw.nih.gov/Security/security.html

8 Little Green Men
http://www.8lgm.org

Robert's Cryptography, PGP & Privacy Links
http://www.interlog.com/~rguerra/www

Open Security Solutions
http://www.opensec.net

Cryptome
http://cryptome.org

PacketStorm
http://packetstorm.securify.com

COAST
ftp://coast.cs.purdue.edu/pub

.rain.forest.puppy
http://www.wiretrip.net/rfp

 

Приложение F: Основные сайты по Linux

 

Linux.com
http://www.linux.com

Linux.org
http://www.linux.org

Linux Administration Made Easy (LAME)
http://www.LinuxNinja.com/linux-admin/

 

Back

Security Portal

Written by Kurt Seifried


Обнаружение атаки

Базовые линии

Мониторинг файловой системы

Сетевой мониторинг и выявление атак

Имеем дело с атакой

Перехватчики пакетов

Выявление перехватчиков пакетов

Baselines

Главная оплошность большинства людей при обеспечении безопасности их машин в том, что они забывают создать опорную линию системы, которая является профилем системы, схемой использования ресурсов и т.п. в нормальной работе. Например, простой "netstat -a -n > netstat-output" может дать Вам много полезной информации (в частности о всех открытых портах, которые может быть стоит закрыть). Использование памяти и диска также полезно для изучения системы. Внезапное колебание в использовании памяти может кончиться нехваткой ресурсов в системе. Для отслеживания использования памяти и диска есть несколько команд: vmstat, free, df, du, все они подробно описаны на их man-страницах.

Как минимум, резервируйте систему и все файлы протоколов, что поможет выявить что же происходит. Не забывайте, что совсем не факт, что система атакована! Часто причиной может оказаться какая-нибудь новая программа, которая ничего плохого не делает. Также ведите журнал важных событий в системе (пользователь "rewt" был добавлен в резервной копии от 4 апреля, так что его наличие в копии от 20 марта выглядит странно). Если систему все-таки кто-то вскрыл, в ней обычно стоит "rootkit", содержащий в себе троян или целый выводок троянов. Удалить их часто бывает почти невозможно, не развалив при этом систему целиком. Так что в ряде случаев проще отформатировать диск и установить все заново. Правда, если Вы используете инструментальные средства контроля целостности файла/каталога вроде L5, Вы будете способны точно определить измененные файлы и иметь дело только с ними.

Имеется также ряд инструментальных средств, которые не входят ни в одну из рассматриваемых в данном разделе категорий, но нацелены на обнаружение и отражение нападения. Одно из них, проект Linux Intrusion Detection System (LIDS).

Мониторинг файловой системы

Допустим, Вы воздвигли вокруг своей системы настоящий бастион. Да, в ней стало почти невозможно работать, но зато она стала защищенной... Теперь главное не успокаиваться на достигнутом. Проверяйте защиту, ищите дыры, затывайте их. Попробуйте сами взломать защиту такой ход покажет, что именно надо укрепить. Если не получилось радуйтесь: система надежна. Но не радуйтесь долго: если будете купаться в лучах славы, расслабитесь, а мы... скажем так, специалисты по компьютерной безопасности, только того и ждем... Если дыра нашлась, она представляет собой хороший случай показать начальству, что защита системы, это постоянный поединок, обезопасить систему раз и навсегда невозможно. Прислушивайтесь к замечаниями пользователей, они часто сообщат Вам такое, что и в голову бы Вам не пришло: их много, а Вы один. Создайте сигнатуры файлов, которые нельзя подделать, и регулярно проверяйте целостность файлов системы.

Tripwire

Tripwire больше не имеет открытого кода. Я никогда не имел проблем с коммерческим программным обеспечением. Однако, когда Вы ожидаете хорошей защиты, отсутствие возможности посмотреть исходники, весьма беспокоит. Tripwire стоит примерно $70 для Linux и доступен только как пакет RPM, нацеленный на Red Hat Linux (tripwire стоит около $500 для других ОС). Альтернативой является несколько пакетов, например L5 или Gog&Magog. Tripwire доступен на http://www.tripwiresecurity.com.

AIDE

AIDE замена tripwire, которая пытается быть лучше самого tripwire. GPL делает данный пакет более привлекательным с точки зрения доверия. Он поддерживает несколько алгоритмов хеширования, и Вы можете загрузить его с http://www.cs.tut.fi/~rammer/aide.html.

L5

Еще одна альтернатива пакету tripwire, L5 доступен на ftp://avian.org/src/hacks, полностью свободно и очень эффективно. Я определенно рекомендовал бы этот инструмент.

Gog&Magog 

Gog&Magog создает список свойств системного файла, владельца, разрешений, MD5-сигнатуру файла (подобно tripwire). Вы можете затем автоматически сравнивать данные с текущими, что гарантирует то, что любое измененение регистрируется быстро. Также, становится просто восстановить систему, поскольку вы будете знать, какие файлы были изменены. Вы можете скачать Gog&Magog с http://www.multimania.com/cparisel/gog.

Sentinel

Sentinel сканирует жесткий диск и создает контрольные суммы файлов для которых Вы их запрашиваете. Это использует не патентованный алгоритм (RIPEMD-160bit MAC ), и имеет факультативный графический внешний интерфейс (nice). Доступно на: http://zurk.netpedia.net/zfile.html.

SuSEauditdisk

SuSEauditdisk представляет собой загрузочный диск с системой проверки целостности. Он поставляется в поставке SuSE и может быть легко перенесен на другие дистрибутивы Linux. Доступен по GPL и может быть загружен с http://www.suse.de/~marc.

ViperDB 

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

/etc/login.defs,1180,-,root,rw-,root,r--,r--,Apr,15,18:03
/etc/minicom.users,1048,-,root,rw-,root,r--,r--,Mar,21,19:11
/etc/CORBA,1024,d,root,rwx,root,r-x,r-x,Jun,14,16:51
/etc/X11,1024,d,root,rwx,root,r-x,r-x,Jun,14,23:05
/etc/cron.d,1024,d,root,rwx,root,r-x,r-x,Apr,14,17:09

К сожалению, ViperDB, кажется, не обрабатывает подкаталоги, так что Вы будете должны добавить их к файлу viperdb.ini:

find /etc/ -type d >> /usr/local/etc/viperdb.ini

viperdb.pl имеет 3 опции, -init (создает набор баз данных), -check (проверяет соответствие файлов базам данных, посылает сообщения syslog и обновляет базы данных) и –checkstrict (проверяет соответствие файлов базам данных, если нужно, восстанавливает разрешения и принадлежность, посылает сообщения syslog и обновляет базы данных). Если Вы используете –check, Вы получите предупреждение о том, что, например, /etc/passwd сейчас открылся для записи всем. Но, поскольку базы данных тут же обновятся, в следующий раз, когда Вы выполните viperdb, Вы не будете получать такое предупреждение. Я советовал бы запускать viperdb только в режиме –checkstrict, и удостовериться, что Вы выполняете viperdb с опцией –init после управления разрешением любого файла/каталога в защищенных каталогах. ViperDB доступен для загрузки на http://www.resentment.org/projects/viperdb.

Sxid

Sxid проверяет setuid и setgid на предмет измения, строит MD5-сигнатуры файлов и вообще позволяет Вам прослеживать любые сделанные изменения. Вы можете скачать его с ftp://marcus.seva.net/pub/sxid.

nannie

nannie относительно просто инструмент, который полагается на stat, чтобы сформировать список файлов (размер, timestamps и прочее). Он создает список, содержащий имя файла, inode, информацию о его связях и так далее. Загрузить пакет можно с ftp://tools.tradeservices.com/pub/nannie.

confcollect

confcollect простой скрипт для сбора системной информации, например, таблиц роутинга, установленных пакетов rpm и прочего в таком духе. Загрузить его можно с http://www.skagelund.com/confcollect.

Pikt

Pikt чрезвычайно интересный инструмент, это фактически язык скриптов для администрирования системы. Pikt позволяет Вам делать многое: уничтожать неактивные процессы пользователя, устанавливать квоты почты, контролировать систему на предмет подозрительных действий и многое другое. Единственной проблемы с Pikt будет трудность изучения, поскольку он использует собственный язык создания скриптов, но в конечном счете я думаю этот язык того стиот, особенно если Вы имеете много систем (тем более, что Pikt сейчас работает на Solaris, Linux и FreeBSD). Pikt доступен на http://pikt.uchicago.edu/pikt.

Backups

Многое забывается, но Вы можете сравнивать текущие файлы с их резервными копиями. Поддерживается много носителей (ленты, дискеты, CD-R...). Носитель может быть сделан доступным только для чтения, так что копия недавно установленной системы обеспечивает хороший эталонный тест. Утилиты “diff ” и “cmp” могут использоваться, чтобы сравнить файлы друг с другом. См. в разделе Резервирование список программного обеспечения.

Сетевой мониторинг и выявление атак

Самый надежный способ защититься от сетевых атак: открывать порты и запускать сервисы только при необходимости (уж сколько было проникновений через игры типа MUD...), своевременно обновлять программы и защитить все, что только можно firewallом.

К счастью в Linux эти инструментальные средства свободны и легко доступны, я буду рассматривать opensource инструментальные средства, так как идея относительно firewall с закрытыми исходниками довольно подозрительна. Первая линия защиты должна быть хорошим firewall, сопровождаемого фильтрами пакета на всех Internet-машинах, либеральное использование TCP-WRAPPERS, подробная регистрация событий и автоматический анализ протоколов.

DTK

Deception ToolKit представляет из себя набор программ, которые подражают известным услугам, чтобы обеспечить неправильные данные нападавшим. Есть надежда, что они должны запутаться и замедлиться за счет неправильных заключений, Вы можете скачать DTK с http://all.net/dtk.

Psionic PortSentry

Третий компонент набора Abacus, обнаруживает и регистрирует сканирование портов, включая тайные сканирования, может быть конфигурирован, чтобы блокировать машину с которой пришли запросы. Поскольку этот инструмент находится в состоянии тестирования, пока лучше воздержаться от его применения, но со временем... Psionic PortSentry доступен на http://www.psionic.com/abacus/portsentry.

Psionic HostSentry

Поскольку это программное обеспечение еще не готово для массового потребления, я упоминаю его только как часть большого проекта (проект Abacus, http://www.psionic.com/abacus). В основном Psionic HostSentry формируетпрофили доступа пользователей и затем сравнивает их с текущими действиями, чтобы пометить любое подозрительное действие. Psionic HostSentry доступен на http://www.psionic.com/abacus/hostsentry.

Firewalls

Большинство щитов (firewall) ведут протоколы, и ipfwadm/ipchains не исключение, с параметром -l Вы получите syslog-записи по каждому пакету, используя автоматизированные фильтры (perl хорош для этого) Вы можете обнаружить попытки атаки.

TCP-WRAPPERS

Wietse's TCP-WRAPPERS позволяют Вам ограничивать подключения к различным сервисам на основании IP-адреса и другой информации, но что даже более важно, так это то, что такая система позволяет Вам конфигурировать ответ. TCP_WRAPPERS входят во многие дистрибутивы, а вообще-то их можно скачать с ftp://ftp.porcupine.org/pub/security.

Klaxon

В дополнение к TCP-WRAPPERS и протоколам firewall, klaxon может быть полезен в борьбе со сканированием портов, если Вы не хотите полностью блокировать машину. Klaxon доступен на ftp://ftp.eng.auburn.edu/pub/doug.

NFR

NFR (Network Flight Recorder) намного больше, чем перехватчик пакетов. Он фактически регистрирует данные, и в реальном времени обнаруживает нападения, сканирования и тому подобные мерзости. Это очень мощный инструмент и требует значительного времени и ресурсов системы, но того стоит. NFR доступен на http://www.nfr.com.

Intrusion Detection Papers

FAQ: Network Intrusion Detection Systems, отличный FAQ, который покрывает все основные (и много мелких) проблем с IDS-системами. Доступен на http://www.robertgraham.com/pubs/network-intrusion-detection.html.

Имеем дело с атакой

Итак, система защищена. Вы поставили tripwire, DTK и прочее. Но в 3am Вы получаете сообщение, что кто-то модифицировал первичный сервер NIS. Ваши действия? Действия при атаке зависят от ряда факторов. Например, нападение все еще идет, или хакер уже смылся? Вы обнаруживали, бизнес-план компании, отправляемый на адрес в hotmail? Вы примчались из дома, чтобы обнаружить кластер мертвых серверов? Каковы ваши приоритеты? Восстановление обслуживания? Обеспечение безопасности конфиденциальных данных? Преследование по суду нападавшего? Несколько вещей, которые надо иметь в виду:

Также при отражении атаки неплохо быть в курсе стратегии Вашей компании. Еще одна хорошая идея в том, чтобы иметь готовый план на случай нападения то есть, что проверять сначала, ччто потом. Есть хорошая книга “Practical Unix and Internet Security”, в которой все это рассмотрено очень подробно.

Неплохо данная тема расмотрена в документе (см. приложение D) “How to Handle and Identify Network Probes”.

Перехватчики пакетов

Packet sniffing практика захвата сетевых данных, не предназначенных для вашей машины, обычно с целью просмотра конфиденциального трафика, типа telnet-сеансов или людей, читающих их email. К сожалению, нет никакого реального надежного способа обнаружить перехватчик, так как это обычно пассивное действие. Имеется также инструмент AntiSniff, который исследует сетевые устройства и может выявить сниффер (перехватчик). Это инструментальное средство также неоценимо, если сеть атакована, и Вы хотите видеть, что происходит. Имеется превосходный FAQ на http://www.robertgraham.com/pubs/sniffing-faq.html.

tcpdump

Самый первый перехватчик пакетов для Linux, этот инструмент существовал сколько я помню, и использовался для отладки сетевых проблем. Большинство дистрибутивов его имеет в своем составе. Недостатки, а их немало, учтены в более новых перехватчиках, но иногда tcpdump может быть полезен.

sniffit

Мой любимый перехватчик, sniffit, имеет хорошие возможности фильтрации, преобразует полезные грузы данных в ASCII текст для простого чтения (подобно telnet-сеансам), и даже имеет графический режим (хорош для текущего контроля действий/подключений). Sniffit доступен на http://sniffit.rug.ac.be/~coder/sniffit/sniffit.html.

Ethereal

Хороший анализатор протокола сети с интерфейсом, подобным сетевому монитору NT. Позволяет простой просмотр полезных грузов данных для большинства сетевых протоколов (tftp, http, Netbios...). Основан на GTK, таким образом, для работы с ним, вероятно, понадобится пакет gnome. Доступен для скачивания на http://ethereal.zing.org .

Snort

Snort хороший пакет, который может использоваться, чтобы обнаружить различные нападения. Он может наблюдать за действиями типа Queso TCP-IP fingerprinting scans, Nmap scans и подобными. Snort доступен на http://www.clark.net/~roesch/security.html.

SPY

SPY продвинутый многопротокольный перехватчик, который работает на различных платформах. Это не свободная программа, однако имеется одиночная лицензия, доступная для некоммерческого использования с максимумом в 5 серверов. Коммерческая версия стоит около $6000 US, но вроде бы того стоит, поскольку качество программы великолепное. Доступен на http://pweb.uunet.de/trillian.of/Spy.

packetspy

packetspy еще один перехватчик, основанный на libpcap. Доступен на http://www.bhconsult.com/packetspy.

Другие перехватчики

Вот список еще нескольких перехватчиков пакетов (снифферов) для Linux, основанных на библиотеке libpcap:

http://www.mtco.com/~whoop/ksniff/ksniff.html - KSniff
http://ksniffer.veracity.nu - Ksniffer
http://mojo.calyx.net/~btx/karpski.html - karpski
http://www.ozemail.com.au/~peterhawkins/gnusniff.html - Gnusniff
http://www.xnet.com/~cathmike/mike/Software - ipgrab

Выявление перехватчиков пакетов

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

AntiSniff

Как упомянуто выше, AntiSniff инструмент, который исследует сетевые устройства, чтобы увидеть, работают ли они в ином режиме, чем нормальный режим работы. Это, возможно, эффективно, и будет работать против большинства перехватчиков. Скачать можно с http://www.l0pht.com/antisniff.

 

Back

Security Portal

Written by Kurt Seifried


Сетевая аутенфикация

Обзор

NIS / NIS+

Kerberos

Radius

 

Обзор

Имеется ряд методов совместно использовать регистрационные данные. С ростом популярности сетей, пользователи уходят далеко за пределы своей LAN, так что данная задача становится все более общей.

NIS / NIS+

NIS и NIS+ (формально известны как “yellow pages”) сокращение от Network Information Service. По существу NIS и NIS+ обеспечивают средства, чтобы распределить файлы паролей, файл group, и другие файлы конфигурации по машинам в сети, обеспечивая синхронизацию паролей (среди других услуг). NIS+ по существу NIS с несколькими расширениями (обычно связанными с защитой).

Чтобы использовать NIS, надо установить мастер-сервер NIS, который будет хранить записи и позволять их менять. Он может распределять записи на вторичные NIS-машины, которые содержат доступную только для чтения копию записей (но они могут быть переведены в режим чтение-запись, если что-то пошло не так). Клиентура NIS-сети запрашивает части информации и копирует их непосредственно в свои файлы конфигурации (типа /etc/passwd), таким образом делая их доступными в местном масштабе. Используя NIS Вы можете обеспечивать несколько тысяч автоматизированных рабочих мест и серверов с идентичными наборами usernames, информации о пользователях, паролей и т.п. при уменьшении кошмаров администрирования.

Однако это часть проблемы: в совместном использовании этой информации Вы делаете ее доступной для нападавших. NIS+ пытается ее решить, но NIS+ чрезвычайный кошмар при установке. NIS+ использует безопасный RPC, который может использовать одиночное DES шифрование (слабовато, конечно, но все же лучше, чем ничего). Полагаться на него особо не стоит.

Альтернативная стратегия должна использовать некоторый сорт VPN (подобно FreeS/WAN, который, кажется, решает много проблем) и шифровать данные прежде, чем они попадут в сеть. Имеется NIS / NIS+ HOWTO: http://metalab.unc.edu/LDP/HOWTO/NIS-HOWTO.html, и O’Reilly имеет превосходную книгу по предмету, "Managing NFS and NIS". NIS / NIS+ выполняется над RPC, который использует порт 111, tcp и udp. Это определенно должно быть ограничено пределами Вашей сети, но полностью защитить NIS / NIS+, видимо, нельзя. Так как NIS и NIS+ RPC-основанные услуги, они имеют тенденцию использовать высокие номера портов (то есть, выше 1024) несколько произвольным способом, делая firewalling этого довольно трудным. Самые лучшие решения состоят в том, чтобы поместить сервер(а) NIS во внутреннюю сеть, которая блокирована полностью. Имеется также превосходное руководство по безопасности NIS на http://www.eng.auburn.edu/users/doug/nis.html.

ipfwadm -I -a accept -P udp -S 10.0.0.0/8 -D 0.0.0.0/0 111
ipfwadm -I -a accept -P udp -S some.trusted.host -D 0.0.0.0/0 111
ipfwadm -I -a deny -P udp -S 0.0.0.0/0 -D 0.0.0.0/0 111

или

ipchains -A input -p udp -j ACCEPT -s 10.0.0.0/8 -d 0.0.0.0/0 111
ipchains -A input -p udp -j ACCEPT -s some.trusted.host -d 0.0.0.0/0 111
ipchains -A input -p udp -j DENY -s 0.0.0.0/0 -d 0.0.0.0/0 111

Kerberos

Kerberos современная сетевая опознавательная система, основанная на идеи вручения пользователям билетов, как только они подтвердили подлинность на сервере Kerberos (подобно использованию маркеров в NT). Kerberos доступен для скачивания на http://web.mit.edu/kerberos/www. Kerberos FAQ есть на http://www.nrl.navy.mil/CCS/people/kenh/kerberos-faq.html. Kerberos более безопасен и масштабируем, чем NIS / NIS+. Керберизированные (Kerberizing) программы типа telnet, imap и pop найти не так просто, но можно, а вот Windows-клиенты с поддержкой Kerberos найти трудно.

Radius

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

ICRADIUS

ftp://ftp.cheapnet.net/pub/icradius

Livingston Radius

http://www.livingston.com/tech/docs/radius

ftp://ftp.livingston.com/pub/le/radius

Ascend RADIUSd SQL патч

http://www.mindrot.org/code/radiusd-sql.php3

perlradius

http://www.iinet.net.au/~michael/radius.html

Сервер Cistron RADIUS

http://www.miquels.cistron.nl/radius

 

Back

Security Portal

Written by Kurt Seifried


Аутенфикация

PAM

Пароли

Вскрытие паролей

Хранение паролей

PAM

"Pluggable Authentication Modules для Linux набор общедоступных библиотек, которые дают возможность локальному администратору системы выбрать, как прикладные программы опознают пользователей. Но что это фактически означает? Например; берите программу “login”, когда пользователь соединяется с tty (через последовательный порт или по сети) программа отвечает на обращение (getty для последовательных линий, telnet или SSH для сетевых подключений) и запускает программу “login”. Она обычно запрашивает username, сопровождаемый паролем, который сравнивается с данными файла /etc/passwd. Это прекрасно, пока Вы не поставите новую систему удостоверения и захотите использовать это. Вы будете должны перетранслировать login (и любые другие приложения, которые будут делать удостоверение через новый метод) так, чтобы они поддерживали новую систему. Здесь возможны ошибки и досадные неожиданности.

PAM представляет промежуточный уровень между прикладной программой и фактическим опознавательным механизмом. Как только программа скомпилирована с поддержкой PAM, любые опознавательные методы, поддерживаемы PAM, будут пригодны для использования программой. В дополнение к этому PAM может обрабатывать данные сеанса, что другие механизмы делают не очень хорошо. Например, используя PAM Вы можете легко отвергать доступ систему нормальных пользователей между 6pm и 6am. По умолчанию Red Hat и новые версии Debian поддерживают PAM (см. ниже таблицу PAM’ified-систем). Таким образом на системе с PAM все, что нужно для затенения паролей: преобразовать файлы паролей и групп и добавить несколько строк в файлы настройки PAM. По существу, PAM дает Вам много гибкости для идентификации пользователя, и будет поддерживать другие свойства в будущем типа цифровых сигнатур. Этот вид гибкости будет требоваться, если Linux должен быть операционной системой класса предприятия. Дистрибутивы без поддержки PAM можно сделать таковыми, но требуется много усилий (Вы должны перетранслировать все Ваши программы с поддержкой PAM, установить PAM и так далее). PAM обычно приходит с полной документацией, и если Вы ищете хороший краткий обзор, Вы должны посетить http://www.sun.com/software/solaris/pam.

Другие выгоды PAM в том, что Вы можете теперь использовать NT-домен для аутенфикации пользователей, что дает возможность связывать Linux автоматизированные рабочие места с существующей Microsoft-сетью без того, чтобы покупать NIS/NIS+ для NT и проходить кошмар ее установки.

Дистрибутив Версия Поддержка PAM
Red Hat 5.0, 5.1, 5.2, 6.0 Полная
Debian  2.1 Yes
Caldera  1.3, 2.2 Полная
TurboLinux  3.6 Полная
SuSE 6.2 Yes

Имеется большее количество дистрибутивов с поддержкой PAM, которые здесь не перечислены, пожалуйста, сообщите мне о них.

Модуль PAM Cryptocard

http://www.jdimedia.nl/igmar/pam

Модуль Pam Smart Card

http://www.linuxnet.com/applications/applications.html

Модуль Pam для SMB

http://rpmfind.net/linux/RPM/pam_smb.html

http://www.csn.ul.ie/~airlied/pam_smb

Пароли

Во всех UNIX-подобных ОС имеются несколько констант, и одна из них файл /etc/passwd, и как он работает. Для удостоверения пользователя, Вы нуждаетесь (минимально) в некотором подобии файла с соответствием UID username, GID groupname, паролями для пользователей и другой информации. Проблема с этим состоит в том, что каждый нуждается в доступе к passwd файлу! То есть, зашифрованные пароли доступны всем. Раньше было просто: зашифровал пароль и порядок. При входе введенный пароль шифровался и сравнивался с зашифрованной информацией в файле паролей. Если совпал, то это либо пользователь. либо хакер. Теперь, когда мощности систем возросли на порядки, уже можно попробовать шифровать слова, сравнивать их с зашифрованными, и таким способом за разумное время найти пароль. Называется "метод грубой силы" (brute force). Есть несколько решений такой проблемы:

Многие OS применяют первое решение, Linux использует второе, оно получило название теневых паролей. В файле паролей Ваш пароль просто заменен на символ 'x', который сообщает, чтобы система проверила пароль по теневому файлу. Любой может читать файл passwd, но только root имеет доступ для чтения к теневому файлу (то же самое делается и с файлом group). Кажется достаточно простым, но до недавнего времени теневые пароли были кошмаром. Вы были должны перетранслировать все Ваши программы, которые проверяли пароли (login, ftpd, и много-много других. Вы даже не представляете сколько, пока не начнете). Но теперь проблема легко решаема в системах с поддержкой PAM.

Чтобы запустить теневые пароли, Вы должны сделать две вещи. Сначала надо внести правки в файлы паролей, выделив пароли в отдельный файл. Затем пойдет более сложная задача. Вы должны удостовериться, что все Ваши программы имеют поддержку теневых паролей, которая может быть КРАЙНЕ важна.

Поскольку Red Hat имеет PAM, все, что Вы должны сделать, чтобы запустить новую опознавательную схему это, добавить модуль PAM, который понимает ее и отредактировать файл конфигурации для любой программы (скажем, login), чтобы она использовала нужный модуль. Никакого перетранслирования, и минимальное количество суеты, правильно? В Red Hat 6.0 Вы можете указать опцию в течение установки, чтобы выбрать теневые пароли, или Вы можете добавить их позже через утилиты pwconv и grpconv, которые входят в пакет shadow-utils. Большинство других дистрибутивов также имеет поддержку теневых паролей. Иногда пароли даже при использовании затенения могут оказаться в файле /etc/passwd стараниями программ, не поддерживающими затенения. Следите, чтобы такого не было.

Вскрытие паролей

В Linux пароли хранятся в зашифрованном виде, однако это не делает их невскрываемыми. Вы не можете расшифровать пароль, однако Вы можете шифровать список слов и сравнивать их. Если результаты соответствуют, Вы нашли пароль! Даже с теневым файлом паролей пароли все еще доступны пользователю root, и если Вы неправильно написали скрипт или программу, которые выполняются как root (например, www CGI-скрипт), файл пароля может быть отыскан нападавшими. Большинство программ выскрывания паролей позволяет работать параллельно на многих машинах, что ускрояет задачу.

John the ripper

Эффективный cracker (открывашка) для паролей доступен на http://www.false.com/security/john.

Crack

Первоначальный широко распространенный вскрыватель (насколько я знаю), доступен на http://www.users.dircon.co.uk/~crypto.

VCU

VCU (Velocity Cracking Utilities) программа, основанная на windows, для вскрытия паролей. VCU пытается делать раскалывание паролей простой задачей для компьютерных пользователей любого уровня опыта (за что ей большое спасибо от системных администраторов). Загрузить можно с http://wilter.com/wf/vcu.

Я надеюсь, что это достаточное побуждение, чтобы использовать теневые пароли и более сильное шифрование подобно MD5 (которое поддерживает Red Hat 6.0).

Хранение паролей

Как надежно Вы храните пароли? Наиболее очевидный метод состоит в том, чтобы запомнить их, это однако имеет тот недостаток что, если Вы управляете 30 различными местами, Вы захотите иметь 30 различных паролей, а хороший пароль (8 символов в длину) не самая простая вещь, чтобы запомнить. Это ведет к тому, что многие люди используют те же самые пароли на нескольких системах. Лучшая идея: сохранить пароли в шифрованном формате, обычно с помощью электроники на Вашем компьютере. Вы должны помнить только один пароль, чтобы отпереть остальные, которые Вы можете затем использовать. Чтобы выполнить это может использоваться PGP или GnuPG.

Gpasman

Gpasman прикладная программа, которая требует GTK (относительно легко установить на не Gnome-систему, поставьте только библиотеки GTK). Она шифрует пароли, используя алгоритм rc2. После запуска программы Вы напечатаете Ваш главный пароль и будете обеспечены хорошим списком Ваших логинов, сайтов, паролей и полей для комментария. Gpasman доступен на http://gpasman.nl.linux.org.

Strip

Strip программа для карманного недокомпьютера palm pilot. Хрнаит пароли надежно и может также использоваться, чтобы генерировать пароли. Доступна по лицензии GNU с http://www.zetetic.net/products.html.

 

Back

Security Portal

Written by Kurt Seifried


Резервирование

Обзор

Некоммерческие программы резервирования для Linux

Коммерческие программы резервирования для Linux

Носители для резервных копий

Обзор

Всегда резервируйте вашу систему, даже если это только файлы конфигурации, Вы сохраните себе время и деньги в конечном счете. Причины исчезновения файлов могут быть самыми разными: сбой диска, безграмотное пользование командами типа 'delete', хакер, проникший в систему...

Чтобы резервировать данные под Linux имеется много решений, все с различными плюсами и минусами.

Некоммерческие программы резервирования для Linux

Tar и Gzip (куда без них...)

Старые добрые tar и gzip. Сколько я писал про них в Russian LDP... Почему они по-прежнему в ходу? Потому что подобно vi Вы можете быть уверены, что любая UNIX-система будет иметь tar и gzip. Данная парочка способна сбросить образ системы, а потом его легко восстановить за несколько десятков минут. Просто скомандуйте:

tar -cvf archive-name.tar dir1 dir2 dir3....

для создания архива (tarball) всех выбранных файлов (обычно /etc, /var/spool/mail, /var/log, /home и прочие пользовательские/системные данные), затем скомандуйте:
gzip -9 archive-name.tar
для сжатия их с максимальной плотностью, можно использовать более мощный, но и более медленный, bzip2. Я обычно делаю копию архива на удаленный сервер.

rsync

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

Amanda

Amanda клиент-серверный пакет для резервирования с поддержкой многих возможностей и Windows (через SAMBA). Amanda распространяется по BSD-style лицензии и доступна на http://www.amanda.org.

afbackup

Afbackup еще один клиент-серверный пакет, распространяется по GPL с одной оговоркой: разработка сервера под Windows запрещена. Afbackup имеет серверы под Linux, HP-UX и Solaris, а также клиенты под данные системы и windows. Скачать можно с ftp://ftp.zn-gmbh.com/pub/linux.

Burt

Burt основан на Tcl/Tk, предназначен для простого копирования рабочих станций под Unix, работает везде и на всем. Burt имеет архитектуру клиент-сервер и является довольно легко масштабируемым. Доступен на http://www.cs.wisc.edu/~jmelski/burt.

Коммерческие программы резервирования для linux

BRU

BRU (Backup and Restore Utility) предоставляет относительно полный набор инструментальных средств в хорошем объединенном формате, с командной строкой и внешним графическим интерфейсом. Это средство поддерживает полные, инкрементные и дифференциальные копии и может писать данные в файл или на ленту. BRU доступно на http://www.estinc.com/features.html.

Quickstart

Quickstart больше нацелен на изготовление образа системы так, чтобы когда жесткий диск накроется, Вы могли бы быстро заполнить пустой диск и получить рабочую систему. Это может также использоваться, чтобы размножить одну систему на несколько машин. Программа получила неплохой отзыв в Linux Journal (Nov 1998, page 50). Получить можно с http://www.estinc.com/qsdr.html.

Backup Professional

http://www.unitrends.com/bp.html

CTAR

http://www.unitrends.com/ctar.html

CTAR:NET

http://www.unitrends.com/ctarnet.html

PC ParaChute

http://www.unitrends.com/pcpara.html

Arkeia

Arkeia очень мощная резервная программа с архитектурой клиент-сервер и поддержкой многих платформ. Ориентирована на крупные системы и рассмотрена в Linux Journal (April 1999, page 38). Загрузить shareware-версию можно с http://www.arkeia.com.

Legato Networker

Legato Networker другая программа резервирования масштаба предприятия, со свободно доступным (но неподдерживаемым) клиентом для Linux. Legato Networker доступен на http://www.legato.com/Products/html/legato_networker.html, а клиент для Linux можно загрузить с ftp://ftp.legato.com/pub/Unsupported/Linux_Client.

Perfect Backup

Perfect Backup поддерживает почти все дистрибутивы Linux и имеет функцию аварийного восстановления. Доступна на http://www.merlinsoftech.com/nonflash/merlinhome.htm.

Носители для резервных копий

Есть много типов носителей, но среди них выделились наиболее популярные:

Носитель Плюсы Минусы
Hard Drive Быстро, довольно дешево ($20-$30 USD на gig) и надежно. Емкость ограничена, кончается в самый неподходящий момент. Если уж накроется, то всерьез и вместе со всей информацией. Неплохим решением является RAID, но большие диски все дороговаты.
CDROM Не восприимчив к EMP и широко распространен. Диски также довольно крепкие и дешевые ($2 USD на 650 МБ или около того) CDROM имеет конечный срок годности в 5-15 лет. С записываемыми дисками иной раз бывают проблемы: они читаются далеко не на всех приводах. Храните их далеко от солнечного света и удостоверьтесь, что Вы имеете дисковод, который будет их читать.
Лента Это надежно, Вы можете покупать БОЛЬШИЕ ленты. Магнитные средства, конечная продолжительность жизни и некоторые ленты могут быть легко повреждены (Вы получаете то, что Вы оплачиваете...), также удостоверьтесь, что ленты могут читаться на других стриммерах.
Дискеты Есть везде и доступны на какой угодно аппаратуре. Маловаты, хотя для файлов конфигурации сойдут.
Zip Disks Емкость в 100 мегабайт вполне достаточна для сменного носителя на домашней системе или рабочей станции. Не каждый имеет дисковод zip, и они магнитные средства. Модели на IDE и SCSI вполне приличны, но вот на паралелльном порте плачевно медленно. Не упустите щелчок смерти.
Jazz Drives 1 или 2 gig на сменном диске, мой SCSI пишет соскоростью около 5 meg/sec. Они умирают. Я нахожусь на моем третьем диске. Жесткие диски также имеют привычку вылетать если используются тяжело. Они не дешевые.
SyQuest 1.6 gigs, диск в корпусе более надежен. Дела у компании идут плохо, так что за будущее таких дисков никто не ручается.
LS 120 120 Megs и довольно дешево. Медленно. 120 megs на floppy-контроллере, какая уж тут скорость...
Printer Очень длинный срок годности. Требует человека как читающего устройства. Удобный для показывающих консультантов и как материал ссылки. Не может быть легко изменен. Вы хотите ручками набирать 4000 парольных записей? Я нет. Правда, есть OCR...

Back

Security Portal

Written by Kurt Seifried


Bastille Linux

Bastille Linux представляет собой укрепляющий скрипт для Red Hat Linux. Вы можете найти подробности о нем на: http://www.bastille-linux.org/, и загрузить с: ftp://ftp.bastille-linux.org/.

Back

Security Portal

Written by Kurt Seifried


Caldera

Caldera OpenLinux 2.2

Caldera имеет графическую программу установку для 2.2, названную “lizard”, с рядом хороших свойств. В течение установки Вам придется создать пользователя, что позволяет не входить постоянно как root. Также имеется запись для “sulogin” в файле /etc/inittab, так что нельзя просто ввести на приглашение lilo: “linux single”, чтобы попасть в систему как root, Вы должны сначала ввести root-пароль. Имеются несколько проблем с заданной по умолчанию установкой, которую Вы должны исправить.

inetd.conf

Файл /etc/inetd.conf, который управляет различными сервисами Internet, имеет старые и опасные включенные сервисы:


echo    stream  tcp     nowait  root    internal
echo    dgram   udp     wait    root    internal
discard stream  tcp     nowait  root    internal
discard dgram   udp     wait    root    internal
daytime stream  tcp     nowait  root    internal
daytime dgram   udp     wait    root    internal
chargen stream  tcp     nowait  root    internal
chargen dgram   udp     wait    root    internal
gopher  stream  tcp     nowait  root    /usr/sbin/tcpd gn
shell   stream  tcp     nowait  root    /usr/sbin/tcpd in.rshd
login   stream  tcp     nowait  root    /usr/sbin/tcpd in.rlogind
exec    stream  tcp     nowait  root    /usr/sbin/tcpd in.rexecd
talk    dgram   udp     wait    nobody.tty      /usr/sbin/tcpd in.talkd
ntalk   dgram   udp     wait    nobody.tty      /usr/sbin/tcpd in.ntalkd
uucp    stream  tcp     nowait  uucp    /usr/sbin/tcpd /usr/sbin/uucico –l

Они все должны быть закомментированы (впишите “#” в начало строки), после чего перезапустите inetd командой “killall–1 inetd”.

portmap

Один сервис, который часто надо закрыть, portmap. Он используется некоторыми сервисами, например, nfs, и имеет длинный список проблем. Его запрет в OpenLinux связан с некоторыми проблемами, поскольку он запускается из того же скрипта, что и inetd. Вы можете или удалить portmap (“rpm –e portmap”) или исправить в /etc/rc.d/init.d/inet:


NAME1=inetd
DAEMON1=/usr/sbin/$NAME1
NAME2=rpc.portmap
DAEMON2=/usr/sbin/$NAME2

на:

NAME1=inetd
DAEMON1=/usr/sbin/$NAME1
#NAME2=rpc.portmap
#DAEMON2=/usr/sbin/$NAME2

и заменить:

# Bail out if neither is present
[ -x $DAEMON1 ] || [ -x $DAEMON2 ] || exit 2

на:


# Bail out if neither is present
[ -x $DAEMON1 ] || exit 2

еще замените:


[ -x $DAEMON1 ] && ssd -S -n $NAME1 -x $DAEMON1 -- $INETD_OPTIONS
[ -x $DAEMON2 ] && ssd -S -n $NAME2 -x $DAEMON2 -- $PORTMAP_OPTIONS

на:

[ -x $DAEMON1 ] && ssd -S -n $NAME1 -x $DAEMON1 -- $INETD_OPTIONS
# [ -x $DAEMON2 ] && ssd -S -n $NAME2 -x $DAEMON2 -- $PORTMAP_OPTIONS

Затем закомментируйте весь фрагмент:


NFS=""
cat /etc/mtab | while read dev mpoint type foo; do
[ "$type" = "nfs" ] && NFS="$mpoint $NFS"
done
if [ -n "$NFS" ]; then
echo -n "Unmounting NFS filesystems: "
POLICY=I # Ignore 'device busy' during shutdown
[ "$PROBABLY" != "halting" ] && POLICY=1 # exit on 'busy'
for mpoint in $NFS; do
SVIrun S $POLICY "$mpoint" "!$mpoint" \
umount $mpoint
done
echo "."
fi

amd

Еще одни сервис, установленный по умолчанию в OpenLinux 2.2, Auto Mount Daemon (amd). Он позволяет Вам определять каталоги и устройства nfs, так что я могу определять /auto/cdrom как /dev/cdrom, так что когда Вы “cd /auto/cdrom” система смонтирует /dev/cdrom как /auto/cdrom с соответствующими параметрами (только для чтения, и т.д.). Сервис amd использует полупроизвольный номер порта, обычно в диапазоне 600-800. Этот сервис определенно очень полезно на автоматизированном рабочем месте, так как избавляет пользователей от необходимости вручную монтировать каждое сменное устройство, которое они желают использовать (cdrom или дискета обычные примеры таких устройств). Однако я не рекомендовал бы его на серверных машинах, из-за хронологии проблем с amd. Выключение amd простое: переименуйте ссылки “S30amd” в “K70amd”:


mv /etc/rc.d/rc3.d/S30amd /etc/rc.d/rc3.d/K70amd 
mv /etc/rc.d/rc5.d/S30amd /etc/rc.d/rc5.d/K70amd 

SSH

SSH rpm’ не доступен для OpenLinux 2.2 (то есть, я его не нашел). SSH rpm’ для Red Hat неполон и исходники не удается откомпилировать, SSH компилируется из чистого исходного текста без проблем. Вы можете получить исходник SSH с ftp://ftp.zedz.net/pub/replay/crypto/SSH/. Чтобы запустить sshd, Вы должны выполнить “/usr/local/bin/sshd” во время загрузки. Он будет искать файлы настроек в /etc.

Novell

Неизвестно, есть ли какие-то проблемы для программного обеспечения Novell.

Updates

Обновления для Caldera OpenLinux 2.2 доступны на: ftp://ftp.calderasystems.com/pub/openlinux/2.2/current/RPMS.

Back

Security Portal

Written by Kurt Seifried


Сертификация программного обеспечения для Linux

Обзор

Сертификаты программ

Обзор

Сертификаты становятся все более популярными и, если Вы имеете свой сервер сертификатов, могут сэкономить много времени и денег. Имеются другие проекты, где было бы хорошо иметь сертификаты, но коммерческие версии дороги, а вариант OpenSource очень привлекателен.

Сертификаты программ

OpenCA

Проект создания всестороннего набора инструментальных средств для сертификации, совместимой с сертификатами X.509. Доступен по адресу: http://www.openca.org/.

pyCA

pyCA совокупность программных скриптов, написанных на python для установки авторизации сертификатов. Загрузить можно с: http://sites.inka.de/ms/python/pyca/.

Back

Security Portal

Written by Kurt Seifried


Контрольные списки

 

Контрольный список Internet

Back

Security Portal

Written by Kurt Seifried


Сетевые сервисы: CVS

CVS позволяет многим разработчикам работать вместе над большими проектами и поддерживать целостность проектов на уровне исходного кода. Внутренние механизмы защиты CVS довольно просты; фактически многие назовут бы слабыми, и тут я буду должен согласиться. Аутенфикация CVS обычно достигается в сети, использующей pserver, username передаются открытым текстом, а пароли просто хешируются (никакой реальной защиты нет).

Чтобы обойти это, Вы имеете несколько хороших параметров. В Unix среде вероятно самый простой метод состоит в том, чтобы использовать SSH для туннельных подключений между машинами пользователей и сервером. "Tim TimeWaster" (Tim Hemel) написал об этом превосходную страницу: http://cuba.xs4all.nl/~tim/scvs . Несколько более сложный подход (но лучший в конечном счете для больших инсталляций) состоит в kerberize CVS-сервера и клиентов.

Обычно большие сети (особенно в университетских средах) уже имеют установленную Kerberos-инфраструктуру. Детали относительно kerberizing CVS доступны на http://www.cyclic.com/cyclic-pages/security.html. Кроме этого я настоятельно советую использовать firewall для CVS, если Вы не используете его для некоторой общей цели (типа открытого исходного проекта в Internet).

Другой инструмент для обеспечения безопасности CVS, только что появившийся “cvsd”, обеспечивает для pserver chroot и/или suid pserver безобидному пользователю. cvsd доступен на http://cblack.mokey.com/cvsd в формате rpm и tarball с исходниками.

Имеются другие менее очевидные моменты, которые Вы должны знать. Имея дело с исходниками, надо следить, чтобы в них не попали троянцы. В открытом исходном проекте это относительно просто, его все изучают, и такие вещи будут довольно оперативно выявлены. Позаботьтесь также о резервировании исходников. CVS использует порт 2401, протокол tcp.

ipfwadm -I -a accept -P tcp -S 10.0.0.0/8 -D 0.0.0.0/0 2401
ipfwadm -I -a accept -P tcp -S some.trusted.host -D 0.0.0.0/0 2401
ipfwadm -I -a deny -P tcp -S 0.0.0.0/0 -D 0.0.0.0/0 2401

или

ipchains -A input -p tcp -j ACCEPT -s 10.0.0.0/8 -d 0.0.0.0/0 2401
ipchains -A input -p tcp -j ACCEPT -s some.trusted.host -d 0.0.0.0/0 2401
ipchains -A input -p tcp -j DENY -s 0.0.0.0/0 -d 0.0.0.0/0 2401

Back

Security Portal

Written by Kurt Seifried


Сетевые серверы: DHCP

Обзор

DHCP-серверы

Обзор

DHCPD должны использовать все сетевые администраторы. Это позволяет Вам предоставлять клиентам информацию относительно их сетевых параметров настройки. Это также позволяет Вам легко реконфигурировать машины пользователей (чтобы , скажем, переместить с 10.0.1.0 на 10.0.2.0, или задать новый набор DNS-серверов). В конечном счете DHCP сильно облегчит Вам жизнь. Я выполнял его только с 8 машинами пользователей и нашел, что жизнь будет намного проще. DHCPD поддерживается ISC и есть на http://www.isc.org/dhcp.html.

Следует использовать DHCPD версии 2.x (3.x пока на тестировании), эта версия получила много новых свойств, и проще в установке и работе. Конечно, стоит закрыть firewallом DHCPD от Internet. Трафик DHCP должен быть только на локальных сегментах, возможно посланных на DHCP-сервер в другом сегменте, но единственный трафик DHCP из Internet означает атаку/DOS (они могли бы резервировать все Ваши IP, таким образом оставляя Вашу реальную клиентуру ни с чем). Если Вы передаете трафик DHCP через Internet, НЕ ДЕЛАЙТЕ ТАК! Это действительно плохая идея по ряду причин (прежде всего эффективность и надежность, но также и защита).

Я рекомендую, чтобы DHCPD-сервер был только сервером DHCP, блокированным где-нибудь (если Вы полагаетесь на DHCP в своей сети, и сервер DHCP засбоит, сеть окажется в серьезной проблеме). Если Вы должны охватить подсети (то есть, Вы имеете много сегментов ethernet, только один из которых имеет сервер DHCP, физически связанный с ним) реле DHCP (NT имеет его встроенным, программное обеспечение DHCP для Linux имеет эту возможность). Имеются также несколько известных проблем с NT и DHCP, NT RAS имеет довольно противную привычку забивать IP-адреса подобно сумасшедшему (я видел, как NT-сервер захватывает 64 адреса и хранит их неопределенными), потому что он пробует резервировать IP для клиентуры, которая будет работать. Это не может походить на реальную проблему, но это может привести (и приводит) к исчерпанию адресов. Или направьте RAS NT подальше, или поместите его в свою подсеть.

DHCPD определенно должен быть firewalled от внешних хостов. DHCP выполняется на порте 67, использует протокол udp, потому что количества данных маленькие, а быстрый ответ важен.

ipfwadm -I -a accept -P udp -S 10.0.0.0/8 -D 0.0.0.0/0 67
ipfwadm -I -a accept -P udp -S some.trusted.host -D 0.0.0.0/0 67
ipfwadm -I -a deny -P udp -S 0.0.0.0/0 -D 0.0.0.0/0 67

или

ipchains -A input -p udp -j ACCEPT -s 10.0.0.0/8 -d 0.0.0.0/0 67
ipchains -A input -p udp -j ACCEPT -s some.trusted.host -d 0.0.0.0/0 67
ipchains -A input -p udp -j DENY -s 0.0.0.0/0 -d 0.0.0.0/0 67

DHCP-серверы

ISC DHCPD

Chroot'ing DHCPD

DHCPD состоит из 2 основных выполнимых программ:
╥ dhcpd: собственно DHCP
╥ dhcrelay: DHCP-реле (чтобы передавать запросы на центральный DHCP-сервер).

DHCPD требует 2 библиотеки:
╥ /lib/ld-linux.so.2 
╥ /lib/libc.so.6 

Файл настройки:
╥ /etc/dhcpd.conf: расположение загрузочных файлов, настройки и прочее.

Еще несколько дополнительных файлов:
╥ /etc/dhcpd.leases: список активных соединений
╥ файл запуска, настройте по своему вкусу.

Самый простой путь к установке dhcpd chroot'ed в том, чтобы просто установить dhcpd (последний предпочтительно) и поправить необходимые файлы. Хорошая идея состоит в том, чтобы создать каталог (например, /chroot/dhcpd), предпочтительно на отдельной файловой системе, и затем создать структуру файлов для dhcpd в нем. Ниже приведен такой пример. Замените в нем /chroot/dhcpd на выбранный Вами каталог.

# Install bind so we have the appropriate files
#
rpm -i dhcpd-2.0b1pl0-1.i386.rpm
#
# Create the directory structure
#
cd /chroot/dhcpd/ # or wherever
mkdir ./etc
mkdir ./usr/sbin
mkdir ./usr
mkdir ./var/dhcpd
mkdir ./var
mkdir ./lib
#
# Start populating the files
#
cp /usr/sbin/dhcpd ./usr/sbin/dhcpd
cp /etc/dhcpd.conf ./etc/dhcpd.conf
cp /etc/rc.d/init.d/dhcpd ./etc/dhcpd.init
cp /etc/rc.d/init.d/functions ./etc/functions
#
# Now to get the latest libraries, change as appropriate
#
cp /lib/ld-linux.ld-linux.so.2 ./lib/ 
cp /lib/libc.so.6 ./lib/
#
# And create the necessary symbolic links so that they behave
# Remember that dhcpd thinks /chroot/dhcpd/ is /, so use relative links

Затем измените или создайте свой скрипт запуска.

Как только это будет выполнено, просто удалите первоначальный файл запуска и создайте ссылку с него на новый, и dhcpd будет вести себя 'обычно' (будет автоматически загружен при начальной загрузке системы), в то время как фактически он отделяется от Вашей системы. Можно (но не обязательно) заменить 'оригинал' DHCPD ссылками.

Если Вы сделали все правильно, Вы должны иметь /chroot/dhcpd (млм другой каталог), который содержит все требуемое, чтобы выполнить dhcpd. ps -xau должен показать нечто вроде:

USER PID %CPU %MEM SIZE RSS TTY STAT START TIME COMMAND
root 6872 0.0 1.7 900 532 p0 S 02:32 0:00 ./usr/sbin/dhcpd -d -q 
root 6873 0.0 0.9 736 288 p0 S 02:32 0:00 tee ./etc/dhcpd.log
Сервер Moreton Bay DHCP

http://www.moretonbay.com/dhcpd

Back

Security Portal

Written by Kurt Seifried


Сетевые серверы: DNS

Обзор

DNS-серверы

Обзор

DNS чрезвычайно важный сервис для IP сетей. Однако, данные на сервере DNS могут оказаться ложными. Сейчас все идет к цифровой подписи таких данных, что будет подтверждать их подлинность (метод базируется на цифровой подписи RSA).

DNS-серверы

Bind

Большинство дистрибутивов включают bind 8.x, однако ни один (насколько мне известно) не использует установку для не-root, по умолчанию использован chroot. Исправить данное упущение просто:

-u
указывает с каким UID bind будет работать как только свяжется с портом 53 (я использую пользователя 'named' без каких-либо прав, аналог 'nobody').

-g
указывает с каким GID bind будет работать как только свяжется с портом 53 (я использую группу 'named'без каких-либо прав, аналог 'nobody').

-t
указывает каталог, который bind будет использовать после запуска, в этом каталоге, Вы должны разместить все нужные для bind библиотеки, и файлы конфигурации. Хорошим выбором является /home/named.

Еще один способ: скачать пакет bind-chroot, доступный для большинства дистрибутивов и поставить его. Перед установкой создайте (можно с помощью groupadd и useradd) группу и пользователя, на UID/GID которых bind сменит свои после запуска. Многие пакеты используют holelogd для протоколирования данных bind в /var/log/messages (нормальный режим работы bind). Файл настроек обычно безопасен (то есть, Вы не сможете запросить версию bind).

Другой аспект bind: он хранит данные о Вашей сети. Когда делается запрос DNS обычно посылается маленькая просьба о части информации. Например, что является адресом IP для www.seifried.org? Но есть доменные запросы, где DNS запрашивает всю информацию для, скажем, seifried.org, захватывает ее и может затем делать ее доступной другому (в случае вторичного DNS-сервера). Это потенциально очень опасно. Bind версии 4 толковой защиты не имел. Вы могли ограничивать передачи некоторым сервером, но толку было мало. Это изменилось в Bind 8, документация есть на http://www.isc.org/bind.html. Помните, что обезопасить придется ВСЕ зональные серверы (как master, так и secondaries), поскольку secondary могут прекрасно передать данные за пределы зоны.

Имеется относительно безопасный файл named.conf (из пакета bind-chroot с ftp://ftp.tux.org):

options {
// The following paths are necessary for this chroot
directory "/var/named";
dump-file "/var/tmp/named_dump.db"; // _PATH_DUMPFILE
pid-file "/var/run/named.pid"; // _PATH_PIDFILE
statistics-file "/var/tmp/named.stats"; // _PATH_STATS
memstatistics-file "/var/tmp/named.memstats"; // _PATH_MEMSTATS
// End necessary chroot paths
check-names master warn; /* default. */
datasize 20M;
};

zone "localhost" {
type master;
file "master/localhost";
    check-names fail;
    allow-update { 
        none; 
    };
    allow-transfer { 
        any; 
    };
};

zone "0.0.127.in-addr.arpa" {
type master;
file "master/127.0.0";
    allow-update { 
        none; 
    };
    allow-transfer { 
        any; 
    };
};

// Deny and log queries for our version number except from localhost
zone "bind" chaos {
type master;
file "master/bind";
    allow-query {
        localhost; 
    };
};

zone "." {
type hint;
file "named.zone";
};

zone "example.org" {
type master;
file "zones/example.org";
    allow-transfer {
        10.2.1.1;
        10.3.1.1;
    };
};

DNS работает на порте 53, используя протоколы udp и tcp, udp используется для нормальных запросов (это легко и быстро), tcp используется для зональных передач и больших запросов (скажем, dig www.microsoft.com). Таким образом, firewalling tcp относительно безопасен и определенно остановит любые зональные передачи, но случайный запрос DNS не сможет работать. Лучше использовать named.conf, чтобы управлять зональными передачами.

ipfwadm -I -a accept -P tcp -S 10.0.0.0/8 -D 0.0.0.0/0 53
ipfwadm -I -a accept -P tcp -S some.trusted.host -D 0.0.0.0/0 53
ipfwadm -I -a deny -P tcp -S 0.0.0.0/0 -D 0.0.0.0/0 53

или

ipchains -A input -p tcp -j ACCEPT -s 10.0.0.0/8 -d 0.0.0.0/0 53
ipchains -A input -p tcp -j ACCEPT -s some.trusted.host -d 0.0.0.0/0 53
ipchains -A input -p tcp -j DENY -s 0.0.0.0/0 -d 0.0.0.0/0 53

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

ipfwadm -I -a accept -P udp -S 10.0.0.0/8 -D 0.0.0.0/0 53
ipfwadm -I -a accept -P udp -S some.trusted.host -D 0.0.0.0/0 53
ipfwadm -I -a deny -P udp -S 0.0.0.0/0 -D 0.0.0.0/0 53

или

ipchains -A input -p udp -j ACCEPT -s 10.0.0.0/8 -d 0.0.0.0/0 53
ipchains -A input -p udp -j ACCEPT -s some.trusted.host -d 0.0.0.0/0 53
ipchains -A input -p udp -j DENY -s 0.0.0.0/0 -d 0.0.0.0/0 53

Chroot'ing DNS

http://www.etherboy.com/dns/chrootdns.html

Dents

Dents представляет собой DNS-сервер, доступный по GPL, в настоящее время находится на тестировании (release 0.0.3). Dents написан с нуля с поддержкой SQL backends, интеграции с SNMP и использует CORBA для своих задач. В целом это должно создать хорошую конкуренцию Bind. Dents доступен на http://www.dents.org.

Back

Security Portal

Written by Kurt Seifried


E-mail серверы

Обзор

E-mail серверы

POP серверы

IMAP серверы

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

Улучшение безопасности E-Mail пакетом Procmail

SSL в сочетании с серверами POP и IMAP

Некоммерческий софт для списков рассылки

Обзор

Simple Mail Transfer Protocol (SMTP) одна из наиболее важных услуг Internet. Firewalling SMTP простой: SMTP работает на порте 25, протокол tcp:

ipfwadm -I -a accept -P tcp -S 10.0.0.0/8 -D 0.0.0.0/0 25
ipfwadm -I -a accept -P tcp -S some.trusted.host -D 0.0.0.0/0 25
ipfwadm -I -a deny -P tcp -S 0.0.0.0/0 -D 0.0.0.0/0 25

или

ipchains -A input -p tcp -j ACCEPT -s 10.0.0.0/8 -d 0.0.0.0/0 25
ipchains -A input -p tcp -j ACCEPT -s some.trusted.host -d 0.0.0.0/0 25
ipchains -A input -p tcp -j DENY -s 0.0.0.0/0 -d 0.0.0.0/0 25

E-mail серверы

Sendmail

Sendmail наиболее распространенный сервер почты. Но сейчас его активно вытесняет пакет Postfix.

Sendmail заработал себя очень плохую репутацию защиты, однако новые версии исправили почти все ошибки. К тому же, добавлена система противоспамовой обороны. Подробности о Sendmail и исходниках есть на http://www.sendmail.org.

Chrooting Sendmail хорошая опция, но требует много работы, и так как он все равно работает как root, довольно спорно относительно эффективности (так как root может убегать из тюрьмы chroot'ed).

Обновление Sendmail не особенно трудная задача. Лучше всего использовать ряд 8.9 из-за минимума ошибок и противоспамовой обороны. Можно скачать исходники с ftp://ftp.sendmail.org, но откомпилировать Sendmail не так просто.

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

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

sendmail -bd -q1h

на строку:

sendmail -q1h

Пожалуйста обратите внимание: если Вы используете систему, чтобы послать большое количество email, Вы можете установить время обработки очереди ниже, возможно, "-q15m" (обрабатывать очередь каждые 15 минут).

Теперь о системе противоспамовой обороны. В одной из win-программ я встретил настройку по умолчанию "Посылать в ответ файл", а в качестве имени файла было прописано "c:\windows\win386.swp". Здесь все не настолько радикально. Sendmail настраивается несколькими файлами настройки (применительно к Sendmail 8.9.x):

/etc/sendmail.cf
Основной файл настройки, также сообщает, где искать другие файлы конфигурации.

/etc/mail
Вы можете определять расположение файлов конфигурации в sendmail.cf, обычно люди помещают их в /etc или в /etc/mail.

access
База данных списков доступа, позволяет Вам отклонять email из некоторых источников (IP или доменов). Мой файл доступа выглядит следующим образом:

10.0.0 RELAY
spam.com REJECT

Что означает 10.0.0.* (хостам моей внутренней сети) разрешено использовать сервер для передачи почты куда угодно, а все со *.spam.com будет отклонено. Имеются интерактивные списки известных спамеров, обычно они 5-10,000 записей в длину, что может серьезно препятствовать эффективности sendmail (поскольку каждое подключение проверяется по этому списку), с другой стороны использование Вашей sendmail-машины, чтобы посылать spam куда хуже.

aliases
Файл псевдонимов, позволяет Вам управлять доставкой почты, локальной для системы. Большинство пакетов списков рассылки используют данный файл, чтобы получить почту, посланную спискам, и направить ее программам, которые фактически обрабатывают их. Не забудьте выполнить команду "newaliases" после редактирования этого файла и затем перезапустить sendmail.

domaintable
Таблица обрабатываемых доменов (полезно для виртуальных хостов).

majordomo
Файл конфигурации для majordomo.

sendmail.cw
Файл, содержащий имена хостов, для которых мы получаем email, полезно если Вы являетесь хостом более чем для одного домена.

sendmail.hf
расположение справочного файла (зайдите в telnet на 25 и введите "HELP")

virtusertable
Таблица виртуальных пользователей для отображения их в реальные (например, sales@example.org в john@example.org).

Sendmail 8.9.x (и предыдущие версии) реально не поддерживал регистрацию всего email. Обещана такая поддержка в Sendmail 8.10.x. До тех пор имеются 2 пути регистрации email, первый изящный и регистрирует email приходящий пользователям на основании имени пользователя. Второй метод не изящен и включает простой необработанный файл регистрации всех SMTP транзакций, Вы должны написать некоторый сортировщик (вероятно, на perl) чтобы сделать файл регистрации полезным.

Почта (входящие SMTP подключения, чтобы быть более точным) сначала фильтруется файлом доступа, здесь мы можем отклонить почту из некоторого домена/IP и передать почту из некоторых хостов (например, с внутренней сети машин под windows). Все локальные домены будут проверены через файл sendmail.cw. Почта будет обработана в соответствии с заданными правилами и поставлена в очередь для локальной доставки, затем будет проверен файл virtusertable, который представляет соответствия адресов именам пользователя, например так:

seifried@seifried.org alias-seifried
listuser@seifried.org listuser
@seifried.org mangled-emails

Последнее правило перехватывает письма с поврежденными адресами и пересылает их в специально выделенный ящик. Будет также проверен файл псевдонимов и почта будет доставлена в соответствии с записями в нем. Например, мой псевдоним для seifried такой:
alias-seifried: seifried, "/var/backup-spool/seifried"

Этим путем мой email попадает в мой основной и резервный почтовые ящики. Если я удалю письмо, оно уцелеет в другом ящике! Microsoft Outlook... Приведу перевод данной фразы, который дал пакет Stylus, по-моему, это один из тех, увы, немногих случаев, когда машинный перевод себя оправдал: "Перспектива Microsoft решает к рвоте когда-нибудь и брандспойту мои почтовые ящики.". Кратко и выразительно... И, увы, очень правильно. Это также полезно для корпораций, поскольку Вы теперь имеете копию всего входящего email на основании имени пользователя, и можете позволять (или не позволять) им обращаться к файлу, содержащему сохраненную почту.

Одна проблема при использовании правила catch-all для домена (то есть, для @seifried.org): Вы должны создать псевдоним для КАЖДОГО пользователя и списка рассылки. Иначе при просмотре списка, если не будет найдена запись для конкретного адреса (например, mailing-list@seifried.org), вся почта для него окажется в ящике для почты с поврежденным адресом. Так что с этим правилом надо поосторожней.

Второй метод очень прост, Вы просто запускаете sendmail с -X опцией и определяете файл, чтобы регистрировать все транзакции. Этот файл будет становиться очень большим очень быстро, я не рекомендовал бы использовать этот метод регистрации почты без крайней необходимости.

Dynamic Relay Authorization Control

Dynamic Relay Authorization Control (DRAC) связывается с Вашим сервером POP/IMAP, чтобы временно предоставить доступ к SMTP хостам, которые успешно авторизуются и обрабатывают почту. Вы можете получить пакет с http://mail.cc.umanitoba.ca/drac/index.html.

Postfix

Postfix агент передачи почты (mail transfer agent, MTA) нацеленный на защиту, быстродействие и легкость конфигурации. Единственная часть Postfix, который выполняется как root главная управляющая программа, точно названная “master”, она вызывает несколько других программ, чтобы обработать почту к очереди (“pickup”), управлять очередью, ждать входящих подключений, доставлять отсроченную почту и так далее (“qmgr”), чтобы фактически посылать и получать почту (“smtpd”) и так далее. Каждая часть Postfix очень хорошо обдумана, и обычно делает одну или две задачи, но очень хорошо. Например, вместо модели sendmail, где поставленная в очередь почта просто выбрасывается в /var/spool/mqueue, в Postfix имеется общедоступный каталог “maildrop”, который проверяется “pickup”, который скармливает данные “cleanup”, который перемещает почту (если она правильно сформатирована и так далее) в безопасный каталог очереди для фактической обработки.

Главные файлы настройки лежат в /etc/postfix, и имеется несколько файлов конфигурации, которые Вы должны иметь:

master.cf

Управляет поведением различных программ “помощников”: они chroot'ed, максимальное число процессов, которые они могут выполнять и т.д. Вероятно самое лучшее оставить значения по умолчанию на большинстве серверов почты, если Вы не должны делать некоторую настройку для высоких загрузок или повышенной безопасности сервера.

main.cf

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

Имеется список переменных и расположений файлов, которые Вы будете обычно должны установить, файл /etc/postfix/main.cf часто плохо прокомментирован. Пожалуйста обратите внимание, что следующие примеры записей в main.cf не полный main.cf.

# what is the machines hostname?
myhostname = mail.example.org
# what is the domain name?
mydomain = example.org
# what do I label mail as “from”?
myorigin = $mydomain
# which interfaces do I run on? All of them usually.
inet_interfaces = all
# a file containing a list of host names and fully qualified domains names I
# receive mail for, usually they are listed like: 
# mydestination = localhost, $myhostname, etc
# but I much prefer to keep them listed in a file.
mydestination = /etc/postfix/mydestination
# map of incoming usernames. “man 5 virtual”
virtual_maps = hash:/etc/postfix/virtual
# alias mappings (like /etc/aliases in sendmail), “man 5 aliases”
alias_maps = hash:/etc/postfix/aliases
# alias database, you might have different settings. “man 5 aliases”
alias_database = hash:/etc/postfix/aliases
# where to deliver email, Mailbox format or Maildir (traditional
# /var/spool/mail).
home_mailbox = Maildir/
# where to keep mail, usually /var/spool/mail/ but you can easily change it
mail_spool_directory = /var/spool/mail
# what command do we use to deliver email? /usr/bin/procmail is the default
# but if you want to use scanmail which is the AMaViS anti-virus tie in
# software simply put:
mailbox_command = /usr/sbin/scanmails
# who do I relay email for, again you can list them, or keep them in
# a file (one per line).
relay_domains = /etc/postfix/relaydomains
# list of local networks (by default we relay mail for these hosts).
mynetworks = 10.0.0.0/24, 127.0.0.0/8
# what do we display to people connecting to port 25? By default it displays
# the version number which I do not.
smtpd_banner = $myhostname ESMTP $mail_name

Вообще говоря, любые файлы, которые просто вносят в список один элемент на строку (подобно /etc/postfix/mydestination или /etc/postfix/relaydomains) обычно сохраняются как плоские текстовые файлы. Файлы, которые содержат отображения (то есть псевдонимы, где Вы имеете записи вроде “root: someuser”) должны быть превращены в hashed-файлы базы данных для быстродействия (Вы можете определять тип файла как hash, dbm, и т.д.).

Подобно большинству IBM-программ, Postfix имеет очень замороченную лицензию, но обычно имеет открытые исходники и свободен. Postfix доступен на http://www.postfix.org. Двоичный пакет postfix можно скачать с:

ftp://contrib.redhat.com/contrib/libc6/i386
ftp://ftp.debian.org/pub/debian/dists/potato/main/binary-i386/mail
ftp://ftp.suse.com/pub/suse/i386/6.2/suse/n1

Sendmail Pro

Sendmail Pro представляет собой коммерческую версию Sendmail с поддержкой. Доступен на http://www.sendmail.com. Я так и не смог получить демонстрашку или найти того, кто получил, так что не могу сказать, какая тут разница. Но компания сообщила мне, что он использует то же самое ядро кода.

QMAIL

Qmail (аналог postfix) был создан как прямой ответ для устранения дефектов Sendmail. Qmail распространяется по GPL, но только в исходниках, так что Вам придется их компилировать. Вы должны также получить разрешение авторов прежде, чем Вы сделаете и распространите любые изменения (ничего хорошего, но таковы жизнь и авторы...). Очень небольшой код в Qmail выполняется как root, , и это очень модульно сравнено с Sendmail (который является довольно монолитным куском кода). Вы можете загрузить исходники с http://www.qmail.org.

Zmailer

Zmailer представляет собой GPL mailer, доступный на http://www.zmailer.org. Он поддерживает обработку crypto и вообще хорошо написан.

DMail

DMail коммерческий почтовый сервер, открытых исходников не имеет. Пробная версия доступна на http://netwinsite.com/dmail_first.htm.

nullmailer

nullmailer посылает почту интеллектуальным хостам (relays), так что локальная машина не должна выполнять программное обеспечение сервера. Доступен на http://em.ca/~bruceg/nullmailer.

MasqMail

MasqMail собирает письма в автономном режиме, а потом быстро обменивается почтой при связи с ISP. Может быть настроен на несколько ISP с адресом возврата и тому подобным. Загрузить можно с http://merlin.uni-sw.gwdg.de/~okurth/masqmail.

 

POP серверы

POP (post Office Protocol) является относительно простым протоколом, который позволяет Вам получать почту с сервера и удалять ее. Основные команды: USER, PASS (используется для регистрации), LIST (для получения списка писем и их размеров), RETR (для получения почты) и DELE (для удаления почты).

WU IMAPD (contains the default popd for most distros)

POP и IMAP сильно связаны, но очень различны, так что я опишу их по отдельности. POP просто позволяетвносить в список сообщения, получать и удалять их. Имеется много серверов POP для Linux, которые входят во многие дистрибутивы. Основные проблемы с POP подобны многим другим протоколам; usernames и пароли передаются открытым текстом. POP может работать с SSL, однако не все клиенты почты поддерживает SSL, большинство серверов POP приходит конфигурированным, чтобы использовать TCP_WRAPPERS, что является превосходным методом для ограничения доступа. Пожалуйста см. раздел по TCP_WRAPPERS для большего количества информации. POP работает как root так как должен обращаться к почтовым ящикам пользователей), и разумеется в разных серверах есть разные дыры... POP работает через порты 109 и 110 (109 в основном устаревший), по протоколу tcp. Сервер Washington University IMAPD также приходит с сервером pop. Скачать можно с http://www.washington.edu/imap.

ipfwadm -I -a accept -P tcp -S 10.0.0.0/8 -D 0.0.0.0/0 110
ipfwadm -I -a accept -P tcp -S some.trusted.host -D 0.0.0.0/0 110
ipfwadm -I -a deny -P tcp -S 0.0.0.0/0 -D 0.0.0.0/0 110

или

ipchains -A input -p tcp -j ACCEPT -s 10.0.0.0/8 -d 0.0.0.0/0 110
ipchains -A input -p tcp -j ACCEPT -s some.trusted.host -d 0.0.0.0/0 110
ipchains -A input -p tcp -j DENY -s 0.0.0.0/0 -d 0.0.0.0/0 110
Cyrus

Cyrus является сервером imap (также поддерживает pop и kpop), нацеленным на ‘закрытые’ среды. То есть то, что пользователи не будут иметь никакого доступа к серверу, кроме imap или pop. Это позволяет Cyrus сохранять почту намного более безопасным способом и учитывает более простое управление больших инсталляций. Cyrus не GNU-лицензирован, но относительно “free ”, и доступен на http://asg.web.cmu.edu/cyrus/imapd. Набор дополнительных утилит для Cyrus можно скачать с ftp://ftp.hr.vc-graz.ac.at/cyrus-tools.

IDS POP

IDS (It Doesn’t Suck) POP облегченный вариант popd для небольших систем. Доступен по GPL на http://www.nodomainname.net/software/ids-pop.

GNU pop3d

Маленький и шустрый pop daemon, доступен по GNU на http://www.nodomainname.net/software/gnu-pop3d.shtml.

Qpopper

Qpopper freeware-продукт Qualcomm (разработчика пакета Eudora). Я его не рекомендую (исходники можно скачать с ftp://ftp.qualcomm.com/eudora/servers/unix/popper/). Доступен на http://eudora.qualcomm.com/freeware/qpop.html.

IMAP

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

WU IMAPD (imapd по умолчанию для большинства дистрибутивов)

IMAP представляет собой усиленный POP. Он позволяет не только получать почту с сервера, но и управлять ей на сервере (создавать папки для хранения почты на сервере, например). Возможна работа с несколькими почтовыми ящиками, несколько пользователей могут разделять почтовый ящик, можно сначала загружать только заголовки писем для их анализа. IMAP идеален для любого серьезного применения e-mail. По умолчанию серверы POP и IMAP, поставляемые в большинстве дистрибутивов (объединенные в один пакет, названный, что достаточно странно, imapd) покрывают все потребности.

IMAP также запускается как root, хотя imapd обычно понижается к привилегии пользователя, обращающегося к нему, и не может быть легко установлен, чтобы выполняться как не-root пользователь, так как он должен открывать почтовые ящики (а в случае IMAP создает папки, файлы и т.д. в основном каталоге пользователя), так что он не может при запуске иметь привилегии кого-либо, кроме root. Однако, после идентификации пользователя, принятие его привилегий вполне возможно. При этом данные серверы не могут быть chroot'ed (IMAP нужен доступ к /var/spool/mail и в основной каталог пользователя). Самая лучшая стратегия: своевременно обновлять софт. Washington University (WU) IMAPD доступен на http://www.washington.edu/imap.

IMAP работает через порт 143, и многие серверы IMAPD поддерживают TCP_WRAPPERS, делая блокировку относительно легкой.

ipfwadm -I -a accept -P tcp -S 10.0.0.0/8 -D 0.0.0.0/0 143
ipfwadm -I -a accept -P tcp -S some.trusted.host -D 0.0.0.0/0 143
ipfwadm -I -a deny -P tcp -S 0.0.0.0/0 -D 0.0.0.0/0 143

или

ipchains -A input -p tcp -j ACCEPT -s 10.0.0.0/8 -d 0.0.0.0/0 143
ipchains -A input -p tcp -j ACCEPT -s some.trusted.host -d 0.0.0.0/0 143
ipchains -A input -p tcp -j DENY -s 0.0.0.0/0 -d 0.0.0.0/0 143
Cyrus

Cyrus является сервером imap (также поддерживает pop и kpop), нацеленным на ‘закрытые’ среды. То есть то, что пользователи не будут иметь никакого доступа к серверу, кроме imap или pop. Это позволяет Cyrus сохранять почту намного более безопасным способом и учитывает более простое управление больших инсталляций. Cyrus не GNU-лицензирован, но относительно “free ”, и доступен на http://asg.web.cmu.edu/cyrus/imapd. Набор дополнительных утилит для Cyrus можно скачать с ftp://ftp.hr.vc-graz.ac.at/cyrus-tools.

Courier-IMAP

Courier-IMAP легкий сервер IMAP определенно для использования с почтовыми ящиками стиля Maildir (не /var/spool/mail). Скачать можно с http://www.inter7.com/courierimap.

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

Linux нечувствительна к вирусам, но они могут доставить МНОГО проблем на Windows-клиентах.

AMaViS

AMaViS использует программы третьих фирм (например, McAfee) для проверки на вирусы входящей почты. Получить AMaViS можно на http://aachalon.de/AMaViS. Обязательно берите последнюю версию!

Sendmail

Использование AMAVIS с Sendmail относительно просто, он имеет программу, названную "scanmail", который действует как замена для procmail (обычно программа, которая обрабатывает локальную доставку email). Когда email приходит вместо того, чтобы использовать procmail, чтобы доставить почту, Sendmail вызывает scanmail, который распаковывает и декодирует любые вложения и затем использует вирусный сканер (по Вашему выбору), чтобы просмотреть вложения. Если никакой вирус не найден, то доставка почты идет как обычно. Если вирус найден, email послан назад отправителю с сообщением, что они послали вирус, и будет послан email получателю, сообщающий о человеке, который послал им вирус. Инструкции смотрите на http://satan.oih.rwth-aachen.de/AMaViS/amavis.html.

Postfix

Так как Postfix может использовать procmail, чтобы делать локальную доставку почты, это должно работать в теории без проблем. Практически требуется приложить несколько больше усилий, чтобы работать правильно. Замените строку в файле main.cf:

mailbox_command = /usr/bin/procmail

на строку:

mailbox_command = /usr/sbin/scanmails

и перезапустите postfix. Для локального предупреждения (предполагаемому адресату вируса) имя машины (sundog, mailserver01) должно быть упомянуто в “mydestination” в файле main.cf, иначе предупреждение не будет послано вовсе. Вы должны (и большинство сайтов так делают) переназначить root email на пользователя использующего файл псевдонимов, иначе предупреждения не будут доходить до него. По умолчанию также почта к “virusalert” перенаправлена к root, Вы должны также переназначить эту почту нормальному пользователю.

 

Улучшение безопасности E-Mail пакетом Procmail

procmail (по умолчанию обычный локальный транспортный агент для почты) имеет широкое разнообразие свойств, которые могут использоваться, чтобы помочь обезопасить почту. Подробности ищите на ftp://ftp.rubyriver.com/pub/jhardin/antispam/procmail-security.html.

SSL в сочетании с серверами POP и IMAP

 

simap stream tcp nowait root /usr/sbin/stunnel imapd -l imapd
RANDFILE = stunnel.rnd
[ req ]
default_bits = 1024
encrypt_key = no
distinguished_name = req_dn
x509_extensions = cert_type
[ req_dn ]
countryName = Country Name (2 letter code)
organizationName = Organization Name (eg, company)
0.commonName = Common Name (FQDN of your server)
[ cert_type ]
nsCertType = server
openssl req -new -x509 -days 365 -config /etc/stunnel.cnf -out /etc/stunnel.pem -keyout stunnel.pem
openssl x509 -subject -dates -fingerprint -noout -in stunnel.pem

Некоммерческий софт для списков рассылки

SmartList

http://www.procmail.org

Majordomo

http://www.greatcircle.com/majordomo

Minordomo

http://www.nodomainname.net/software/minordomo

Sympa

http://listes.cru.fr/sympa

Listar

http://www.listar.org

Back

Security Portal

Written by Kurt Seifried


Шифрование сервисов и данных

Шифрование данных и почты

Шифрование жесткого диска

Сетевое шифрование

Источники случайных данных

Как спрятать данные на диске

Шифрование данных и почты

Имеется много программ для шифрования. Часть работает на уровне файла (PGP, GnuPG), часть на уровне устройства (Cryptographic File System). Это используется в основном для хранения данных. Передача сопряжена с рядом проблем: одинаковые программы, совместимые версии программ и обмен ключами по защищенному каналу, что сложно. Системы дисковой защиты наподобие CFS (Cryptographic FileSystem) просты в использовании и требуют только чтобы пользователь ввел определенный ключ для доступа к файлам. Хорошая статья о выборе размеров ключа есть на http://www.cryptosavvy.com, рекомендую ознакомиться, так как там рассмотрен ряд несколько неожиданных проблем.

PGP (Pretty Good Privacy)

Это одна из популярнейших программ для публичного шифрования. Она перенесена на Unix, Windows и Macintosh. К сожалению, это теперь коммерциализировано, что закончилось потерей качества для пользователей. Я лично полагаю, что любое программное обеспечение используемое, чтобы шифровать или иначе защищать данные ДОЛЖНО иметь открытые исходные коды (а как еще Вы убедитесь что это безопасно?). PGP сейчас продан Network Associates и я не могу его честно рекомендовать. PGP можно скачать с ftp://ftp.zedz.net, http://www.pgp.com и с http://www.pgpi.org.

GnuPG (Gnu Privacy Guard)

Альтернатива PGP, GnuPG (GPG) с полностью открытым исходным кодом и GNU licensed. Доступна на http://www.gnupg.org , в исходниках и откомпилированных модулях для windows и RPM. Моя статья о GnuPG есть на http://www.securityportal.com/closet/closet19990922.html.

pgp4pine

pgp4pine PGP-shell для pine, позаоляет легко работать с PGP/GnuPG из pine. Скачать можно с http://www.rhrk.uni-kl.de/~lamm/pgp4pine.

HardEncrypt

HardEncrypt генератор записей времени и набор утилит для работы с ними. В теории каждая такая запись практически непробиваема. Идеален для передачи важных данных. Скачать HardEncrypt можно с http://www.csuglab.cornell.edu/Info/People/jcr13/HardenedCriminal/main.html .

secret-share

secret-share позволяет Вам разрывать файл на так много кусков, на сколько Вы посчитаете нужным. Все части шифруются и необходимы для прочтения файла. Скачать можно с http://www.mindrot.org/code/secret-share.php3.

Шифрование жесткого диска

CFS (Cryptographic Filesystem)

CFS хранит все аднные на жестком диске в зашифрованном виде и просто использует для их шифрования какую-либо программу (например, PGP). Официальный сайт: http://www.cryptography.org, RPM доступен на ftp://ftp.zedz.net/pub/replay/linux/redhat, а Debian binaries есть на http://www.debian.org/Packages/unstable/non-us/cfs.html.

TCFS

TCFS представляет собой утилиту уровня ядра для шифрования данных, похожую на CFS. Поскольку реализована она на уровне ядра, работает куда быстрее. Благодаря интеграции с NFS Вы можете распространять зашифрованные данные за пределами локальной машины. Дешифровка производится на машине клиента, что позволяет передавать по сети пароли и прочуб критичную информацию. Скачать TCFS можно с http://tcfs.dia.unisa.it.

PPDD

PPDD позволяет создать зашифрованный раздел на диске. Это может быть настоящий раздел или loopback device (который расположен в файле, но монтируется как файловая система). Он использует довольно хороший и быстрый алгоритм. Скачать PPDD можно с http://linux01.gwdg.de/~alatham.

Encrypted Home Directory

Encrypted Home Directory похож на CFS, но ориентирован на шифрование одиночного каталога. Обычно он создает файл размера X в /crypt с Вашим UID и монтирует его как loopback device, чтобы Вы могли к нему обратиться. Данные шифруются и дешифруются на лету по мере доступа к ним (аналогично CFS). Скачать можно с http://members.home.net/id-est.

BestCrypt

BestCrypt коммерческий продукт с исходниками доступными для Windows и Linux. Скачать можно с http://www.jetico.com .

Сетевое шифрование

 

IPSec

IP Sec посвящен целый раздел.

SSL

В основном SSL применяется для защиты отдельных ресурсов (например, WWW). Хороший FAQ есть на http://www2.psy.uq.edu.au/~ftp/Crypto. OpenSSL, OpenSource-реализация библиотек SSL, доступна на http://www.openssl.org.

Источники случайных данных

В процессе шифрования часто нужны хорошие случайные числа. В Linux для их построения специально предусмотрены устройства /dev/random и /dev/urandom, которые являются хорошими, но не всегда большими. Часть уравнения измеряет 'произвольные' события, обрабатывает эти данные и делает их доступными (через (u)random). Эти произвольные события включают: ввод с клавиатуры и мыши, прерывания, чтение диска и т.д.

Однако, многие серверы не имеют никакой клавиатуры и мыши, а новые "blackbox" изделия часто не содержат жесткого диска. Так что найти источник произвольных данных становится трудновато. Есть много решений, но одно из них наиболее реально. Это встроенный в PIII генератор случайных чисел, который меряет разницу температур CPU.

Как спрятать данные на диске

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

StegHide

StegHide прячет данные в файлах картинок и звуков, где в байте используются не все биты. Так как данные шифрованы, доказать их наличие очень трудно. Единственная проблема связана с объемами: для сокрытия мегабайта шифрованных данных понадобится звук или картинка размеров порядка нескольких мегабайт. Скачать StegHide можно с http://www.stego.com.

StegFS

Steganographic File System фактически скрывает данные на диске, делая трудным доказательство того, что они вообще есть. Это может быть очень полезно, поскольку нападавший сначала должен найти данные, уже не говоря о том, что они зашифрованы. Скачать StegFS можно с http://ban.joh.cam.ac.uk/~adm36/StegFS.

OutGuess

OutGuess прячет данные в файлах картинок, так что файлы можно передавать не привлекая к ним лишнего внимания. Скачать можно с http://www.outguess.org.

Back

Security Portal

Written by Kurt Seifried


Серверы файлов и печати

Обзор

Сетевая загрузка

Совместное исппользование файлов в UNIX

Печать под Linux

Разделение файлов и печать в Windows

Samba

Общие методы совместного использования файлов

Разделение исходников

 

Обзор

Имеется много способов совместно использовать ресурсы в локальной сети (LAN). Основонй интерес редставляет то, что клиенты работают под чем угодно: (UNIX, Windows, MAC, Novell...). Вы также должны принять во внимание тип файлов, которые Вы используете совместно: они просто файлы данных, документы, исходные тексты, файлы для сетевой загрузки или еще что-то?

Сетевая загрузка

tftp

tftp используется всем от X терминалов до маршрутизаторов Cisco при загрузке, чтобы получить их начальные файлы начальной загрузки и данные конфигурации.

Совместное исппользование файлов в UNIX

NFS

NFS наиболее универсальный метод разделения файлов, вообще поддерживаемый UNIX. Почти каждая UNIX OS (Linux, *BSD, Sun...) поддерживает NFS. Есть коммерческие клиенты и серверы NFS для Windows. NFS идеален для разделения каталогов пользователей и других файловых систем реального времени.

rsync

rsync идеальный метод для синхронизирования больших количеств данных, которые не критические ко времени (то есть, для ftp зеркального отражения сайтов). Это средство использует чрезвычайно эффективный алгоритм, чтобы найти файлы, которые являются более новыми, и затем копирует их, а также имеет несколько хороших свойств защиты.

Печать под Linux

Имеется ряд демонов печати (print daemons) для Linux, но они подражают lpd (оригиналу).

lpd

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

CUPS

Common UNIX Printing System (CUPS) доступен по лицензии GPL и только что появился (версия 1.0). CUPS можно скаччать с http://www.cups.org.

LPRng

Новое поколение LPR, вариант LPR.

pdq

Разделение файлов и печать в Windows

Samba

SMB (server message block) текущий протокол совместного использования файлов в windows. Samba делает невероятную работу для обеспечения всех услуг, требуемых, чтобы правильно совместно использовать файлы windows (например, поддерживает сервисы Primary и Backup Domain Controller). Вы также можете предоставить windows-доступ к принтерам через Samba и обращать через smbclient к Windows-принтерам.

Общие методы совместного использования файлов

Имеется также ряд общих методов совместного использования файлов, поддерживаемых многими клиентами и серверами.

Coda

Расширенная сетевая файловая система. http://www.coda.cs.cmu.edu.

Drall 

Основанная на https система безопасного разделения файлов. Скачать можно с http://www.edlund.org/hacks/drall/index.html.

AFS

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

Разделение исходников

CVS

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

Back

Security Portal

Written by Kurt Seifried


Безопасность файлов и файловых систем

Обзор

Безопасное удаление файлов

Списки контроля доступа (ACL)

Системные файлы

Обзор

Надежная операционная система нуждается в надежной файловой системе. В случае Linux это файловая система ext2 (EXTended, version 2). Фактически, она аналогична файловым системам всех UNIX-подобных ОС. Она поддерживает права доступа (read, write, execute, sticky bit, suid, sgid и так далее), принадлежность (user, group, other) и другие стандартные функции. Некоторые из недостатков: никакого журналирования и никаких списков контроля доступа (Access Control Lists) здесь нет. По слухам, они появятся в ext3. Из плюсов надо отметить, что Linux имеет превосходный программный RAID, поддерживая уровни 0, 1 и 5 очень хорошо (RAID не связан с защитой, но связан со стабильностью). Имеется превосходный HOWTO по файловым системам в Linux на http://www.penguin.cz/~mhi/fs/Filesystems-HOWTO/Filesystems-HOWTO.html.

Основные утилиты для работы с файлами: “ls”, “chown”, “chmod” и “find”. Впрочем, есть еще много других, в том числе ln (создает связи), stat (выдает сведения о файле). Для создания и управления файловыми системами есть “fdisk” (старый добрый fdisk), “mkfs” (MaKe FileSystem, форматирует разделы) и “fsck” (FileSystem ChecK, исправляет ошибки на дисках). Linux может быть легко поставлена под угрозу, если получен доступ к некоторым файлам, например зашифрованным паролям, чтобы использовать против них подбор паролей по словарю. Это общая цель нападающих, приходящих по сети (плохо написанные CGI-скрипты, кажется, любимый способ). Еще хуже, если пользователь получит доступ на запись к системным файлам. Тут можно ждать чего угодно: от захвата управления до случайного стирания половины системы. Одной из дыр является "tmp races", когда setuid-программа (работает с правами root) создает временный файл, обычно в /tmp, и не проверяет существование ссылок. Хакер может создать жесткую ссылку на данный файл, и когда исходный файл будет стерт, добраться по ссылке до нужного файла, например, файла паролей (замечание переводчика: придумано здорово, надо будет попробовать). Как предотвратить такие нападения?

Просто: правильно настроить систему. Есть два каталога, в которые пользователи должны иметь право записи: /tmp и /home, размещение которых на отдельных разделах позволяет избежать заполнения пользователями критичных файловых систем (переполненная система / приводит к очень плохим последствиям). Переполненная система /home приведет к тому, что никто из пользователей в систему зайти не сможет (кроме root: его каталог /root). Разместите на отдельном разделе /tmp и /home, если пользователям предоставлен shell-доступ к серверу, размещение на отдельном разделе /etc, /var и /usr тоже хорошая идея.

Первичные инструментальные средства для получения информации относительно файлов и файловых систем все относительно простые и легки в использовании. “df” (показывает использование дисков) также покажет использование inode: “df –i” (inodes хранит данные о файлах, их расположение на диске, и Вы можете исчерпать их прежде, чем Вы исчерпаете дисковое пространство, если Вы имеете много маленьких файлов. Это кончается сообщением об ошибке "disk full" когда “df” сообщает, что имеется свободное пространство (“df –i” покажет, что все inodes используются). Это подобно записям о файлах в Windows с vfat, которая реально хранит имена в формате 8.3, используя несколько записей для длинных имен с максимумом в 512 записей на каталог. Утилита “du” сообщит Вам размер относительно каталогов, который является очень полезным для выяснения, какой сколько занимает, и куда же делось все место на диске. Команда “du ” отобразит текущий каталог и все его подкаталоги, к которым Вы имеет доступ. Команда “du /dir/name” отобразит то же самое для заданного каталога. Есть опция “-s” для резюме, которое является полезным для каталогов подобных /usr/src/linux. Чтобы получить информацию относительно файлов, первый инструмент ls (аналог DOS-команды “dir”), “ls” показывает только имена файлов/каталогов, “ls –l ” показывает также размер файлов, их принадлежность, права доступа и еще ряд технических сведений. Команда 'ls -la' также отобразит сведения о каталогах и файлах, имена которых начинаются с точки (“.”), что нормально для файлов настройки (.bash_history, .bash_logout). Утилита “ ls” имеет несколько дюжин параметров для разной сортировки результатов. Подробности можно получить командой “man ls”. Команда “stat ” сообщает всю жизненную статистику относительно данного файла (дата создание, последнее обращение, inode и проччее).

Для управления файлами и каталогами есть утилиты cp, mv, rm (CoPy, MoVe и ReMove), для настройки прав доступа есть chown (задает владельца и группу файла (группа "прочие" значит "прочие", как в Novell или группа 'everyone' в NT), chmod (меняет права доступа к файлу). Основные права: read (чтение), write (заись) и execute (выолнение), дополнительно есть setuid (наследование идентификатора владельца), setguid (наследование группы владельца, бывает нужно для запуска некоторых программ, которые хотят, чтобы их запускал определенный пользователь, обычно root), sticky bit и другие. Используя присоединение пользователей к группам и команды chmod и chown можно имитировать ACL, но гораздо менее гибко, чем рава доступа в Sun/AIX/NT (по слухам, в ext3 появятся полноценные списки доступа). Пожалуйста, будьте особенно осторожны с setuid/setguid-программами, так как любые проблемы в такой программе сильно вырастут по сравнению с обычной!

Очень хороша команда “find”. Она ищет файлы и может фильтровать их на основании прав доступа, владельца, размера, даты, имени и множества других критериев. Вот примеры поиска setuid/guid-программ:

чтобы найти все setuid-программы:

find / -perm +4000

чтобы найти все setgid-программы:

find / -perm +2000

Основой защиты файлов являются права доступа. В Linux файл принадлежит ('owned') пользователю и имеет 3 набора прав доступа для самого пользователя (User), его группы (Group) и все остальных (Other). Вы можете установить кому принадлежит файл (и к какой группе относится) командой:

chown user:group object

здесь object является файлом, каталогом или чем-то еще. Чтобы закрыть выполнение файла кем-либо, надо написать:

chmod x="" object

здесь x принимает значения a|g|u|o (All/User/Group/Other), и устанавливает права доступа в "" (никакого доступа вообще), а object может быть каталогом или файлом. Помните, что root ВСЕГДА может менять права доступа к файлу, и читать/записывать/выполнять его, Linux не обеспечивает защиту root. Также, кто бы ни обладает каталогом, в котором находится объект, он также может менять права доступа к объекту в данном каталоге (даже если сам объект ему и не принадлежит). Так как root владеет каталогом /, он может менять права доступа к любому объекту в файловой системе.

Безопасное удаление файлов

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

wipe (durakb@crit2.univ-montp2.fr)

wipe надежно удаляет данные, перезаписывая файл многократно разными образцами. Вы можете использовать wipe для файлов или устройств. В первом случае помните, что имя файла и техническая информация о нем удалена не будет, будет уничтожено только его содержимое, после чего файл будет бесполезен для какого-либо восстановления. Скачать wipe можно с http://gsu.linux.org.tr/wipe.

wipe (thomassr@erols.com)

Еще один удалитель для файлов, но он не поддерживает чистку устройств. Доступен на http://users.erols.com/thomassr/zero/download/wipe.

Списки контроля доступа (ACL)

Один главный компонент файловой системы, которого пока нет в Linux, это поддержка Access Control Lists (списков контроля доступа) вместо обычных User, Group и Other. ACL позволяет более гибко управлять доступом, предоставляя права доступа к каждому объекту конкретному пользователю. Например, можно предоставить полный доступ к файлу пользователю “bob ”, доступ на чтение пользователю “mary”, доступ для изменения группе “sales” и закрыть доступ всем остальным. В настоящее время в Linux обычными методами сделать такое нельзя или крайне трудно. Значит, нужна ACL. Сейчас поддержка ACL для Linux есть в виде патча для ядра. Справедливости ради надо отметить, что поддержка ACL реализована в NT (для файловой системы NTFS), и является одним из самых уязвимых мест защиты NT (если применительно к NT вообще корректно говорить о какой-либо защите).

RSBAC

Информация доступна здесь.

Проект Linux trustees (ACL) project

Информация доступна здесь.

Системные файлы

/etc/passwd

Файл паролей, возможно, наиболее критический системный файл в Linux (и большинстве других UNIX'ов). Он хранит сисок пользователей, соответствие их логинов, user ID и group ID. Он также может хранить зашифрованные пароли, но кудабезопасней хранить их отдельно в файле /etc/shadow (затенение паролей). Этот файл ДОЛЖЕН БЫТЬ открыт на чтение всем, иначе даже такая простая команда, как ls правильно работать не сможет. Поле GECOS (иногда пишут GCOS) может хранить реальное имя пользователя и его телефон. В данном файле также хранится информация о домашнем каталоге пользователя (в него он попадает при входе в систему) и его оболочке (shell, например, bash или программе menu), упомянутой в файле /etc/shells. Формат записей такой:

username:encrypted_password:UID:GID:GECOS_field:home_directory:login_shell

Пароли зашифрованы одним способом (обычно crypt, новые дистрибутивы поддерживают MD5, который является знаменательно более сильным). Пароли нельзя восстановить из зашрифованного вида, но можно попробовать шифровать слова из словаря (или просто перебором) и сравнивать результат с зашифрованным паролем. Как только совпал, пароль найден. Само по себе такое не очень плохо, хуже когда пользователи выбирают легко предполагаемые пароли. Самые современные результаты исследований показали, что 25% паролей можно найти за час или около того, и что намного хуже, 4% пользователей, выбирают их собственное имя как пароль. Пустые поля в поле пароля значат отсутствие пароля вообще. Так появляются записи вида “::”, которые критичны для первых четырех полей в записи пользователя (имя, пароль, uid и gid).

/etc/shadow

Файл shadow хранит пары "username:password" и дополнительные сведения о логине, например, время окончания его действия. Он должен быть доступен на чтение и запись только для root.

/etc/groups

Файл groups хранит данные о принадлежности пользователей к группам и опциональные поля, вроде групповых паролей (сейчас обычно хранятся в файле gshadow), данный файл должен быть доступен на чтение всем пользователям для корректной работы системы. Его формат:

groupname:encrypted_password:GID:member1,member2,member3...

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

/etc/gshadow

Аналогично файлу shadow, данный файл хранит группы и пароли для них. Данный файл должен быть доступен на чтение и запись только для root.

/etc/login.defs

Этот файл (/etc/login.defs) позволяет Вам определять некоторые полезные значения по умолчанию для различных программ типа useradd или окончания времени действия пароля. Он имеет тенденцию немного изменяться в разных дистрибутивах, но обычно хорошо прокомментирован и имеет тенденцию содержать нормальные значения по умолчанию.

/etc/shells

Файл shells хранит список доступных оболочек (shells), если оболочка пользователя в нем не упомянута, зайти в систему он не сможет. Подробности в разделе про telnetd.

/etc/securetty

Данный файл хранит список терминалов с которых может зайти root. Консоли обычно обозначены с /dev/tty1 по /dev/tty6. Последовательные порты (если root может заходить по модему) обозначены обычно начиная с /dev/ttyS0 и выше. Если допускается вход root по сети (плохая идея, пользуйтесь лучше sudo), то добавьте /dev/ttyp1 и выше (если зашли 30 пользователей, а потом попытался зайти root, то он зайдет с /dev/ttyp31). Лучше всего ограничьте доступ root устройством /dev/tty1 и поставьте программу sudo: так оно безопасней.

Back

Security Portal

Written by Kurt Seifried


Firewalling

Обзор

Пакеты Firewall для Linux

Firewall piercing

Создание правил и скрипты

Обзор

Firewalling представляет собой фильтрацию сетевого трафика между Вашей сетью и другими сетями (Internet, какая-то другая LAN), который может быть запрещен (в случае Internet) или разрешен (другой этаж Вашего здания). Подобно межэтажным перегородкам в больших домах, сетевой firewall может защитить от атаки при нарушении безопасности в одном сегменте сети. Хорошей FAQ по Internet firewall есть на http://www.interhack.net/pubs/fwfaq.

Пакеты Firewall для Linux

Linux имеет свой firewall в виде ipfwadm, который представляет собой простой фильтр пакетного уровня. С ядра 2.1 он заменен на ipchains, который имеет больше функций. В ядре 2.4 ожидается еще более функциональный фильтр. Однако, это все еще базисные фильтры пакетов, и они не учитывают продвинутые свойства типа stateful проверки или некоторых типов proxying подключений. Linux поддерживает IPMASQ, расширенную форму NAT (Network Address Translation). IPMASQ позволяет машинам Вашей сети работать в Internet, но кэширует их соединения на уровне IP. Таким образом, весь внешний трафик идет через одну машину (сервер Linux IPMASQ), что защищает структуру внутренней сети от изучения. В качестве дополнительного бонуса упомянем, что клиенты во внутренней сети не требуют настройки прокси; если сервер Linux IPMASQ сконфигурирован правильно, и клиенты используют его как шлюз по умолчанию, то все должно работать нормально.

ipchains и ipfwadm имеют следующие базовые возможности:

блокировка/разрешение передачи данных на основе IP/порта/интерфейса/источника/получателя
маскировка соединений на основе IP/порта/интерфейса/источника/получателя

Кроме того, ipchains дополнительно поддерживает:

переадресацию портов
создание цепочек, для более запутанных правил и условий
quality of service (QOS) маршрутизация, полезная на низкоскоростных подключениях
указание IP/порта/интерфейса как обратной спецификации (используя !)

Firewall-HOWTO и "man <command>" (ipchains или ipfwadm) хорошо описывают механизмы построения и работы правил, но там нет стратегии безопасности с использованием firewal. Ваш первый выбор: политика когда по умолчанию всем все запрещено, а разрешено только то, что нужно и только тем, кому можно, или прямо противоположный подход, когда всем открыт доступ ко всем Вашим сервисам.

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

Рассмотрим пример. У Вас есть защищенный firewallом сервер с запущенным Apache, Вы поставили WU-FTPD, чтобы пользователи могли выкладывать свои странички по FTP, и забыли сменить правила для firewall. Если используется политика полного разрешения, кто угодно из Internet сможет обратиться к Вашему ftp-серверу, и если у Вас старая версия, Вы быстро испытаете острые ощущения! А вот при политике запрета всего по умолчанию, до сервера не сможет добраться никто, в том числе и Ваши пользователи. Не беда, они Вам быстро напомнят про настройку.

Я решил не описывать здесь всех правил firewall для каждого сервиса, а давать их в разделах по конкретным сервисам.

IPFWADM

Ipfwadm надежный фильтр пакетов для Linux, хотя ему и не хватает ряда свойств, доступных в Ipchains. Ipfwadm поддерживает только 3 действия для пакета: accept, deny или reject, в то время как правила ipchains могут применяться к 6 встроенным реакциям или определяемым пользователем. Ipfwadm пригоден только для простого IP-уровня firewall, ipmasquerading и если Вы планируете использовать FreeS/WAN. Осноыные опции: задать направление (in, out или вместе, что полезно с флажком интерфейса), входные и выходные правила, правила передачи (скажем, у Вас есть несколько интерфейсов, также охватывают правила маскировки) правила маскировки для времени ожидания и т.п. Вы можете вставлять, конкатенировать и удалять правила, устанавливать заданную по умолчанию политику, и вносить в список все правила. Это очень похоже на ipchains с некоторыми малыми изменениями. Дальше приводится скрипт для сервера, соединяющего две сети (10.0.0.x на eth0, 10.0.0.1 и 192.168.0.x на eth1, 192.168.0.1) с запущенным сервером почты.

#!/bin/bash
#
# Flush all the rule sets first
#
ipfwadm -f -I
ipfwadm -f -O
ipfwadm -f -F
#
# Allow forwarding between the two networks and otherwise deny it
# for security
#
ipfwadm -F -a accept -P all -S 10.0.0.0/24 -i eth0 -D 192.168.0.0/24
ipfwadm -F -a accept -P all -S 192.168.0.0/24 -i eth1 -D 10.0.0.0/24
ipfwadm -F -p deny
#
# And of course we have to allow those packets in
#
ipfwadm -I -a accept -P tcp -S 10.0.0.0/24 -i eth0 -D 192.168.0.0/24
ipfwadm -I -a accept -P tcp -S 192.168.0.0/24 -i eth1 -D 10.0.0.0/24
#
# Let them access the mail server port on the server but nothing else
#
ipfwadm -I -a accept -P tcp -S 10.0.0.0/24 -i eth0 -D 10.0.0.1 25
ipfwadm -I -a accept -P tcp -S 192.168.0.0/24 -i eth0 -D 192.168.0.1 25
ipfwadm -I -p deny

FreeS/WAN сейчас поддерживает серию ядер 2.2.x, you should never choose ipfwadm over ipchains. ipchains offers a much finer degree of control and is much more flexible then ipfwadm.

IPCHAINS

ipchains содержит несколько новых свойств по сравнению с ipfwadm; Вы можете создавать цепочки правил (с именами) и связывать их вместе, при администрировании firewall гораздо проще. Ipchains поддерживает большее количество реакций, чем ipfwadm. Вы можете указывать правило в: ACCEPT, DENY, REJECT, MASQ, REDIRECT, RETURN или задать свою реакцию. Это очень мощное средство, например я мог бы переназначать все пакеты, направляющиеся в порт 80 (трафик www) моей машины шлюза на локальный порт 3128 сервера Squid. Вы можете также использовать, это вместе с quality of service routing, пример, данный в документации ipfwadm показывает расстановку по приоритетам трафика через PPP, Вы можете давать telnet намного более высокий приоритет, затем поставить ftp, уменьшая проблемы с загруженной линией. Обычно я создаю /etc/rc.d/init.d/ipchains-sh и вызываю его до запуска сети, чтобы сервер был ВСЕГДА защищен.

Ниже приведен скрипт для шлюза с двумя интерфейсами, причина использования DENY вместо REJECT в том, что так пакет будет отброшен немедленно, что ускоряет работу в сети. Я также не советую вести протокол для всех пакетов, это требует очень много места на диске и позволяет свалить Ваш сервер при ьыстром соединении, исчерпав все место на диске. Домашняя страница ipchains расположена на http://netfilter.kernelnotes.org.

#!/bin/bash
#
# This script sets up firewall rules appropriate for a server with
# 2 interfaces
# running as a gateway
# This script needs to be edited if you plan to use it.
# We assume the internal machines call all talk to the gateway, so no
# rules block
# internal traffic
#
# A couple of variables
#
# ETH0 is the IP address on ETH0 (the external interface)
# ETH0NET is the network 
# ETH0NETMASK is the network mask
# TRUSTEDHOST1 is a trusted host (for webmin/ssh)
# TRUSTEDHOST2 is a trusted host (for webmin/ssh)
# ETH1IP is the IP address on ETH1 (internal interface)
# ETH1NET is the network
# ETH1NETMASK is the network mask
#
ETH0IP=1.1.1.1
ETH0NET=1.1.1.0
ETH0NETMASK=24
TRUSTEDHOST1=1.5.1.1
TRUSTEDHOST2=1.5.1.2
ETH1IP=10.0.0.1
ETH1NET=10.0.0.0
ETH1NETMASK=24
#
PATH=/sbin
# FLUSH ALL RULES
ipchains -F input
ipchains -F output
ipchains -F forward
# ANTI-SPOOFING
ipchains -A input -p all -j DENY -s 10.0.0.0/8 -i eth0 -d 0.0.0.0/0
ipchains -A input -p all -j DENY -s 127.0.0.0/8 -i eth0 -d 0.0.0.0/0
ipchains -A input -p all -j DENY -s 192.168.0.0/16 -i eth0 -d 0.0.0.0/0
ipchains -A input -p all -j DENY -s 172.16.0.0/16 -i eth0 -d 0.0.0.0/0
ipchains -A input -p all -j DENY -s $ETH0IP -i eth0 -d 0.0.0.0/0
# ICMP FIRST
ipchains -A input -p icmp -j ACCEPT -s $ETH0NET/$ETH0NETMASK -i eth0 -d 0.0.0.0/0
ipchains -A input -p icmp -j DENY -s 0.0.0.0/0 -i eth0 -d 0.0.0.0/0
# SSH
ipchains -A input -p tcp -j ACCEPT -s $TRUSTEDHOST1 -i eth0 -d 0.0.0.0/0 22
ipchains -A input -p tcp -j ACCEPT -s $TRUSTEDHOST2 -i eth0 -d 0.0.0.0/0 22
# BLOCKING 1:1023
ipchains -A input -p tcp -j DENY -s 0.0.0.0/0 -i eth0 -d 0.0.0.0/0 1:1023
ipchains -A input -p udp -j DENY -s 0.0.0.0/0 -i eth0 -d 0.0.0.0/0 1:1023
# BLOCKING OTHER THINGS
ipchains -A input -p tcp -j DENY -s 0.0.0.0/0 -i eth0 -d 0.0.0.0/0 1109
ipchains -A input -p tcp -j DENY -s 0.0.0.0/0 -i eth0 -d 0.0.0.0/0 1524
ipchains -A input -p tcp -j DENY -s 0.0.0.0/0 -i eth0 -d 0.0.0.0/0 1600
ipchains -A input -p tcp -j DENY -s 0.0.0.0/0 -i eth0 -d 0.0.0.0/0 2003
ipchains -A input -p udp -j DENY -s 0.0.0.0/0 -i eth0 -d 0.0.0.0/0 2049
ipchains -A input -p tcp -j DENY -s 0.0.0.0/0 -i eth0 -d 0.0.0.0/0 2105
ipchains -A input -p udp -j DENY -s 0.0.0.0/0 -i eth0 -d 0.0.0.0/0 3001
ipchains -A input -p tcp -j DENY -s 0.0.0.0/0 -i eth0 -d 0.0.0.0/0 3001
ipchains -A input -p udp -j DENY -s 0.0.0.0/0 -i eth0 -d 0.0.0.0/0 3128:3130
ipchains -A input -p tcp -j DENY -s 0.0.0.0/0 -i eth0 -d 0.0.0.0/0 3128:3130
ipchains -A input -p tcp -j DENY -s 0.0.0.0/0 -i eth0 -d 0.0.0.0/0 3306
ipchains -A input -p udp -j DENY -s 0.0.0.0/0 -i eth0 -d 0.0.0.0/0 3306
ipchains -A input -p tcp -j DENY -s 0.0.0.0/0 -i eth0 -d 0.0.0.0/0 4444
ipchains -A input -p tcp -j DENY -s 0.0.0.0/0 -i eth0 -d 0.0.0.0/0 6000:6100
ipchains -A input -p udp -j DENY -s 0.0.0.0/0 -i eth0 -d 0.0.0.0/0 6000:6100
ipchains -A input -p tcp -j DENY -s 0.0.0.0/0 -i eth0 -d 0.0.0.0/0 6667
ipchains -A input -p tcp -j DENY -s 0.0.0.0/0 -i eth0 -d 0.0.0.0/0 7000
# WEBMIN
ipchains -A input -p tcp -j ACCEPT -s $TRUSTEDHOST1 -i eth0 -d 0.0.0.0/0 10000
ipchains -A input -p tcp -j ACCEPT -s $TRUSTEDHOST2 -i eth0 -d 0.0.0.0/0 10000
ipchains -A input -p tcp -j DENY -s 0.0.0.0/0 -i eth0 -d 0.0.0.0/0 10000
# FORWARD RULES
ipchains -P forward DENY
ipchains -A forward -p all -j MASQ -s $ETH1NET/$ETH1NETMASK -d 0.0.0.0/0
NETFILTER

NETFILTER следующее поколение firewallа пакетов для Linux. Поддерживает много полезных функций, понимает IPSec, позволяет гибко управлять пакетами. HOWTO доступно на http://netfilter.kernelnotes.org.

IPF

IPF альтернативный пакет firewall, доступный для Linux (и ряда других ОС). Получить его можно с http://coombs.anu.edu.au/~avalon.

SINUS Firewall

SINUS Firewall еще один firewall для Linux (ядра 2.0.x и 2.2.x). Скачать его можно с http://www.sinusfirewall.org.

Phoenix Adaptive Firewall

Я только изучаю этот пакет, но уже считаю его очень хорошим. Он польностью заменяет ipchains и добавляет много умного и полезного в процесс firewall. Это коммерческий продукт (около $3000 US), и это первый firewall, который ICSA сертифицировала для Linux. Доступен на http://www.progressive-systems.com/products/phoenix.

FirePlug Edge

Для маленьких Linux типа firewall/gateway. Скачать можно с http://edge.fireplug.net.

 

Проникновение за Firewall

Иногда защита может наделать много проблем, особенно при неправильной настройке. Например, не пустить Вас к Вашим же данным. Есть mini-HOWTO по этим вопросам: http://www.linuxdoc.org/HOWTO/mini/Firewall-Piercing.html. Кроме того, есть дополнения по IP Masquerading и VPN, доступные на ftp://ftp.rubyriver.com/pub/jhardin/masquerade/ip_masq_vpn.html.

 

Создание правил и скрипты

Скрипты Firewall

Многие скрипты для Red Hat Linux в rpm-формате: http://www.webideal.de/rh-isdn/downloads.

ipfwadm2ipchains

Простой скрипт для конвертации правил ipfwadm в правила ipchains, доступен на http://users.dhp.com/~whisper/ipfwadm2ipchains

mason

Mason автоматизированный генератор правил firewall для ipfwadm и ipchains. Вы загружаете его, и он контролирует пакеты, идущие через машину, затем основываясь на этом создает набор правил, чтобы позволить такие действия. Хороший инструмент в течение первого раза firewall, доступен на http://users.dhp.com/~whisper/mason.

Mklinuxfw

Mklinuxfw утилита, написанная на Perl, имеет набор интерфейсов (CGI, KDE, command line) для создания правил firewall. Сейчас поддерживает интерфейс CGI, GTK находится в стадии разработки. Скачать можно с http://www.madhouse.org.uk/~red/framepage.phtml?/mklinuxfw/index.html.

fwconfig

fwconfig основанная на www утилита настройки для ipfwadm и ipchains. Доступна на http://www.mindstorm.com/~sparlin/fwconfig.shtml.

xipfwadm

Приложение xipfwadm написано на Tcl/Tk для X и предназначено для работы с правилами ipfwadm. Скачать можно с http://www.x25.org/xipfwadm.html.

Linux Firewall Tools

Интересный сайт с online cgi для создания правил и скриптов firewall. Увы, работает медленно, но посмотреть можно на http://www.linux-firewall-tools.com/.

Easy Firewall

Графическая программа на Tcl/Tk. Скачать можно с http://www.linux-kheops.com/pub/easyfw/easyfwGB.html.

DNi

DNi представляет собой online cgi для создания наборов правил для ipfwadm. Попробовать можно на http://members.tripod.com/~robel/dni.

Back

Security Portal

Written by Kurt Seifried


Сетевые сервисы: FTP

Обзор

Серверы FTP

 

Обзор

FTP второй по использованию в Internet протокол (после HTTP), предназначен для обмена файлами. FTP умеет только передавать файлы, зато он умеет передавать их хорошо. Протокол непосредственно опасен, пароли, данные и все прочее передаются открытым текстом, и можно легко использовать сниффинг, однако большинство ftp используют анонимный доступ, так что это не проблема. Одна из основных проблем, с которыми обычно сталкиваются на ftp-сайтах, неподходящие разрешения каталогов, которые позволяют людям использовать место, чтобы размещать их собственные данные (обычно защищенный авторским правом материал, и т.д). Снова, как с telnet, Вы должны использовать отдельный логин для управления ftp, так как пароль будет передан в открытом виде.

Проблемы с ftp обычно включают:

╖ Передачу username и пароля открытым текстом.
╖ Передачу команд открытым текстом.
╖ Атаку на вычисление пароля.
╖ Неправильные настройки сервера.
╖ Несколько дырок для атаки Denial of Service все еще есть в некоторых серверах ftp.
╖ Старые версии WU-FTPD и его производных дают возможность захвата root-достуа.

Безопасность FTP низка, так что используя firewall и TCP_WRAPPERS Вы сможете ограничивать доступ, исходя из IP-адреса/имени хоста. Кроме того, большинство серверов ftp работает chroot'ed по умолчанию для любого анонимного доступа, или гостевого логина. Можно использовать chroot для всех пользователей ftp на их домашние каталоги, есть серверы, которые поддерживают протоколы шифрования данных (например, SSL), однако, при их использовании понадобится аналогичная поддержка со стороны клиентов, а это не всегда удобно. Проследите также, чтобы на Вашем сервере ftp не было публичных каталогов, доступных для чтения и записи одновременно, иначе пользователи рано или поздно начнут их активное использование для распространения своих данных (обычно warez или porn).

Пример firewall-правил:

ipfwadm -I -a accept -P tcp -S 10.0.0.0/8 -D 0.0.0.0/0 21
ipfwadm -I -a accept -P tcp -S some.trusted.host -D 0.0.0.0/0 21
ipfwadm -I -a deny -P tcp -S 0.0.0.0/0 -D 0.0.0.0/0 21

или

ipchains -A input -p tcp -j ACCEPT -s 10.0.0.0/8 -d 0.0.0.0/0 21
ipchains -A input -p tcp -j ACCEPT -s some.trusted.host -d 0.0.0.0/0 21
ipchains -A input -p tcp -j DENY -s 0.0.0.0/0 -d 0.0.0.0/0 21

Пример использования TCP_WRAPPERS в /etc/hosts.allow:

in.ftpd: 10.0.0.0/255.0.0.0, some.trusted.host

в /etc/hosts.deny:

in.ftpd: 0.0.0.0/0.0.0.0

Имеются несколько шифрованных вариантов ftp как упомянуто выше, SSLeay FTPD и утилиты третьих фирм. Так как большинство ftp-логинов не используется как логины администраторов (пароли в открытом виде, я Вас предупредил) и выполняется chroot, опасность минимальна.

Серверы FTP

Есть много серверов ftp для Linux. Популярные (Wu-FTPD и ProFTPD) имели серьезное число проблем, так что удостоверитесь, что ваша версия современна.

ProFTPD

ProFTPD доступный по GPL ftp-сервер, который может выполняться на многих UNIX-платформах. Он поддерживает новые свойства типа виртуальных ftp, индивидуальной настройки каталогов (в каждом каталоге используется файл .ftpaccess, аналог файла .htaccess в Apache), выдыхающиеся логины и многое другое. Он также поддерживает действительно полезные свойства типа ограничения загрузок и намного более жесткие средства управления защитой, чем WU-FTPD.

Основной файл конфигурации ПроФТПДа называется /etc/proftpd.conf, он имеет Apache-стиль, который я нахожу приятным. ProFTPD может быть выполнен из inetd (и использовать TCP_WRAPPERS) или выполнен как самостоятельный сервер. Он также поддерживает файлы конфигурации каталога, чтобы ограничить доступ и т.д. ProFTPD также поддерживает виртуальные ftp (хотя в отличие от виртуального www-сервера нужен лишний IP-адрес), причем каждый сайт может быть конфигурировано по-своему (различный анонимный доступ и другие параметры). Файл proftpd.conf обычно имеет раздел глобальных параметров настройки (inetd или автономный, максимальное число процессов, от какого имени работать и тому подобное), сопровождаемый заданной по умолчанию конфигурацией плюс настройка для конкретного сайта (или набора вирьуальных сайтов).

Пример настройки сервера ProFTPD для запуска из inetd без анонимного доступа:

ServerName "ProFTPD Default Installation"
ServerType inetd
DefaultServer on
Port 21
Umask 022
MaxInstances 30
User nobody
Group nobody
<Directory /*>
AllowOverwrite on
</Directory>

Доустим, Вы хотите управлять доступом к серверу ftp исходя из IP-адресов, имен хостов и доменов (хотя лучше полагаться только на IP). Вы могли бы достичь этого через правила firewall, но это имеет тенденцию замедлять машину (особенно, если Вы добавляете большое количество правил как обычно и бывает). Вы могли бы использовать TCP_WRAPPERS, но Вы не будете способны выборочно ограничить доступ к виртуальным и анонимным сайтам. Но всего этого можно достичь в файле proftpd.conf директивой “<Limit LOGIN>”.

Пример ниже разрешает доступ всем машинам 10.1.*.* и машине 1.2.3.4, всем остальным доступ запрещен.

<Limit LOGIN>
Order Allow,Deny
Allow from 10.1., 1.2.3.4
Deny from all
</Limit>

Если Вы помещаете это внутри директив “<VirtualHost>” или “<Anonymous>” это применяется только к соответствующему виртуальному или анонимному сайту, при помещении в директиву “<Global>” это будет применено ко всем секциям “< VirtualHost>” и “<Anonymous>”, а при помещении в настройки сервера (с “ServerName” и связанными данными) это будет вести себя подобно TCP_WRAPPERS, любая машина не из диапазона 10.1.*.*, и не 1.2.3.4 получат отказ ри соединении с портом 21, в противоположность тому, что им просто было бы отказано в соединении, если бы эти ограничения были бы в секциях “<Global>”, “<VirtualHost>” или “<Anonymous>”.

Если нужен анонимный доступ, просто допишите:

<Anonymous ~ftp>
User ftp
Group ftp
RequireValidShell off
UserAlias anonymous ftp
MaxClients 10
DisplayLogin welcome.msg
DisplayFirstChdir .message
<Directory *>
<Limit WRITE>
DenyAll
</Limit>
</Directory>
</Anonymous>

Это назначит “ftp” домашний каталог, как и прочим пользователям, (при нормальной настройке “~ftp” скорее всего он будет /home/ftp) в качестве корневого каталога для анонимных пользователей, ProFTPD выполнится как пользователь “ftp” группы “ftp”, когда пользователь заходит анонимно (в противоположность регистрации нормального пользователя), и число анонимных входов в систему будет ограничено 10. Также будет отображен файл /home/ftp/welcome, а при переходе в любой каталог, содержащий файл .message, его содержимое также будет отображаться. Директива “< Directory *>” охватывает /home/ftp/* и не дает заисывать что-либо в данную иерархию. Если нужен каталог incoming (для входящих файлов) просто допишите после директивы “<Directory *>”:

<Directory incoming>
<Limit WRITE>
AllowAll
</Limit>
<Limit READ>
DenyAll
</Limit>
</Directory>

Это позволит записывать файлы в /home/ftp/incoming/, но не читать их. ProFTPD с его богатыми возможностями требует больше времени на настройку, чем WU-FTPD, но, видимо, того стоит. Загрузить ProFTPD с документацией на английском можно с http://www.protftpd.net.

proftpd-ldap

proftpd-ldap позволяет Вам управление паролем, используя LDAP. Доступен на http://horde.net/~jwm/software/proftpd-ldap.

WU-FTPD

Один основной механизм защиты в WU-FTPD: использование chroot (подмена корневого каталога). Например: по умолчанию для всех анонимных (anonymous) пользователей задается каталог /home/ftp в качестве “корневого” каталога. Они не могут выходить из и смотреть содержимое, скажем, /home или /etc. То же самое может применяться к группам пользователей, например Вы можете отправить всех пользователей, заходящих по ftp, в каталог /home или в домашний каталог пользователя. Такая подмена корневого каталога позволит избежать многих проблем. Это может быть выполнено с помощью /etc/ftpaccess и /etc/passwd (man ftpaccess выдаст все сведения). ftpd также проверяет файл /etc/ftpusers и, если пользователь в нем упомянут, ему будет отказано в доступе по ftp.

Подмена каталогов пользователей при входе по ftp проста, но описана плохо. Сервер ftp проверяет файл /etc/ftpaccess в поисках гостевой группы, которая пишется просто как "guestgroup какая-то-группа-в-системе" то есть "guestgroup users". Имя групы должно быть определено в /etc/group, в группу должны быть добавлены члены. Для них надо поправить строки в файле passwd, чтобы сервер ftp знал где искать их каталоги. Так как они теперь работают с подменой каталога (их каталог становится для них корневым), они не имеют доступа к /lib, так что Вы должны скопировать некоторые файлы в их каталог, чтобы программы вроде “ls” работали правильно.

Установим для пользователя (billybob) доступ по ftp в его домашний каталог. В дополнение к этому billybob может заходить по telnet и менять свой пароль, но не может больше ничего сделать. Система использует теневые пароли, так что в поле пароля будет стоять 'x' для пользователя billybob.

Сначала впишем логин для пользователя billybob в файл /etc/passwd:

billybob:x:500:500:Billy Bob:/home/billybob/./:/usr/bin/passwd

Это означает, что сервер ftp будет представлять /home/billybob как его корневой каталог и переходить туда, представляя его для billybob как / (/home/billybob для остальной части пользователей). Конечно, /usr/sbin/passwd должен быть перечислен в /etc/shells, иначе ftp работать не будет. Подробно все описано в man-описании файла ftpaccess.

Теперь надо сказать серверу ftp, что данного пользователя надо пускать с подменой каталога. Для этого он должен быть членом группы (badusers, ftppeople, ...) которая задана в /etc/group. Потом данная группа должна быть указана в файле /etc/ftpaccess.

Теперь Вы должны скопировать некоторые библиотеки и исполняемые модули в chroot “заповедник”, иначе “billybob” работать не сможет. Нужные файлы доступны как пакеты (обычно называемые "anonftp"), как только они установлены, файлы будут скопированы в /home/ftp. Обратите внимание на то, что файл /etc/passwd используется просто для связи UID и usernames, если нужно чтобы billybob видел username, а не UID, добавьте строку для него (то есть, скопируйте его строку из реального /etc/passwd в этот). То же справедливо и для файла group.

Без "billybob:*:500:500:::" в /home/billybob/etc/passwd:

drwxr-xr-x 2 500 500 1024 Jul 14 20:46 billybob

и со строкой в /home/billybob/etc/passwd:

drwxr-xr-x 2 billybob 500 1024 Jul 14 20:46 billybob

и со строкой для группы billybob в /home/billybob/etc/group:

drwxr-xr-x 2 billybob billybob 1024 Jul 14 20:46 billybob

Billybob теперь может заходить по ftp, загружать и выгружать файлы из /home/billybob и менять свой пароль. Но больше ничего он делать не может.

FTP очень интересный протокол. Клиенты соединяются с сервером через порт 21 (обычно), а сервер отвечает им через порт 20, и через него он и передает данные. Из чего следует, что порт 20 должен принимать внешние соединения. Помните это при установке firewall. Также имеется 'пассивный' ftp и манера забивать гвозди микроскопом (просматривать ftp с помощью www-браузера), который создает входящие подключения с сервером ftp на высоких номерах порта (вместо того, чтобы использовать 20, они договариваются о других числах!). Если Вы создаете публичный сервер ftp, выделите под него отдельную машину, предпочтительно вне вашей внутренней LAN (см. Practical Unix and Internet Security на предмет дискуссии о концепции 'DMZ'). Вы можете скачать WU-FTPD с ftp://ftp.wu-ftpd.org.

NcFTPD

NcFTPD очень мощный ftp-сервер, но бесплатен только для личного или учебного пользования. Доступен на http://www.ncftpd.com/ncftpd.

BSD ftpd

BSD ftp server (ftpd) также был перенесен к Linux, так что если Вы хотите использовать именно его, Вы можете это сделать. Доступен на ftp://quatramaran.ens.fr/pub/madore/ftpd-BSD.

Muddleftpd

Muddleftpd маленький сервер ftp. Доступен на http://www.computing.edu.au/~kuiperba/muddleftpd.

Troll ftpd

Troll ftpd чрезвычайно маленький и относительно надежный сервер. Он не может выполнять внешние программы и очень прост в настройке. Доступен на http://www.troll.no/freebies/ftpd.html.

BetaFTPD

BetaFTPD однопоточный маленький сервер. Скачать можно с http://members.xoom.com/_XOOM/sneeze/betaftpd.html.

FTP4ALL

Еще один FTP-сервер, распространяемый по GPL, доступен на http://www.ftp4all.de/v3/noframes.

FTP - SSL

Замена Вашего любимого ftpd (возможно, WU-FTPD), также доступен как набор патчей для WU-FTPD. Вроде бы повышает защиту. Можно скачать tarball с ftp://ftp.uni-mainz.de/pub/internet/security/ssl, или пакет RPM с ftp://ftp.zedz.net/pub/replay/linux/redhat.

FTP - SRP

SRP также может использоваться для шифрования username/password Ваших ftp-сеансов. SRP доступен на http://srp.stanford.edu/srp

sftp

sftp работает поверх ssh, что позволяет использовать безопасные ftp-сеансы. Доступен на http://www.xbill.org/sftp.

Back

Security Portal

Written by Kurt Seifried


Первые шаги

 

Основные концепции.

Безопасность системы зависит от множества аспектов. Насколько безопасна должна быть система? Подключена ли машина к сети? Предоставляется ли юзверям доступ к командной строке (telnet/SSH)? Рабочая станция это или сервер? Последнее имеет принципиальное значение. Хотя сейчас граница между ОС сервера и рабочей станции практически отсутствует, исторически сложилось, что это очень разные звери. На сервере установлено гораздо больше сетевых пакетов, и их настройки предположительно содержат гораздо больше дыр, чем у рабочей станции. Некоторые общие правила, которые сохранят немало сил и времени:

1. Держите пользователей подальше от сервера. Без крайней необходимости не давайте им shells-доступ.
2. Блокируйте рабочие станции когда уходите. Помните, что если на консоли остался Ваш логин, то когда Вы придете, можете обнаружить немало новшеств, которые Вас потрясут... Например, готовую к запуску команду rm -r /
3. Используйте шифрование где только возможно.
4. Регулярно проверяйте сеть на открытые порты, установленный софт и прочее в этом роде. Сравнивайте с результатами предыдущих проверок.

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

Вообще, большинство пользователей не разбирается во всяких премудростях. Все, что им нужно: работать и получать почту. Но всегда найдется кто-то, кто творчески подойдет к Вашей защите (install packet sniffers, warez ftp sites, www servers, IRC bots, и многое другое). Вот за такими юзверями нужен глаз да глаз! Часто они очень изобретательны...

1. Используйте BIOS-пароль для запрета доступа к системе (увы, многие BIOS имеют универсальный пароль...).
2. Установите загрузку ТОЛЬКО с винчестера.
3. Поставьте пароль на LILO.
4. Не давайте юзверям доступ к root, используйте sudo для ограниченного доступа, если уж очень нужно.
5. Используйте firewall для всех сервисов, которые не должны быть доступны кому угодно.
6. Регулярно проверяйте таблицы процессов, порты, установленный софт и прочее на предмет неожиданных изменений.
7. Разработайте правила пользования системой и политику безопасности.
8. Удалите все лишнее из системы.

Помните: безопасность понятние глубокое.

При правильной установке Linux на рабочей станции Вы можете почти расслабиться (на 100% ничего не безопасно!), система куда надежней своего аналога под Windows. К тому же, есть удаленное администрирование (SSH/Telnet/NSH), что существенно облегчает работу администратора.

Сервер совсем другое дело. Если обвалилась рабочая станция, ничего страшного, на то они и стоят. А вот выражение: "Выносят пострадавших: рухнул сервер", увы, имеет глубокий смысл. Старайтесь свести к миниуму число юзверей с shell-доступом (bash, pine, lynx). При грамотной установке сервер почти не требует администрирования (я имел один почтовый сервер, который на стороне клиента работал около 2 лет с затратой на его администрирование в общей сложности около 10 часов!). Все обновления надо проверять на тестовом стенде. Приведу основные моменты, которые надо помнить на сервере:

1. Ограничьте физический доступ к серверу.
2. Используйте стратегию минимизации привилегий: меньше шансов, что Вас порвут.
3. РЕЗЕРВИРУЙТЕСЬ!
4. Регулярно проверяйте сервер на изменения (порты, софт...), автоматические утилиты для этого есть в ассортименте.
5. Обновления должны быть спланированы и проверены. Пример: ядро 2.2.x не использует ipfwadm, что весьма интересно, если Вы забыли поставить ipchains).

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

Back

Security Portal

Written by Kurt Seifried


IP Security (IPSec)

Обзор

Поддержка IPSec ядром

Настройка сети для IPSec

Примеры настройки IPSec

Коммерческие версии IPSec

Windows-клиенты IPSec

 

Обзор

IP Security (IPSec) шифрование сетевого трафика. Вы не можете шифровать информацию заголовка или завершитель (то есть, IP адрес/порт, куда и откуда идет пакет, CRC и прочее), но Вы можете шифровать полезные данные. Это позволяет Вам обезопасить протоколы типа POP/WWW без того, чтобы менять их, так как шифрование происходит на уровне IP. Это также позволяет Вам надежно подключать клиентов к LAN по опасным сетям (подобно Internet). В настоящее время IPSec для Linux находится на тестировании, однако имелось несколько устойчивых выпусков, и я успешно развернул под Linux IPSEC-сервер. IPSEC стандарт, и часть IPV6 протокола, Вы можете приобретать IPSEC программное обеспечение для Windows 95/98/NT и Solaris, Подробности по работе с firewall или блоками NAT (например, Linux с IP Masquerading) см. в разделе о firewall.

Поддержка IPSec ядром

Чтобы использовать IPSEC, Вы нуждаетесь в поддержке IPSEC в ядре. К сожалению ни один дистрибутив American Linux не может включать в свой состав сильный crypto вне Северной Америки, так что они не включают это вообще. Международные версии Linux в настоящее время не имеют поддержки IPSEC встроенной в ядро. Вы должны получить исходный текст ядра (я рекомендую 2.2.13, от декабря 1999), и исходный текст Linux IPSEC, доступный на http://www.freeswan.org (текущий стабильный snapshot 1.2, от декабря 1999).

Установите исходник ядра (обычно в /usr/src/linux) и затем скомпилируйте новое ядро, установите его, загрузитесь в нем и проверьте его. Удостоверитесь, что Ваша сеть работает правильно, если она не работают, IPSEC работать не будет. Теперь Вы должны загрузить последний вариант IPSEC (версия 1.0 не будет работать с ядрами 2.2.x!). Затем идите в /usr/local/src (или туда, где Вы помещаете исходные тексты для программ), распаковывайте исходник и выполняйте программу установки (make menugo обычно для конфигурации, основанной на ncurses). Это исправит файлы ядра, затем выполнит настройку ядра и сформирует инструментальные средства IPSEC и ядро.

cd /usr/local/src
tar –zvvxf /path/to/tarball/snapshot.tar.gz
chown –R root:root freeswan-snap1999Jun14b
cd freeswan-snap1999Jun14b
make menugo

Удостоверьтесь, что Вы сохраняете настройки ядра, даже при том, что параметры выбраны, они не были сохранены. Вам возможно также придется восстанавливать ядро, поскольку команда "make menugo" иногда выполняет "make zImage", а она обычно терпит неудачу из-за больших размеров ядеер серии 2.2.x. Сразу после комиляции в таком случае будет выдано сообщение об ошибке. Если оно есть, просто скомандуйте:

cd /usr/src/linux
make bzImage
cp /usr/src/linux/arch/i386/boot/bzImage /boot/vmlinuz-2.2.13-ipsec

Теперь Вы должны отредактировать lilo.conf, выполнить lilo и перезагрузиться, чтобы использовать новое ядро. lilo.conf должен выглядеть примерно так:

boot=/dev/hda
map=/boot/map
install=/boot/boot.b
prompt
timeout=100
image=/boot/vmlinuz-2.2.13-ipsec
label=linux-ipsec
root=/dev/hda1
read-only
image=/boot/vmlinuz-2.2.13
label=linux
root=/dev/hda1
read-only

При выполнении lilo Вы должны видеть нечто вроде:

linux-ipsec *
linux

Затем перезагрузитесь, и Вы должны получить ядро 2.2.13 с поддержкой IPSEC. При перезагрузке будут сообщения об ошибках. Дело в том, что по умолчанию IPSEC установлен так, чтобы использовать интерфейс eth999, который конечно не существует. Вы должны также добавить /usr/local/lib/ipsec к Вашей инструкции path, или Вы будете должны каждый раз набирать полный путь.

Настройка сети для IPSec

Надо разрешить TCP-IP forwarding на шлюзовом сервере, в Red Hat Linux это достигается заменой в файле /etc/sysconfig/network строки:

FORWARD_IPV4="false”

на строку:

FORWARD_IPV4="yes"

Или Вы можете разрешить это через файловую систему /proc:

cat 1 > /proc/sys/net/ipv4/ip_forward

Так как большинство людей имеет значение по умолчанию, запрещающее forwarding пакетов, Вам придется передавать пакеты из удаленной сети/машины в Ваши сеть/машину. Кроме того, все masquerading-правила для внутренних сетей, которые также используют IPSEC, должны быть заданы после правил, разрешающих IPSEC-связанный трафик, иначе пакеты будут маскироваться вместо использования IPSec.

Настройка IPSec

Теперь Вы должны сконфигурировать ipsec. Параметры настройки обычно задаются в файлах /etc/ipsec.conf и /etc/ipsec.secrets, Вы можете использовать директиву include, чтобы разорвать файлы.

Ручная связь

Сначала мы установим связь, использующую ручную настройку (для простоты), Вы будете должны редактировать ipsec.conf и правила firewall. Большинство значений по умолчанию в файле ipsec.conf прекрасны, но Вы должны изменить следующее:

conn sample
type=tunnel
left=
leftnexthop=
leftsubnet=
right=
rightnexthop=
rightsubnet=
spibase=0x200
esp=3des-md5-96
espenckey=
espauthkey=

Замените espenckey и espauthkey на новые ключи (используя ranbits для генерации чисел, не забудьте вписать префикс 0x, который указывает, что число шестнадцатиричное):

conn my-tunnel
type=tunnel
left=1.2.3.4
leftnexthop=1.2.3.1
leftsubnet=10.0.0.0/24
right=5.6.7.8
rightnexthop=5.6.7.1
rightsubnet=192.168.0.0/24
spibase=0x200
esp=3des-md5-96
espenckey=some_auth_key_here (ranbits 192)
espauthkey=some_other_key_here (ranbits 128)

Скоируйте исправленные файлы ipsec.conf и ipsec.secrets на другой сервер каким-нибудь безопасным способом. Теперь все, что остается, это добавление некоторых правил firewall так, чтобы пакеты не получили masqueraded (мы просто хотим их послать).

На сервере 1.2.3.4 Вы должны добавить следующие правила:

ipchains -A forward -p all -j ACCEPT -s 10.0.0.0/24 -d 192.168.0.0/24
ipchains -A forward -p all -j ACCEPT -s 192.168.0.0/24 -d 10.0.0.0/24

Удостоверьтесь, что эти правила заданы перед правилом masquerading, это должно выглядеть следующим образом:

# FORWARD RULES
#
ipchains -P forward DENY
#
ipchains -A forward -p all -j ACCEPT -s 10.0.0.0/24 -d 192.168.0.0/24
ipchains -A forward -p all -j ACCEPT -s 192.168.0.0/24 -d 10.0.0.0/24
ipchains -A forward -p all -j MASQ -s 10.0.0.0/24 -d 0.0.0.0/0

На сервере 5.6.7.8 Вы в основном повторяете процесс:

ipchains -A forward -p all -j ACCEPT -s 192.168.0.0/24 -d 10.0.0.0/24
ipchains -A forward -p all -j ACCEPT -s 10.0.0.0/24 -d 192.168.0.0/24

Удостоверьтесь, что эти правила заданы перед правилом masquerading, это должно выглядеть следующим образом:

# FORWARD RULES
#
ipchains -P forward DENY
#
ipchains -A forward -p all -j ACCEPT -s 192.168.0.0/24 -d 10.0.0.0/24
ipchains -A forward -p all -j ACCEPT -s 10.0.0.0/24 -d 192.168.0.0/24
ipchains -A forward -p all -j MASQ -s 192.168.0.0/24 -d 0.0.0.0/0

Теперь Вы должны быть способны создать ipsec-туннель на обеих машинах вручную, и машины в сети A должны быть способны разговаривать с машинами в сети B без проблем.

ipsec manual –up my-tunnel

Вывод должен быть похож на:

/usr/local/lib/ipsec/spi: message size is 36
/usr/local/lib/ipsec/spi: message size is 132
/usr/local/lib/ipsec/spi: message size is 132

Для роверки попробуйте ping 192.168.0.2 с клиента 10.0.0.2. Если это работает, Вы все установили правильно. Если это не работает, проверьте сеть чтобы удостовериться, что 1.2.3.4 может связаться с 5.6.7.8, что TCP-IP forwarding допускается, и что никакие правила firewall не блокируют пакеты, или пробуют к маскировать их. Как только Вы установили подключение и успешно проверили его, Вы должны переходить на автоматический вариант связи.

Автоматическая связь

В автоматическом режиме Вы имеете 256-битный ключ на обоих концах туннеля. Его время действия ограничено 8 часами.

ipsec.secrets хранит разделяемый ключ. Этот файл должен сохраниться безопасным любой ценой. Для соединения между серверами 1.2.3.4 и 5.6.7.8 нужна строка, подобная:

1.2.3.4 5.6.7.8 “0xa3afb7e6_20f10d66_03760ef1_9019c643_a73c7ce0_91e46e84_ef6281b9_812392bf”

Эта строка должна быть в файле ipsec.secrets на обеих машинах. Затем в ipsec.conf надо поправить настройку туннеля:

conn my-tunnel
type=tunnel
left=1.2.3.4
leftnexthop=1.2.3.1
leftsubnet=10.0.0.0/24
right=5.6.7.8
rightnexthop=5.6.7.1
rightsubnet=192.168.0.0/24
keyexchange=ike
keylife=8h
keyingtries=0

Pluto daemon будет запускаться, пробовать соединиться с Pluto daemon на другом конце туннеля и устанавливать подключение. Pluto работает на порте 500, протокол UDP, так что придется открыть доступ через firewall:

ipchains -A input -p udp -j ACCEPT -s 0.0.0.0/0 -i eth0 -d 0.0.0.0/0 500

По-моему, удобно использовать ключевое слово “%search” вместо того, чтобы указывать tunnel, добавляя:

auto=start

к каждой туннельной конфигурации и редактировать ipsec.secrets:

plutoload=%search
plutostart=%search

Это в конечном счете сделает Вашу жизнь проще. Если все идет хорошо, Вы должны видеть что-то вроде этого в /var/log/messages:

Jun 26 02:10:41 server ipsec_setup: Starting FreeS/WAN IPSEC...
Jun 26 02:10:41 server ipsec_setup: /usr/local/lib/ipsec/spi: message size is 28.
Jun 26 02:10:41 server ipsec_setup: KLIPS debug `none'
Jun 26 02:10:41 server ipsec_setup: KLIPS ipsec0 on eth0 1.2.3.4/255.255.255.0 broadcast 24.108.11.255 Jun 26 02:10:42 server ipsec_setup: Disabling core dumps:
Jun 26 02:10:42 server ipsec_setup: Starting Pluto (debug `none'):
Jun 26 02:10:43 server ipsec_setup: Loading Pluto database `my-tunnel':
Jun 26 02:10:44 server ipsec_setup: Enabling Pluto negotiation:
Jun 26 02:10:44 server ipsec_setup: Routing for Pluto conns `my-tunnel':
Jun 26 02:10:45 server ipsec_setup: Initiating Pluto tunnel `my-tunnel':
Jun 26 02:10:45 server ipsec_setup: 102 "my-tunnel" #1: STATE_MAIN_I1: initiate
Jun 26 02:10:45 server ipsec_setup: 104 "my-tunnel" #1: STATE_MAIN_I2: from STATE_MAIN_I1; sent MI2, expecting MR2
Jun 26 02:10:45 server ipsec_setup: 106 "my-tunnel" #1: STATE_MAIN_I3: from STATE_MAIN_I2; sent MI3, expecting MR3
Jun 26 02:10:45 server ipsec_setup: 003 "my-tunnel" #1: STATE_MAIN_I4: SA established
Jun 26 02:10:45 server ipsec_setup: 110 "my-tunnel" #2: STATE_QUICK_I1: initiate
Jun 26 02:10:45 server ipsec_setup: 003 "my-tunnel" #2: STATE_QUICK_I2: SA established Jun 26 02:10:46 server ipsec_setup: ...FreeS/WAN IPSEC started

А в файле /var/log/secure Вы должны видеть нечто вроде:

Jun 26 02:10:42 server Pluto[25157]: Starting Pluto (FreeS/WAN Version snap1999Jun14b)
Jun 26 02:10:44 server Pluto[25157]: added connection description "my-tunnel"
Jun 26 02:10:44 server Pluto[25157]: listening for IKE messages
Jun 26 02:10:44 server Pluto[25157]: adding interface ipsec0/eth0 1.2.3.4Jun 26 02:10:44 server Pluto[25157]: loading secrets from "/etc/ipsec.secrets"
Jun 26 02:10:45 server Pluto[25157]: "my-tunnel" #1: initiating Main Mode
Jun 26 02:10:45 server Pluto[25157]: "my-tunnel" #1: ISAKMP SA established
Jun 26 02:10:45 server Pluto[25157]: "grumpy-seifried" #2: initiating Quick Mode POLICY_ENCRYPT+POLICY_TUNNEL+POLICY_PFS
Jun 26 02:10:45 server Pluto[25157]: "my-tunnel" #2: sent QI2, IPsec SA established
Jun 26 02:11:12 server Pluto[25157]: "my-tunnel" #3: responding to Main Mode
Jun 26 02:11:12 server Pluto[25157]: "my-tunnel" #3: sent MR3, ISAKMP SA established
Jun 26 02:11:12 server Pluto[25157]: "my-tunnel" #4: responding to Quick Mode
Jun 26 02:11:12 server Pluto[25157]: "my-tunnel" #4: IPsec SA established
Jun 26 02:31:31 server Pluto[25157]: "my-tunnel" #5: responding to Main Mode
Jun 26 02:31:32 server Pluto[25157]: "my-tunnel" #5: sent MR3, ISAKMP SA established
Jun 26 02:31:32 server Pluto[25157]: "my-tunnel" #6: responding to Quick Mode
Jun 26 02:31:32 server Pluto[25157]: "my-tunnel" #6: IPsec SA established

В дополнение к этому Вы можете просмотреть вывод “eroute”, чтобы удостовериться что туннели правильно сконфигурированы:

10.0.0.0/24 -> 192.168.0.0/24 => tun0x114@1.2.3.4

И если Вы рассматриваете Ваши маршруты (“route”) Вы должны увидеть:

Kernel IP routing table

Destination   Gateway Genmask         Flags Metric Ref Use Iface

1.2.3.4       0.0.0.0 255.255.255.255 UH    0      0   0   eth0
10.0.0.1      0.0.0.0 255.255.255.255 UH    0      0   0   eth
11.2.3.0      0.0.0.0 255.255.255.0   U     0      0   0   eth0
1.2.3.0       0.0.0.0 255.255.255.0   U     0      0   0   ipsec0
192.168.0.0   1.2.3.1 255.255.255.0   UG    0      0   0   ipsec0
10.0.0.0      0.0.0.0 255.255.255.0   U     0      0   0
eth1127.0.0.0 0.0.0.0 255.0.0.0       U     0      0   0
lo0.0.0.0     1.2.3.1 0.0.0.0         UG    0      0   0   eth0

Примеры настройки ipsec

Два сервера с защищенным соединением

В нашем примере мы будем иметь следующую сеть:

Сервер A, где eth0 соединен с Internet и имеет IP-адрес 1.2.3.4, и eth1 соединен с внутренней сеткой и имеет IP-адрес 10.0.0.1.

Сеть A внутренняя: состоит из сервера A и машин подсети 10.0.0.*.

Сервер B, где eth0 соединен с Internet и имеет IP-адрес 5.6.7.8, и eth1 соединен с внутренней сеткой и имеет IP-адрес 192.168.0.1.

Сетьk B внутренняя: состоит из сервера B и машин подсети 192.168.0.*.

Сеть C Internet, с ним связаны серверы серверы A и B (по T1, давайте быть щедрыми).

Основная настройка серверов

На каждой машине установлена Red Hat Linux 6.1 со стандартным для нее ядром 2.2.12, удостоверьтесь что Вы устанавливаете ipchains, по умолчанию он обычно не ставится.

Идите на ftp.linux.org (или на Ваше любимое зеркало) и загрузите полное ядро Linux 2.2.10. Идите в /usr/src и удалите существующую ссылку linux, распакуйте ядро 2.2.10, переместите его в /usr/src/linux-2.2.10 и создайте ссылку "linux" на него. Теперь перейдите в каталог /usr/src/linux, настройте ядро, скомпилируйте и поставьте его. Удостоверьтесь, что Вы выбрали все элементы для IP-masquerading, и где возможно компилируйте их как статические компоненты, а не модули. Не забудьте использовать "make bzImage", так как новое ядро, вероятно, слишком большое для lilo, чтобы загрузиться.

cd /usr/src
rm linux
tar –zvvxf /path/to/tarball/linux-2.2.10.tar.gz
mv linux linux-2.2.10
chown –R root:root linux-2.2.10
ln –s linux-2.2.10 linux
cd linux
make menuconfig
make dep
make bzImage
make modules
make modules_install
cp /usr/src/linux/arch/i386/boot/bzImage /boot/vmlinuz-2.2.10
rm /boot/System.*
cp /usr/src/linux/System.map /boot/System.map

Теперь мы должны редактировать lilo.conf, выполнить lilo и перезагрузиться для работы с новым ядром. Удостоверьтесь что сеть работает перед попыткой установить программное обеспечение IPSec.

Lilo.conf должен напоминать:

boot=/dev/hda
map=/boot/map
install=/boot/boot.b
prompt
timeout=100
image=/boot/vmlinuz-2.2.10
label=linux
root=/dev/hda1
read-only
image=/boot/vmlinuz-2.2.5-12
label=linuxold
root=/dev/hda1
read-only

при перезапуске lilo Вы должны видеть нечто вроде:

linux *
linuxold

Теперь перезагрузитесь с ядром 2.2.10.

Теперь мы должны отредактировать правила firewall, на обеих серверах для использования masquerading для внутренних машин и применения запрета на forwarding:

Сервер A:

ipchains -P forward DENY
ipchains -A forward -p all -j MASQ -s 10.0.0.0/24 -d 0.0.0.0/0

Сервер B:

ipchains -P forward DENY
ipchains -A forward -p all -j MASQ -s 192.168.0.0/24 -d 0.0.0.0/0

Не забудьте поместить эти правила в последними в Ваш скрипт для firewall. Вы также должны разрешить IP-forwarding, отредактировав файл /etc/sysconfig/network и заменив строку:

FORWARD_IPV4="no"

на строку:

FORWARD_IPV4="yes"

Вы должны теперь быть способны на ping сервер B из сети A (ping 5.6.7.8), и ping сервер A из сети B (ping 1.2.3.4).

Если все работает, можно начать установку IP Security.

Установка IPSec

Загрузите последний IPSec snapshot (версия 1.0 НЕ работает с ядрами 2.2.x). Перейдите в /usr/local/src (или куда Вы его положили), распакуйте исходники и запустите программу установки (обычно для ncurses-версий make menugo). Ядро будет пропатчено, после чего будет запущена настройка ядра и построение утилит IPSec и самого нового ядра.

cd /usr/local/src
tar –zvvxf /path/to/tarball/snapshot.tar.gz
chown –R root:root freeswan-snap1999Jun14b
cd freeswan-snap1999Jun14b
make menugo

Удостоверьтесь, что Вы сохраняете настройки ядра, даже при том, что параметры выбраны, они не были сохранены. Вам возможно также придется восстанавливать ядро, поскольку команда "make menugo" иногда выполняет "make zImage", а она обычно терпит неудачу из-за больших размеров ядеер серии 2.2.x. Сразу после комиляции в таком случае будет выдано сообщение об ошибке. Если оно есть, просто скомандуйте:

cd /usr/src/linux
make bzImage
cp /usr/src/linux/arch/i386/boot/bzImage /boot/vmlinuz-2.2.10-ipsec

Теперь поправьте lilo.conf, запустите lilo и перезагрузитесь с новым ядром.

Lilo.conf должен выглядеть примерно так:

boot=/dev/hda
map=/boot/map
install=/boot/boot.b
prompt
timeout=100
image=/boot/vmlinuz-2.2.10-ipsec
label=linux-ipsec
root=/dev/hda1
read-only
image=/boot/vmlinuz-2.2.10
label=linux
root=/dev/hda1
read-only

При запуске lilo должен вывести нечто вроде:

linux-ipsec *
linux

После перезагрузки Вы получите ядро 2.2.10 с поддержкой IPSec. При перезагрузке будут сообщения об ошибках. Дело в том, что по умолчанию IPSEC установлен так, чтобы использовать интерфейс eth999, который конечно не существует. Вы должны также добавить /usr/local/lib/ipsec к Вашей инструкции path, или Вы будете должны каждый раз набирать полный путь.

Настройка IPSec

Мы первоначально используем ручной режим (то есть, пока мы игнорируем pluto IKE daemon) поскольку это делает жизнь более простой. Вы должны отредактировать файлы ipsec.conf и ipsec.conf. Эти два файла затем должны быть скопированы на другой сервер безопасным способом (ssh, гибким диском и т.д.).

Диаграмма сети:

Вы должны отредактировать файл ipsec.conf, большинство значений по умолчанию прекрасно, но Вы должны изменить следующее:

conn sample
type=tunnel
# left security gateway (public-network address)
left=
# next hop to reach right
leftnexthop=
# subnet behind left (omit if there is no subnet)
leftsubnet=
# right s.g., subnet behind it, and next hop to reach left
right=
rightnexthop=
rightsubnet=
#
spibase=0x200
# (manual) encryption/authentication algorithm and parameters to it
esp=3des-md5-96
espenckey=
espauthkey=

Замените espenckey и espauthkey на новые ключи (используя ranbits для генерации чисел, не забудьте вписать префикс 0x, который указывает, что число шестнадцатиричное):

conn my-tunnel
type=tunnel
# left security gateway (public-network address)
left=1.2.3.4
# next hop to reach right
leftnexthop=1.2.3.1
# subnet behind left (omit if there is no subnet)
leftsubnet=10.0.0.0/24
# right s.g., subnet behind it, and next hop to reach left
right=5.6.7.8
rightnexthop=5.6.7.1
rightsubnet=192.168.0.0/24
#
spibase=0x200
# (manual) encryption/authentication algorithm and parameters to it
esp=3des-md5-96
espenckey=some_auth_key_here (ranbits 192)
espauthkey=some_other_key_here (ranbits 128)

Скоируйте исправленные файлы ipsec.conf и ipsec.secrets на другой сервер каким-нибудь безопасным способом. Теперь все, что остается, это добавление некоторых правил firewall так, чтобы пакеты не получили masqueraded (мы просто хотим их послать).

На сервере A добавьте такие правила:

ipchains -A forward -p all -j ACCEPT -s 10.0.0.0/24 -d 192.168.0.0/24
ipchains -A forward -p all -j ACCEPT -s 192.168.0.0/24 -d 10.0.0.0/24

Удостоверьтесь, что эти правила появляются перед правилом masquerading, это должно выглядеть следующим образом:

#
# FORWARD RULES
#
ipchains -P forward DENY
#
ipchains -A forward -p all -j ACCEPT -s 10.0.0.0/24 -d 192.168.0.0/24
ipchains -A forward -p all -j ACCEPT -s 192.168.0.0/24 -d 10.0.0.0/24
ipchains -A forward -p all -j MASQ -s 10.0.0.0/24 -d 0.0.0.0/0

На сервере B в основном повторите процесс:

ipchains -A forward -p all -j ACCEPT -s 192.168.0.0/24 -d 10.0.0.0/24
ipchains -A forward -p all -j ACCEPT -s 10.0.0.0/24 -d 192.168.0.0/24

Удостоверьтесь, что эти правила появляются перед правилом masquerading, это должно выглядеть следующим образом:

#
# FORWARD RULES
#
ipchains -P forward DENY
#
ipchains -A forward -p all -j ACCEPT -s 192.168.0.0/24 -d 10.0.0.0/24
ipchains -A forward -p all -j ACCEPT -s 10.0.0.0/24 -d 192.168.0.0/24
ipchains -A forward -p all -j MASQ -s 192.168.0.0/24 -d 0.0.0.0/0

Запуск вашего подключения

Теперь Вы должны быть способны создать ipsec туннель на обеих машинах вручную и машины в сети A должны быть способны разговаривать с машинами в сети B без проблем.

ipsec manual –up my-tunnel

должно вывести нечто вроде:

/usr/local/lib/ipsec/spi: message size is 36
/usr/local/lib/ipsec/spi: message size is 132
/usr/local/lib/ipsec/spi: message size is 132

Для проверки попробуйте ping 192.168.0.2 с клиента 10.0.0.2 (Вы не можете сделать ping 192.168.0.1 на 10.0.0.1 или на внешние адреса шлюза, так как Вы не сконфигурировали туннели, чтобы обработать такие пакеты). Если это работает, Вы все установили правильно.

Два сервера с защищенным соединением через Internet (или по другой сети)

В этом примере я буду объяснять настройку, не касаясь установки, как выше.

Диаграмма сети:

Коммерческие версии IPSec

Я решил, что не помешает упомянуть здесь коммерческие пакеты для IPSec, с акцентированием, конечно, на тех, которые основаны на Linux и FreeS/WAN.

i-data

i-data создала несколько пакетов, в том числе VPN-сервер, основанный на Linux и FreeS/WAN. Они размещены в Дании, что делает их пакеты доступными по всему миру. Подробности на сайте http://www.i-data.com/networks.

Windows-клиенты IPSec

Имеется также ряд пакетов под Windows для поддержки IPSec.

PGP VPN

Авторы (Network Associates) теперь создали пакет “PGP VPN”. Он поддерживает IPSec и (по сообщениям) работает с Linux FreeS/WAN. Вы можете скачать его с http://www.nai.com/asp_set/products/tns/pgp_vpn.asp. Свободная версия PGP из NAI также поддерживает IPSEC VPN и доступна на http://www.pgpi.com.

IRE

http://www.ire.com/

 

Back

Security Portal

Written by Kurt Seifried


Установка Linux

Выбор носителя дистрибутива

CD ISO-образы

Быстрый старт Red Hat

It ain't over til...

Правильная установка Linux, первый шаг в устойчивую, безопасную систему. Имеются различные советы, предупреждения и приемы, чтобы заставить установку проходить проще, также как и некоторые проблемы, которые лучше всего решать в процессе установки (дисковое размещение, например).

Выбор носителя дистрибутива

Это проблема #1 от которой зависят скорость установки и в значительной степени безопасность. Мой любимый способ: установка по ftp, поскольку вставить временно сетевую карту нетрудно (если она еще не вставлена), а пакеты ставятся со скоростью более 1 megabyte/sec. Установка с CD-ROM вообще самая простая, поскольку диски обычно самозагружаемые, Linux находит CD и не задает вопросов по поводу каталога или имени файла (в противоположность установке с жесткого диска). Этот диск является оригиналом дистрибутива Linux, и Вы можете быть относительно уверены, что он безопасен (если получили его из уважаемого источника), если Вы параноидальны, однако не стесняйтесь проверить сигнатуры файлов.

CD ISO-образы

Если Вы хотите жечь ваш собственный CD с дистрибутивом X, то образ можно взять на http://freeiso.linuxsw.net и записать его на CD.

Быстрый старт Red Hat

Red hat обеспечивает средство для автоматизации установки, которое может быть очень полезным. Просто создайте текстовый файл с различными спецификациями установки, и положите его к установщику Red Hat, после чего сидите и смотрите на процесс установки. Это очень полезно при установке на несколько машин или при восстановлении машин пользователей (предполагается, что их данные зарезервированы). Подробности смотрите на: http://www.redhat.com/mirrors/LDP/HOWTO/KickStart-HOWTO.html.

It ain't over 'til...

Итак, Вы имеете свежий дистрибутив Linux (Red Hat, Debian, или еще какой-нибудь). Пожалуйста НЕ СТАВЬТЕ старый дистрибутив, чтобы потом его обновлять: это кошмар. (Замечание переводчика: не такой уж и кошмар.) Но есть еще много программных пакетов, которые надо обновлять, если Вы не хотите получить систему, скомпрометированную на первых 15 секундах uptime (в случае BIND/Sendmail). Хорошей идеей является хранение локальной копии каталога обновлений для Вашего дистрибутива (в конце данного документа есть список проблем для разных дистрибутивов). Проще всего сделать такой каталог доступным для Вас, положив его на NFS/ftp или записав на CD. Также следует удвлить ненужное программное обеспечение, как и то, которое Вы заменили на более безопасные версии (например, замените RSH на SSH).

Bastille Linux

Если Вы запустили Red Hat Linux попробуйте использовать укрепляющий скрипт Bastille Linux, доступный на: http://www.bastille-linux.org/.

Back

Security Portal

Written by Kurt Seifried


Ядро Linux

Обзор

Обновление и компиляция ядра

Версии ядра

Патчи (заплатки) для ядра

Отладка ядра

Обзор

Linux (или GNU/Linux согласно Stallman, если речь о полном дистрибутиве) фактически только ядро операционной системы. Оно обрабатывает работу с дисками, прочей аппаратурой, поддерживает механизмы безопасности и сеть.

В дополнение к этому мы имеем аппаратные проблемы подобно Pentium F00F bug, и проблемы, свойственные TCP-IP протоколу, Linux ядро имеет способы их обхода. Версии ядра обозначены как X.Y.Z, где Z младший номер версии, Y задает является ли ядро тестовым (нечетное значение) или рабочим (четное число), X определяет старший номер версии (пока что есть 0, 1 и 2). Серия 2.2.x имеет сильные усовершенствования о сравнению с серией 2.0.x. Использование ядер 2.2.x также позволяет Вам использовать новые возможности, например, ipchains (вместо ipfwadm). Выяснить ппоследние версии ядра можно просто командой finger @linux.kernel.org:

[seifried@mail kernel-patches]$ finger @linux.kernel.org
[linux.kernel.org]

The latest stable version of the Linux kernel is: 2.2.13
The latest beta version of the Linux kernel is: 2.3.29
The latest prepatch (alpha) version *appears* to be: 2.3.30-3

Обновление и компиляция ядра

Обновление ядра включает получение нового ядра и модулей, правку /etc/lilo.conf, запуск LILO для записи нового MBR. Ядро обычно помещается в /boot, а модули в /lib/modules/kernel.version.number.

Получить новое ядро можно двумя способами: скачать соответствующий ядерный пакет и установить его, или скачать и откомпилировать исходный код ядра с ftp://ftp.kernel.org (пожалуйста, используйте зеркальный сайт!).

Компиляция и установка ядра
cd /usr/src

Там должна быть ссылка “linux” на каталог с текущим ядром. Если ее нет, одной проблемой меньше. Если есть, удалите ее. Лучше всего переименовать каталог linux в /usr/src/linux-kernel.version.number и создать на него ссылку /usr/src/linux.

Распакуйте исходеники, используя tar и gzip так, чтобы получить /usr/src/linux примерно с 50 мегабайтами исходников. Следующий шаг должен создать ядерную конфигурацию linux (/usr/src/linux.config), это может быть достигнуто, используя “make config”, “make menuconfig” или “make xconfig”, мне кажется, что лучше всего “make menuconfig” (для этого, Вы будете нуждаться в библиотеках ncurses и ncurses devel). Это, возможно, самый трудный шаг: имеются сотни параметров, которые могут быть категоризированы в две основных области: аппаратная поддержка и сервисная поддержка. Для аппаратной поддержки напишите список аппаратных средств, с которыми это ядро будет работать, и включите соответствующие параметры. Что касается сервисной поддержки Вы будете должны вычислить, которые файловые системы (fat, ext2, minix, ...) Вы планируете использовать, то же самое для работы с сетями (firewalling и т.д.).

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

make dep              #(makes dependencies)
make clean            #(cleans out previous cruft)
make bzImage          #(make zImage pukes if the kernel is to big, and 2.2.x
                      #kernels tend to be pretty big)
make modules          #(creates all the modules you specified)
make modules_install  #(installs the modules to
                      #/lib/modules/kernel.version.number/)

Вы должны скопировать /usr/src/linux/arch/i386/boot/bzImage (или zImage) в /boot/vmlinuz-kernel.version.number. Потом поправьте файл /etc/lilo.conf, добавьте в него запись для нового ядра.

boot=/dev/hda
map=/boot/map
install=/boot/boot.b
prompt
timeout=50
default=linux
image=/boot/vmlinuz-2.2.9
        label=linux
        root=/dev/hda1
        read-only
image=/boot/vmlinuz-2.2.5
        label=linuxold
        root=/dev/hda1
        read-only

По окончании правки /etc/lilo.conf надо запустить /sbin/lilo для обновления MBR (Master Boot Record). При запуске LILO должен вывести нечто похожее на:

Added linux *
Added linuxold

Вывод представляет собой список ядер, которые будут указаны в MBR, * обозначает ядро, загружаемое по умолчанию (обычно, это первое ядро, если Вы не указали другое директивой default).

Версии ядра

Сейчас стабильными версиями ядра является серия 2.2.x, а тестовыми 2.3.x. Тестовая серия 2.1.x не рекомендуется из-за множества проблем. Серия 2.0.x устарела и не имеет ряда полезных возможностей. Увы, переход от 2.0.x к 2.2.x труден, надо обновить несколько пакетов программ, библиотек, ppp, modutils и другие (подробности в документации на ядро). Дополнительно храните старое рабочее ядро, добавьте для него запись в lilo.conf как "linuxold" или что-то подобное, тогда будет возможность отступления в случае необходимости.

Имеется ряд заплат ядра, которые могут расширить защиту Linux-системы. Одни предотвращают буферное переполнение, другие обеспечивают сильное crypto.

Патчи (заплатки) для ядра

Имеется ряд заплат, непосредственно связанных с защитой.

Для безопасности

Данная заплата (Secure Linux kernel patch) решает ряд проблем и обеспечивает другой уровень защиты для системы. Заплата доступна для ядер серий 2.0 и 2.2. Скачать можно с http://www.openwall.com/linux.

Для национальных версий

Данная заплата (International kernel patch) более мегабайта в размере! Добавляет огромное количество сильного crypto и связанных элементов. Это включает несколько алгоритмов шифрования, которые были AES-кандидатами (включая MARS из IBM). Вы можете скачать патч с http://www.kerneli.org.

Linux Intrusion Detection System Patch (LIDS)

Данная заплата добавляет ряд интересных возможностей, прежде всего нацеленных на обнаружение нападения. Вы можете "блокировать" файлы, правила firewall, есть еще ряд интересных параметров. Вы можете скачать патч с http://www.soaring-bird.com.cn/oss_proj/lids.

Проект Linux ACL

Проект Linux (ACL) ряд заплат и утилит, чтобы конфигурировать ACL-доступ к файловой системе. Это решение все еще немного ненадежно, поскольку хранит разрешения в файле и действует как уровень фильтрации между файлом и пользователями, что не соответствует ACL (но это начало). Вы можете получить пакет на http://www.braysystems.com/linux/trustees.html.

RSBAC

Rule Set Based Access Control всесторонний набор заплат и утилит, чтобы управлять различными аспектами системы. Доступен на http://www.rsbac.de/rsbac.

LOMAC

LOMAC (Low Water-Mark Mandatory Access Control for Linux) набор заплат, чтобы расширить защиту Linux. Вы можете получить его с ftp://ftp.tislabs.com/pub/lomac.

auditd

auditd позволяет Вам использовать регистрирующие средства на уровне ядра (очень мощный инструмент). Вы можете регистрировать сообщения почты, события системы и нормальные элементы, что делает и syslog, но в дополнение к этому Вы можете отслеживать события типа специфических пользователей, открывающих файлы, выполнение программ, setuid-программ, и так далее. Если Вы нуждаетесь в твердом контрольном следе, значит этот инструмент для Вас! Вы можете получить его с ftp://ftp.hert.org/pub/linux/auditd.

Fork Bomb Defuser

Загружаемый модуль ядра, который позволяет Вам управлять максимальным числом процессов на пользователя и максимальным числом ветвлений, очень полезен для shell-серверов. Скачать можно с http://rexgrep.tripod.com/rexfbdmain.htm.

Отладка ядра

KDB v0.6 (встроенный отладчик)

Отладчик ядра SGI доступен на http://oss.sgi.com/projects/kdb.

kGDB (дистанционный отладчик)

В SGI написали инструмент, который позволяет Вам делать отладку ядра, дистанционно, не связываясь с консолью. Доступен на http://oss.sgi.com/projects/kgdb.

 

Back

Security Portal

Written by Kurt Seifried


Kha0s

 

kha0S в настоящее время находится в стадии разработки, но в него входит много пакетов криптографических программ. Подробности можно посмотреть на: http://www.kha0s.org/ и загрузить его с: ftp://ftp.zedz.net/pub/replay/linux/kha0s/.

Back

Security Portal

Written by Kurt Seifried


Linux LDAP-серверы

Обзор

LDAP-серверы

LDAP-авторизация

Утилиты LDAP

 

Обзор

Протокол Lightweight directory access, кажется, является будущим хранения информации пользователя (пароли, местные каталоги, номера телефона, и т.д.). Много программ (ADS, NDS, etc.) поддерживают интерфесы LDAP, делая важной для Linux поддержку LDAP, поскольку она будет требоваться, чтобы связаться с будущими сетями предприятий.

LDAP-серверы

OpenLDAP

OpenLDAP полностью opensource (но не GPL) пакет, который предоставляет LDAP-сервер, replication-сервер и утилиты. Его можно получить с http://www.openldap.org.

LDAP-авторизация

NSS LDAP Module

NSS LDAP Module позволяет Вам сделать авторизацию пользователя по LDAP. Скачать можно с http://www.padl.com/nss_ldap.html.

Утилиты LDAP

ldap-client-cgi.py

ldap-client-cgi.py программа на Python, которая выполняется как cgi и обеспечивает www-интерфейс к LDAP-каталогу. Скачать можно с http://sites.inka.de/ms/python/ldap-client-cgi.

kldap

Основанная на KDE утилита для просмотра LDAP со способностью редактировать объекты (в основном, инструмент администрирования LDAP). Вы можете скачать его с http://www.mountpoint.ch/oliver/kldap.

GQ

Основанный на GTK клиент LDAP, который может изменять настройки. Доступен на http://biot.com/gq

 

LDAPExplorer

Основанный на www инструмент администрирования LDAP. Доступен на http://igloo.its.unimelb.edu.au/LDAPExplorer.

Perl/Java/C SDK для LDAP

Несколько пакетов разработчика для LDAP доступны для скачивания на http://www.mozilla.org/directory

Back

Security Portal

Written by Kurt Seifried


Замечание автора русской версии: Поскольку приводимая ниже информация об авторских правах является юридическим документом, а я не силен в юриспруденции, привожу ее без перевода, дабы не напутать что-либо юридическое по незнанию. Данный документ переведен на русский язык Алексеем Паутовым в 2000 году. Новые версии (если таковые будут) ищите на страничке Russian LDP http://www.botik.ru/~rldp.

License and Warranty

 

The OpenContent (OC) is defined as the set of webpages comprising the "Linux Administrator's Security Guide" (located at http://www.securityportal.com/lasg) or the daily tarball snapshot of said webpages, usually called lasg-snapshot.tar.gz. The OpenContent license is available from http://www.opencontent.org.

LICENSE

Terms and Conditions for Copying, Distributing, and Modifying

Items other than copying, distributing, and modifying the Content with which this license was distributed (such as using, etc.) are outside the scope of this license.

1. You may copy and distribute exact replicas of the OpenContent (OC) as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice and disclaimer of warranty; keep intact all the notices that refer to this License and to the absence of any warranty; and give any other recipients of the OC a copy of this License along with the OC. You may at your option charge a fee for the media and/or handling involved in creating a unique copy of the OC for use offline, you may at your option offer instructional support for the OC in exchange for a fee, or you may at your option offer warranty in exchange for a fee. You may not charge a fee for the OC itself. You may not charge a fee for the sole service of providing access to and/or use of the OC via a network (e.g. the Internet), whether it be via the world wide web, FTP, or any other method.

2. You may modify your copy or copies of the OpenContent or any portion of it, thus forming works based on the Content, and distribute such modifications or work under the terms of Section 1 above, provided that you also meet all of these conditions:

a) You must cause the modified content to carry prominent notices stating that you changed it, the exact nature and content of the changes, and the date of any change.

b) You must cause any work that you distribute or publish, that in whole or in part contains or is derived from the OC or any part thereof, to be licensed as a whole at no charge to all third parties under the terms of this License, unless otherwise permitted under applicable Fair Use law.

These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the OC, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the OC, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it. Exceptions are made to this requirement to release modified works free of charge under this license only in compliance with Fair Use law where applicable.

3. You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to copy, distribute or modify the OC. These actions are prohibited by law if you do not accept this License. Therefore, by distributing or translating the OC, or by deriving works herefrom, you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or translating the OC.

NO WARRANTY

4. BECAUSE THE OPENCONTENT (OC) IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE OC, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE OC "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK OF USE OF THE OC IS WITH YOU. SHOULD THE OC PROVE FAULTY, INACCURATE, OR OTHERWISE UNACCEPTABLE YOU ASSUME THE COST OF ALL NECESSARY REPAIR OR CORRECTION.

5. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MIRROR AND/OR REDISTRIBUTE THE OC AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE OC, EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.

Back

Security Portal

Written by Kurt Seifried


Log-файлы и другие формы наблюдения

Обзор

Основы протоколирования

Протоколирование системы

Log-мониторы

Протоколы ядра

Shell-протоколы

Обзор

Одной из главных частей любой UNIX-системы является протоколирование (logging). В Linux оно обеспечивается двумя основными программами: sysklogd и klogd, первая предоставляет сервис протоколирования программам и приложениям, вторая делает то же самое в отношении ядра Linux. Klogd фактически посылает большинство сообщений syslogd, но при необходимости выдает сообщения и на консоль (например, kernel panics). Sysklogd фактически решает задачу обработки большинства сообщений и посылки их в соответствующий файл или на устройству, это настраивается в /etc/syslog.conf. По умолчанию большинство файлов протокола лежат в /var/log, и вообще говоря, программы, которые ведут свой протокол (большинство httpd-серверов обрабатывают события сами), имеют файл с именем вида /var/log/program-name, который позволяет Вам централизовать журналы и делает работу с ними проще, что позволяет поместить их в отдельный раздел (некоторые нападения могут заполнять файлы регистрации очень быстро, а полный корневой раздел приводит к проблемам). Дополнительно имеются программы, которые обрабатывают их собственные протоколы полностью сами, в этом плане интересна bash command shell. По умолчанию bash хранит файл хронологии команд в ~username/.bash_history. Apache обрабатывает события сам с перестраиваемой конфигурацией в httpd.conf. Sendmail обрабатывает требования регистрации через syslogd но также имеет и опцию (параметр -X в командной строке) регистрации всех SMTP-транзакций прямо в файл. Это нецелесообразно, поскольку файл будет становиться огромным за короткий промежуток времени, но полезно для отладки.

Основы протоколирования

Вообще говоря, Вы не хотите позволять пользователям видеть журналы сервера, и Вы особенно не хотите, чтобы они были способными изменять или удалять их. Вообще говоря, большинство журналов принадлежит пользователю и группе root, и не имеет никаких прав для кого-то еще, так что в большинстве случаев единственный пользователь, способный изменять файлы протоколов root. Есть несколько способов дополнительной защиты, самый простой из них команда “chattr” (CHange ATTTRibutes) для перевода log-файлов в режим append only. Файл может дополняться, но стереть его будет нельзя. Для перевода его в такой режим нужно:

chattr +a filename

Только суперпользователь имеет доступ к этой функции chattr. Если Вы устанавливаете все журналы в такой режим, помните что программы прокрутки журналов будут терпеть неудачу, поскольку они не будут способны временно удалить журнал. Добавьте к скрипту обновления журналов строку для отмены режима append only:

chattr -a filename

и добавьте строку в тот же скрипт после обработки журнала, чтобы восстановить атрибут append only. Если Вы храните журналы в системе, Вы можете также установить атрибут immutable, так что с ними что-то сделать будет гораздо сложнее. Для установки атрибута immutable просто:

chattr +i filename

Теперь файл не сможет удалить никто, кроме root.

chattr -i filename

Только пользователь root имеет доступ к атрибуту immutable.

Протоколирование системы

Одно свойство Linux средства syslog и klog, которые позволяют программному обеспечению генерировать сообщения для протоколов, которые затем передаются log daemon и обрабатываются (пишутся в локальный файл, пересылаются на другой сервер, посылаются программе или обрабатываются как-то еще).

sysklogd и klogd

klogd обрабатывает ядерные сообщения, в зависимости от вашей установки, их может быть разное количество. Например, можно включить учет процессов в системе. Реально почти все сообщения передаются syslogd для дальнейшей обработки. man-страницы для sysklogd, klogd и syslog.conf довольно хорошие с ясными примерами. Одна чрезвычайно мощная и часто пропускаемая способность syslog состоит в том, чтобы регистрировать сообщения на удаленный хост на котором работает syslog. Так как Вы можете определять много мест назначения для сообщений syslog (i.e. посылать все сообщения в файл /var/log/messages, на консоль, на удаленный хост или на несколько таких хостов) это позволяет Вам централизовать регистрацию на одном хосте. Но если кто-то все же доберется до протоколов и поправит их в своих интересах, Вы об этом можете и не узнать: встроенных средств контроля целостности тут нет.

Стандартные log-файлы, которые обычно определяются в файле syslog.conf:

/var/log/messages
/var/log/secure
/var/log/maillog
/var/log/spooler

Первый (messages) получает большую часть информации: входы в систему пользователей, дампы TCP_WRAPPERS, данные о IP-firewall и многое другое. Второй обычно записывает события подобные изменениям пользователями своих UID/GID (через su, sudo), ошибки авторизации паролей и прочее в таком духе. Файл maillog обычно хранит сведения о соединениях pop/imap (вход и выход пользователей) и заголовок каждого письма прошедшего через систему (от кого, кому, msgid, status и прочая информация). Файл spooler не часто используется поскольку число людей использующих usenet или uucp резко упало, uucp был в основном заменен на ftp и email, а большинство серверов usenet обычно чрезвычайно мощные машины, чтобы обработать полный или даже частичный newsfeed, значит их немного (обычно одна на ISP или чуть больше в зависимости от размера).

Можно задавать дополнительные log-файлы, например:

kern.* /var/log/kernel-log

Можно также разделить поток сообщений на разные файлы в соответствии с типом сообщений:

*.emerg @syslog-host
mail.* @mail-log-host

Теперь все сообщения ядра будут записываться в /var/log/kernel-log. Во втором случае все аварийные сообщения будут регистрироваться на “ syslog-host”, и все журналы почты будут посланы на “mail-log-host ”, позволяя Вам легко поддерживать централизованные журналы различных услуг. Значение по умолчанию syslogd, которое поставляется во многих дистрибутивах ужасно опасно, журналы легко можно поправить или вообще разрушить.

По умолчанию файлы протоколов доступны на чтение/запись только для root. К тому же можно и нужно установить для них режим append only (помните, что программы ротации журналов воспринимают это болезненно).

secure-syslog

Основная проблема, это исправленные журналы. Можно установить режим append only с помощью “chattr +a”, но с правами root его также легко снять и поставить на место после необходимой правки журнала. Есть безопасная версия syslogd, доступная на http://www.core-sdi.com/english/freesoft.htm (эти парни вообще делают хорошие инструментальные средства и имеют хорошую репутацию). Здесь есть возможность криптоподписи файла протокола, что гарантировано обеспечит данные о том, что его никто не трогал. В конечном счете, однако, нападавший может все же удалять журналы, так что хорошая идея послать их другому хосту, особенно в случае firewall, чтобы предотвратить диск от переполнения.

next generation syslog

Другая альтернатива: “syslog-ng” (Next Generation Syslog), который кажется намного больее настраиваемым чем syslog или secure-syslog, он поддерживает цифровые сигнатуры, чтобы предотвратить вмешательство в файлы регистрации, и может фильтровать данные, исходя из содержания сообщения, а не только того, откуда это исходит или приоритета (что является очень полезным для сокращения объема). Syslog-ng доступен на http://www.balabit.hu/products/syslog-ng.

Nsyslogd

Nsyslogd поддерживает tcp и SSL для протоколирования удаленных систем. Работает на разных UNIX-платформах и доступен на http://coombs.anu.edu.au/~avalon/nsyslog.html.

Log-мониторы

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

Psionic Logcheck

Psionic Logcheck регулярно (можно из crontab) изучает файл messages (и другие) и посылает по e-mail отчет о всем подозрительном. Он легко настраивается с помощью ‘классов’ событий: которые нужно игнорировать, активные попытки проникновения, просто плохие действия. Psionic Logcheck доступен на http://www.psionic.com/abacus/logcheck.

colorlogs

colorlogs ракрашивает log-файлы, позволяя легко найти подозрительное. Основанный на файле конфигурации, он ищет ключевые слова и сопоставляет им цвета строк (red, cyan и другие), требуется ввод с STDIN, так что Вы можете использовать это средство чтобы сделать быстрый обзор журналов (используя “cat”, “tail” или другие утилиты, чтобы передать файл программе). Получить можно на http://www.resentment.org/projects/colorlogs.

WOTS

WOTS собирает log-файлы с нескольких источников и генерирует отчеты или сам принимает меры основываясь на том, что Вы ему велели. WOTS ищет регулярные выражения которые Вы определяете, и затем выполняет команды, которые Вы вносите в список. WOTS требует установки Perl и доступен на http://www.vcpc.univie.ac.at/~tc/tools.

swatch

swatch очень подобен WOTS, и настройка журналов тоже очень похожа. Вы можете скачать swatch с ftp://ftp.stanford.edu/general/security-tools/swatch.

Протоколы ядра

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

auditd

Информация здесь.

Shell-протоколы

Ряд оболочек имеет встроенные возможности регистрации.

bash

Я рассмотрю bash поскольку это заданная по умолчанию оболочка в большинстве версий Linux. bash имеет большое количество переменных, которые Вы можете конфигурировать во время выполнения. Можно настроить все: от стиля приглашения ко вводу команды, до того сколько строк хранить в журнале.

HISTFILE
имя файла протокола, по умолчанию ~username/.bash_history

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

HISTSIZE
сколько команд помнить (при использованни клавиши up arrow).

Переменные обычно задаются в /etc/profile, который настраивает bash для всех пользователей глобально, но они могут быть перекрыты в файле ~username/.bash_profile вручную используя команду export чтобы установить переменные типа export EDITOR=emacs. Это одна из причин того, почему каталоги пользователей не должны быть всемирно читаемыми; файл .bash_history может содержать много ценной информации. Вы можете запретить запись в него, выключить ведение протокола через свой файл .bash_profile или связать его с /dev/null, дабы не дать bash вести протокол. Для root я рекомендую задать минимальные значения HISTFILESIZE и HISTSIZE (например 10). С другой стороны, если Вы хотите регистрировать хронологию оболочки пользователей для анализа их действий задайте для этих файлов атрибуты immutable и append only, используя команду .bash_history. Правда, такой подход создаст еще ряд проблем, так что заручитесь согласием пользователей.

Back

Security Portal

Written by Kurt Seifried


NetMAX

 

NetMAX делает несколько программ, firewall, webserver, file server и "Linux Professional" основанный на Linux (а также еще одну линейку на FreeBSD). Они прислали мне копию firewall, так что ждите информацию, как только я с ней разберусь. Коробка выгялдит вполне прилично.

http://www.netmax.com/

 

Back

Security Portal

Written by Kurt Seifried


Сетевая безопасность

Обзор

Защита PPP

Защита TCP-IP

Основные файлы настройки и утилиты

Кто это запустил?

Безопасность маршрутизации

Обзор

Сетевая безопасность довольно широкая тема, так что я разбил ее на пару разделов. В этом я описываю нижние 4 уровня (transport, network, datalink, physical) 7-уровневой модели OSI protocol stack, верхние 3 (application, presentation, session) будут рассмотрены в разделах по сетевым сервисам. Я такэе рассмотрю некоторые базисные файлы конфигурации сети, так как их объяснение всегда полезно.

Защита PPP

PPP предоставляет соеднинения TCP-IP, IPX/SPX и NetBEUI по последовательным линиям (например, по модему). Это основной способ доступа в Internet большинства людей, так как все dial-up соединения фактически используют PPP). PPP-соединение по существу состоит из двух вычислительных устройств (компьютер, Palm Pilot, терминальный сервер...), связанных последовательной связью (обычно через модемы). Оба конца вызывают PPP, выполняют авторизацию (есть разные методы) и устанавливают связь. PPP не имеет никакой реальной поддержки шифрования, так что если Вы требуете безопасной связи, Вы должны использовать некоторую форму программного обеспечения для VPN.

Большинство систем вызывает PPP довольно сложным путем. Вы должны зарегистрироваться на терминальном сервере или его аналоге и запустить протокол PPP. Ваш логин и пароль будут переданы по сети в чистом виде, к тому же, нужен логин и пароль на другом конце линии. В этом случае сам PPP не обрабатывает авторизацию вообще. Несколько более безопасный метод обработки состоит в том, чтобы использовать PAP (Password Authentication Protocol). С PAP авторизация обрабатывается внутренне PPP, так что Вам не требуется "реального" логина на сервере. Однако, username и пароль все еще представлены чистым текстом, но по крайней мере система несколько более безопасна из-за отсутствия логинов пользователей.

Третий (и лучший) метод для аутенфикации: использовать CHAP (Challenge Handshake Authentication Protocol). Обе стороны обмениваются общими ключами и используют их, чтобы шифровать данные, посланные в течение опознавательной последовательности. Таким образом, Ваш username и пароль передаются относительно безопасно, однако фактически данные передаются как обычно. Одно замечание про CHAP: реализация Microsoft использует DES вместо MD5, что разрушает соединение с Linux-клиентом. Есть патчи для исправления данной ситуации. PPP входит почти во все дистрибутивы Linux, как часть ядра OS, Linux PPP-HOWTO есть на http://www.linuxdoc.org/HOWTO/PPP-HOWTO.html.

Защита TCP-IP

TCP-IP был создан во времена, когда защита не являлась столь важной, как сейчас. Набор протоколов TCP-IP очень умно построен, но к сожалению не имеет никаких реальных условий для защиты (то есть аутенфикации, проверки, шифрования и так далее). Перехват пакетов, чтение полезного груза данных и тому подобные вещи легко осуществимы в сегодняшней сети Internet.

Имена хостов и их IP-адреса не всегда соответствуют друг другу. Не используйте авторизацию на основании имени хоста, если возможно. Поскольку обман кэша DNS довольно прост, надежней использовать IP-адрес (замечание автора русской версии: лично сталкивался с тем, что кто-то перехватывал IP-адрес доужественной мне фирмы, благодаря чему подставил меня по обвинению в атаке на университетский сервер, к которой я отношения не имел). Не имеется никаких механизмов в широком использовании, чтобы проверить, кто послал данные и кто их получает, за исключением использованием шифрования уровня сеанса или IP (IPSEC/IPV6 и другие VPN-технологии получают хороший импульс, благодаря такому подходу).

Вы можете отбрасывать входящие данные, которые уверяют, что пришли из Вашей сети: здесь ложь очевидна. Также надо запретить все исходящие данные, которые идут не с адресов Вашей сети. Это относительно просто, но огромное число сетей не делает этого (я потратил около года, приставая к моему ISP, прежде, чем они это запустили). Если бы каждая сеть блокировала ложные пакеты, опасности не было бы вовсе, а проследить хакера было бы на порядок проще (замечание автора русской версии: покажите мне админа, которому охота с этим разбираться. Обвинить пользователя ни за что много проще). Вы должны также блокировать зарезервированные сети (127.*, 10.* и им подобные). Я отметил много нападений из Internet с пакетами, помеченными как пришедшие из этих диапазонов IP. Если Вы используете сетевую трансляцию адреса (подобно IPMASQ) и не имеете правильного firewall, Вы можете быть легко атакованы или использованы, чтобы передать нападение третьему лицу.

Если Вы связались надежно с людьми, рассмотрите использование VPN-технологией. Единственная доступная технология, которая имеет широкую поддержку и планируется в качестве стандарта (в IPv6), это IPSec, это открытый стандарт, поддержанный многими разработчиками, и основные разработчики имеют фактические рабочие реализации в их OS (хотя некоторые повреждены, чтобы выполнить экспортные законы США). Пожалуйста см. подробности в приложении B или в разделе "Шифрование сервисов и данных".

IPSec

IPSec посвящена отдельная глава. Я считаю его будущим сетей типа VPN, поскольку на сегодняшний день он поддерживается очень широко и входит в стандарт IPv6).

IPv6

IPv6 сам по себе не имеет мер безопасности, это просто другая форма адресации. Но в стандарт встроены возможности поддержки защиты. Например, там есть IPSec. Подробности об IPv6 есть на http://www.bieringer.de/linux/IPv6. Linux сейчас уже поддерживает IPv6 в полном объеме (одна из немногих OS, которые могут этим похвалиться).

HUNT Project

Проект HUNT представляет собой набор инструментов для управления TCP-IP (обычно в Ethernet LAN), который может перезапускать соединения, наблюдать за ними и делать другие подобнгые вещи. Он также имеет несколько несколько атак, основанных на ARP. Скачать HUNT можно с http://www.cri.cz/kra.

Основные файлы настройки и утилиты

/etc/inetd.conf

inetd.conf ответственен за запускаемые сервисы, обычно те, которые не должны выполниться непрерывно, или основаны на сеансе (например, telnet или ftpd). Для многих сервисов (например, DNS) имеет смысл не держать их запущенными постоянно. Для многих сервисов трата нескольких секунд на запуск некритична. man-страница по inetd.conf (“man inetd.conf”) рассматривает основы такого управления сервисами. Сам сервис называется inetd и вызывается при запуске системы, так что Вы можете легко менять форму работы сервисов, управляя процессом inetd. Всякий раз, когда Вы делаете изменения в inetd.conf, Вы должны перезапустить inetd, чтобы сделать изменения эффективными, killall -1 inetd перезапустит его правильно. Строки в inetd.conf могут быть закомментированы # как обычно (это очень простой и эффективный путь отключения сервисов подобных rexec). Желательно отключить так много сервисов в inetd.conf, как возможно, обычно единственные используемые будут ftp, pop и imap. Telnet и r-сервисы должны быть заменены на SSH. Доступ к программам, запущенным inetd может легко управляться использованием TCP_WRAPPERS.

/etc/services

Файл services перечисляет номера портов, протоколы и связанные имена. Формат его строк:

service-name port/protocol aliases   # optional comment

Например:

time   37/udp timserver
rlp    39/udp resource     # resource location
name   42/udp nameserver
whois  43/tcp nicname      # usually to sri-nic
domain 53/tcp
domain 53/udp

Этот файл используется при запуске 'netstat -a' и не используется при запуске 'netstat -an'

TCP_WRAPPERS

Использование TCP_WRAPPERS существенно облегчает защиту от внешних атак. TCP_WRAPPERS управляется двумя файлами:

/etc/hosts.allow
/etc/hosts.deny

hosts.allow проверяется первым, и его правила проверяются сверху вниз. В случае нахождения правила с разрешением для Вас (то есть, Вашего хоста, домена, маски подсети или других сетевых параметров), Вы получите доступ к сервису. Если ничего подходящего не найдено, проверяется hosts.deny в поисках таких же правил. Этот файл ничем не отличается от предвдущего, кроме того, что все данные в нем интерпретируются как запреты определенным системам подключаться к защищаемой системе. Первое же найденное правило приведет к тому, что доступа Вы не получите. Если ничего не найдено, доступ будет предоставлен. Если Вы придерживаетесь пессиместичной стратегии защиты, впишите :
в hosts.deny:

ALL: 0.0.0.0/0.0.0.0

что запретит все услуги для всех, кроме тех услуг, которые явно разрешены для тех систем, которым явно дано разрешение (помните, что по умолчанию доступ разрешен). Можно также избрать такой подхож в отношении только некоторых сервисов, скажем, telnet, а другие, например, ftp, оставить открытыми всем. Для этого впишите:

в hosts.allow:

in.telnetd: 10.0.0.0/255.255.255.0 # allow access from my internal network
                                   # of 10.0.0.*
in.ftpd: 0.0.0.0/0.0.0.0           # allow access from anywhere in the world

в hosts.deny:

in.telnetd: 0.0.0.0/0.0.0.0   # deny access to telnetd from anywhere

Или если Вы желаете быть действительно безопасными:

ALL: 0.0.0.0/0.0.0.0   # deny access to everything from everywhere

Это может воздействовать и на сервисы типа ssh и nfs, так что будьте очень внимательны!

Вы можете просто внести в список все услуги, которые Вы используете отдельно:

in.telnetd: 0.0.0.0/0.0.0.0
ipop3d: 0.0.0.0/0.0.0.0

Если некоторый сервис не упомянут в inetd.conf и не имеет политики запрета по умолчанию, это не сервис, а дыра в системе. Более безопасное (и немного больше работы, но в конечном счете меньшее количество работы, чем восстанавливать сервер) иметь запрет в качестве значения по умолчанию правил для firewall и TCP_WRAPPERS.

man-страницы для TCP_WRAPPERS очень хорошие, и вызываются командами:

man hosts.allow
man hosts_allow

и/или:

man hosts.deny
man hosts_deny

Один глюк в TCP_WRAPPERS, который недавно выскочил на Bugtraq, TCP_WRAPPERS интерпретирует в hosts.allow и hosts.deny следующим способом:

1) Обрезает все символы \ (продолжение строки), делая все строки полными (помните также, что максимальная длина строки около 2k, лучше использовать несколько строк в некоторых случаях).

2) Обрезает все строки, начинающиеся на #, то есть все комментарии. Таким образом

# this is a test
# in.ftpd: 1.1.1.1 \
in.telnetd: 1.1.1.1

Это означает, что строка "in.telnetd: 1.1.1.1" тоже будет проигнорирована!

What is running and who is it talking to?

Как можно говорить о безопасности, когда Вы не знаете, что работает в системе? Для этой задачи ps и netstat неоценимы; ps сообщит Вам, что в настоящее время работает (httpd, inetd и т.д), а netstat сообщит Вам о состоянии портов (здесь мы заинтересованы портами, которые являются открытыми и слушают, которые ждут подключения). Мы можем смотреть на различные файлы конфигурации, которые управляют сервисами сети.

ps

Программа ps показывает статус процессов (информацию из файловой системы /proc). Наиболее используемые параметры “ps -xau”, которые показывают практически всю информацию, которую Вы когда-либо хотели бы узнать. Пожалуйста обратите внимание: эти параметры изменяются в разных UNIX-системах, Solaris, SCO, и другие ведут себя по-другому (что невероятно раздражает). Ниже приведен типичный вывод для машины (команда “ps –xau”).

USER   PID  %CPU %MEM SIZE  RSS   TTY STAT START  TIME COMMAND
bin    320  0.0  0.6  760   380   ?   S    Feb 12 0:00 portmap
daemon 377  0.0  0.6  784   404   ?   S    Feb 12 0:00 /usr/sbin/atd
named  2865 0.0  2.1  2120  1368  ?   S    01:14  0:01 /usr/sbin/named -u named -g named -t /home/named
nobody 346  0.0  18.6 12728 11796 ?   S    Feb 12 3:12 squid
nobody 379  0.0  0.8  1012  544   ?   S    Feb 12 0:00 (dnsserver)
nobody 380  0.0  0.8  1012  540   ?   S    Feb 12 0:00 (dnsserver)
nobody 383  0.0  0.6  916   416   ?   S    Feb 12 0:00 (dnsserver)
nobody 385  0.0  0.8  1192  568   ?   S    Feb 12 0:00 /usr/bin/ftpget -S 1030
nobody 392  0.0  0.3  716   240   ?   S    Feb 12 0:00 (unlinkd)
nobody 1553 0.0  1.8  1932  1200  ?   S    Feb 14 0:00 httpd
nobody 1703 0.0  1.8  1932  1200  ?   S    Feb 14 0:00 httpd
root   1    0.0  0.6  776   404   ?   S    Feb 12 0:04 init [3]
root   2    0.0  0.0  0     0     ?   SW   Feb 12 0:00 (kflushd)
root   3    0.0  0.0  0     0     ?   SW   Feb 12 0:00 (kswapd)
root   4    0.0  0.0  0     0     ?   SW   Feb 12 0:00 (md_thread)
root   64   0.0  0.5  736   348   ?   S    Feb 12 0:00 kerneld
root   357  0.0  0.6  800   432   ?   S    Feb 12 0:05 syslogd
root   366  0.0  1.0  1056  684   ?   S    Feb 12 0:01 klogd
root   393  0.0  0.7  852   472   ?   S    Feb 12 0:00 crond
root   427  0.0  0.9  1272  592   ?   S    Feb 12 0:19 /usr/sbin/sshd
root   438  0.0  1.0  1184  672   ?   S    Feb 12 0:00 rpc.mountd
root   447  0.0  1.0  1180  644   ?   S    Feb 12 0:00 rpc.nfsd
root   458  0.0  1.0  1072  680   ?   S    Feb 12 0:00 /usr/sbin/dhcpd
root   489  0.0  1.7  1884  1096  ?   S    Feb 12 0:00 httpd
root   503  0.0  0.4  724   296   2   S    Feb 12 0:00 /sbin/mingetty tty2
root   505  0.0  0.3  720   228   ?   S    Feb 12 0:02 update (bdflush)
root   541  0.0  0.4  724   296   1   S    Feb 12 0:00 /sbin/mingetty tty1
root   1372 0.0  0.6  772   396   ?   S    Feb 13 0:00 inetd
root   1473 0.0  1.5  1492  1000  ?   S    Feb 13 0:00 sendmail: accepting connections on port 25
root   2862 0.0  0.0  188   44    ?   S    01:14  0:00 /usr/sbin/holelogd.named /home/named/dev/log
root   3090 0.0  1.9  1864  1232  ?   S    12:16  0:02 /usr/sbin/sshd
root   3103 0.0  1.1  1448  728   p1  S    12:16  0:00 su -root 3104 0.0 1.3 1268 864 p1 S 12:16 0:00 -bash
root   3136 0.0  1.9  1836  1212  ?   S    12:21  0:04 /usr/sbin/sshd

Здесь интересны: portmap, named, Squid (и порожденные им процессы dnsserver, unlinkd и ftpget), httpd, syslogd, sshd, rpc.mountd, rpc.nfsd, dhcpd, inetd и sendmail (эти серверы предоставляют шлюзовые сервисы, почту и доступ к файлам по NFS). Самый простой способ понять вывод команды ps, это почитать ее man-страницу, которая детально все объясняет (многие поля понятны и так, например %CPU показывает сколько квантов времени процессора занимает процесс, SIZE сколько 4k ‘страниц’ памяти использует программа). Чтобы узнать что делает та или иная программа, наиболее безопасно использовать ‘man <command_name>’; там почти есть вся необходимая информация о сервисе (например, по httpd). Обратите внимание, что некоторые сервисы подобные telnet, ftpd, identd и ряд других не обнаруживаются даже при том, что они включены. Это потому, что они выполнены из inetd, ‘суперсервера’. Чтобы их найти, посмотрите файл /etc/inetd.conf или вывод команды “netstat –vat”.

netstat

netstat сообщает нам практически все связанное с сетью, что Вы можете воображать. Это особенно хорошо при распечатке активных подключений и сокетов. Используя netstat, мы можем узнать какие порты на каких интерфейсах являются активными. Ниже приведен типичной вывод netstat –vat.

Active Internet connections (including servers)
Proto Recv-Q Send-Q Local Address    Foreign Address      State
tcp   0      0      24.108.11.200:80 205.253.183.122:3661 ESTABLISHED
tcp   0      0      0.0.0.0:1036     0.0.0.0:*            LISTEN
tcp   0      0      0.0.0.0:80       0.0.0.0:*            LISTEN
tcp   0      0      10.0.0.10:53     0.0.0.0:*            LISTEN
tcp   0      0      28.208.55.254:53 0.0.0.0:*            LISTEN
tcp   0      0      127.0.0.1:53     0.0.0.0:*            LISTEN
tcp   0      0      0.0.0.0:139      0.0.0.0:*            LISTEN
tcp   0      0      0.0.0.0:25       0.0.0.0:*            LISTEN
tcp   0      0      0.0.0.0:2049     0.0.0.0:*            LISTEN
tcp   0      0      0.0.0.0:635      0.0.0.0:*            LISTEN
tcp   0      0      0.0.0.0:22       0.0.0.0:*            LISTEN
tcp   0      0      0.0.0.0:21       0.0.0.0:*            LISTEN
tcp   0      0      0.0.0.0:111      0.0.0.0:*            LISTEN
udp   0      0      127.0.0.1:1031   0.0.0.0:*
udp   0      0      0.0.0.0:1029     0.0.0.0:*
udp   0      0      0.0.0.0:800      0.0.0.0:*
udp   0      0      0.0.0.0:1028     0.0.0.0:*
udp   0      0      10.0.0.10:53     0.0.0.0:*
udp   0      0      28.208.55.254:53 0.0.0.0:*
udp   0      0      127.0.0.1:53     0.0.0.0:*
udp   0      0      10.1.0.1:138     0.0.0.0:*
udp   0      0      10.1.0.1:137     0.0.0.0:*
udp   0      0      10.0.0.10:138    0.0.0.0:*
udp   0      0      10.0.0.10:137    0.0.0.0:*
udp   0      0      0.0.0.0:138      0.0.0.0:*
udp   0      0      0.0.0.0:137      0.0.0.0:*
udp   0      0      0.0.0.0:2049     0.0.0.0:*
udp   0      0      0.0.0.0:635      0.0.0.0:*
udp   0      0      0.0.0.0:514      0.0.0.0:*
udp   0      0      0.0.0.0:111      0.0.0.0:*
raw   0      0      0.0.0.0:1        0.0.0.0:*
raw   0      0      0.0.0.0:6        0.0.0.0:*

Числовой вывод, по-моеему, читать легче (как только Вы запомните /etc/services). Интересные поля для нас: первое поле, тип сервиса, четвертое поле, которое является адресом IP-интерфейса и порта, внешний адрес (если не 0.0.0.0.*, кто-то активно общается с этим портом) и состояние порта. Первая строка: удаленный пользователь, работающий с web-сервером на этой машине (порт 80). Дальше виден www-серевер, слушающий на 0.0.0.0:80, что значит все интерфейсы, порт 80, затем сервер DNS на всех 3 интерфейсах, сервер samba (139), сервер почты (25), NFS-сервер (2049) и так далее. Обратите внимание на ftp-сервер (21) перечисленный, даже при том, что запускается из inetd и не используется в настоящее время (то есть, никто не работает с ftp сейчас). Он перечислен в выводе netstat. Это делает netstat особенно полезным для выяснения, что является активным на машине, делая опись активного и неактивного сетевого программного обеспечения на сервере намного проще.

lsof

lsof удобная программа, подобная ps, за исключением того, что она выдает какие файлы и прочие ресурсы используются, включая сетевые сокеты. К сожалению, lsof выводит много информации, так что Вы будете должны использовать grep или переназначать вывод через less (“lsof|less”), чтобы прочитать его.

squid 9726 root 4u inet 78774 TCP localhost:2074->localhost:2073 (ESTABLISHED)
squid 9726 root 5u inet 78777 TCP localhost:2076->localhost:2075 (ESTABLISHED)
squid 9726 root 6u inet 78780 TCP localhost:2078->localhost:2077 (ESTABLISHED)
squid 9726 root 7w CHR 1,3 6205 /dev/null
squid 9726 root 14u inet 78789 TCP host1:3128 (LISTEN)
squid 9726 root 15u inet 78790 UDP host1:3130 
squid 9726 root 16u inet 78791 UDP host1:3130
squid 9726 root 12u inet 167524 TCP host1:3128->host2:3630 (ESTABLISHED)
squid 9726 root 17u inet 167528 TCP host1:3424->www.example.org:http (SYN_SENT)

Этот пример показывает, что мы имеем Squid, слушающий порты 3128 и 3130, последние две строки показывают открытое соединение внутреннего хоста с сервером Squid и то, что Squid выполняет запрос (в данном случае на www.example.org). host1 является сервером Squid, а host2 является клиентом, создавшим запрос. Это неоценимый инструмент для получения точного картины ситуации с сетью на Вашей системе. Вы можете получить lsof со многими дистрибутивами. Пожалуйста обратите внимание, что версии lsof для ядер версии 2.0.x не будут работать с ядрами 2.2.x и наоборот, так как имеется слишком много изменений. Главный сайт lsof: ftp://vic.cc.purdue.edu/pub/tools/unix/lsof.

Безопасность маршрутизации

Есть несколько программ маршрутизации (routing) для Linux. Многие из них поддерживают новые протоколы маршрутизации, которые имеют хорошие возможности защиты, наравне со старыми протоколами, например, RIP.

routed

routed один из стандартных пакетов маршрутизации для Linux. Он поддерживает RIP (самый старый протокола маршрутизации, все еще используется). RIP очень прост, роутеры просто передают таблицы маршрутизации соседним маршрутизаторам, создавая в результате (в теории) полную таблицу маршрутизации, которая содержит записи для каждого адресата в Internet. Этот метод опасен и очень неэффективен вне маленьких безопасных сетей. Вы можете использовать firewall для портов 520 и 521, которые использует RIP для передачи данных, но атакующие все еще могут применить спуффинг маршрутов.

gated

gated более продвинутый вариант программ маршрутизации, чем routed. Он поддерживает RIP версий 1 и 2, DCN HELLO, OSPF версии 2, EGP версии 2 и BGP версий от 2 до 4. В настоящее время наиболее популярный протокол маршрутизации, кажется, BGP (Border Gateway Protocol), но набирает популярность и OSPF (он имеет встроенную защиту, очень эффективен и лишь немного более сложен).

MRT

MRT (Multi-threaded Routing Toolkit) routing daemon и набор тестовых утилит с поддержкой IPv4 и IPv6. Скачать можно с http://www.mrtd.net.

zebra

zebra еще более продвинутый пакет, чем gated и поддерживает хороший интерфейс командной строки стиля Cisco. Выполняется как daemon и поддерживает многопоточность для эффективности, каждый протокол (RIP, OSPF, и другие) имеет собственную конфигурацию, и Вы можете выполнять много протоколов одновременно (хотя это может привести к беспорядку и проблемам). Имеется главный порт конфигурации и порт для каждого протокола:

zebrasrv        2600/tcp                # zebra service
zebra           2601/tcp                # zebra vty
ripd            2602/tcp                # RIPd vty
ripngd          2603/tcp                # RIPngd vty
ospfd           2604/tcp                # OSPFd vty
bgpd            2605/tcp                # BGPd vty
ospf6d          2606/tcp                # OSPF6d vty

Я советовал бы прикрыть с помощью firewall эти порты. Доступ управляется паролем входа в систему, а доступ к функциям команды требует другого пароля (использован тот же самый синтаксис как и Cisco, “enable”). Скачать zebra можно с http://www.zebra.org.

Back

Security Portal

Written by Kurt Seifried


Сетевые сервисы: NNTP

Обзор

NNTP-серверы

Обзор

NNTP (network news transfer protocol) полезен для совместного использования больших количеств информации множеством серверов. Он полезен для организации дискуссий и форумов по разным проблемам (например, криптографии).

NNTP-серверы

INN

Сервер usenet INN имеет длинную и страшную историю, в течение длительного периода не было никаких новых версий, и состояние сервера было неопределенным. Сервер ответственнен за обработку потенциально огромной загрузки, если Вы берете полный newsfeed, ему придется обработать несколько сотен статей в секунду, каждая статья приблизительно несколько килобайт размером. Всех их надо проиндексировать, записать на диск и предоставить клиентам. INN сам по себе безвреден, поскольку работает в своем каталоге и не имеет доступа за его пределы. Однако, как и в кадой системе сообщений, пробемы начнутся при использовании частной/конфиденциальной информации. Сейчас INN поддерживается ISC и доступен на http://www.isc.org/inn.html.

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

Что касается доступа, Вы не должны позволять общий доступ. Любой публичный сервер новостей будет быстро атакован людьми, использующими его, чтобы читать новости, посылать spam и т.п. Ограничьте чтение новостей Вашей сетью. Доступ клиентов к INN контролируется файлом nnrp.access. Можно указать IP-адрес(а), имена доменов (например, *.example.org) и их права доступа (read и post), задать username и пароль. Однако, поскольку пароль оказывается связан с хостом/доменом, он не особенно удобен.

Пример nnrp.access:

*:: -no - : -no- :!*
# denies access from all sites, for all actions (post and read), to all groups.
*.example.org::Read Post:::*
# hosts in example.org have full access to all groups
*.otherexample.org::Read:::*, !me.*
# hosts in otherexample.org have read access to everything but the me hierarchy
*.otherexample.org:Read Post:myname:mypassword:*
# give me access from my AOL account using a username and password

Если Вы собираетесь запускать news-сервер, я очень рекомендую книгу O'Reilly book "Managin g Usenet". Usenet похож на Sendmail.

News должен быть закрыт firewallом как большинство серверов:

ipfwadm -I -a accept -P tcp -S 10.0.0.0/8 -D 0.0.0.0/0 119
ipfwadm -I -a accept -P tcp -S some.trusted.host -D 0.0.0.0/0 119
ipfwadm -I -a deny -P tcp -S 0.0.0.0/0 -D 0.0.0.0/0 119

или

ipchains -A input -p tcp -j ACCEPT -s 10.0.0.0/8 -d 0.0.0.0/0 119
ipchains -A input -p tcp -j ACCEPT -s some.trusted.host -d 0.0.0.0/0 119
ipchains -A input -p tcp -j DENY -s 0.0.0.0/0 -d 0.0.0.0/0 119
Diablo

Diablo свободный пакет, нацеленный на транспортировку новостей между серверами, то есть прием статей с других NNTP-серверов и передачу их на другие сервера. Он не нацелен на использование конечными пользователями для чтения или отправки статей. Вы можете получить Diablo с http://apollo.backplane.com/diablo.

DNews

Коммерческий NNTP-сервер для разных платформ. Доступен на http://netwinsite.com/dnews.htm.

Cyclone

Cyclone является коммерческим сервером NNTP, нацеленный на транспортировку новостей между серверами, то есть прием статей с других NNTP-серверов и передачу их на другие сервера. Он не нацелен на использование конечными пользователями для чтения или отправки статей. Вы можете получить Cyclone на http://bcandid.com.

Typhoon

Typhoon коммерческий сервер NNTP, нацеленный на конечных пользователей, то есть позволяет им читать и посылать статьи. Загрузить можно с http://bcandid.com.

Back

Security Portal

Written by Kurt Seifried


Сетевые сервисы: NFS

 

NFS (Network File System) является хорошим способом разделять файловые системы по сети. NFS прежде всего создан для использования в сети с высокой пропускной способностью. Если Вы нуждаетесь в высоком уровне защиты, типа передачи зашифрованных данных между серверами, NFS не самый лучший выбор. Я лично использую это в моей внутренней LAN. Более безопасные варианты включают SAMBA (свободный), и IBM переносит AFS на Linux (дорогостоящий, но AFS того стоит).

NFS имеет несколько рудиментарных средств управления защиты. Первым был firewalling; использование NFS через публичную медленную сеть (под такое определение прекрасно подходит Internet) плохая мысль. NFS работает как набор демонов daemons, TCP_WRAPPERS использовать бесполезно, если NFS не откомпилирована для их использования. Файл настройки NFS имеет несколько директив, большая часть которых имеет дело с идентификатором пользователя и группирует параметры настройки идентификатора, но никаких реальных механизмов для авторизации тут нет (пользователь может утверждать, что был UID 0). NFS-экспорт только для чтения довольно безопасен, Вы должны волноваться только относительно того, что прочитает данные не тот, кому можно.

Поддержка записи должна применяться очень аккуратно, так как единственная 'аутенфикация' основана на IP/hostname (что легко подделать: называется спуфинг) и UID (Вы можете выполнять Linux и иметь UID 0 на своей машине).

Так как же обезопасить NFS? Сначала, используем firewall, особенно если машина с интерфейсом, связанным с публично доступной сетью (Internet. Если Вы планируете выполнять NFS по публично доступной сети, лучше сделать сервис доступным только для чтения.

Вторая и наиболее интересная часть: файл /etc/exports. Он контролирует, как и что позволено делать клиентам.

Пример файла exports:

# Allow a workstation to edit web content
/www 10.0.0.11(rw,no_root_squash)
#
# Another share to allow a user to edit a web site
/www/www.example.org 10.0.0.202(rw,no_root_squash)
#
# Public ftp directory
/home/ftp *.example.org(ro,all_squash)

Структура файла exports очень проста: каталог, который Вы желаете экспортировать, пользователь (всегда используйте IP, hostname может легко быть фальшивым) и параметры. Пользователь может быть одиночным IP (10.0.0.1), hostname (gomer.example.org), подсетью (10.0.0.0/255.255.255.0) или подстановочными знаками (*.example.org). Некоторые из наболее интересных и полезных директив для файла exports:
secure: nfs-сеанс должен происходить из привилегированного порта, то есть принадлежащего root.
ro: доступ только для чтения.
noaccess: используется чтобы отключить доступ, то есть экспортируя /home, сделайте noaccess на /home/root
root_squash: считать root UID анонимным UID/GID (обычно 'nobody'), очень полезно для серверов, которым Вы не доверяете на 100% (root может почти всегда читать любой файл)
no_root_squash: полезно, если все-таки доступ root к экспортируемым каталогам (например, чтобы менять права доступа на www-сайте)
squash_uids и squash_gids: считать UID(s) или GID(s) анонимным пользователем, в Red Hat хорошим примером будет 500-10000 (по умолчанию Red Hat присваивает идентификаторы пользователям и группам, начиная с 500), пользователям с меньшим UID (специальным пользователям) имеет смысл расширить права доступа для выполнения специальных задач.
all_squash: все привилегии отменяются, все гости.
anonuid и anongid: определенно устанавливают UID/GID для анонимного пользователя (Вы могли бы сделать специальную 'anonnfs').

Очень много полезной информации можно найти на man-странице для exports.

NFS очень распространен, почти каждая разновидность UNIX поддерживает его, сервис обычно просто в установке и работе. Однако, если защита представляет собой реальную проблему, NFS лучше не ставить.

NFS должен быть ограничен по доступу из внешнего мира, он работает через порт 2049, протокол udp, также использует RPC на порте 111, протоколы udp/tcp, и использует mountd, который выполняется на порте 635, протокол udp. Замените 2049 на 111 и 635 udp и tcp, чтобы обезопасить данный сервис (самая лучшая идея: вообще закрыть порты от 1 до 1024, или еще лучше по умолчанию закрывать все лишние порты).

ipfwadm -I -a accept -P udp -S 10.0.0.0/8 -D 0.0.0.0/0 2049
ipfwadm -I -a accept -P udp -S some.trusted.host -D 0.0.0.0/0 2049
ipfwadm -I -a deny -P udp -S 0.0.0.0/0 -D 0.0.0.0/0 2049

или

ipchains -A input -p udp -j ACCEPT -s 10.0.0.0/8 -d 0.0.0.0/0 2049
ipchains -A input -p udp -j ACCEPT -s some.trusted.host -d 0.0.0.0/0 2049
ipchains -A input -p udp -j DENY -s 0.0.0.0/0 -d 0.0.0.0/0 2049

Back

Security Portal

Written by Kurt Seifried


Сетевые сервисы: печать

Серверы печати для Linux

Серверы печати для Linux

lpd

lpd старый демон печати строк (когда все, что Вы печатали, было текстом), который учитывает совместное использование принтеров. Он позволяет Вам ставить в очередь задания по выводу на печать, выполнять их через фильтры, управлять очередями печати и так далее. Lpd может принимать задания по выводу на печать в местном масштабе или по сети и обращаться к различным частям системы (принтеры, регистрирационные daemons и т.д), делая это потенциальной дырой в защите. Исторически lpd был источником нескольких крупных ошибок, позволявших получить root-доступ. Lpd-доступ управляется через файлы /etc/hosts.equiv и /etc/hosts.lpd. Вы должны также закрыть firewallом lpd от внешнего мира и, если Вы должны послать задание на печать по общей сети, помнить, что любой может читать его, так что VPN-решение хорошая идея. lpd работает на порте 515, протокол tcp. Файл hosts.lpd должен содержать список машин (по одной на строку), которым позволяют использовать услуги lpd, Вы могли бы также использовать ipfwadm/ipchains.

ipfwadm -I -a accept -P tcp -S 10.0.0.0/8 -D 0.0.0.0/0 515
ipfwadm -I -a accept -P tcp -S some.trusted.host -D 0.0.0.0/0 515
ipfwadm -I -a deny -P tcp -S 0.0.0.0/0 -D 0.0.0.0/0 515

или

ipchains -A input -p tcp -j ACCEPT -s 10.0.0.0/8 -d 0.0.0.0/0 515
ipchains -A input -p tcp -j ACCEPT -s some.trusted.host -d 0.0.0.0/0 515
ipchains -A input -p tcp -j DENY -s 0.0.0.0/0 -d 0.0.0.0/0 515
LPRng

Новое поколение LPR, вариант LPR. Имеет больше возможностей защиты и предоставляет более богатый сервис. LPRng поддерживает Kerberos и авторизацию на основе PGP, доступ контролируется файлом /etc/lpd.perms, в котором можно управлять доступом на основе пользователя, группы или IP. LPRng имеет хорошую документацию и доступен на http://www.astart.com/lprng/LPRng.html.

pdq

pdq другая замена для LPD, никакой реальной защиты не добавилось, но, кажется, предлагается некоторые усовершенствования управления и рост эффективности по сравнению с LPD. Вы можете получить pdq с http://feynman.tam.uiuc.edu/pdq.

CUPS

Common UNIX Printing System (CUPS), доступна по лицензии GPL, пока вышла версия 1.0. CUPS можно скачать с http://www.cups.org.

Back

Security Portal

Written by Kurt Seifried


Сетевые сервисы: Proxy

Обзор

Серверы proxy уровня приложений

Серверы proxy уровня сессии

Обзор

Как обычно, есть несколько пакетов proxy для Linux. Некоторые работают на уровне приложений (SQUID), другие на уровне сессии (SOCKS).

Серверы proxy уровня приложений

SQUID

SQUID мощный и быстрый объектный сервер кэша. Он обрабатывает сеансы FTP и WWW, что во многом подобно FTP и WWW серверам, но прокси только пишет и читает файлы в кэш-каталоге, что делает его безопасным. Squid работет как не-root пользователь (обычно 'nobody'), так что он довольно надежен. Основная его трудность заключается в правильной настройке. Например, если Squid подключен к Вашей внутренней сети (как обычно имеет место) и internet, это могло бы фактически использоваться, чтобы достигнуть внутренних компьютеров (даже если они используют не-направленные IP-адреса). Следовательно, соответствующая конфигурация Squid очень важна.

Самое лучшее, это настроить Squid на обслуживание только внутренних систем, чтобы снаружи никто не мог его использовать. К тому же, не помешает firewall. Squid может также использовать как ускоритель HTTP (известен также как обратный proxy), возможно Вы имеете NT WWW Server во внутренней сети, которую Вы хотите совместно использовать с миром. В этом случае настройка труднее, но все можно сделать вполне надежно. Squid имеет очень хороший ACL (списки контроля доступа) встроенные в файл squid.conf, что позволяет Вам блокировать доступ по именам, IP, сетям, времени дня, дню недели (возможно, Вы позволяете неограниченное просматривание в уикэнды для людей, которые относятся к Вашей организации). Не забудьте однако, что более сложный ACL, замедляет Squid.

Большинство сетевых администраторов будет хотеть конфигурировать Squid так, чтобы внутренняя сеть могла обращаться к www-сайтам в Internet. В этом примере 10.0.0.0/255.255.255.0 внутренняя сеть, 5.6.7.8 внешний адрес IP-адрес Squid-сервера и 1.2.3.4 www-сервер, который надо увидеть.

Squid должен быть конфигурирован так, чтобы обрабатывать запросы ТОЛЬКО из внутренней сети. В противном случае, любой сможет обратиться на 5.6.7.8 (порт 3128), запросить http://10.0.0.2 (или любую внутреннюю машину) и смотреть www-содержимое внутренней сети. Впишите нечто подобное приведенному ниже примеру в свой squid.conf file:

tcp_incoming_address 10.0.0.1
tcp_outgoing_address 5.6.7.8
udp_incoming_address 10.0.0.1
udp_outgoing_address 5.6.7.8

Это предотвратит от использования Squid, чтобы исследовать внутреннюю сеть.

Но иногда используют Squid для того, чтобы внутренние www-серверы были досьупны из Internet. Например, есть IIS 4.0 www-сервер, который надо выпустить в Internet, но не хочется подключать его напрямую. Используя Squid Вы может предоставлять доступ к нему очень хорошим способом. В этом примере 1.2.3.4 произвольная машина в Internet, 5.6.7.8 внешний IP-адрес Squid-сервера, 10.0.0.1 внутренний IP-адрес и 10.0.0.2 www-сервер во внутренней сети, управляемый IIS 4.0.

Чтобы использовать Squid как ускоритель просто установите “ http_port” в 80 в файле squid.conf:

http_port 3128

Затем установите IP-адреса по-другому:

tcp_incoming_address 5.6.7.8
tcp_outgoing_address 10.0.0.2
udp_incoming_address 5.6.7.8
udp_outgoing_address 10.0.0.2

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

httpd_accel_host 10.0.0.2
httpd_accel_port 80

Есть подробное Squid FAQ http://squid.nlanr.net/Squid/FAQ/FAQ.html.

ACL работает с помощью задания и прменения правил, например:

acl internalnet 10.0.0.0/255.0.0.0
http_access allow internalnet
http_access deny all

Здесь определяется "internalnet" для чего-то с адресом 10.0.0.0/255.255.255.0, позволяя этому доступ к http кэширование порта, и запрещая его всем остальным. Не забудьте, что правила читаются в заданном порядке, точно так же как ipfwadm, позволяя Вам делать их очень сложными (и наделать ошибок, если Вы неосторожны). Всегда размещайте общие правила перед специальными. Лучше запретить лишнее. О лишнем запрете Вы узнаете быстрее (обычно от разьяреных пользователей), чем о лишнем разрешении (обычно когда файлы из внутренней сети появятся в Internet). Файл настройки Squid (squid.conf) хорошо прокомментирован и имеет подробную man-страницу.

Другой полезный пример блокирует ads (баннеры и прочие веселые гадости, комх в последнее время развелось немерено), для этого добавьте в squid.conf:

acl ads dstdomain ads.blah.com
http_access deny ads

Объявление acl задает шаблон домена назначения, исходного домена, регулярного выражения и так далее, директива http_access фактически определяет, что делать с этим (deny, allow или что-то еще). Правильная установка этого дает чрезвычайно мощный инструмент, чтобы ограничить доступ к WWW. К сожалению, это имеет одну Ахиллесову пяту: не поддерживает идентификацию пользователя и управление на ее основе (многие UNIX proxy такое умеют). Не забудьте, что подобно любому набору правил они читаются сверху вниз. Squid FAQ есть на http://squid.nlanr.net/Squid/FAQ/FAQ.html.

Одна важная деталь защиты: протоколы Squid. По умолчанию Squid может протоколировать или нет каждый запрос, который обрабатывает (зависит от файла конфигурации), от “http://www.nsa.gov/” до “http://www.example.org/cgi-bin/access&member=john&password=bob”. Вы определенно захотите отключать файлы регистрации доступа, если Вы не хотите иметь позицию наблюдателя за тем, что люди рассматривают в Internet (по закону это сомнительно, возможны БОЛЬШИЕ проблемы!). Директива “cache_access_log” и нацеливание записей в “/dev/null”, положат этому конец. Еще одна директива “cache_store_log”, является полезной для ведения статистики по эффективности Вашего кэша, она не регистрирует кто сделал запрос, просто пишет каково состояние объектов в кэше, так что Вы видите, что изображения на pornographic-сайте обслуживаются неоднократно... Чтобы отключить это, установите в “none”. “cache_log” должен вероятно быть оставлен включенным, протокол содержит базисную информацию отладки типа того, когда станция была запущена и когда остановлена, отключить это можно установкой на "/dev/null". Еще один не очень ясно документированный файл протокола задан “cache_swap_log”. Он хранит запись того, что происходит с кэшем, и также покажет Вам, какие URL посещают (но не кто туда ходит!), установка его на “/dev/null” не работает (фактически Squid вимательно за этим следит), установка “ none” просто меняет имя файла с “log” на “none”. Единственный способ остановить это состоит в том, чтобы связать файл с “/dev/null” и связать “log-last-clean” с “/dev/null ”. Итак,

в squid.conf пишем:

cache_access_log /dev/null
cache_store_log none
cache_log /dev/null

и свяжите:

/var/spool/squid/log с /dev/null
/var/spool/squid/log-last-clean с /dev/null

или в каком там каталоге у Вас лежит www-кэш (каталоги с 00 по 0F).

Еще одна важная деталь: ICP (Internet Cache Protocol), компонент Squid. Он нужен при создании наборов или цепочек proxy-серверов. Если сервер один, надо выключить ICP. Для этого просто установите порт ICP в squid.conf не в “3130” (значение по умолчанию): а в “0”. Также прикройте firewall порт 3128 (по умолчанию Squid работает с клиентами через него) от доступа из Internet:

ipfwadm -I -a accept -P tcp -S 10.0.0.0/8 -D 0.0.0.0/0 3128
ipfwadm -I -a accept -P tcp -S some.trusted.host -D 0.0.0.0/0 3128
ipfwadm -I -a deny -P tcp -S 0.0.0.0/0 -D 0.0.0.0/0 3128

или в ipchains:

ipchains -A input -p all -j ACCEPT -s 10.0.0.0/8 -d 0.0.0.0/0 3128
ipchains -A input -p all -j ACCEPT -s some.trusted.host -d 0.0.0.0/0 3128
ipchains -A input -p all -j DENY -s 0.0.0.0/0 -d 0.0.0.0/0 3128

squidGuard

squidGuard позволяет Вам править списки управления доступом, списки фильтров и переназначать запросы легко и эффективно. Это идеально для управления доступом к WWW и для более специфических задач типа блокирования pornographic содержания. Данное средство просматривает только URL (содержимое не анализируется!), так что для активного содержания это не подходит. squidGuard доступен на http://info.ost.eltele.no/freeware/squidGuard.

Модуль LDAP auth для SQUID

Позволяет проводить авторизацию юзверей через сервер LDAP, но пароли и прочие данные передаются открытым текстом, так что используйте какую-нибудь форму VPN для их защиты. Скачать можно с http://sites.inka.de/ms/python/proxy_auth_ldap.

Cut the crap

Cut the crap (CTC) ориентирован на блокировку баннеров и экономию трафика при работе в сети за счет отсечения явно лишних данных. Скачать можно с http://www.softlab.ece.ntua.gr/~ckotso/CTC.

WWWOFFLE

WWWOFFLE хороший proxy для UNIX-систем, обрабатывает HTTP и FTP. Скачать его можно с http://www.gedanken.demon.co.uk/wwwoffle.

Серверы proxy уровня сессии

SOCKS

SOCKS сервер proxy уровня сессии, обычно используется на firewall из-за хороших возможностей контроля доступа. Приложения должны поддерживать протокол SOCKS, многие популярные web-браузеры, ftp-клиенты и тому подобное имеет такую поддержку. Скачать можно с http://www.socks.nec.com.

Dante

Dante свободная начинка популярного сервера SOCKS. Доступен на http://www.inet.no/dante.

DeleGate

DeleGate многопротокольный proxy с поддержкой HTTP, NNTP, FTP, SSL proxying и другого. Имеет серьезные возможности защиты, доступен на http://wall.etl.go.jp/delegate.

Proxy Gallery

Набор proxy, написаных для разных применений vja2@cornell.edu. Поддержижвают UDP, TCP, HTTP, Hand-off (для игры в Ultima Online) и tunneling. Доступны на http://www.home.ctc.shadowlan.net/~vinny/projects/proxy.

 

Back

Security Portal

Written by Kurt Seifried


Red Hat

 

Red Hat Linux 6.0

В течение установки Red Hat 6.0 позволит Вам установить теневые пароли и поддержку MD5-паролей. Обновите ядро Red Hat 6.0, поскольку оно уязвимо для атак denial of service (на основе icmp).

 

Back

Security Portal

Written by Kurt Seifried


Сетевые сервисы: rsync

 

rsync чрезвычайно эффективный метод для зеркального отражения файлов. Он сохраняет связи, права доступа, время файла и прочее. В дополнение к этому, rsync поддерживает анонимный режим (который я использую для зеркального отражения этого документа). Программа rsync может работать как клиент (при запуске из командной строки или скрипта) или как сервер (обычно при запуске из inetd.conf). Программа непосредственно совершенно безопасна: не требуется привилегий root для работы как клиент или сервер (хотя это возможно, если Вы действительно хотите этого) и поддерживает chroot, заменяя корневой каталог на каталог зеркалирования (это однако требует привилегий root и может быть более опасно, чем работа без такой поддержки). Вы можете также задать user id и group id для обращения к системе (обычно nobody для большинства precompiled-пакетов rsync, и, вероятно, это самый лучший выбор). В неанонимном режиме rsync поддерживает username и пароли, которые зашифрованы с использованием 128-битного MD4. man-страница для rsyncd.conf совершенно ясно описывает установку rsync как сервера и настройку его, как относительно безопасного. Заданный по умолчанию файл конфигурации: /etc/rsyncd.conf. Он имеет глобальный раздел и разделы модулей (в основном, каждый разделенный каталог представляет собой модуль).

Пример файла rsyncd.conf:

motd file = /etc/rsync.motd # specifies a file to be displayed,
                            # legal disclaimer, etc.
max connections = 5         # maximum number of connections so you don't
                            # get flooded
[pub-ftp]
        comment = public ftp area # simple comment
        path = /home/ftp/pub      # path to the directory being exported
        read only = yes           # make it read only, great for exported
                                  # directories
        chroot = yes              # chroot to /home/ftp/pub
        uid = nobody              # explicitly set the UID
        gid = nobody              # explicitly set the GID
[secret-stuff]
        comment = my secret stuff
        path = /home/user/secret  # path to my stuff
        list = no                 # hide this module when asked for a list
        secrets file = /etc/rsync.users # password file
        auth users = me, bob, santa     # list of users I trust to see my
                                        # secret stuff
        hosts allow = 1.1.1.1, 2.2.2.2  # list of hosts to allow

Как Вы можете видеть, rsync легко настроить, и он очень безопасен, кроме передачи файлов, которые никогда не шифруются. Если Вы нуждаетесь в защите, я предлагаю, чтобы Вы использовали SSH для туннелирования подключения или некоторое VPN-решение подобне FreeS/WAN. Также удостоверитесь, что Вы работаете с rsync 2.3.x или выше, поскольку в 2.2.x была сияющая дыра в защите. Rsync доступен на http://rsync.samba.org. Rsync работает через порт 873, протокол tcp.

ipfwadm -I -a accept -P tcp -S 10.0.0.0/8 -D 0.0.0.0/0 873
ipfwadm -I -a accept -P tcp -S some.trusted.host -D 0.0.0.0/0 873
ipfwadm -I -a deny -P tcp -S 0.0.0.0/0 -D 0.0.0.0/0 873

или

ipchains -A input -p tcp -j ACCEPT -s 10.0.0.0/8 -d 0.0.0.0/0 873
ipchains -A input -p tcp -j ACCEPT -s some.trusted.host -d 0.0.0.0/0 873
ipchains -A input -p tcp -j DENY -s 0.0.0.0/0 -d 0.0.0.0/0 873

Back

Security Portal

Written by Kurt Seifried


Сетевые сервисы: SMB

 

SAMBA

SAMBA позволяет совместно использовать файлы и принтеры между Windows и *NIX. SAMBA не всегда правильно работает с windows-клиентами (часто поврежденными), но причина здесь в хитростях реализпции протокола в windows, а не в самом пакете SAMBA, который имеет очень много поправок для налаживания работы с такими ненормальными клиентами. Увы, получается не всегда. SAMBA просто дает доступ к файловой системе через протокол SMB (Server Message Block), протоко используемый Windows, чтобы совместно использовать файлы и принтеры. Он проверяет username и пароль (если требуется) и затем дает доступ к файлам согласно разрешениям файла. Я собираюсь описывать только Samba 2.x, Samba 1.x довольно стар.

Samba 2.x управляется через smb.conf, обычно в /etc (man smb.conf). В /etc/smb.conf есть 4 основных области переключателей конфигурации: [globals], [printers], [homes] и каждый разделяемый ресурс имеет свою зону [sharename]. Имеется сотня или около того переключателей, они подробно рассмотрены на man-странице smb.conf. Некоторые из них (важные для защиты):

security = xxxx где xxxx имеет значение server или domain. Предназначено для ресурсов, закрытых паролем. При значении server сервер samba непосредственно опознает пользователей через /etc/password или smbpasswd. Если Вы устанавливаете значение domain, samba опознает пользователя через контроллер домена NT, таким образом интегрируясь в существующую NT-сеть.

guest account = xxxx где xxxx задает username, отведенный для гостевого входа. Если разделяемый ресурс задан как public, все запросы к нему пойдут от имени данного пользователя.

hosts allow = xxxx где xxxx представляет собой разделенный пробелами список хостов/IP, которым дозволено соединяться с сервером.

hosts deny = xxxx где xxxx представляет собой разделенный пробелами список хостов/IP, которым НЕ дозволено соединяться с сервером.

interfaces = xxxx где xxxx представляет собой разделенный пробелами список хостов/IP, которые адресует samba

SMB использует разные порты, обычно 137, 138 и 139, протоколы udp и tcp для всех за исключением 139.

ipfwadm -I -a accept -P tcp -S 10.0.0.0/8 -D 0.0.0.0/0 137:139
ipfwadm -I -a accept -P tcp -S some.trusted.host -D 0.0.0.0/0 137:139
ipfwadm -I -a deny -P tcp -S 0.0.0.0/0 -D 0.0.0.0/0 137:139
ipfwadm -I -a accept -P udp -S 10.0.0.0/8 -D 0.0.0.0/0 137:139
ipfwadm -I -a accept -P udp -S some.trusted.host -D 0.0.0.0/0 137:139
ipfwadm -I -a deny -P udp -S 0.0.0.0/0 -D 0.0.0.0/0 137:139

или

ipchains -A input -p tcp -j ACCEPT -s 10.0.0.0/8 -d 0.0.0.0/0 137:139
ipchains -A input -p tcp -j ACCEPT -s some.trusted.host -d 0.0.0.0/0 137:139
ipchains -A input -p tcp -j DENY -s 0.0.0.0/0 -d 0.0.0.0/0 137:139
ipchains -A input -p udp -j ACCEPT -s 10.0.0.0/8 -d 0.0.0.0/0 137:139
ipchains -A input -p udp -j ACCEPT -s some.trusted.host -d 0.0.0.0/0 137:139
ipchains -A input -p udp -j DENY -s 0.0.0.0/0 -d 0.0.0.0/0 137:139

Я очень рекомендую поставить и использовать SWAT (samba Web Administration Tool), что уменьшит количество возможных ошибок. Samba и SWAT доступны на http://www.samba.org и входят почти во все дистрибутивы.

SWAT

SWAT очень хороший инструмент администрирования smb.conf. Основная проблема: он требует, чтобы Вы использовали для входа логин и пароль для root, и выполняется как отдельный процесс из inetd.conf, так что нет никакого простого способа шифровать трафик, и насколько мне известно, нет никакого способ предоставить другим пользователей административный доступ к SWAT. Однако это хороший инструмент для сокращения ошибок в smb.conf. Вы можете также выполнять SWAT с параметром –a, чтобы вообще не спрашивать пароль, и использовать TCP_WRAPPERS, чтобы ограничить доступ к некоторым рабочим местам (хотя вы все еще не защищены от IP spoofing). По существу SWAT не предполагался как безопасный административный инструмент, но он полезен. SWAT обычно поставляется вместе с samba и доступен на http://www.samba.org, демонстрационная версия SWAT есть на http://anu.samba.org/cgi-bin/swat

CIFS

CIFS позволяет пользователю Linux устанавливать права разделения файлов в Windows менять ACL для файлов (под NT) и тому подобное. Вы можете получить CIFS для Linux с http://www.linuxstart.com/~cifs

Back

Security Portal

Written by Kurt Seifried


Техника безопасности

 

Chrooting

http://madhouse.lonyay.edu.hu/dep/

 

Back

Security Portal

Written by Kurt Seifried


Сетевые сервисы

 

Аутентификация: NIS/NIS+, Kerberos, Radius

Сертификация: OpenCA, pyCA

DHCP: ISC DHCP, Moreton Bay DHCP Server

DNS

Email: SMTP, POP, IMAP, SPOP, SIMAP

File / print - NFS, Samba, LPD

FTP: Wu-FTPD, ProFTPD

LDAP - OpenLDAP

News - Usenet news, INN

proxy - Socks, Squid, DeleGate

Shell - Telnet, SSH, SSL-Telnet

SNA

SNMP

Time - NTP

Пользовательская информация: Finger, Identd

WWW - HTTP, HTTPS

WWWmail

X Window System

Back

Security Portal

Written by Kurt Seifried


Shell-серверы

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

Telnet

Telnet - SSL

SSH: клиент и сервер

SSH: клиенты

SRP

NSH

R-сервисы

Telnet

Telnet был одной из первых услуг того, что является теперь Internet, это позволяет Вам регистрироваться на удаленной машине в интерактивном режиме, давать команды и смотреть их результаты. Это все еще основное инструментальное средство для удаленного администрированич в большинстве сред, и оно имеет почти универсальную поддержку (даже NT имеет telnet-клиент и daemon). Это также один из наиболее опасных протоколов, восприимчивых ко всему. Если Вы имеете пользователей использующих telnet для доступа к серверу Вы должны определенно выполнить chroot для их логинов если возможно, также как ограничить доступ telnet на используемые ими хосты с помощью TCP_WRAPPERS. Самое лучшее решение для обеспечения безопасности telnet состоит в том, чтобы отключить его и использовать SSL-telnet или ssh.

Проблемы с telnet:

Самое лучшее решение состоит в том, чтобы выключить telnet и использовать ssh. Однако, это практично не во всех ситуациях. Если Вы используете telnet, я настоятельно предлагаю применить firewall для разрешения определенным хостам/сетям обращаться к порту 23, а для всех остальных такое обращение запретить. Неплохо применить и TCP_WRAPPERS. Пример правил для firewall:

ipfwadm -I -a accept -P tcp -S 10.0.0.0/8 -D 0.0.0.0/0 23
ipfwadm -I -a accept -P tcp -S some.trusted.host -D 0.0.0.0/0 23
ipfwadm -I -a deny -P tcp -S 0.0.0.0/0 -D 0.0.0.0/0 23

или в ipchains:

ipchains -A input -p all -j ACCEPT -s 10.0.0.0/8 -d 0.0.0.0/0 23
ipchains -A input -p all -j ACCEPT -s some.trusted.host -d 0.0.0.0/0 23
ipchains -A input -p all -j DENY -s 0.0.0.0/0 -d 0.0.0.0/0 23

Пример использования TCP_WRAPPERS в /etc/hosts.allow:

in.telnetd: 10.0.0.0/255.0.0.0, some.trusted.host

и в /etc/hosts.deny:

in.telnetd: ALL

Имеются несколько шифрованных вариантов telnet: ssh, SSLeay Telnet и другие. По-моему, лучше всего ssh. Для защиты пользователей telnet можно сделать несколько дел. Во-первых, запретите доступ root через telnet, это делается в файле /etc/securetty и по умолчанию в большинстве дистрибутивов root может заходить только с консоли. Во-вторых, чтобы пользователь мог работать его shell должна быть упомянута в файле /etc/shells).

Если Вы хотите чтобы пользователь не имел telnet-доступа, но мог менять свой пароль, сделайте вот что:

В файл /etc/shells добавьте строку:

/usr/bin/passwd

и установите shell для пользователя в /usr/bin/passwd, например так:

username:x:1000:1000::/home/username:/usr/bin/passwd

Теперь при входе с помощью telnet у пользователя система спросит логин и пароль, и если все правильно, предложит пароль сменить. Если новый пароль будет введен правильно, он сменится, и пользователь будет отсоединен от системы (связь прервана). Если новый пароль будет введен как-то не так, то пароль не сменится (останется прежним), а пользователь опять же будет отсоединен (связь прервется). Выглядит такой сеанс примерно так:

Trying 1.2.3.4...
Connected to localhost.
Escape character is '^]'.

Red Hat Linux release 5.2 (Apollo)
Kernel 2.2.5 on an i586
login: tester
Password:
Changing password for tester
(current) UNIX password:
New UNIX password:
Retype new UNIX password:
passwd: all authentication tokens updated successfully
Connection closed by foreign host.

Telnet также отображает системное приглашение при любом соелдинении. Оно обычно включает системную информацию, в частности название OS, версию и тому подобные сведения, вплоть до версии ядра. При работе с несколькими OS на разных машинах это удобно, но дает хакерам много ценного. Telnetd отображает содержимое файла /etc/issue.net (обычно он идентичен /etc/issue, который отображается на терминалах), этот обычно пересоздается во время перезагрузки в большинстве дистрибутивов Linux из загрузочного скрипта rc.local. Просто поправьте файл rc.local, чтобы он больше не трогал файлы /etc/issue и /etc/issue.net, затем впишите в них некую постоянную информацию.

Обычно в Linux файл rc.local меняет /etc/issue и /etc/issue.net:

# This will overwrite /etc/issue at every boot. So, make any changes you
# want to make to /etc/issue here or you will lose them when you reboot.
echo "" > /etc/issue
echo "$R" >> /etc/issue
echo "Kernel $(uname -r) on $a $(uname -m)" >> /etc/issue
cp -f /etc/issue /etc/issue.net
echo >> /etc/issue

просто закомментируйте строки или удалите команды uname. Если telnet-доступ юзверям абсолютно необходим, создайте свое приглашение:

This system is for authorized users only. Trespassers will be prosecuted.

или что-то в таком роде.

Telnet - SSL

 

SSLtelnet и MZtelnet

Замена для telnet, SSLtelnet и MZtelnet предоставляют более высокий уровень безопасности, чем telnet, хотя SSLtelnet и MZtelnet не столь гибки как SSH, они полностью свободны (то есть, GNU licensed), а SSH нет (хотя OpenSSH *BSD licensed). Пакеты клиента и сервера доступны как tarballs на ftp://ftp.uni-mainz.de/pub/internet/security/ssl/, а как RPM-пакеты на ftp://ftp.zedz.net/pub/replay/linux/redhat.

Slush

Slush основан на OpenSSL и поддерживает сертификаты X.509. Slush распространяется по GPL, но не закончен (все необходимое поддерживается, но есть досадные ограничения). В конце концов может составить хорошую замену для SSH. Скачать можно с http://violet.ibs.com.au/slush.

SSH: клиент и сервер

SSH безопасный протокол и набор инструментальных средств, чтобы заменить некоторые общие (опасные) средства. Это было разработано из желания предложить максимум защиты и позволить удаленный доступ к серверам безопасным способом. SSH может использоваться, чтобы защитить любое сетевое соединение, устанавливая его как 'канал' (то есть, связывая с некоторым портом на обеих концах). Это хорошо для таких вещей как использование X через Internet. В дополнение к этому компоненты сервера выполняются на большинстве UNIX-систем, и NT, а компоненты клиента выполняются практически на всем и везде. К сожалению SSH больше не свободен; однако, имеется проект создать свободную реализацию протокола SSH. Не имеется проблем с SSH, подобных проблемам с telnet, все данные сеанса шифрованы, и обмен ключами выполняется относительно надежно (альтернатива: Вы можете предзагрузить ключи с обеих концов, чтобы предотвращать атаки посередине канала.

SSH

SSH обычно работает как daemon, и может быть легко заблокирован, используя файл настройки sshd_config. Вы можете также запускать sshd из inetd и таким образом использовать TCP_WRAPPERS, по умолчанию rpm-пакет ssh с ftp://ftp.zedz.net имеет опцию проверки TCP_WRAPPERS компилируемой в них. Таким образом используя TCP_WRAPPERS Вы можете легко ограничивать доступ к ssh. Пожалуйста обратите внимание, что более ранние версии ssh содержат ошибки, и несколько мест были зарублены (обычно с проблемами атак в середине канала или с буферными переполнением в коде ssh), но более поздние версии ssh этих проблем уже не имеют. Основная проблема с ssh: лицензия, это свободно только для некоммерческого использования, однако Вы можете загрузить исходный текст из ряда мест. Если Вы хотите легко установить ssh, имеется скрипт “install-ssh”, загрузит, скомпилирует и установит ssh, скачать его можно с ftp://ftp.yellowdoglinux.com/pub/yellowdog/install-ssh.

Правила firewall для ssh практически идентичны telnet. Имеется конечно TCP_WRAPPERS, проблема с TCP_WRAPPERS когда хакур соединяется с портом, но не получает daemon, но узнает что на этом порте что-то есть, в то время как с firewall он даже до порта не доберется. Ниже приводится пример разрешения доступа к ssh с внутренних машин и некоторой сети класса C в internet.

ipfwadm -I -a accept -P tcp -S 10.0.0.0/8 -D 0.0.0.0/0 22
ipfwadm -I -a accept -P tcp -S isp.dial.up.pool/24 -D 0.0.0.0/0 22
ipfwadm -I -a deny -P tcp -S 0.0.0.0/0 -D 0.0.0.0/0 22

или

ipchains -A input -p tcp -j ACCEPT -s 10.0.0.0/8 -d 0.0.0.0/0 22
ipchains -A input -p tcp -j ACCEPT -s isp.dial.up.pool/24 -d 0.0.0.0/0 22
ipchains -A input -p tcp -j DENY -s 0.0.0.0/0 -d 0.0.0.0/0 22

Или через TCP_WRAPPERS, hosts.allow:

sshd: 10.0.0.0/255.0.0.0, isp.dial.up.pool/255.255.255.0

hosts.deny:

sshd: 0.0.0.0/0.0.0.0

В дополнение к этому, ssh имеет замечательный файл конфигурации /etc/sshd/sshd_config по умолчанию в большинстве инсталляций. Вы можете легко ограничивать, кому позволяется входить в систему, с каких хостов, и какие типы авторизации надлежит использовать. Заданный по умолчанию файл конфигурации относительно безопасен, но ниже приведен более безопасный с объяснениями. Пожалуйста обратите внимание, что вся эта информация может быть получена командой “man sshd”, которая написана очень хорошо. А вот и типичный файл sshd_config:

Port 22
# runs on port 22, the standard
ListenAddress 0.0.0.0
# listens to all interfaces, you might only want to bind a firewall
# internally, etc
HostKey /etc/ssh/ssh_host_key
# where the host key is
RandomSeed /etc/ssh/ssh_random_seed
# where the random seed is
ServerKeyBits 768
# how long the server key is
LoginGraceTime 300
# how long they get to punch their credentials in
KeyRegenerationInterval 3600
# how often the server key gets regenerated 
PermitRootLogin no
# permit root to login? no
IgnoreRhosts yes
# ignore .rhosts files in users dir? yes
StrictModes yes
# ensures users don't do silly things
QuietMode no
# if yes it doesn't log anything. yikes. we want to log logins/etc.
X11Forwarding no
# forward X11? shouldn't have to on a server
FascistLogging no
# maybe we don't want to log too much.
PrintMotd yes
# print the message of the day? always nice
KeepAlive yes
# ensures sessions will be properly disconnected
SyslogFacility DAEMON
# who's doing the logging?
RhostsAuthentication no
# allow rhosts to be used for authentication? the default is no
# but nice to say it anyways
RhostsRSAAuthentication no
# is authentication using rhosts or /etc/hosts.equiv sufficient
# not in my mind. the default is yes so lets turn it off. 
RSAAuthentication yes
# allow pure RSA authentication? this one is pretty safe
PasswordAuthentication yes
# allow users to use their normal login/passwd? why not.
PermitEmptyPasswords no
# permit accounts with empty password to log in? no

Другие интересные директивы sshd_config:

AllowGroups - явно позволяет группам (/etc/group) входить в систему по ssh
DenyGroups - явно запрещает группам (/etc/group) входить в систему по ssh
AllowUsers - явно позволяет пользователям входить в систему по ssh
DenyUsers - явно запрещает пользователям входить в систему по ssh
AllowHosts - разрешает доступ некоторым хостам (остальным будет отказано)
DenyHosts - блокирует некоторые хосты, остальные будут работать
IdleTimeout time - время в minutes/hours/days/etc, после которого
                   производится принудительный выход из системы по получению
                   процессом сигнала SIGHUP.
OpenSSH

OpenSSH проект, начатый OpenBSD project для создания полнофункциональной версии SSH клиент и сервер, лицензируемых свободно (то есть, BSD и GPL). Они очистили код, устранили кучу ошибок и сделали лучшую поддержку PAM, чем в "официальный" SSH клиенте и сервере. Этот проект собирается заменить традиционный SSH полностью. Доступен на http://www.openssh.com. Я лично использую его и никаких проблем нет.

LSH

LSH свободная реализация протокола SSH (клиент и сервер), LSH GNU licensed и создан как альтернатива SSH (который все же не свободен полностью). Скачать можно с http://www.net.lut.ac.uk/psst, но помните, что он еще только разрабатывается.

OSSH

Я так и не смог понять толком, что это за штука, но сложилось впечатление, что это версия SSH с некоторыми расширениями (типа поддержки SecureID). Скачать можно с ftp://ftp.nada.kth.se/pub/krypto/ossh.

SSH: клиенты

Fresh Free FiSSH

Большинство из нас все еще должно сидеть за windows workstations, а найти ssh-клиент для windows трудно. Fresh Free FiSSH является свободным клиентом ssh для Windows 95/NT 4.0. Хотя разработка еще не завершена, я рекомендую присматривать за пакетом повнимательнее: он того стоит. URL: http://www.massconfusion.com/ssh .

Tera Term

Tera Term свободный клиент Telnet для Windows, имеет add-on DLL для поддержки ssh. Tera Term доступен на http://hp.vector.co.jp/authors/VA002416/teraterm.html. А add-on DLL для поддержки SSH можно скачать с http://www.zip.com.au/~roca/ttssh.html.

putty

putty Windows SSH-клиент, очень удобный, свободный и очень маленький (184k всего). Скачать можно с http://www.chiark.greenend.org.uk/~sgtatham/putty.html.

mindterm

mindterm свободный java ssh-клиент, скачать можно с http://www.mindbright.se/mindterm.

Secure CRT

Коммерческий клиент Telnet/SSH от Vandyke software. Скачать/купить можно на http://www.vandyke.com.

Fsh

Fsh (“Fast remote command execution”) подобен rsh/rcp. Он создает шифрованный туннель, используя SSH или LSH и выполняет через него все команды. Скачать можно с http://www.lysator.liu.se/fsh.

SSH Win32 ports

SSH для Win32 можно скачать с http://guardian.htu.tuwien.ac.at/therapy/ssh.

SRP

SRP относительно новая разработка, однако имеет несколько преимуществ над некоторыми из старших программ. SRP свободный и не использует шифрование для обеспечения безопасности сеанса, хотя есть и шифрующая версия. SRP использует довольно шуструю математику, подробно рассмотренную на http://srp.stanford.edu/srp/ndss.html. Недостаток в том, что SRP шифрует только вход в систему (username и пароль), так что любые перемещаемые данные (типа telnet-сеанса или ftp-сайта) уязвимы. Скачать SRP можно с http://srp.stanford.edu/srp. SRP сейчас поддерживает Telnet и FTP (для windows тоже), хотя поддержка SRP других протоколов проста. Клиент для windows с поддержкой SRP доступен на http://www.kermit-project.org/k95.html.

NSH

NSH коммерческий пакет со встроенной поддержкой шифрования. Не знаю, насколько прочное шифрование, поскольку открытых исходников тут нет. Легкость использования высока, Вы cd //computername и начинается регистрация на заданном компьютере, моджно легко упраялть файлами, запустить ps и получить список процессов на компьютере и многое другое. NSH идеален для управления несколькими подобными системами благодаря встроенному модулю Perl для изготовления скриптов. К тому же, NSH доступен для многих платформ (Linux, BSD, Irix), а для Red Hat есть RPM-пакет. NSH доступен на http://www.networkshell.com, там есть 30-дневная версия.

R-сервисы

R-сервисы (rsh, rcp, rexec и подобные) небезопасны. Защитить их трудно, так что лучше не используйте их! Их собственная защита основана на hostname/IP-адресе машины, с которой устанавливается соединение, что легко можно подделать. По умолчанию они не все заблокированы, пожалуйста выключите их немедленно. Поправьте /etc/inetd.conf, найдите в нем rexec, rsh и тому подобное и закомментируйте эти строки, после чего перезапустите inetd: "killall -1 inetd".

Если Вы абсолютно должны использовать эти сервисы, используйте TCP_WRAPPERS, это немного поможет. Также надо использовать firewall, так как от правильно поставленной атаки TCP_WRAPPERS защитит далеко не всегда. Доступ к различным R-сервисам управляется через файлы rhosts, обычно каждый пользователь имеет собственный файл rhosts, к сожалению, это восприимчиво к спуфингу пакетов. Проблема с r-сервисами в том, что есть маленькая дырка в защите системы, которая позволяет править файлы и редактировать данные о пользователях (как root) .rhost-файлы делают систему очень доступной.

Если Вы нуждаетесь в удаленных инструментальных средствах администрирования, которые являются легкими в использовании и подобными rsh, я рекомендую NSH (Network SHell) или SSH: они поддерживают шифрование и намного более высокий уровень защиты. Альтернатива: использование программного обеспечения VPN уменьшит часть риска, поскольку Вы можете блокировать пакеты спуфинга (IPSec-авторизация отправителя и источника, что является в некоторых случаях более важным, чем шифрование данных).

Back

Security Portal

Written by Kurt Seifried


Сетевые сервисы: SNA

Обзор

Программное обеспечение SNA

Обзор

SNA очень общий сетевой протокол, который напоминает возвращение назад к дням IBM и "тяжелого железа".

Программное обеспечение SNA

ICE Linux-SNA

http://www.icenetworking.com/products/sna/fire/index.html

 

Back

Security Portal

Written by Kurt Seifried


Сетевые сервисы: SNMP

Обзор

 

Обзор

SNMP (Simple Network Management Protocol) был разработан, чтобы позволить гетерогенным системам и оборудованию общаться друг с другом, обмениваться данными отчетоа и менять параметры настройки по сети TCP-IP. Например, SNMP-устройство (типа маршрутизатора от Cisco) может быть проверено/настроено от пользователя SNMP, и Вы можете легко писать сценарии для автоматизации разных процессов. К сожалению SNMP не имеет никакой защиты. SNMP v1, первоначально предложенный в RFC 1157 (May 1990) и раздел 8 (Security Considerations) сформулированы просто: "Вопросы безопасности здесь пока не обсуждаются.". В 1992/1993 вышел SNMP v2, однако рассмотрение защиты было гораздо позже, но защита оказалась легко снимаемой. Таким образом, мы имеем дело сегодня с SNMP v2 и никакой защитой.

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

По умолчанию имена семейств в SNMP "public" (так обстоит дело в Linux, NT и других системах), смените его на что-то свое, неожиданное. Зная имя семейства можно выполнить "snmpwalk" и захватить контроль над Вашей сеткой. SNMP работает через UDP на портах 161 и 162; блокируйте их как только можно.

Дополнительное использование IPSEC (или другого VPN-программного обеспечения) может значительно уменьшать риск сниффинга. RFC для SNMP v3 существенно усиливает защиту (особенно RFC 2274, январь 1998).

Не имеется никаких специфических проблем с cu-snmpd на se, кроме общих SNMP проблем, которые я описал. Инструментальные средства и утилиты cu-snmp поддерживают только SNMP v1 и SNMP v2, так что будьте внимательны при использовании их в открытой сети.

ipfwadm -I -a accept -P udp -S 10.0.0.0/8 -D 0.0.0.0/0 161:162
ipfwadm -I -a accept -P udp -S some.trusted.host -D 0.0.0.0/0 161:162
ipfwadm -I -a deny -P udp -S 0.0.0.0/0 -D 0.0.0.0/0 161:162

или

ipchains -A input -p udp -j ACCEPT -s 10.0.0.0/8 -d 0.0.0.0/0 161:162
ipchains -A input -p udp -j ACCEPT -s some.trusted.host -d 0.0.0.0/0 161:162
ipchains -A input -p udp -j DENY -s 0.0.0.0/0 -d 0.0.0.0/0 161:162

Back

Security Portal

Written by Kurt Seifried


Product specific information - SuSE

 

SuSE Linux 6.1

Один из авторов SuSE (Marc Heuse) написал несколько хороших утилит для SuSE Linux, доступных на http://www.suse.de/~marc. Первая называется "Harden SuSE" и в основном удаляет сомнительные объекты, сжимает права доступа файлов и блокирует лишние демоны. Другая, "SuSE security check", является набором скриптов оболочки, которые ежемесячно проверяют файл паролей, списки установленных пакетов и так далее.

Back

Security Portal

Written by Kurt Seifried


Системная безопасность

Физический доступ

BIOS

LILO

Физический доступ

Это детально рассмотрено в книге "Practical Unix and Internet Security", но я кратко изложу основные положения. Кто-то перезагружает Ваш сервер со специально подготовленной дискеты и передает payroll.db на некий ftp-сайт. Известны истории и про уборщиц, вытаскивавших шнур питания сервера из розетки, чтобы включить туда пылесос. Были и другие случаи, типа стоящего на полу сервера и лопнувшей батареи отопления... Так что сервер должен быть в закрытой комнате и желательно его поставить на какую-то приподнятую поверхность.

BIOS

BIOS состоит из нескольких низкоуровневых компонентов, управляющих загрузкой компьютера и другими подобными задачами. Старые BIOS имеют универсальные пароли для доступа к системе, убедитесь, что у Вас такого нет. Bios может использоваться, чтобы настроить загрузку только с диска C:, что в общем хорошая мысль. Можно также использовать bios для блокировки floppy-дисковода. Также имеет смысл вылючить лишние последовательные порты, они едят лишние IRQ. Кстати, это упростит и настройку системы за счет уменьшения числа конфликтов IRQ и тому подобного. Есть программы, которые вытаскивают пароль из BIOS, одна такая есть на http://www.esiea.fr/public_html/Christophe.GRENIER, в версиях для DOS и Linux.

LILO

При загрузке с диска C: используется LILO (или другой загрузчик). LILO позволяет гибко настраивать загрузку системы, но это палка о двух концах. Вы можете при загрузке передать LILO параметры, с точки зрения защиты опасней всего "image-name single", который загружает Linux в однопользовательском режиме. В большинстве дистрибутивов это просто root shell без запроса пароля или каких-то других защитных механизмов.

delay=X

Этот параметр задает сколько секунд LILO ждет ввода пользователя перед загрузкой системы, заданной по умолчанию. Одно из требований защиты C2, чтобы этот интервал был установлен в 0, но на машине с двойной загрузкой (dual boot) этот номер не пройдет.

prompt

Вынуждает пользователя вводить параметры, LILO не будет загружать систему автоматически. Это может быть полезно на серверах как путь отключения перезагрузок без человеческого вмешательства, но обычно, если хакер имеет способность перезагрузить систему, он может и перезаписать MBR с новыми параметрами начальной загрузки. Если Вы добавляете опцию времени ожидания, система продолжит загружаться после того, как время ожидания выйдет.

restricted

Требует, чтобы использовался пароль, при передаче параметров начальной загрузки (типа "linux single"). Удостоверьтесь, что Вы используете этот параметр на каждом образе загрузки ядра.

password=

Требует чтобы пользователь ввел пароль, используемый вместе с restricted, также удостоверьтесь, что lilo.conf не доступен на чтение всем, или любой пользователь будет способен прочитать пароль.

Вот пример lilo.conf с одного из моих серверов.

boot=/dev/hda
map=/boot/map
install=/boot/boot.b
prompt
timeout=100
default=linux
image=/boot/vmlinuz-2.2.5
label=linux
root=/dev/hda1
read-only
restricted
password=s0m3_pAsSw0rD_h3r3

Это загружает систему, использующую ядро /boot/vmlinuz-2.2.5, сохраненное на первом разделе первого жесткого диска с интерфейсом IDE, ключевое слово prompt обычно остановило бы автоматическую перезагрузку, однако оно задано для образа, так что не будет мешать загрузке в режиме “linux” но спросит пароль, если Вы введете “linux single”, Вам дается 10 секунд, чтобы ввести “linux single”, здесь и надо ввести пароль. В соединении с установкой BIOS на загрузку только с диска C: и парольной защитой система получается довольно защищенной. Попробуйте также объявить файл lilo.conf как immutable, используя команду “chattr”. Для установки immutable введите:

chattr +i /sbin/lilo.conf

Это предотвратит любые изменения (случайные или не очень) файла lilo.conf. Чтобы внести поправки в этот файл, снимите атрибут immutable:

chattr -i /sbin/lilo.conf

Только root имеет доступ к атрибуту immutable.

Back

Security Portal

Written by Kurt Seifried


Сетевые сервисы: Tftp

tftp (Trivial File Transfer Protocol) используется для устройств, которые требуют информации из сети, обычно при начальной загрузке. Это чрезвычайно простая форма ftp, в которой нет большинства средств защиты и продвинутых команд, это в основном позволяет устройству отыскивать и передавать файлы с сервера очень простым способом. Tftp почти исключительно используется для автоматизированных рабочих мест без диска, данных конфигурации маршрутизатора, и любых устройств, которые загружаются и требуют информации, которую не могут хранить постоянно. Это также огромная дыра в защите. Только представьте что будет, если кто-то подсоединится к серверу и захватит настройки маршрутизатора!

tftp

tftp принимает каталог, которым будет ограничен (очень похоже на chroot), и можно использовать TCP_WRAPPERS, чтобы ограничить доступ к некоторым хостам, но если Вы хотите управлять доступом к файлам, Вы должны выполнить utftp. По умолчанию tftp (по крайней мере для Red Hat) предоставляет доступ только к каталогу /tftpboot (который обычно не существует, так что создайте его, если Вы нуждаетесь в этом сервисе). Следующий пример запускает tftp и предоставляет ему доступ к каталогам /tftpboot и /kickstart.

tftp dgram udp wait root /usr/sbin/tcpd in.tftpd /tftpboot /kickstart

Также не забудьте, что tftp использует UDP, так что 'ps xau' обязательно покажет, кто вошел, и что они делают (в противоположность ftp). Самое лучшее место, чтобы контролировать tftp, из syslog, но tftp не регистрирует адреса IP или что-нибудь полезное. Ниже приведен вывод ps и фрагмент протокола syslog по активному сеансу tftp.

nobody 744 0.0 0.6 780 412 ? R 14:31 0:00 in.tftpd /tftpboot
Apr 21 14:31:15 hostname tftpd[744]: tftpd: trying to get file: testfile
Apr 21 14:31:15 hostname tftpd[744]: tftpd: serving file from /tftpboot

TFTP может быть легко ограничен, используя TCP_WRAPPERS и firewall, tftp работает через порт 69, протокол UDP, так что заблокировать доступ для всех, кроме бездисковых систем, просто. Закройте также доступ через Internet. Также запускайте tftp как пользователь nobody. Здесь надо заметить, что сервер tftp не выполняет авторизацию, так что от прав доступа толку мало, TFTP работает через порт 69, протокол udp.

ipfwadm -I -a accept -P udp -S 10.0.0.0/8 -D 0.0.0.0/0 69
ipfwadm -I -a accept -P udp -S some.trusted.host -D 0.0.0.0/0 69
ipfwadm -I -a deny -P udp -S 0.0.0.0/0 -D 0.0.0.0/0 69

или

ipchains -A input -p udp -j ACCEPT -s 10.0.0.0/8 -d 0.0.0.0/0 69
ipchains -A input -p udp -j ACCEPT -s some.trusted.host -d 0.0.0.0/0 69
ipchains -A input -p udp -j DENY -s 0.0.0.0/0 -d 0.0.0.0/0 69
utftpd

utftpd безопасный вариант tftpd, обеспечивает намного более удобное управление доступом и поддержку некоторых других интересных свойств (типа управления изменениями). Вы можете также предоставлять доступ на основе IP-адреса, это означает, что Ваши конфигурации маршрутизатора и конфигурации автоматизированного рабочего места без диска могут сохраняться отдельно и независимо друг от друга. utftpd доступен по GPL на http://www.nrw.net/uwe/utftpd.html.

Back

Security Portal

Written by Kurt Seifried


Сетевые сервисы: NTP

Обзор

NTP-сервер

NTP-клиент

Обзор

NTP (Network Time Protocol) довольно прост: он синхронизирует часы компьютеров. Как? NTP-клиент соединяется с сервером, вычисляет задержку передачи между ними, запрашивает время и устанавливает часы клиента.

Сигнал времени обычно бывает сгенерирован атомными часами или сигналом GPS, измеряется компьютером ‘stratum 1’, сервером времени, ниже него стоит в иерархии сервер времени stratum 2, который обычно доступен всем.

Данные NTP не очень чувствительны, однако атака на них может сделать непригодными все протоколы, логины будут выдыхаться раньше времени (или позже), cron-задачи начнут выполняться в самое неожиданное время... Если опасность велика, стоит рассмотреть покупку своего модуля GPS time.

Хорошей идеей является прикрыть сервис firewall, поскольку атака denial of service вредна для Вашей сети. В дополнение к этому, если возможно, Вы должны использовать шифрование, доступное в ntpd, основанном на DES. NTP работает через порт 123, протокол udp (при соединении с серверами они будут передавать данные со своего порта 123 на Ваш порт 123), так что firewall для него довольно прост:

ipfwadm -I -a accept -P udp -S 10.0.0.0/8 -D 0.0.0.0/0 123
ipfwadm -I -a accept -P udp -S some.trusted.host -D 0.0.0.0/0 123
ipfwadm -I -a deny -P udp -S 0.0.0.0/0 -D 0.0.0.0/0 123
или
ipchains -A input -p udp -j ACCEPT -s 10.0.0.0/8 -d 0.0.0.0/0 123
ipchains -A input -p udp -j ACCEPT -s some.trusted.host -d 0.0.0.0/0 123
ipchains -A input -p udp -j DENY -s 0.0.0.0/0 -d 0.0.0.0/0 123

NTP-сервер

XNTP

XNTP доступен на http://www.eecis.udel.edu/~ntp. Обычно нет никакой man-страницы по ntpd или xntpd (здорово, правда?), но документация может быть найдена в /usr/doc/ntp-xxxx или на http://www.eecis.udel.edu/~ntp/ntp_spool/html/index.htm.

NTP-клиент

ntpdate

ntpdate входит во многие дистрибутивы.

Back

Security Portal

Written by Kurt Seifried


TurboLinux

 

TurboLinux 3.6 

TurboLinux имеет установку, очень похожую на Red Hat, Вы работаете с с текстовыми экранами, отвечаете на вопросы, а затем система устанавливает пакеты, и Вы настраиваете некоторые из них дополнительно (например, X). Имеется пара проблем с TurboLinux, который Вы будете должны исправить. Есть несколько утилит, которые входят в поставку TurboLinux, и которые стоило бы добавить в другие дистрибутивы (например, sudo).

inetd.conf

Файл inetd.conf TurboLinux относительно нормален, однако некоторые услуги подобно rsh и rlogin допускаются по умолчанию, я советую их закрыть

shell   stream  tcp     nowait  root            /usr/sbin/tcpd in.rshd
login   stream  tcp     nowait  root            /usr/sbin/tcpd in.rlogind
talk    dgram   udp     wait    nobody.tty      /usr/sbin/tcpd in.talkd
ntalk   dgram   udp     wait    nobody.tty      /usr/sbin/tcpd in.ntalkd

Они должны быть закомментированны (добавьте “#” в начале каждой строки) и перезапустите inetd командой “killall –1 inetd”.

inittab

TurboLinux (подобно большинству распределений) позволит Вам загружаться в однопользовательском режиме без пароля. Поместите команду “restricted ” в файл lilo.conf и добавьте пароль, чтобы никто не мог получить root доступ к системе простой перезагрузкой машины.

ipchains

ipchains отсутствует на установочном CD, его можно найти на добавочном CD или на сайте ftp ftp://ftp.turbolinux.com/pub/TurboLinux/tlw-3.6-companion/TurboContrib/RPMS.

SSH

SSH rpm не доступен для TurboLinux 3.6 (то есть, я его не нашел). SSH rpm для Red Hat не хочет компилироваться. Однако, SSH можно скомпилировать из исходников без проблем. Исходники SSH можно взять на ftp://ftp.zedz.net/pub/replay/crypto/SSH. Чтобы запустить sshd, Вы должны выполнить “/usr/local/bin/sshd” из скрипта начальной загрузки, он будет искать файлы настройки в /etc.

Tripwire

Копия Tripwire есть на добавочном CD с TurboLinux, советую его использовать. Я не знаю, как данная копия лицензирована (free for non commercial use only, one license или что-то еще). Есть Tripwire 1.3.

Добавочный CD

Данный диск содержит много дополнительных полезных программ (например, Tripwire):

Amanda (хороший пакет для резервирования)
ipmasqadm (пересылка порта на уровне ядра)
ipchains (установка firewall)
ProFTPD (сервер ftp, лучший чем WuFTPD)
Squid (ftp и www proxy-сервер)
Tripwire (создает контрольные суммы файлов и предупреждают Вас, если они изменяются

Обновления

Обновления для TurboLinux 3.6 (Miami) доступны на ftp://ftp.turbolinux.com/pub/TurboLinux/turbolinux-updates/3.6.

 

Back

Security Portal

Written by Kurt Seifried


Информация о пользователя

Обзор

Сервер Ident

Сервер Finger

Обзор

Имеется ряд сервисов, которые могут предоставлять информацию относительно локальных пользователей другим локальным пользователям и пользователям на других машинах. Они могут быть полезны, если Вы хотите выяснить который пользователь соединен с машиной, или когда он вошел. Конечно это большие услуги для нападавших, так как они могут получить много информации из них.

Сервер Ident

Сервис ident используется, чтобы отобразить пользователей/процессы на используемые ими порты. Например большинство IRC серверов пытается выяснять, кто соединяется с ними, используя поисковую таблицу ident, которая в основном состоит из выяснения у ident-сервера на компьютере пользователя, какую информацию он имеет относительно номера порта. Ответ может варьироваться от пустого (если никто не использует этот специфический порт) до username, groupname, process id и другой интересной информации. Значение по умолчанию в большинстве дистрибутивов: identd включен (irc-сервера и новые версии sendmail проверяют ответы identd), и выдаст только username. Первичное использование identd должно дать удаленным системам некоторые средства прослеживать пользователей, которые подключаются к их серверам irc, telnet, mail или другим для опознавательных целей (плохо придумано, так как очень просто сфальсифицировать). Университет в Edmonton требует, чтобы Вы выполнили identd, если Вы хотите зайти через telnet на любой из основных shell-серверов, так что они могут проследить взломанные логины довольно быстро.

Запуск identd на Вашей машине поможет другим администраторам при прослеживании проблем, поскольку они могут получать не только адрес IP и время проблемы. Использование identd может показать имя пользователя. Использование identd на серверах имеет смысл только если это shell-сервер.

Identd работает на порте 113, протокол tcp, и обычно Вы будете нуждаться в нем только если Вы хотите работать с IRC (многие irc-сети требуют ответа identd) или работаете с системами, управляющими daemons (типа tcp_wrapped telnet или sendmail), которые делают поисковые таблицы identd при подключениях к ним.

ipfwadm -I -a accept -P tcp -S 10.0.0.0/8 -D 0.0.0.0/0 113
ipfwadm -I -a accept -P tcp -S some.trusted.host -D 0.0.0.0/0 113
ipfwadm -I -a deny -P tcp -S 0.0.0.0/0 -D 0.0.0.0/0 113

или

ipchains -A input -p tcp -j ACCEPT -s 10.0.0.0/8 -d 0.0.0.0/0 113
ipchains -A input -p tcp -j ACCEPT -s some.trusted.host -d 0.0.0.0/0 113
ipchains -A input -p tcp -j DENY -s 0.0.0.0/0 -d 0.0.0.0/0 113
Identd

Identd поддерживает несколько хороших свойств и может быть легко установлен, чтобы выполниться как пользователь не-root. В зависимости от Вашей политики защиты Вы можете не хотеть раздавать очень много информации или Вы хотите наоборот давать сведения в максимально возможной степени. Просто прикрепите опцию в inetd.conf после in.identd (по умолчанию -l -e -o).

-p port
-a address
Может использоваться, чтобы определить который порт и адрес используются (в случае машины с aliased IP или несколькими интерфейсами), это вообще полезно только если Вы хотите, чтобы внутренние машины соединялись, так как внешние машины не будут, вероятно, способны вычислить то, на какой порт Вы заменили это значение.

-u uid
-g gid
Задает пользователя и группу, чьи привилегии присвоит identd после соединения с портом.

-o
Указывает identd не сообщать тип ОС, а просто говорить "UNKNOWN", очень хорошая опция.

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

-N
Позволяет пользователям делать файлы ~/.noident, что вынудит identd возвращать "HIDDEN-USER" вместо информации. Это позволяет пользователям иметь опцию наличия степени секретности, но злонамеренные пользователи использует это, чтобы уклониться от идентификации.

-F format
Дает возможность Вам определить гораздо большее количество информации, чем обычно: все от имени пользователя и его номера, до PID, имени команды и параметров, которые были даны! Это я рекомендовал бы только для внутреннего использования, поскольку здесь много информации, которую нападавшие найдут полезной.

Вообще я советовал бы запускать identd на серврах с shell-доступом, а на остальных отключать из-за возможности denial of service атак на этот сервис. Использование identd будет делать жизнь намного проще для других администраторов при прослеживании нападений с Вашего сервера, что будет в конечном счете делать Вашу жизнь проще.

Другие Identd daemons

Есть несколько версий identd, предположительно с расширенной безопасностью.

http://insecurity.net: Paul's secure identd, написан на Perl
http://www.tildeslash.org/nullidentd.html: null identd
http://www.ajk.tele.fi/~too/sw: fake identd
http://p8ur.op.het.net/midentd: midentd
http://www.nyct.net/~defile/programs/ident2: ident2
ftp://junker.org/pub/lidentd: lidentd

 

Сервер Finger

Finger одна из тех вещей, которые многие администраторы отключает и игнорирует. Это полезный инструмент при случае, но если Вы хотите позволить другим администраторам вычислять, который из Ваших пользователей в настоящее время пробует раскалывать их машины, используйте identd. Finger позволяет доступ к большой информации и является любимым инструментом хакеров для начальных исследований. Есть опасность DoS-атаки. Лучше не использовать finger. Многие дистрибутивы поставляются с включенной по умолчанию поддержкой этого сервиса, но вот что написано в inetd.conf из дистрибутива Red Hat:

# Finger, systat и netstat предоставляют много информации о пользователях,
# полезной для "system crackers." Многие сайты выключают некоторые
# или все эти сервисы по соображениям безопасности.

Если Вы все еще имеете убеждение, что Вы абсолютно должны выполнить это, используйте опцию -u для отклонения запросов finger @host, которые часто используются чтобы собрать информацию для будущих нападений. Finger работает на порте 79, а cfingerd на порте 2003, оба используют протокол tcp.

ipfwadm -I -a accept -P tcp -S 10.0.0.0/8 -D 0.0.0.0/0 79
ipfwadm -I -a accept -P tcp -S some.trusted.host -D 0.0.0.0/0 79
ipfwadm -I -a deny -P tcp -S 0.0.0.0/0 -D 0.0.0.0/0 79

или

ipchains -A input -p tcp -j ACCEPT -s 10.0.0.0/8 -d 0.0.0.0/0 79
ipchains -A input -p tcp -j ACCEPT -s some.trusted.host -d 0.0.0.0/0 79
ipchains -A input -p tcp -j DENY -s 0.0.0.0/0 -d 0.0.0.0/0 79
Cfingerd

Cfingerd (configurable fingerd) отличная замена для обычного fingerd, он сделан с учетом безопасности, работает обычно как не-root пользователь, и пользователи могут настроить как именно они будут представлены этим сервисом, Cfingerd можно скачать с http://ftp.bitgate.com/cfingerd.

PFinger

PFinger проще Cfingerd, но тоже безопасная замена обычного fingerd. Вы можете скачать PFinger http://www.xelia.ch/unix/pfinger.

The Finger Server

The Finger Server хороший finger-сервер, основанный на web, который дает пользователям возможность модифицировать их finger-информацию самостоятельно. Скачать можно с http://www.glazed.org/finger.

Back

Security Portal

Written by Kurt Seifried


Контроль и ограничение пользователей

Ограничение пользователей

Контроль пользователей

Ограничение пользователей

Имеются много плохих дел, которые пользователь может сделать, если он имеет интерактивный доступ к shell. Имеется также много способов предотвратить это. Квоты использования диска, процессора и тому подобные решения хорошее начало, более продвинутые методы, типа контроля пользователей для больших сред также помогают. Одна из самых простых вещей, которые пользователь может делать: исчерпание всей памяти или исчерпание всех файловых дескрипторов с “fork bomb”.

PAM

Новые дистрибутивы Linux с поддержкой PAM обеспечивает относящиеся к окружению параметры настройки. Например, можно ограничить доступный объем памяти. В Red Hat и Caldera это настраивается в каталоге /etc/security, который содержит ряд файлов. Наиболее интересный файл: /etc/security/limits.conf, который позволяет Вам определять правила для пользователей или групп: “soft” или “hard”, а также на что правило действует. Например:

*       hard    core    0
bob     soft    nproc   100
bob     hard    nproc   150

Первое правило отключило дампы ядра для всех, второе правило устанавливает ограничение soft для пользователя bob в 100 процессов, и третье правило устанавливает ограничение hard для пользователя bob в 150 процессов. Ограничение soft может быть превышено, обычно с предупреждением, а ограничение hard не может быть превышено. Применяется ограничение ковсем вариантам доступа, в том числе и по ftp.

Bash

Bash имеет встроенный ограничитель, к которому обращаются через “ ulimit”. Любые жесткие ограничения не могут быть установлены выше, если Вы имеете ограничения, определенные в /etc/profile. Это полезно для старых дистрибутивов без поддержки PAM. Вы должны также гарантировать, что пользователь не может изменять оболочку. Параметры настройки ограничений подобны методу PAM&:

ulimit –Sc 0
ulimit –Su 100
ulimit –Hu 150

Эти три правила достигли бы того же результата как вышеприведенные в примере с PAM. Первое правило отключает дампы ядра, второе правило устанавливает soft-ограничение в 100 процессов, и третье правило устанавливает жесткое ограничение в 150 процессов. Справка по ulimit доступна по команде “help ulimit” на приглашение bash.

Quota

Quota является системой для ограничения использования диска пользователями. Она встроена в большинство дистрибутивов. Справка доступна на man-странице командой “man quota”.

Контроль пользователей

Одна проблема общая на серверах с shell-достуом, заставляет уверенных пользователей не злоупотреблять сервером. Довольно просто контролировать стандартные ресурсы (типа дискового использования, использования CPU и т.д) но наиболее часто злоупотребляемый элемент bandwidth, к счастью имеется ряд способов контролировать это злоупотребление.

ttysnoop

Конечно это все хорошо, когда все правильно. Но что, если Вы фактически хотите контролировать то, что пользователь делает. Ttysnoop позволяет Вам контролировать то, что пользователь делает и записывать это. Вы можете получать ttysnoop с http://uscan.cjb.net.

UserIPAcct 

UserIPAcct позволяет Вам контролировать использование bandwidth пользователем, это включает патч ядра и устанавливает правила (подобные в концепции firewalling) чтобы контролировать количество данных, которые программы пользователя посылают или получают. Вы не можете получить данные относительно PPP подключений но ведь и PPP daemon не выполняется от имени обычного пользователя (хотя сделать это в общем можно). Я рекомендую это на сервере оболочки, чтобы контролировать пользователей. Полный пает можно загрузить с http://zaheer.grid9.net/useripacct.

Back

Security Portal

Written by Kurt Seifried


Информация о поставщиках Linux

 

Caldera OpenLinux

Bugs: bugs@caldera.com
Security: http://www.calderasystems.com/support/security
Support: support@caldera.com

Debian GNU/Linux

Bugs: bugs@debian.org 
Security: http://www.debian.org/security

LinuxCare

Support: http://www.linuxcare.com
Support: 1-888-546-4878

NetMAX

Support: support@netmax.com

Red Hat Linux

Bugs: http://developer.redhat.com/bugzilla 
Security: http://www.redhat.com/support 
Support: support@redhat.com

Slackware

ftp://cdrom.com/pub/linux

Stormix

Bugs: http://www.stormix.com/bugtrack/input_bug_html и bugs@stormix.com
Security: security@stormix.com
Support: http://www.stormix.com/support/index_html

SuSE

Bugs: bugs@suse.com 
Security: http://www.suse.de/de/support/security/index.html
Support: support@suse.com

TurboLinux

Bugs: jht@turbolinux.com 
Security: jht@turbolinux.com
Support: support@turbolinux.com
http://www.turbolinux.com/support

Back

Security Portal

Written by Kurt Seifried


Вирусы

Обзор

Дезинфекция

Вирусные сканеры для Linux

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

Обзор

Linux нельзя заразить вирусом путями, аналогичными принятым в Dos/Windows или на Mac. В UNIX контроль безопасности является фундаментальной частью системы. Например, пользователи не могут записывать любую точку памяти, как в Dos/Windows и на Mac.

Если честно, имеются вирусы для UNIX. Однако единственный для Linux, который я видел, был назван "bliss", имел опцию (" --uninstall-please") и должен был быть выполнен как root, чтобы быть эффективным. В общем, если Вы не знаете, что программа делает, не выполняйте ее как root! Черви намного более распространены в UNIX-мире, первым был Morris Internet worm, который использовал дыру в sendmail. Сейчас черви в Linux используют дыры в imapd, sendmail, WU-FTPD и прочих демонах. Самое простое: обновляйтесь регулярно. Этого вполне достаточно, чтобы вывести их из строя. Так что необходимости в антивирусах под Linux нет.

Трояны также весьма популярны. Недавно ftp.win.tue.nl был разрушен и пакет TCP_WRAPPERS (вместе с некоторыми другими) был подправлен для отсылки паролей на анониный доступ. Это было обнаружено, когда кто-то проверил PGP-сигнатуру пакета. Мораль истории? Используйте программное обеспечение из доверенных мест, и проверяйте PGP-сигнатуру.

Дезинфекция

Резервируйтесь и присматривайте за всем подозрительным в системе. Если кто-то получил root-доступ, он может устроить многое, от троянца в gcc/egcs до загузки интересных модулей ядра. Не ставьте неизвестный софт как root. Проверяйте PGP-сигнатуры загружвемых файлов.

Самый простой метод для пресечения вирусов: использовать инструментальные средства целостности системы типа tripwire, L5 и Gog&Magog, Вы сможете легко узнать какие файлы были изменены и восстановить их. Имеется также много антивирусных сканеров, доступных для Linux (но вообще говоря, не имеется Linux-вирусов).

Вирусные сканеры для Linux

Как установлено выше, вирусы не представляют реальной угрозы под Linux, но вирусные сканеры, которые могут работать под Linux могут быть полезны при фильтрации email/других форм содержания на шлюзах Вашей сети (Windows-машины встречаются где угодно). Очень обнадеживает тот факт, что платформа, которая используется как дополнительная линия защиты от вирусной опасности, сама не может быть атакована этой опасностью. Вы можете также проверять файлы на сервере файлов под Linux, к которому обращаются Windows-клиенты. К счастью, имеется несколько хороших антивирусных программ, доступных для Linux.

Sophos Anti-Virus

Sophos Anti-Virus коммерческий сканер, работает на разных Windows и UNIX платформах. Свободен для персонального и относительно недорог для коммерческого использования. Скачать можно с http://www.sophos.com.

AntiVir

AntiVir еще один коммерческий сканер, работает на разных Windows и Linux. Скачать можно с http://www.hbedv.com.

InterScan VirusWall

Trend Micro портировала этот продукт под Linux, и его можно скачать с их сайта http://www.antivirus.com/products/isvw.

F-Secure Anti-Virus

Data Fellow's тоже портировала свой антивирусный сканер под Linux. Скачать его можно с http://www.europe.datafellows.com/products

AVP

Kaspersky lab's тоже портировала свой антивирусный сканер под Linux. Скачать его можно с http://www.kasperskylab.ru/eng/products/linux.html

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

Данная тема подробно описана в разделе email-серверах и подразделе о проверке входящей почты (очень важно при наличии windows-клиентов).

Back

Security Portal

Written by Kurt Seifried


Виртуальные частные сети (Virtual private networks, VPN)

Шифрование сетевых сервисов

Решения для VPN

Шифрование сетевых сервисов

Весь сетевой трафик может быть легко прочитан, поскольку он не шифруется. Разные механизмы существуют или создаются для шифрования трафика на разных уровнях стека протоколов. Некоторые схемы только шифруют данные, посланные (типа GnuPG, шифрующего email), некоторые шифруют сеанс (SSL) и некоторые шифруют полезный груз данных пакетов (IPSEC и другие VPN). В конечном счете самым лучшим решением будет IPSEC (мое мнение), поскольку не требуется никаких модификаций прикладных программ, и обеспечивается очень высокий уровень защиты между компьютерами. Сейчас единого протокола, используемого всеми, частично из-за интриг фирмы Microsoft, которая поддерживает только свои стандарты (справедливости ради надо заметить, что поддержка IPSec в тестовом варианте у нее есть, но тестовый вариант Microsoft...), частично из-за ряда законодательных проблем. Самая лучшая схема в настоящее время SSL, Secure Sockets Layer, первоначально предложенная Netscape. SSL шифрует данные на уровне сеанса, таким образом, если прикладная программа и сервер поддерживают SSL, Вы сможете защититься. Большинство www браузеров, некоторые email/news читатели, и несколько ftp и telnet клиентов поддерживает SSL в настоящее время. Для Linux большинство услуг может быть защищено SSL. Библиотеки SSL доступны на http://www.openssl.org. Для работы через firewall может потребоваться NAT box (Linux с IP Masquerading), подробности в разделе о firewall.

Решения для VPN

Имеется ряд VPN решений для Linux. Очень советую при возможности использовать IPSec, поскольку он представляет собой прообраз стандарта для if VPN в Internet, и будет включен в IPv6. С другой стороны, если Вы защищены firewall, и Вам нужен туннель, пользуйтесь SSH, поскольку из-за изменения заголовков пакетов IPSec обычно проваливается.

IPSec

IPSec подробно описан в соответствующей главе. Я полагаю, что это решение является будущим VPN (оно поддерживается большинством стандартов и является частью проекта IPv6).

PPTP (Point to Point Tunneling Protocol)

PPTP, составляющий собственность протокол, созданный Microsoft для VPN решений. До настоящего времени показал многожество дефектов. Однако, если Вы должны интегрировать Linux в PPTP среду, еще не все потеряно: http://www.moretonbay.com/vpn/pptp.html содержит Linux реализацию PPTP.

CIPE (Crypto IP Encapsulation)

CIPE свободная схема шифрования IP-уровня, предполагаемая для использования между маршрутизаторами. Это подходит для безопасного соединения сетей через опасную сеть (подобную Internet). Официальный сайт CIPE: http://sites.inka.de/~W1011/devel/cipe.html.

ECLiPt Secure Tunnel

Доступное по GNU licensed решение для Linux VPN. Пока на тестировании (и не рекомендуется для массового использования). Официальная страничка http://eclipt.uni-klu.ac.at/projects/est.

Stunnel

Stunnel представляет собой решение для безопасных сетей на основе SSL. Сервер работает под UNIX, клиенты под UNIX или Windows.
http://mike.daewoo.com.pl/computer/stunnel

Virtual Private Server

Virtual Private Server (VPS) использует Perl и SSH для создания VPN. Загрузить можно с http://www.strongcrypto.com.

Virtual Tunnel

Virtual Tunnel (VTUN) поддерживает набор протоколо соединения и разные алгоритмы шифрования. Скачать можно с http://vtun.netpedia.net.

Zebedee

Zebedee предоставляет шифрование трафика TCP между хостами и доступен для UNIX и Windows. Скачать можно с http://www.winton.org.uk/zebedee.

Virtual Private Server

Virtual Private Server решение для VPN на основе PPP и SSH. Скачать можно с http://www.strongcrypto.com.

 

Back

Security Portal

Written by Kurt Seifried


Сетевые сервисы: HTTP/HTTPS

Обзор

Серверы WWW

Безопасные серверы WWW

Доступ к файлам WWW-сервера

Обзор

WWW-трафик на сегодня один из главных компонентов использования Internet. Есть несколько популярных WWW-серверов для Linux, самый популярный, конечно, Apache (свыше 50% пользователей). Есть несколько новых WWW-серверов тоже с поддержкой SSL для безопасных соединений (для e-commerce). Этот раздел очень ориентирован на Apache, но поскольку он является сервером по умолчанию почти для всех дистрибутивов Linux (и *BSD), это имеет смысл. Я также написал о версии 1.3.9 сервера Apache, которая больше не использует access.conf или srm.conf, но взамен применяет httpd.conf.

HTTP работает на порте 80, протокол tcp, и если он предназначен только для внутреннего использования (Intranet или www-механизмы контроля firewall, например) его нужно закрыть с помощью firewall.

ipfwadm -I -a accept -P tcp -S 10.0.0.0/8 -D 0.0.0.0/0 80
ipfwadm -I -a accept -P tcp -S some.trusted.host -D 0.0.0.0/0 80
ipfwadm -I -a deny -P tcp -S 0.0.0.0/0 -D 0.0.0.0/0 80

или в ipchains:

ipchains -A input -p all -j ACCEPT -s 10.0.0.0/8 -d 0.0.0.0/0 80
ipchains -A input -p all -j ACCEPT -s some.trusted.host -d 0.0.0.0/0 80
ipchains -A input -p all -j DENY -s 0.0.0.0/0 -d 0.0.0.0/0 80

HTTPS работает на порте 443, протокол tcp, и если он предназначен только для внутреннего использования (Intranet или www-механизмы контроля firewall, например) его нужно закрыть с помощью firewall.

ipfwadm -I -a accept -P tcp -S 10.0.0.0/8 -D 0.0.0.0/0 443
ipfwadm -I -a accept -P tcp -S some.trusted.host -D 0.0.0.0/0 443
ipfwadm -I -a deny -P tcp -S 0.0.0.0/0 -D 0.0.0.0/0 443

или в ipchains:

ipchains -A input -p all -j ACCEPT -s 10.0.0.0/8 -d 0.0.0.0/0 443
ipchains -A input -p all -j ACCEPT -s some.trusted.host -d 0.0.0.0/0 443
ipchains -A input -p all -j DENY -s 0.0.0.0/0 -d 0.0.0.0/0 443

Серверы WWW

Apache

По умолчанию Apache работает как пользователь 'nobody', давая очень небольшой доступ к системе, и вообще говоря группа авторов Apache сделала превосходную работу по обеспечению безопасности. Вообще-то все www-серверы безопасны, все что они делают, это получают данные из системы и отсылают их. Опасность ждет Вас со стороны плохих CGI, server side includes и тому подобного.

Многие серверы, основанные на Apache (Red Hat Secure Server, Stronghold и другие) имеют исправленные ошибки, но в них появились другие проблемы. Скачать Apache можно с http://www.apache.org. Он также входит почти во все дистрибутивы как пакет программ.

Chroot'ing Apache

Если Вы хотите быть параноидальными, я предложил бы запускать Apache в chroot'ed среде, но это иногда создает больше проблем, чем решает. Выполнение этого разорвет очень многие вещи. Вы должны также установить многочисленные библиотеки, Perl и любые другие утилиты, которые Apache будет использовать, также как любые файлы конфигурации, к которым Вы желаете иметь доступ. Использование CGI также превратится в проблему.

Самый простой путь к установке chroot'ed просто поставить его, переместить и отредактировать некоторые файлы. Хорошая мысль: создайте каталог (например, /chroot/apache), предпочтительно на отдельной файловой системе и создать структуру файлов для Apache. В примере ниже просто поменяйте /chroot/apache на Ваш выбор. Вы должны, конечно, выполнить эти шаги как root. RPM поддерживает директиву “--root /some/dir”, что позволяет легко поставить Apache и все нужные библиотеки с помощью rpm. Используйте ldd, чтобы выяснить какие именно библиотеки нужны, и переместите их в каталог /chroot/apache (если Ваша система не поддерживает rpm).

[seifried@host seifried]$ ldd /usr/bin/httpd
libm.so.6 => /lib/libm.so.6 (0x40017000)
libc.so.6 => /lib/libc.so.6 (0x40060000)
/lib/ld-linux.so.2 => /lib/ld-linux.so.2 (0x40000000)

Apache протоколирует запросы и свою работу сам, так что не нужно ставить pseudo logging daemons вроде holelogd для передачи данных в syslog.

Безопасная настройка Apache

Самый простой способ ограничить доступ: создайте каталог /www или подобный и разместите в его иерархии ВСЕ данные, доступные для web-сервера: все сайты, cgi и прочее. Затем установите в access.conf запрет доступа к / и разрешите доступ к /www и разлиным его каталогам cgi-bin.

Пример httpd.conf:

<Directory />
Options None
AllowOverride None
</Directory>
<Directory /www >
Options Indexes FollowSymLinks Includes
AllowOverride None
</Directory>

Контроль доступа

Доступ к каталогам может также легко управляться, Apache поддерживает определение и размещение файлов (обычно упоминаемых как htaccess-файлы), которые могут управлять доступом, основываясь на username и пароле, IP-адресе происхождения и т.д. Это определено в файле srm.conf:

AccessFileName .htaccess

Формат этого файла подробно описан в документации на Apache и идентичен директивам в access.conf. Авторизация пользователей по username и паролю также подробно описана на http://www.apacheweek.com/features/userauth.

Если Вы хотите, чтобы никто не мог просмотреть файлы .htaccess, впишите в srm.conf:

<Files .htaccess>
order allow,deny
deny from all;
</Files>

Это запретит просмотр файлов с именем '.htaccess'.

apache-userdirldap

apache-userdirldap позволяет использовать каталог LDAP для просмотра домашних каталогов пользователей. Другими словами, можно переместить всех пользователей в структуру LDAP directory, и они будут авторизоваться через нее. Скачать можно с http://horde.net/~jwm/software/apache-userdirldap.

thttpd

Простой сервер http для web-интерфейса (например, Phoenix Adaptive firewall использует такой интерфейс). Скачать можно с http://www.acme.com/software/thttpd

 

AOL Server

Я знаю, это звучит странно, но это правда. AOL Server это свободный www-сервер с доступными исходными кодами. К тому же, он поддерживает SSL и несколько других продвинутых свойств. Определенно, стоит посмотреть... Скачать можно с http://aolserver.com.

После установки и настройки www-сервера надо предоставить доступ к файловой системе, чтобы пользователи могли выкладывать странички. Для этого есть 4 наиболее популярных способа, но о них позже.

webfs

webfs легкий www-сервер с поддержкой базовых функций, доступен на http://www.in-berlin.de/User/kraxel/webfs.html.

Simple Web Server

Simple Web Server полностью соответствует своему названию. Базовые функции и никаких наворотов. Скачать можно с http://linuxstuffs.cjb.net.

Flash Web Server

Простой и быстрый www-сервер, скачать можно с http://www.cs.rice.edu/~vivek/flash.

Безопасные серверы WWW

Имеется несколько свободных и несколько коммерческих вариантов Apache с SSL. Здесь Вас ждут бюрократические рогатки, связанные с политикой разных государств относительно стойкой криптографии. Что ж, регулирование интернета пока ни у кого не получилось, хотя и пытались... Есть несколько статей в которых подробно рассматриваются защищенные серверы:

Web server round-up, часть 1

Web server round-up, часть 2

Apache-SSL

Это то, которое я в настоящее время использую (просто потому, что я пробовал прежде Apache с mod_ssl, и это работало). Вам понадобится счкачать Open-SSL, откмпилировать и поставить его, а затем поставить патч Apache-SSL для Apache и пересобрать Apache. Open-SSL доступен на http://www.openssl.org, просто скачайте последний tarball, распакуйте его и выполните:

./config
make
make test
make install

Затем получите Apache-SSL stuff с http://www.apache-ssl.org, распакуйте куда-нибудь исходники Apache, cd в каталог верхнего уровня (например, /usr/local/src/apache_1.3.9) и распакуйте сюда же Apache-SSL stuff. Затем просто запустите:

./FixPatch

Это должно работать (если не работает, прочтите инструкцию в README.SSL), затем настройте Apache как обычно, выполните make, затем make install. Теперь читайте раздел "Создание сертификатов".

Apache с mod_ssl

Apache с mod_ssl доступен на http://www.modssl.org. Я его почти не тестировал.

Создание сертификатов

Это простая часть, следующий шаг должен создать набор ключей и затем конфигурировать httpsd.conf, чтобы использовать их. Найдите, где установлен "openssl" и убедитесь, что он прописан в path, затем cd туда, где лежат файлы настройки Apache. Если нужно создать тестовый сертификат для внутреннего пользвания, скомандуйте:

openssl genrsa -des3 > httpsd.key
openssl req -new -x509 -key httpsd.key > httpsd.crt

Браузеры будут громко жаловаться относительно этого сертификата, потому что он создан человеком, который его подписал, и они недоверяют ему. Если Вы хотите генерировать сертификат и запрос удостоверения, чтобы послать кому-то подобно Thawte или Verisign, скомандуйте:

openssl genrsa -des3 > httpsd.key
openssl req -new -key httpsd.key > httpsd.csr

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

Настройка Apache для работы с SSL

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

# you will need to tell apache to listen to port 443, by default
# it only goes for 80
Listen 443
# if you use more then one secure site on an IP (BAD IDEA) you will need:
NameVirtualHost 10.1.1.1:443
#it's a good idea to disable SSL globally and enable it on a per host basis
SSLDisable
# SSL cache server, without this your server will die
SSLCacheServerPath /usr/bin/gcache
# port the cache server runs on
SSLCacheServerPort 12345
# timeout for the SSL cache, set shorter for testing, 300 is a good
# "real world" value
SSLSessionCacheTimeout 300

Создайте виртуальный хост с поддержкой SSL:

<VirtualHost www.example.com:443>
DocumentRoot /www/secure
ServerName www.example.com
ServerAdmin example@example.com
ErrorLog logs/https_error.log
TransferLog logs/https_access.log
# enable SSL for this virtual host
SSLEnable
# this forbids access except when SSL is in use. Very handy for defending
# against configuration errors that expose stuff that should be protected
SSLRequireSSL
SSLCertificateFile /usr/conf/httpsd.crt
# if the key is not combined with the certificate, use this
# directive to point at the key file. [OPTIONAL]
SSLCertificateKeyFile /usr/conf/httpsd.key
# If you want to require users to have a certificate you will need
# a bundle of root certificates so you can verify their personal certificates
#SSLCACertificateFile /etc/ssl/ca-cert-bundle.pem
SSLVerifyClient none
</VirtualHost>
Red Hat Secure Server

Red Hat Secure Server основан на Apache. По существу, это Apache с RSA cryptographic модулями (которые являются тем, за что Вы платите по существу) и можете также обслуживать стандартные (не cryptographic) http запросы. Из-за бюрократии, он продается только в США и Канаде, но реально сильная криптография давно используется всеми и везде. Red Hat Secure Server стоит $100 US и Вы получает скидку в $25 на Thawte-сертификат сайта (в результате такой сертификат будет стоить еще $100 US). Купить Red Hat Secure Server можно на http://store.redhat.com/commerce.

Roxen

Roxen еще один коммерческий www-сервер с поддержкой https, доступен по GPL. Вы можете свободно скачать его, если Вы находитесь в Объединенной Европе, Австралии, Канаде, Японии, Новой Зеландии, Норвегии, США или Швейцарии. Версия со “слабой” (40 бит) криптографией может быть загружена из любой страны без проблем. Roxen доступен на http://www.roxen.com.

Zeus

Zeus www-сервер высшего уровня с поддержкой SSL. Это коммерческий продукт, и Вы можете получить 30-дневную демонстрашку с http://www.zeustechnology.com.

Netscape Enterprise

Пока на тестировании (но ставится и работает нормально) для Linux, доступен на http://www.iplanet.com/downloads/iwsonlinux.html.

IBM HTTP Server

IBM также сделала HTTP-сервер для Linux (основанный на Apache), который можно скачать с http://www-4.ibm.com/software/webservers/httpservers/download.html.

Доступ к файлам WWW-сервера

Теперь надо обновлять файлы на сервере... Зайти и использовать текстовый редактор (даже если у Вас shell-доступ) не самая лучшая мысль. Писать файлы на другой машине, а потом синхронизировать с сайтом... Бр-р, я сам этим занимаюсь, и должен сказать, что такая система заставляет о дальнейшем совершенствовании процесса. Есть несколько популярных пакетов HTML-разработки, способных обновлять сайт самостоятельно по FTP или windows file sharing.

FTP

Классический способ предоставления доступа пользователям к ftp-серверу. Пользователи имеют обыкновение читать чужие файлы, лазать везде, куда дотянутся, и вообще портить жизнь сисопу. Chroot’ing ftp-сессий решает большинство этих проблем, однако основная проблема с ftp, в том что шифрование username и пароля обычно является невыполнимым из-за факта, что большинство людей работают с клиентами FTP для Windows. Я рекомендую ProFTPD вместо WU-FTPD, ProFTPD имеет много лучшие средства управления доступом.

Samba

Samba полезен для деления www-каталогов Windows-клиентами, Вы можете хранить usernames и пароли, отдельно от системы (использование smbpasswd, лучше системной passwd) и шифрование входов в систему не проблема. Просто создайте non-browseable разделяемый ресурс и используйте директиву “ valid users”, чтобы ограничить, какие пользователи могут рассматривать общие данные. Например:

[www-example]
  path = /www/www.example.org
  valid users = someuser
  read only = No
  browseable = No

Будет установлен довольно безопасный общий ресурс для каталога “/www/www.example.org”, к которому только пользователь “example” сможет обращаться.

FrontPage

FrontPage одна из наиболее популярных программ HTML для пользователей Windows (я сам ей пользуюсь). Она может говорить непосредственно с WWW-серверами и обмениваться данными с сайтом (называемым “FrontPage Site”), если сервер поддерживает расширения FrontPage. Они свободно доступны для различных UNIX-платформ с Ready To Run Software http://www.rtr.com. Есть коммерческие альтернативы, например, Instant ASP доступен на http://www.halcyonsoft.com. Хорошее описание взаимодействия FrontPage с Apache 1.3.X есть на http://www.itma.lu/howto/apache.

RearSite

RearSite представляет собой cgi-программу для предоставления пользователям доступа к их каталогам через обычный web-браузер. Скачать можно с http://listes.cru.fr/rs/fd.

Fast Webpage Exchanger

Fast Webpage Exchanger сам синхронизирует файлы через ftp и имеет удобный файл настройки. Скачать можно с http://www.enjoy.ne.jp/~gm/program/iwe_en.html.

WebRFM

WebRFM (Web-based Remote File Manager), CGI-программа (на Perl), позволяет пользователям управлять своими файлами. Скачать можно с http://webrfm.netpedia.net.

 

Back

Security Portal

Written by Kurt Seifried


Сетевые сервисы: WWWemail

Обзор

Некоммерческие серверы

Коммерческие серверы

 

Обзор

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

Некоммерческие серверы

AtDot

AtDot доступен по лицензии GNU и написан на perl. Он имеет несколько режимов работы, делающих его подходящим для ряда ситуаций (провайдеры в стиле hotmail, ISP, и т.п.). Загрузить можно с http://www.nodomainname.net/software/atdot.

acmemail

http://www.nodomainname.net/software/atdot

IMHO

http://www.lysator.liu.se/~stewa/IMHO

IMP

IMP требует модуль Horde (доступен на его же сайте) и www-сервер, способный к поддержке PHP3. Вы можете загрузить IMP и Horde с http://www.horde.org/imp.

MailMan

MailMan свободный (для некоммерческого использования) шлюз от www к POP. Если Вы планируете использовать его в коммерческих целях, надо его купить. А скачать можно с http://www.endymion.com/products/mailman.

SquirrelMail

http://squirrelmail.sourceforge.net

TWIG

http://twig.screwdriver.net

WebMail

http://webmail.wastl.net

Коммерческие серверы

Coconut WebMail Pro

http://www.coconutsoftware.com

DmailWeb

http://netwinsite.com/dmailweb/index.htm

WebImap

http://netwinsite.com/webimap/index.htm

Back

Security Portal

Written by Kurt Seifried


X Window System

Обзор

Безопасность и настройка X-сервера

 

Обзор

X Window System сетевое средство для совместного использования графических данных, или более конкретно для экспорта дисплея программы на удаленный (или локальный) хост. Используя это Вы можете выполнять мощный 3d rendering пакет на SGI origin 2000 и отображать его на 486. По существу это аналог тех 'thin client' (тощих клиентов) о которых в последнее время столько разговоров. Это средство было создано в MIT, когда защита была не столь важна как сейчас. Защита исков слабая: копии экрана и данные о нажатиях клавиш на клавиатуре и перемещениях мыши можно легко перехватить, что может привести к крупным проблемам, например при входе на другую систему через xterm.

X в большинстве случаев использует для первого сеанса порт 6000, а затем для каждого нового сеанса использует порт на единичку выше. Если Вы не собираетесь работать с иксами на удаленных системах (хотя это иногда удобно), поставьте firewall на порт 6000.

ipfwadm -I -a accept -P tcp -S 10.0.0.0/8 -D 0.0.0.0/0 6000:6100
ipfwadm -I -a accept -P tcp -S some.trusted.host -D 0.0.0.0/0 6000:6100
ipfwadm -I -a deny -P tcp -S 0.0.0.0/0 -D 0.0.0.0/0 6000:6100

или

ipchains -A input -p tcp -j ACCEPT -s 10.0.0.0/8 -d 0.0.0.0/0 6000:6100
ipchains -A input -p tcp -j ACCEPT -s some.trusted.host -d 0.0.0.0/0 6000:6100
ipchains -A input -p tcp -j DENY -s 0.0.0.0/0 -d 0.0.0.0/0 6000:6100

Безопасность и настройка X-сервера

Имеется ряд методов гарантировать безопасный доступ к X-серверу.

xhost

xhost просто позволяет Вам определять, какие машины могут, а какие нет, соединяться с сервером. Конечно, это очень просто, в современных сетях само по себе помогает мало, но часто может пригодиться. Команда проста: 'xhost +example.org' добавляет example.org, 'xhost -example.org' удаляет example.org из списка допущенных, Вы должны также определить 'xhost -' чтобы включить список управления доступом.

mkxauth

mkxauth представляет собой хорошее дополнение к xhost. mkxauth создает файлы ~/.Xauthority, которые используются, чтобы определить hostnames и связанные магические cookies (маркер, используемый чтобы получить доступ). Эти cookies могут затем использоваться, чтобы получить доступ к удаленному X-хосту (Вы по существу имеете копию cookie на каждом конце) и передаются как текст (опасно) или зашифрованными по DES (совершенно безопасно). При использовании этого метода Вы можете быть в относительной безопасности. Файлы Xauthority могут также использоваться вместе с Kerberos. mkxauth отлично описан на man-странице 'man mkxauth' и много деталей можно почерпнуть на man-странице Xsecurity.

SSH tunnel

SSH или OpenSSH может использоваться, чтобы создать туннель между хостами (или между двумя X-серверами), шифруя канал, обеспечивая авторизацию и вообще делая работу более безопасной. Следующая web-страница объясняет это подробно http://csociety.ecn.purdue.edu/~sigos/projects/ssh/forwarding.

Back

Security Portal

Written by Kurt Seifried


Administravia

Contributors

Contributions

PGP-ключи

Как это делалось

Contributors

Alan Mead – amead@soltec.net внес очень много поправок и пытался обучать меня языку (при переходе к письменности мои дела плохи).

Contributions 

Если Вы можете помочь в разработке и редактировании LASG, пишите мне на seifried@seifried.org. Вы будете внесены в список contributor.

PGP-ключи:

Пожалуйста обратите внимание, что я использую этот ключ для seifried@seifried.org и listuser@seifried.org (мой логин для списков рассылки).

-----BEGIN PGP PUBLIC KEY BLOCK-----
Version: PGPfreeware 6.5.2 for non-commercial use <http://www.pgp.com>

mQGiBDd4BcsRBADUoqfo4M0lgxBJAdd/S2KTM7HjepPGzfwvjfXWK9TPQkmTYEwP
P8OkXMk7XRhfO0QKJAVkrXlWtBp0R+mqQ3jmZ0G4j93qskEsSU9rl62GaafU236X
t1b/lSoXQwQ4In/OvkwMnVzKbMApH0tlvugAv69HxNoIl4990kcqnPq5eQCg/2oU
gsYP7/UrugRtZIKufr6XizED/3G7KGI7LJmJijCHbYcgPRscTCzb8XOTknb7lZyG
/WPVLeYPO9C68i49KHZ1VqjlM5LxsfUvYDSDUZLYXrjYyh8Td/0rf3eV1thItmqk
GiaQA1X3j+Xv4D/gT3w43thqiWtNKM+B/ULkJ/sO1xlKKyja97V08JTjO9UCUq0K
D0CsBACFF5T/W3qI05e68F7qojwls71IiDA0E/x5HZd8OKM0qvHGko7pnkl/AFW+
4MqOU6zj5qtRqB3H0gjkLwqiVCMasPMgBGSE+etrtG9acnk2qKo1uY3cnOK3cfTv
Zp1Nm0e8Io2SXwLI+vxxm/KYCyPI+zVtKk56Vl04IPIoya/VE7QlS3VydCBTZWlm
cmllZCA8c2VpZnJpZWRAc2VpZnJpZWQub3JnPokASwQQEQIACwUCN3gFywQLAwIB
AAoJEIb9cm7tpZo3kbkAoKsXhmRFa7SgnLZ/FqaFrHdoBQPJAJ9hJ7N8AJh02+4d
RlXBW3DIqbU6lIkAnAQQAQEABgUCOIVMzwAKCRA1LHNOSlL+VZKhA/9ih5eLXf6v
o22EHyMY4P8sL1cgu+ucrmF0ATl99QD/QRDeIglmbep5heyJj3bvlL6QONKoWwL5
fGS7MtlIhQwaR/4o2W9u8bxffVHGkfVQ3mMsN1FpuD1bwS3szjYJo97UbAr6ZEsN
oSKVKJGgvLNjjGcwoXr862T/YKX7+GhA47QlS3VydCBTZWlmcmllZCA8bGlzdHVz
ZXJAc2VpZnJpZWQub3JnPokASwQQEQIACwUCODuCqAQLAwIBAAoJEIb9cm7tpZo3
fSsAn29Kdkl8s7W+giKw1VN9b0gjwnhZAJ4lewK2Lpc202L3q+SK0U7UFPA5LbQr
S3VydCBTZWlmcmllZCA8c2VpZnJpZWRAc2VjdXJpdHlwb3J0YWwuY29tPokASwQQ
EQIACwUCOG3kHwQLAwIBAAoJEIb9cm7tpZo3eJMAoPPAbfACMBQjUI6UGpZvm1i2
o7v4AKC2jqafvis99yZjvosEih3tUpgF2bkCDQQ3eAXMEAgA9kJXtwh/CBdyorrW
qULzBej5UxE5T7bxbrlLOCDaAadWoxTpj0BV89AHxstDqZSt90xkhkn4DIO9ZekX
1KHTUPj1WV/cdlJPPT2N286Z4VeSWc39uK50T8X8dryDxUcwYc58yWb/Ffm7/ZFe
xwGq01uejaClcjrUGvC/RgBYK+X0iP1YTknbzSC0neSRBzZrM2w4DUUdD3yIsxx8
Wy2O9vPJI8BD8KVbGI2Ou1WMuF040zT9fBdXQ6MdGGzeMyEstSr/POGxKUAYEY18
hKcKctaGxAMZyAcpesqVDNmWn6vQClCbAkbTCD1mpF1Bn5x8vYlLIhkmuquiXsNV
6TILOwACAggAt5ZYjwTb3CviA8ECSRHXM0V6n5AjtyNiKHzay93Ac9bCL/dypY+C
qRByzX31DY08h8UdfgHhs1ppZ/BfU5VHvPR/T69AkrXSyo4xAeyJ0VGY9RGzSO8P
GcQQ9kehwavWc97f1aMTqYW+u8nQF2vi/kINOaEef7/JpNwNPadWmYA6zio9Gt3I
5SGquXMvEKsWJEjTsKhFAmkfWvC/XLswHyIaf7fs4wOpXhIaW4yxvMEPnvWh/NaE
3Njadml39MuPE6wLAC858SKgq8JWuk81lRpAUAktZacgfJyIiDzKNSPDgH/ikupc
012AkuFDd6SLaBGaJtGGK2bAflBc5K+bS4kARgQYEQIABgUCN3gFzAAKCRCG/XJu
7aWaN9vmAKDw9ZWdnej1n2sHUtyW7ffPFWHpgQCg8kVLzK9vEDGhyWP3PbwWaQ9/
NjE=
=OJbD
-----END PGP PUBLIC KEY BLOCK-----

Возможно, Вы заметили тэги FrontPage в LASG и задались вопросом: что они делали там. Хорошо, пришло время открыть мой ужасный секрет:

Изначчально я написал LASG в Word 97, затем конвертировал в HTML и поддерживаю его с использованием FrontPage.

Позор и ужас... Но я перебрал все доступные мне редакторы HTML и выяснил, что для новичка в HTML нет ничего лучше FrontPage с его полезными свойствами, типа поддержки отслеживания ссылок, проверки орфографии и прочего. Так что, мастер-копия LASG хранится на моем NT Server (который я использую как автоматизированное рабочее место) и поддерживается через FrontPage, но как это добирается для Вас?

Через TCP-IP и ряд методов передачи файлов.

Первая стадия должна переместить документ с внутренней NT-машины, что выполняется через ftp и perl-скрипт "mirror". Этот сценарий также позволяет мне легко управлять каталогами vti для FrontPage. Затем на моем Linux-сервере создается ежедневный tarball и обновляется ссылка на него. С одного из серверов SecurityPortal.com ежедневно он просто зеркалируется (локальное время 4am) через rsync (который работает действительно хорошо). Так что все серверы SecurityPortal.com захватывают свежую версию через rsync,

Причина создания такой схемы в том, что она хорошо автоматизируется (фактически на 100%) и работает без проблем (никаких сбоев за несколько месяцев).

Back

Security Portal

Written by Kurt Seifried


Административные инструментальные средства

Обзор

Локальные инструментальные средства

Инструментальные средства, основанные на WWW

Инструментальные средства, основанные на сети

Обзор

Имеется ряд инструментальных средств, чтобы упростить управление системой. От локальных инструментальных средств подобных sudo, которые предоставляют ограниченные привилегии суперпользователя, до Webmin и Linuxconf, которые основаны на www. Информации относительно того как войти в систему дистанционно (то есть, через telnet или ssh) есть в разделе shell server.

Локальные инструментальные средства


YaST

YaST (Yet Another Setup Tool) довольно хороший инструмент на основе командной строки (очень похож на scoadmin), который обеспечивает простой интерфейс к наиболее частым административным задачам. Он не имеет никаких условий для предоставления пользователям ограниченного доступа, так что годится только для root. Другая проблема: в отличие от Linuxconf, это не сетевое средство, так что придется регистрироваться на каждой управляемой системе, что может и повышает безопасность, но создает неудобства.

sudo

Sudo дает пользователю setuid-доступ к программе (или нескольким), и Вы можете определять, при доступе с каких хостов можно работать с sudo (так что кто-то, ворвавшись не с того хоста, ничего не разрушит). Вы можете определять то, какой пользователь какие команды может выполнить. Необходимо проследить, чтобы пользователи использовали только ПОЛНЫЕ имена исполняемых файлов (если пользователь имеет sudo-доступ к "adduser", ничто не помешает ему реально подправить путь, скопировать bash в /tmp/adduser и захватить контроль над системой). Этот инструмент очень подобен super, но с немного менее удобным управлением доступом. Sudo доступен в большинстве дистрибутивов, но его можно скачать с http://www.courtesan.com/sudo. Sudo позволяет Вам определять группы хостов, команд и пользователей. Несколько примеров /etc/sudoers:

#Give the user ‘seifried’ full access
seifried ALL=(ALL) ALL
#Create a group of users, a group of hosts, and allow then to shutdown
#the server as root
Host_Alias WORKSTATIONS=localhost, station1, station2
User_Alias SHUTDOWNUSERS=bob, mary, jane
Cmnd_Alias REBOOT=halt, reboot, sync
Runas_Alias REBOOTUSER=admin
SHUTDOWNUSERS WORKSTATIONS=(REBOOTUSER) REBOOT
Super

Super одно из немногих инструментальных средств, которые могут реально использоваться, чтобы дать некоторым пользователям (и группам) измененные уровни доступа к администрированию системы. В дополнение к этому Вы можете определять время и позволять доступ к скриптам, давая setuid доступ к командам, которые могли бы иметь непредвиденные последствия (любой редактор, любые инструментальные средства манипулирования файлами подобные chown, chmod, инструментальные средства вроде lp вообще-то могут поставить под угрозу части системы). Debian поставляется с super, к тому же есть rpm-пакет. Это очень мощный инструмент но требует значительных усилий при настройке (подобно любому мощному инструменту), но я думаю, что это стоит усилий. Некоторые примеры файла конфигурации обычно в каталоге /usr/doc/super-xxxx. Главный сайт для super ftp://ftp.ucolick.org/pub/users/will.

runas

runas очень похож на sudo и Super с некоторыми отличиями. Вы создаете файл настройки в котором указываете кто, как и что может выполнять. В дополнение к этому однако Вы можете ограничивать использование параметров, и Вы можете запрашивать пользователя о причинах (ответы пишутся в syslog). Это одно из моих любимых свойств. Загрузить runas можно с http://www.mindspring.com/~carpinello/runas/index.html.

 

Инструментальные средства, основанные на WWW

 

Webmin

Webmin одно из лучших инструментальных средств удаленного администрирования для Linux, написанное на Perl. Оно является легким в использовании и простым в установке. Вы можете назначать различных 'пользователей' (имена и пароли хранятся внутри webmin) и их уровни доступа. Например, можно предоставить пользователю bob право останавливать сервер, а john создание/удаление и управление пользователями. В дополнение к этому, данное средство работает на большинстве Linux платформ и ряде других UNIX платформ. Главное проблема с webmin несколько недостаточная документация в некоторых областях использования и факт, что пара username/password представлена чистым текстом в сети. Наиболее важно то, что это делает систему более доступной для нетехнических людей, которые должны управлять системами таким способом, что Вы не должны предоставить им фактический логин на сервере. Webmin доступен на http://www.webmin.com/webmin, и в настоящее время свободен. Webmin по умолчанию работает на порте 10000 и должен быть прикрыт firewall:

ipfwadm -I -a accept -P tcp -S 10.0.0.0/8 -D 0.0.0.0/0 10000
ipfwadm -I -a accept -P tcp -S some.trusted.host -D 0.0.0.0/0 10000
ipfwadm -I -a deny -P tcp -S 0.0.0.0/0 -D 0.0.0.0/0 10000

или в терминах ipchains:

ipchains -A input -p all -j ACCEPT -s 10.0.0.0/8 -d 0.0.0.0/0 10000
ipchains -A input -p all -j ACCEPT -s some.trusted.host -d 0.0.0.0/0 10000
ipchains -A input -p all -j DENY -s 0.0.0.0/0 -d 0.0.0.0/0 10000
Linuxconf

Linuxconf универсальный инструмент администрирования, который является пригодным для использования из командной строки, из-под X, или встроенным в www-сервер. Из X он обеспечивает полное представление всего, что может быть конфигурировано (PPP, пользователи, диски, и т.д.). Чтобы использовать его через www, Вы должны сначала выполнить Linuxconf на машине и добавить хост или сеть, с которых разрешается заходить (Conf > Misc > Linuxconf network access), сохранить настройки и выйти. Затем, когда Вы соединяетесь с машиной (по умолчанию Linuxconf ждет на порте 98), Вы должны ввести username и пароль. По умолчанию Linuxconf пускает только root, и Linuxconf не поддерживает шифрование (это выполняется автономно на порте 901), так что я бы очень настоятельно не рекомендовал использовать это свойство в сети, если Вы не имеете IPSec или некоторую другую форму защиты уровня IP. Linuxconf входит в Red Hat Linux и доступен на http://www.solucorp.qc.ca/linuxconf. Linuxconf вроде бы не имеет никаких man-страниц, справка доступна только в нем самом, что не очень удобно.

COAS 

Проект COAS (Caldera Open Administration System) очень честолюбивый проект, призванный обеспечить управление системами из командной строки (с псевдографическим интерфейсом), из X (использование набора qt widget) и по сети. Вышла версия 1.0. Сайт COAS: http://www.coas.org.

WebRAT

Инструмент администрирования WebRAT основан на web. Доступен на http://hq.hellug.gr/~webrat.

 

Инструментальные средства, основанные на сети

Pikt

Pikt чрезвычайно интересный инструмент, это фактически язык скриптов для администрирования системы. Pikt позволяет Вам делать многое: уничтожать неактивные процессы пользователя, устанавливать квоты почты, контролировать систему на предмет подозрительных действий и многое другое. Единственной проблемы с Pikt будет трудность изучения, поскольку он использует собственный язык создания скриптов, но в конечном счете я думаю этот язык того стиот, особенно если Вы имеете много систем (тем более, что Pikt сейчас работает на Solaris, Linux и FreeBSD). Pikt доступен на http://pikt.uchicago.edu/pikt.

VNC

Virtual Network Computer (VNC) похож на X или PCAnywhere. Вы можете отображать графический рабочий стол, и управлять им дистанционно, с NT или Linux как сервером и/или клиентом. VNC в сети 10 megabit Ethernet хорош, но имеет тенденцию сильно загружать систему в сравнении с другими методами удаленного администрирования. VNC доступен на http://www.uk.research.att.com/vnc. Защита VNC не очень хорошая, но есть несколько сайтов по защите VNC с использованием SSL, SSH и других методов. MindVNC является java-клиентом, который использует SSH, доступен на http://www.mindbright.com/english/technology/products/mindvnc.html. Имеется заплата, чтобы добавить шифрование к VNC: http://web.mit.edu/thouis/vnc. Есть также страница про обеспечение работы VNC с SSH: http://www.zip.com.au/~cs/answers/vnc-thru-firewall-via-ssh.txt.

 

cfengine

cfengine набор инструментальных средств для автоматизации задач администрации и контроля сети. Доступен на http://www.iu.hioslo.no/cfengine/.

Storm Administration System (SAS)

SAS сейчас специфичен для Stormix (новый дистрибутив Linux), но его можно скачать с http://www.stormix.com/products/sas/index_html.

 

Back

Security Portal

Written by Kurt Seifried


Информация о дистрибутивах

 

Информация для связи с поставщиками

Bastille Linux

Caldera

Kha0s

NetMAX

Red Hat

SuSE

TurboLinux

 

Back

Security Portal

Written by Kurt Seifried


Утилиты сканирования системы

Обзор

Хост-сканеры

Сетевые сканеры

Сканеры вторжения

Firewall-сканеры

Exploits

Обзор

За последние несколько лет число инструментальных средств защиты для Windows и UNIX резко возросло. Интересен факт, что большинство из них является свободно доступными в Internet. Я буду описывать только свободные инструментальные средства, так как большинство коммерческих инструментальных средств смехотворно дорого, не имеют открытых исходников и во многих случаях содержат сильные дефекты защиты (подобно сохранению паролей в чистом тексте после установки). Любой серьезный cracker/hacker будет иметь эти инструментальные средства в их распоряжении, так, почему не должен Вы?

Имеются несколько основных категорий инструментальных средств, одни просматривают хосты с одного из них, другие сообщают о том, какая OS используется (технология TCP-IP fingerprinting), перечисляют сервисы, которые являются доступными и так далее, наиболее сложными являются средства для вторжения, которые фактически пытаются вторгнуться в систему и формируют отчет о найденных дырках. К тому же, есть эксплойты (exploits).

Имеются также много свободных инструментальных средств и методы, которые Вы можете использовать, чтобы провести проверку. Утилиты вроде nmap, nessus, crack и им подобных могут быстро использоваться, чтобы просмотреть Вашу сеть и ее хосты, быстро находя любые очевидные проблемы.

Хост-сканеры

Хост-сканеры представляют собой программы, которые запускаются на локальной системе в поисках проблем.

Cops

Cops чрезвычайно устаревший сканер. Упомянут только для исторической точности.

Tiger

Tiger все еще в разработке, хотя кое-где уже начал использоваться (например, в Texas Agricultural and Mechanical University). Скачать можно с ftp://net.tamu.edu/pub/security/TAMU.

check.pl

check.pl хорошая программа на Perl которая проверяет права доступа к каталогам и файлам и сообщает обо всех странностях и несоответствиях, которые найдет. Скачать можно с http://opop.nols.com/proggie.html.

Сетевые сканеры

Сетевые сканеры предназначены для изучения открытых сервисов. Имейте в виду, что многие хакеры используют их для поиска дырок в защите Вашей системы, так что лучше бы Вам найти эти дырки первым.

Strobe

Strobe один из старых сканеров портов. Он просто пытается соединяться с различными портами на машине и сообщает результат. Прост в использовании и очень быстр, но не имеет свойств, которые имеют более новые сканеры портов. Strobe доступен для почти всех дистрибутивов, исходники есть на ftp://suburbia.net/pub.

Nmap

Nmap более новый и намного более функциональный инструмент сканирования хостов. Использует продвинутые методы типа TCP-IP fingerprinting, в котором тип ОС удаленного хоста определяется путем анализа возвращаемых пакетов TCP-IP на предмет наличия в них особенностей реализации TCP-IP стека конкретной системы. Nmap также поддерживает разные методы сканирования от обычного TCP-сканирования (просто пробует открыть подключение как обычно) connection as normal) до невидимого сканирования и полуоткрытого SYN сканирования (разваливает ненадежные стеки TCP-IP). Это, возможно, одна из самых лучших программ просмотра портов. Nmap доступен на http://www.insecure.org/nmap/index.html. Есть интересная статья на http://raven.genome.washington.edu/security/nmap.txt по nmap и использованию некоторых его хитрых возможностей.

Network Superscanner

http://members.tripod.de/linux_progz

Portscanner

Portscanner очень маленькая утилита с настраиваемыми уровнями вывода, что делает его удобным для использования в скриптах. Имеет открытые исходники и свободен, скачать можно с http://www.ameth.org/~veilleux/portscan.html.

Queso

Queso не сканер, но сообщит Вам с довольно хорошей степенью точности под какой ОС работает удаленный компьютер. При использовании ряда допустимых и ошибочных пакетов tcp он сравнивает получаемые ответы со списком известных ответов для разных ОС. Скачать Queso можно с http://www.apostols.org/projectz/queso.

Сканеры вторжения

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

Nessus

Nessus относительно нов, но быстро движется к позиции самого лучшего пакета такого назначения. Он имеет архитектуру client/server, сервер пока работает под Linux, FreeBSD, NetBSD и Solaris, клиенты есть для Linux и Windows, есть также Java-клиент. Связь между клиентом и сервером зашифрована. Nessus поддерживает просмотр портов и нападение, основанное на адресах IP или именах. Может также прерывать сеть DNS-информация и нападать на связанные хосты в сети. Nessus работает относительно медленно в режиме нападения, но имеет более 200 вариантов атаки и язык для написания plug-in, так что можно писать свои сценарии атаки. Nessus доступен на http://www.nessus.org.

Saint

Saint продолжение Satan, сетевой сканер защиты. Saint также использует архитектуру client/server, но с www-интерфейсом вместо клиентской программы. Saint производит очень простой в чтении и понимании вывод с описанием проблем защиты, градуируемыми приоритетом (хотя не всегда правильными) и также поддерживает add-in модули сканирования, делающих его очень гибким. Saint доступен на http://www.wwdsi.com/saint.

Cheops

Вообще-то, это не сканер, но позволяет быстро определить тип ОС на большом числе машин. Cheops представляет собой усиленный вариант "network neighborhood", он создает образ домена или IP-блока с указанием ОС и подобной инофрмации. Это чрезвычайно полезно для подготовки начального просмотра, поскольку Вы можете быстро найти интересные элементы (HP-принтеры, Ascend-роутеры и тому подобное). Cheops доступен на http://www.marko.net/cheops.

Ftpcheck / Relaycheck

Две простых утилиты, которые сканируют серверы ftp и mail. Доступны на http://david.weekly.org/code.

SARA

Security Auditor’s Research Assistant (SARA) похож на SATAN и Saint. SARA поддерживает многопоточное сканирование, хранит свои данные в базе данных для простого доступа и строит хорошие HTML-отчеты. SARA свободна для использования и доступна с http://home.arc.com/sara.

BASS

BASS is the “Bulk Auditing Security Scanner” позволяет просмотреть internet на предмет известных эксплойтов. Скачать можно с http://www.securityfocus.com/data/tools/network/bass-1.0.7.tar.gz

Firewall-сканеры

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

Firewalk

Firewalk программа, которая использует traceroute стиль пакетов, чтобы просмотреть firewall и пытаться выводить правила этого firewall. Не имеется никакой реальной защиты против этого кроме тихого отрицания пакетов вместо того, чтобы посылать сообщения отклонения. Я советую использовать этот инструмент против Ваших систем, поскольку результаты могут помочь Вам усилить защиту. Firewalk есть на http://www.packetfactory.net/firewalk.

Exploits

Я не буду рассматривать эксплойты специально (их сотни, если не тысячи для Linux). Я только перечислю основные сайты, где их можно найти.

http://www.rootshell.com

Один из главных архивных сайтов эксплойтов, имеет удобный поиск.

Back

Security Portal

Written by Kurt Seifried


Software

RPM

dpkg

tarballs / tgz

Проверка целостности файлов

Автоматическое обновление

Автообновление и RPM

Автообновление и dpkg

Автообновление и tarballs / tgz

Отслеживание установки софта

Преобразование форматов файлов

Поиск софта

Безопасное программирование

Тестирование программ

Патчи компилятора

RPM

RPM утилита для управления софтом, первоначально создана Red Hat, позже опубликована под лицензией GNU ( http://www.rpm.org). Она составляет ядро администрирования на многих системах, решая задачи обновления софта и его установки. Своевременное обновление может быть трудной задачей, поскольку средний сервер 200-400 пакетов, а ведь основная причина взломов серверов старые пакеты.

man-страница для RPM не очень хороша, с другой стороны, есть отличная книга " Maximum RPM" (ISBN: 0-672-31105-4), свободно доступная на http://www.rpm.org в формате post script. Пакеты в rpm-формате именуются по простому соглашению:

package_name-package_version-rpm_build_version-architecture.rpm
nfs-server-2.2beta29-5.i386.rpm

означает пакет “nfs-server”, версии “2.2beta29” пятый билд этого rpm (то есть, он был пересобран с небольшими модификациями 5 раз), для архитектуры Intel architecture и он в формате rpm.

Команды и их назначение
-q Запрос пакета/базы данных для сведений о пакете
-i Установить пакет
-U Обновить или установить пакет
-e Как я понял, удалить пакет из системы
-v Сообщать дополнительные данные
-h Линейка прогресса

Пример команды Действие
rpm -ivh package.rpm
Установит 'package.rpm' с линейкой прогресса и дополнительной информацией
rpm -Uvh package.rpm
Обновит 'package.rpm' с линейкой прогресса и дополнительной информацией
rpm -qf /some/file
Проверит какому пакету принадлежит файл file неизвестного происхождения
rpm -qpi package.rpm
Запросит информацию о пакете 'package.rpm'
rpm -qpl package.rpm
Запросит информацию о пакете 'package.rpm', список всех файлов
rpm -qa
Запросит базу данных RPM на предмет списка всех установленных пакетов
rpm -e package-name
Удалит из системы пакет 'package-name' (как перечислен в выводе команды rpm -qa)

Red Hat Linux 5.1 поставляется с 528 пакетами, а Red Hat Linux 5.2 с 573, это не так много (SuSE 6.0 поставляется на 5 CD, я не считал сколько там пакетов). Обычно Вы будете иметь дел с 2-300 пакетами. RPM-пакеты Red Hat обычно довольно хорошие, требуется 6-12 месяцев на их устаревание.

Список URL и списков рассылки с информацией об ошибках и обновленниях пакетов доступны дальше в этом документе.

dpkg

Debian package system подобна RPM, однако испытывает недостаток по части функциональных возможностей, хотя и делает превосходную работу по управлению пакетами программ в системе. Oбъединив ее с утилитой dselect Вы можете соединяться с удаленными сайтами, просматривать доступные пакеты, устанавливать их, выполнять любые необходимые скрипты конфигурации, все из консоли. man-страница для dpkg "man dpkg" очень подробная.

Основной формат имени файла пакета Debian (.deb):

packagename_packageversion-debversion.deb
ncftp2_2.4.3-2.deb

В отличие от rpm-файлов, .deb-файлы не помечены для конкретной архитектуры, это надо помнить.

Команды и их функции:
-I Запрашивает пакет
-i Устанавливает пакет
-l Список установленных пакетов (аналог rpm -qa)
-r Удаляет пакет

Пример команды Действие
dpkg -i package.deb
Устанавливает package.deb
dpkg -I package.deb
Информация о package.deb (аналог rpm -qpi)
dpkg -c package.deb
Список всех файлов в package.deb (аналог rpm -qpl)
dpkg -l
Показывает все установленные пакеты
dpkg -r package-name
Удаляет пакет 'package-name' (имя соответствует указанному в выводе команды dpkg -l)

Debian имеет 1500+ пакетов, доступных с системой. Вообще-то, dpkg имеет все необходимое для работы, но часто RPM удобнее.

tarballs / tgz

Наиболее современные дистрибутивы Linux используют систему управления пакетами чтобы устанавливать, следить и удалять программное обеспечение. Имеются, однако, много исключительных ситуаций, Slackware не использует систему управления пакетами, но взамен имеет precompiled tarballs (сжатый файл tar, содержащий файлы) который Вы просто распаковываете из корневого каталога, чтобы установить пакет. Некоторые такие пакеты имеют скрипт установки, чтобы выполнить любые задачи установки типа добавления пользователя. Эти пакеты также могут быть удалены, но функции типа запроса относительно файлов пакета, сравнения установленных файлов с файлами пакета и им подобные практически отсутствуют. Иногда Вам придется иметь дело с такими пакетами, даже если система использует менеджер пакетов. Допустим, Вы хотите попробовать последнюю версию X, но никто еще не создал хороший .rpm или .deb файл, так что Вы должны захватить исходный текст (также обычно в сжатом tarball), распаковывать его и установить. Это представляет не большую опасность, чем любой пакет поскольку большинство tarball имеет MD5 и/или PGP сигнатуры, связанные с ними. Так что Вы можете загрузить и проверить пакет. Главная проблема в том, чтобы отслеживать нужные файлы и определять их версии. Например, удалили Вы какой-то пакет, вместе с кучей его библиотек, а система работать перестала. Что такое? А все просто: библиотеки были нужны еще пакетам, которые Вы добавили уже после этого. Так что лучше бы Вам их не использовать, но если очень надо, сделайте перед установкой список файлов системных каталогов, после установки еще один и сравните их, чтобы знать, что куда дописалось. Собственно, менеджеры пакетов часто делают именно это. Запустите 'find /* > /filelist.txt' перед и 'find /* > /filelist2.txt' после установки tarball и используйте 'diff -q /filelist.txt /filelist2.txt > /difflist.txt' для получения перечня изменений. Альтернатива: выполните 'tar -tf blah.tar' чтобы получить список файлов в архиве, но толку от этого может и не быть: большинство tarballs выполняет компиляцию программ и установочные скрипты, так что простой перечень файлов может и не помочь. Другой метод для слежения за тем, что Вы установили через tar состоит в использовании программ типа ‘stow’, stow ставит пакет в отдельный каталог (например, /opt/stow) и создает ссылки из системы на данный каталог. Stow требует Perl и доступен на http://www.gnu.ai.mit.edu/software/stow/stow.html.

Команда Действие
tar -tf filename.tar
Перечисляет имена файлов в filename.tar
tar -xf filename.tar
Распаковывает файлы из filename.tar

 

Проверка целостности файлов

Обычно скачав пакет Вы его ставите. Но недавно ftp.win.tue.nl был вскрыт, и пакет TCP_WRAPPERS (и не он один) был заменен трояном. Прежде чем это заметили, пакет скачали 59 раз. Так что обязательно проверяйте целостность свежескачанного пакета до его установки.

RPM integrity

RPM-пакеты могут иметь (и обычно имеют) PGP-подпись автора. Она может быть проверена, и в случае несовпадения, пакет, скорее всего, троянский. Это подробно описано в главе 7 в “Maximum RPM” (online-версия на http://www.rpm.org), проверка состоит из добавления ключей разработчиков к общему PGP-брелку, и затем использования опции -K, которая захватит соответствующий ключ и проверит сигнатуру.

dpkg integrity

dpkg поддерживает MD5. MD5 входит во многие дистрибутивы.

Файлы PGP-signed

Многие tarballs распространяются с PGP-сигнатурами в отдельных ASCII-файлах, для их проверки добавьте ключ разработчиков к Вашему брелку и используйте PGP с опцией -o. PGP для Linux доступен на ftp://ftp.zedz.net.

Файлы GnuPG-signed

Также используется GnuPG, полностью открытая исходная версия PGP, которая не использует никаких патентованных алгоритмов. Вы можете скачать ее с http://www.gnupg.org.

Файлы MD5-signed

Другой путь проверки пакета состоит в том, чтобы создать MD5 контрольную сумму. Проблема в том, что как-то надо получить надежные данные о контрольной сумме. Обычно это делается по email после анонсирования павкета.

Автоматическое обновление

NSBD

NSBD (not-so-bad-distribution) метод автоматического безопасного распространения и обновления пакетов по сети. Скачать можно с http://www.bell-labs.com/project/nsbd.

Автообновление и RPM

AutoRPM

AutoRPM вероятно самый лучший инструмент для обновления rpm. Вам надо просто указать каталог ftp, после чего будут скачаны и установлены пакеты, которые являются более новыми чем те, которые Вы имеете. Пожалуйста имейте в виду что если кто-то отравляет Ваш кэш DNS, Вы легко попадете в неприятную историю, так что удостоверьтесь, что используете IP-адрес ftp-сайта, а не имя. AutoRPM требует установки пакета libnet Net::FTP для Perl и доступен на http://www.kaybee.org/~kirk/html/linux.html.

Rhlupdate

Rhlupdate также соединяется с ftp-сайтом и захватывает любые необходимые модификации, те же самые проблемы, что и в предыдущем случае, имеются и с ним. Также требуется, чтобы Вы установили пакет libnet Net::FTP для Perl. Скачать можно с ftp://missinglink.darkorb.net/pub/rhlupdate.

RpmWatch

RpmWatch простой Perl-скрипт, который установит модификации. Обратите внимание, что пакеты должны быть доступны локально, хотя бы через NFS или CODA. RpmWatch лежит на http://www.iaehv.nl/users/grimaldo/info/scripts.

Автообновление и dpkg

Менеджер пакетов Debian (dpkg и apt-get) поддерживает автообновление пакетов и всех их зависимостей с ftp-сервера. Просто создайте скрипт, который будет ежедневно вызываться из cron:

#!/bin/bash
PATH=/usr/bin
apt-get update
apt-get upgrade

Единственная дополнительная вещь, которую Вы будете должны сделать, выбрать конфигурацию места загрузки в списке /etc/apt/sources.list и общую настройку apt в /etc/apt/apt.conf, скачать все это можно с http://www.debian.org/Packages/stable/admin/apt.html.

Автообновление и tarballs/tgz

Я не знаю никаких утилит, так что если знаете, сообщите мне (утилита должна хотя бы зеркалировать, автоматически распаковывать и выполнять “./configure; make; make install”).

Отслеживание установки софта

Если программа установлена путем компиляции исходников, а не из пакета, удалить ее бывает мягко говоря затруднительно.

installwatch

installwatch контролируют все, что делает программа, и регистрирует любые изменения, которые она делает в системе, через syslog. Вы выполняете программу например как “installwatch /usr/src/something/make” (опционально можно задать “–o filename” для записи протокола в специальный файл filename). installwatch доступна на http://datanord.datanord.it/~pdemauro/installwatch.

instmon

instmon запускается до и после установки пакетов tarball/tgz. Он создает список измененных файлов, который можно потом использовать для отмены изменений. Доступен на: http://hal.csd.auth.gr/~vvas/instmon.

Преобразование форматов файлов

Другой способ иметь дело с пакетами: преобразовывать их. Имеется несколько утилит, чтобы преобразовать rpm-файлы в tarballs, rpm в deb и тому подобное.

alien

alien возможно лучшая утилитав для конвертации файлов. Поддерживает rpm, deb и tarball. Скачать можно с http://kitenet.net/programs/alien .

slurp

slurp ведет себя подобно installwatch, но имеет и возможности alien. Он отслеживает систему при установке пакетов и создает из него rpm-пакет. Вы можете скачать slurp с http://students.vassar.edu/~jajohnst/slurp.

Поиск софта

Проблема с Linux возникает при поиске софта, не поставляемого в дистрибутиве. Поиск через Internet особыми прелестями не отличается. Но есть несколько приятных ресурсов:

Безопасное программирование

Основной проблемой защиты в Linux является то, что программы либо написаны с дырами, либо опасно поставлены. Большинство дыр (в том числе наиболее популярная buffer overruns) вызваны именно этим. Проблемы становятся еще заметней, когда программа выполняется через механизм etuid как root. Есть ряд приемов, которые позволяют программисту избежать проблем.

Secure Linux Programming FAQ

Эта энциклопедия описывает много приемов безопасного программирования вообще, и специфики Linux в частности. Скачать можно с http://www.dwheeler.com/secure-programs.

Secure UNIX Programming FAQ

Этот документ освещает вопросы безопасного программирования, в том числе ряд низкоуровневых моментов: inherited trust, sharing credentials и подобное. Документ доступен на http://www.whitefang.com/sup и я очень рекомендую почитать его всем, кто собирается что-то писать для Linux (или UNIX вообще).

Secure Internet Programming

Secure Internet Programming (SIP) лаборатория (из-за отсутствия лучшего слова) которая изучает компьютерную защиту, и более определенно проблемы с подвижным кодом типа Java и ActiveX. Они имеют ряд интересных проектов и много интерактивных публикаций, которые дают превосходное чтение. Если Вы собираетесь программировать на Java, посетите их сайт: http://www.cs.princeton.edu/sip.

Writing Safe Setuid Programs

Writing Safe Setuid Programs чрезвычайно всесторонняя работа, которая охватывает почти все и доступна в формате HTML для простого чтения. Должна быть изучена любым, кто использует setuid-программы, уже не говоря о тех, кто их пишет. Доступно на http://olympus.cs.ucdavis.edu/~bishop/secprog.html.

userv

userv позволяет программам вызывать другие программы более безопасным способом, чем обычно. Это полезно для программ, которые требуют уровней доступа выше, чем нормальный пользователь, но Вы не хотите давать им root-доступ. Доступно на http://www.chiark.greenend.org.uk/~ian/userv.

Тестирование программ

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

fuzz

Написан Ben Woodward, fuzz частично интеллектуальная программа, которая дает совершенно неожиданные исходные данные и смотрит на реакцию программы (то есть, не свалится ли она?). fuzz доступен на http://fuzz.sourceforge.net.

Патчи компилятора

Есть несколько патчей компилятора для повышения безопасности.

Stackguard

Stackguard представляет собой набор патчей для GCC, которые компилируют программы так, чтобы предотвратить их от записи в те места памяти, куда они не должны ничего записывать (это простое объяснение, web-сайт Stackguard имеет кудабольше деталей). Stackguard разрывает некоторые функциональные возможности: программы подобные gdb и другие отладчики будут терпеть неудачу, но это не имеет значения для отлаженных программ. Скачать Stackguard можно с http://www.immunix.org.

Stack Shield 

Stack Shield альтернативный метод защиты Linux от переполнения буфера, но я его не пробовал. Скачать можно с http://www.angelfire.com/sk/stackshield.

Back

Security Portal

Written by Kurt Seifried