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: что надо сделать
Есть коммерческий протокол разделения файлов по сети для больших инсталляций с высокой защитой и требованиями к эффективности. FAQ доступно на: http://www.angelfire.com/hi/plutonic/afs-faq.html. Свободная клиентская реализация AFS для ряда систем (включая Linux, конечно) доступна на: http://www.stacken.kth.se/projekt/arla/.
![]() Written by Kurt Seifried |
Приложение C: Прочие сведения по безопасности в Linux
Приложение D: Интерактивная документация по безопасности
Приложение E: Основные сайты по security
Приложение F: Основные сайты по Linux
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
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
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 FAQs? We got FAQs!)
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
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
Linux.com
http://www.linux.com
Linux.org
http://www.linux.org
Linux Administration Made Easy (LAME)
http://www.LinuxNinja.com/linux-admin/
![]() Written by Kurt Seifried |
Сетевой мониторинг и выявление атак
Выявление перехватчиков пакетов
Главная оплошность большинства людей при обеспечении безопасности их машин в том, что они забывают создать опорную линию системы, которая является профилем системы, схемой использования ресурсов и т.п. в нормальной работе. Например, простой "netstat -a -n > netstat-output" может дать Вам много полезной информации (в частности о всех открытых портах, которые может быть стоит закрыть). Использование памяти и диска также полезно для изучения системы. Внезапное колебание в использовании памяти может кончиться нехваткой ресурсов в системе. Для отслеживания использования памяти и диска есть несколько команд: vmstat, free, df, du, все они подробно описаны на их man-страницах.
Как минимум, резервируйте систему и все файлы протоколов, что поможет выявить что же происходит. Не забывайте, что совсем не факт, что система атакована! Часто причиной может оказаться какая-нибудь новая программа, которая ничего плохого не делает. Также ведите журнал важных событий в системе (пользователь "rewt" был добавлен в резервной копии от 4 апреля, так что его наличие в копии от 20 марта выглядит странно). Если систему все-таки кто-то вскрыл, в ней обычно стоит "rootkit", содержащий в себе троян или целый выводок троянов. Удалить их часто бывает почти невозможно, не развалив при этом систему целиком. Так что в ряде случаев проще отформатировать диск и установить все заново. Правда, если Вы используете инструментальные средства контроля целостности файла/каталога вроде L5, Вы будете способны точно определить измененные файлы и иметь дело только с ними.
Имеется также ряд инструментальных средств, которые не входят ни в одну из рассматриваемых в данном разделе категорий, но нацелены на обнаружение и отражение нападения. Одно из них, проект Linux Intrusion Detection System (LIDS).
Допустим, Вы воздвигли вокруг своей системы настоящий бастион. Да, в ней стало почти невозможно работать, но зато она стала защищенной... Теперь главное не успокаиваться на достигнутом. Проверяйте защиту, ищите дыры, затывайте их. Попробуйте сами взломать защиту такой ход покажет, что именно надо укрепить. Если не получилось радуйтесь: система надежна. Но не радуйтесь долго: если будете купаться в лучах славы, расслабитесь, а мы... скажем так, специалисты по компьютерной безопасности, только того и ждем... Если дыра нашлась, она представляет собой хороший случай показать начальству, что защита системы, это постоянный поединок, обезопасить систему раз и навсегда невозможно. Прислушивайтесь к замечаниями пользователей, они часто сообщат Вам такое, что и в голову бы Вам не пришло: их много, а Вы один. Создайте сигнатуры файлов, которые нельзя подделать, и регулярно проверяйте целостность файлов системы.
Tripwire больше не имеет открытого кода. Я никогда не имел проблем с коммерческим программным обеспечением. Однако, когда Вы ожидаете хорошей защиты, отсутствие возможности посмотреть исходники, весьма беспокоит. Tripwire стоит примерно $70 для Linux и доступен только как пакет RPM, нацеленный на Red Hat Linux (tripwire стоит около $500 для других ОС). Альтернативой является несколько пакетов, например L5 или Gog&Magog. Tripwire доступен на http://www.tripwiresecurity.com.
AIDE замена tripwire, которая пытается быть лучше самого tripwire. GPL делает данный пакет более привлекательным с точки зрения доверия. Он поддерживает несколько алгоритмов хеширования, и Вы можете загрузить его с http://www.cs.tut.fi/~rammer/aide.html.
Еще одна альтернатива пакету tripwire, L5 доступен на ftp://avian.org/src/hacks, полностью свободно и очень эффективно. Я определенно рекомендовал бы этот инструмент.
Gog&Magog создает список свойств системного файла, владельца, разрешений, MD5-сигнатуру файла (подобно tripwire). Вы можете затем автоматически сравнивать данные с текущими, что гарантирует то, что любое измененение регистрируется быстро. Также, становится просто восстановить систему, поскольку вы будете знать, какие файлы были изменены. Вы можете скачать Gog&Magog с http://www.multimania.com/cparisel/gog.
Sentinel сканирует жесткий диск и создает контрольные суммы файлов для которых Вы их запрашиваете. Это использует не патентованный алгоритм (RIPEMD-160bit MAC ), и имеет факультативный графический внешний интерфейс (nice). Доступно на: http://zurk.netpedia.net/zfile.html.
SuSEauditdisk представляет собой загрузочный диск с системой проверки целостности. Он поставляется в поставке SuSE и может быть легко перенесен на другие дистрибутивы Linux. Доступен по GPL и может быть загружен с http://www.suse.de/~marc.
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 проверяет setuid и setgid на предмет измения, строит MD5-сигнатуры файлов и вообще позволяет Вам прослеживать любые сделанные изменения. Вы можете скачать его с ftp://marcus.seva.net/pub/sxid.
nannie относительно просто инструмент, который полагается на stat, чтобы сформировать список файлов (размер, timestamps и прочее). Он создает список, содержащий имя файла, inode, информацию о его связях и так далее. Загрузить пакет можно с ftp://tools.tradeservices.com/pub/nannie.
confcollect простой скрипт для сбора системной информации, например, таблиц роутинга, установленных пакетов rpm и прочего в таком духе. Загрузить его можно с http://www.skagelund.com/confcollect.
Pikt чрезвычайно интересный инструмент, это фактически язык скриптов для администрирования системы. Pikt позволяет Вам делать многое: уничтожать неактивные процессы пользователя, устанавливать квоты почты, контролировать систему на предмет подозрительных действий и многое другое. Единственной проблемы с Pikt будет трудность изучения, поскольку он использует собственный язык создания скриптов, но в конечном счете я думаю этот язык того стиот, особенно если Вы имеете много систем (тем более, что Pikt сейчас работает на Solaris, Linux и FreeBSD). Pikt доступен на http://pikt.uchicago.edu/pikt.
Многое забывается, но Вы можете сравнивать текущие файлы с их резервными копиями. Поддерживается много носителей (ленты, дискеты, CD-R...). Носитель может быть сделан доступным только для чтения, так что копия недавно установленной системы обеспечивает хороший эталонный тест. Утилиты diff и cmp могут использоваться, чтобы сравнить файлы друг с другом. См. в разделе Резервирование список программного обеспечения.
Самый надежный способ защититься от сетевых атак: открывать порты и запускать сервисы только при необходимости (уж сколько было проникновений через игры типа MUD...), своевременно обновлять программы и защитить все, что только можно firewallом.
К счастью в Linux эти инструментальные средства свободны и легко доступны, я буду рассматривать opensource инструментальные средства, так как идея относительно firewall с закрытыми исходниками довольно подозрительна. Первая линия защиты должна быть хорошим firewall, сопровождаемого фильтрами пакета на всех Internet-машинах, либеральное использование TCP-WRAPPERS, подробная регистрация событий и автоматический анализ протоколов.
Deception ToolKit представляет из себя набор программ, которые подражают известным услугам, чтобы обеспечить неправильные данные нападавшим. Есть надежда, что они должны запутаться и замедлиться за счет неправильных заключений, Вы можете скачать DTK с http://all.net/dtk.
Третий компонент набора Abacus, обнаруживает и регистрирует сканирование портов, включая тайные сканирования, может быть конфигурирован, чтобы блокировать машину с которой пришли запросы. Поскольку этот инструмент находится в состоянии тестирования, пока лучше воздержаться от его применения, но со временем... Psionic PortSentry доступен на http://www.psionic.com/abacus/portsentry.
Поскольку это программное обеспечение еще не готово для массового потребления, я упоминаю его только как часть большого проекта (проект Abacus, http://www.psionic.com/abacus). В основном Psionic HostSentry формируетпрофили доступа пользователей и затем сравнивает их с текущими действиями, чтобы пометить любое подозрительное действие. Psionic HostSentry доступен на http://www.psionic.com/abacus/hostsentry.
Большинство щитов (firewall) ведут протоколы, и ipfwadm/ipchains не исключение, с параметром -l Вы получите syslog-записи по каждому пакету, используя автоматизированные фильтры (perl хорош для этого) Вы можете обнаружить попытки атаки.
Wietse's TCP-WRAPPERS позволяют Вам ограничивать подключения к различным сервисам на основании IP-адреса и другой информации, но что даже более важно, так это то, что такая система позволяет Вам конфигурировать ответ. TCP_WRAPPERS входят во многие дистрибутивы, а вообще-то их можно скачать с ftp://ftp.porcupine.org/pub/security.
В дополнение к TCP-WRAPPERS и протоколам firewall, klaxon может быть полезен в борьбе со сканированием портов, если Вы не хотите полностью блокировать машину. Klaxon доступен на ftp://ftp.eng.auburn.edu/pub/doug.
NFR (Network Flight Recorder) намного больше, чем перехватчик пакетов. Он фактически регистрирует данные, и в реальном времени обнаруживает нападения, сканирования и тому подобные мерзости. Это очень мощный инструмент и требует значительного времени и ресурсов системы, но того стоит. NFR доступен на http://www.nfr.com.
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.
Самый первый перехватчик пакетов для Linux, этот инструмент существовал сколько я помню, и использовался для отладки сетевых проблем. Большинство дистрибутивов его имеет в своем составе. Недостатки, а их немало, учтены в более новых перехватчиках, но иногда tcpdump может быть полезен.
Мой любимый перехватчик, sniffit, имеет хорошие возможности фильтрации, преобразует полезные грузы данных в ASCII текст для простого чтения (подобно telnet-сеансам), и даже имеет графический режим (хорош для текущего контроля действий/подключений). Sniffit доступен на http://sniffit.rug.ac.be/~coder/sniffit/sniffit.html.
Хороший анализатор протокола сети с интерфейсом, подобным сетевому монитору NT. Позволяет простой просмотр полезных грузов данных для большинства сетевых протоколов (tftp, http, Netbios...). Основан на GTK, таким образом, для работы с ним, вероятно, понадобится пакет gnome. Доступен для скачивания на http://ethereal.zing.org .
Snort хороший пакет, который может использоваться, чтобы обнаружить различные нападения. Он может наблюдать за действиями типа Queso TCP-IP fingerprinting scans, Nmap scans и подобными. Snort доступен на http://www.clark.net/~roesch/security.html.
SPY продвинутый многопротокольный перехватчик, который работает на различных платформах. Это не свободная программа, однако имеется одиночная лицензия, доступная для некоммерческого использования с максимумом в 5 серверов. Коммерческая версия стоит около $6000 US, но вроде бы того стоит, поскольку качество программы великолепное. Доступен на http://pweb.uunet.de/trillian.of/Spy.
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 инструмент, который исследует сетевые устройства, чтобы увидеть, работают ли они в ином режиме, чем нормальный режим работы. Это, возможно, эффективно, и будет работать против большинства перехватчиков. Скачать можно с http://www.l0pht.com/antisniff.
![]() Written by Kurt Seifried |
Имеется ряд методов совместно использовать регистрационные данные. С ростом популярности сетей, пользователи уходят далеко за пределы своей LAN, так что данная задача становится все более общей.
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, и OReilly имеет превосходную книгу по предмету, "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 (подобно использованию маркеров в 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 часто используемый протокол, чтобы опознать заходящих по модему пользователей, и другие типы сетевого доступа.
ftp://ftp.cheapnet.net/pub/icradius
http://www.livingston.com/tech/docs/radius
ftp://ftp.livingston.com/pub/le/radius
http://www.mindrot.org/code/radiusd-sql.php3
http://www.iinet.net.au/~michael/radius.html
http://www.miquels.cistron.nl/radius
![]() Written by Kurt Seifried |
"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 (см. ниже таблицу PAMified-систем). Таким образом на системе с 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, которые здесь не перечислены, пожалуйста, сообщите мне о них.
http://www.jdimedia.nl/igmar/pam
http://www.linuxnet.com/applications/applications.html
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-скрипт), файл пароля может быть отыскан нападавшими. Большинство программ выскрывания паролей позволяет работать параллельно на многих машинах, что ускрояет задачу.
Эффективный cracker (открывашка) для паролей доступен на http://www.false.com/security/john.
Первоначальный широко распространенный вскрыватель (насколько я знаю), доступен на http://www.users.dircon.co.uk/~crypto.
VCU (Velocity Cracking Utilities) программа, основанная на windows, для вскрытия паролей. VCU пытается делать раскалывание паролей простой задачей для компьютерных пользователей любого уровня опыта (за что ей большое спасибо от системных администраторов). Загрузить можно с http://wilter.com/wf/vcu.
Я надеюсь, что это достаточное побуждение, чтобы использовать теневые пароли и более сильное шифрование подобно MD5 (которое поддерживает Red Hat 6.0).
Как надежно Вы храните пароли? Наиболее очевидный метод состоит в том, чтобы запомнить их, это однако имеет тот недостаток что, если Вы управляете 30 различными местами, Вы захотите иметь 30 различных паролей, а хороший пароль (8 символов в длину) не самая простая вещь, чтобы запомнить. Это ведет к тому, что многие люди используют те же самые пароли на нескольких системах. Лучшая идея: сохранить пароли в шифрованном формате, обычно с помощью электроники на Вашем компьютере. Вы должны помнить только один пароль, чтобы отпереть остальные, которые Вы можете затем использовать. Чтобы выполнить это может использоваться PGP или GnuPG.
Gpasman прикладная программа, которая требует GTK (относительно легко установить на не Gnome-систему, поставьте только библиотеки GTK). Она шифрует пароли, используя алгоритм rc2. После запуска программы Вы напечатаете Ваш главный пароль и будете обеспечены хорошим списком Ваших логинов, сайтов, паролей и полей для комментария. Gpasman доступен на http://gpasman.nl.linux.org.
Strip программа для карманного недокомпьютера palm pilot. Хрнаит пароли надежно и может также использоваться, чтобы генерировать пароли. Доступна по лицензии GNU с http://www.zetetic.net/products.html.
![]() Written by Kurt Seifried |
Некоммерческие программы резервирования для Linux
Коммерческие программы резервирования для Linux
Всегда резервируйте вашу систему, даже если это только файлы конфигурации, Вы сохраните себе время и деньги в конечном счете. Причины исчезновения файлов могут быть самыми разными: сбой диска, безграмотное пользование командами типа 'delete', хакер, проникший в систему...
Чтобы резервировать данные под Linux имеется много решений, все с различными плюсами и минусами.
Старые добрые 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 не шифрует данные при передаче, но можно использовать IPSec, если нужно. rsync подробно описан ниже.
Amanda клиент-серверный пакет для резервирования с поддержкой многих возможностей и Windows (через SAMBA). Amanda распространяется по BSD-style лицензии и доступна на http://www.amanda.org.
Afbackup еще один клиент-серверный пакет, распространяется по GPL с одной оговоркой: разработка сервера под Windows запрещена. Afbackup имеет серверы под Linux, HP-UX и Solaris, а также клиенты под данные системы и windows. Скачать можно с ftp://ftp.zn-gmbh.com/pub/linux.
Burt основан на Tcl/Tk, предназначен для простого копирования рабочих станций под Unix, работает везде и на всем. Burt имеет архитектуру клиент-сервер и является довольно легко масштабируемым. Доступен на http://www.cs.wisc.edu/~jmelski/burt.
BRU (Backup and Restore Utility) предоставляет относительно полный набор инструментальных средств в хорошем объединенном формате, с командной строкой и внешним графическим интерфейсом. Это средство поддерживает полные, инкрементные и дифференциальные копии и может писать данные в файл или на ленту. BRU доступно на http://www.estinc.com/features.html.
Quickstart больше нацелен на изготовление образа системы так, чтобы когда жесткий диск накроется, Вы могли бы быстро заполнить пустой диск и получить рабочую систему. Это может также использоваться, чтобы размножить одну систему на несколько машин. Программа получила неплохой отзыв в Linux Journal (Nov 1998, page 50). Получить можно с http://www.estinc.com/qsdr.html.
http://www.unitrends.com/bp.html
http://www.unitrends.com/ctar.html
http://www.unitrends.com/ctarnet.html
http://www.unitrends.com/pcpara.html
Arkeia очень мощная резервная программа с архитектурой клиент-сервер и поддержкой многих платформ. Ориентирована на крупные системы и рассмотрена в Linux Journal (April 1999, page 38). Загрузить shareware-версию можно с http://www.arkeia.com.
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 поддерживает почти все дистрибутивы 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... |
![]() Written by Kurt Seifried |
Bastille Linux представляет собой укрепляющий скрипт для Red Hat Linux. Вы можете найти подробности о нем на: http://www.bastille-linux.org/, и загрузить с: ftp://ftp.bastille-linux.org/.
![]() Written by Kurt Seifried |
Caldera имеет графическую программу установку для 2.2, названную lizard, с рядом хороших свойств. В течение установки Вам придется создать пользователя, что позволяет не входить постоянно как root. Также имеется запись для sulogin в файле /etc/inittab, так что нельзя просто ввести на приглашение lilo: linux single, чтобы попасть в систему как root, Вы должны сначала ввести root-пароль. Имеются несколько проблем с заданной по умолчанию установкой, которую Вы должны исправить.
Файл /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 командой killall1 inetd.
Один сервис, который часто надо закрыть, 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
Еще одни сервис, установленный по умолчанию в 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 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.
Обновления для Caldera OpenLinux 2.2 доступны на: ftp://ftp.calderasystems.com/pub/openlinux/2.2/current/RPMS.
![]() Written by Kurt Seifried |
Сертификаты становятся все более популярными и, если Вы имеете свой сервер сертификатов, могут сэкономить много времени и денег. Имеются другие проекты, где было бы хорошо иметь сертификаты, но коммерческие версии дороги, а вариант OpenSource очень привлекателен.
Проект создания всестороннего набора инструментальных средств для сертификации, совместимой с сертификатами X.509. Доступен по адресу: http://www.openca.org/.
pyCA совокупность программных скриптов, написанных на python для установки авторизации сертификатов. Загрузить можно с: http://sites.inka.de/ms/python/pyca/.
![]() Written by Kurt Seifried |
Контрольный список Internet
![]() Written by Kurt Seifried |
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
![]() Written by Kurt Seifried |
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
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
http://www.moretonbay.com/dhcpd
![]() Written by Kurt Seifried |
DNS чрезвычайно важный сервис для IP сетей. Однако, данные на сервере DNS могут оказаться ложными. Сейчас все идет к цифровой подписи таких данных, что будет подтверждать их подлинность (метод базируется на цифровой подписи RSA).
Большинство дистрибутивов включают 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 представляет собой DNS-сервер, доступный по GPL, в настоящее время находится на тестировании (release 0.0.3). Dents написан с нуля с поддержкой SQL backends, интеграции с SNMP и использует CORBA для своих задач. В целом это должно создать хорошую конкуренцию Bind. Dents доступен на http://www.dents.org.
![]() Written by Kurt Seifried |
Улучшение безопасности 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
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 агент передачи почты (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 с поддержкой. Доступен на http://www.sendmail.com. Я так и не смог получить демонстрашку или найти того, кто получил, так что не могу сказать, какая тут разница. Но компания сообщила мне, что он использует то же самое ядро кода.
Qmail (аналог postfix) был создан как прямой ответ для устранения дефектов Sendmail. Qmail распространяется по GPL, но только в исходниках, так что Вам придется их компилировать. Вы должны также получить разрешение авторов прежде, чем Вы сделаете и распространите любые изменения (ничего хорошего, но таковы жизнь и авторы...). Очень небольшой код в Qmail выполняется как root, , и это очень модульно сравнено с Sendmail (который является довольно монолитным куском кода). Вы можете загрузить исходники с http://www.qmail.org.
Zmailer представляет собой GPL mailer, доступный на http://www.zmailer.org. Он поддерживает обработку crypto и вообще хорошо написан.
DMail коммерческий почтовый сервер, открытых исходников не имеет. Пробная версия доступна на http://netwinsite.com/dmail_first.htm.
nullmailer посылает почту интеллектуальным хостам (relays), так что локальная машина не должна выполнять программное обеспечение сервера. Доступен на http://em.ca/~bruceg/nullmailer.
MasqMail собирает письма в автономном режиме, а потом быстро обменивается почтой при связи с ISP. Может быть настроен на несколько ISP с адресом возврата и тому подобным. Загрузить можно с http://merlin.uni-sw.gwdg.de/~okurth/masqmail.
POP (post Office Protocol) является относительно простым протоколом, который позволяет Вам получать почту с сервера и удалять ее. Основные команды: USER, PASS (используется для регистрации), LIST (для получения списка писем и их размеров), RETR (для получения почты) и DELE (для удаления почты).
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 является сервером 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 (It Doesnt Suck) POP облегченный вариант popd для небольших систем. Доступен по GPL на http://www.nodomainname.net/software/ids-pop.
Маленький и шустрый pop daemon, доступен по GNU на http://www.nodomainname.net/software/gnu-pop3d.shtml.
Qpopper freeware-продукт Qualcomm (разработчика пакета Eudora). Я его не рекомендую (исходники можно скачать с ftp://ftp.qualcomm.com/eudora/servers/unix/popper/). Доступен на http://eudora.qualcomm.com/freeware/qpop.html.
IMAP существенно более продвинутый протокол. Он позволяет не только получать почту с сервера, но и управлять ей на сервере (создавать папки для хранения почты на сервере, например). Возможна работа с несколькими почтовыми ящиками, несколько пользователей могут разделять почтовый ящик, можно сначала загружать только заголовки писем для их анализа.
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 является сервером 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 легкий сервер IMAP определенно для использования с почтовыми ящиками стиля Maildir (не /var/spool/mail). Скачать можно с http://www.inter7.com/courierimap.
Linux нечувствительна к вирусам, но они могут доставить МНОГО проблем на Windows-клиентах.
AMaViS использует программы третьих фирм (например, McAfee) для проверки на вирусы входящей почты. Получить AMaViS можно на http://aachalon.de/AMaViS. Обязательно берите последнюю версию!
Использование AMAVIS с Sendmail относительно просто, он имеет программу, названную "scanmail", который действует как замена для procmail (обычно программа, которая обрабатывает локальную доставку email). Когда email приходит вместо того, чтобы использовать procmail, чтобы доставить почту, Sendmail вызывает scanmail, который распаковывает и декодирует любые вложения и затем использует вирусный сканер (по Вашему выбору), чтобы просмотреть вложения. Если никакой вирус не найден, то доставка почты идет как обычно. Если вирус найден, email послан назад отправителю с сообщением, что они послали вирус, и будет послан email получателю, сообщающий о человеке, который послал им вирус. Инструкции смотрите на http://satan.oih.rwth-aachen.de/AMaViS/amavis.html.
Так как Postfix может использовать procmail, чтобы делать локальную доставку почты, это должно работать в теории без проблем. Практически требуется приложить несколько больше усилий, чтобы работать правильно. Замените строку в файле main.cf:
mailbox_command = /usr/bin/procmail
на строку:
mailbox_command = /usr/sbin/scanmails
и перезапустите postfix. Для локального предупреждения (предполагаемому адресату вируса) имя машины (sundog, mailserver01) должно быть упомянуто в mydestination в файле main.cf, иначе предупреждение не будет послано вовсе. Вы должны (и большинство сайтов так делают) переназначить root email на пользователя использующего файл псевдонимов, иначе предупреждения не будут доходить до него. По умолчанию также почта к virusalert перенаправлена к root, Вы должны также переназначить эту почту нормальному пользователю.
procmail (по умолчанию обычный локальный транспортный агент для почты) имеет широкое разнообразие свойств, которые могут использоваться, чтобы помочь обезопасить почту. Подробности ищите на ftp://ftp.rubyriver.com/pub/jhardin/antispam/procmail-security.html.
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
http://www.greatcircle.com/majordomo
http://www.nodomainname.net/software/minordomo
![]() Written by Kurt Seifried |
Имеется много программ для шифрования. Часть работает на уровне файла (PGP, GnuPG), часть на уровне устройства (Cryptographic File System). Это используется в основном для хранения данных. Передача сопряжена с рядом проблем: одинаковые программы, совместимые версии программ и обмен ключами по защищенному каналу, что сложно. Системы дисковой защиты наподобие CFS (Cryptographic FileSystem) просты в использовании и требуют только чтобы пользователь ввел определенный ключ для доступа к файлам. Хорошая статья о выборе размеров ключа есть на http://www.cryptosavvy.com, рекомендую ознакомиться, так как там рассмотрен ряд несколько неожиданных проблем.
Это одна из популярнейших программ для публичного шифрования. Она перенесена на Unix, Windows и Macintosh. К сожалению, это теперь коммерциализировано, что закончилось потерей качества для пользователей. Я лично полагаю, что любое программное обеспечение используемое, чтобы шифровать или иначе защищать данные ДОЛЖНО иметь открытые исходные коды (а как еще Вы убедитесь что это безопасно?). PGP сейчас продан Network Associates и я не могу его честно рекомендовать. PGP можно скачать с ftp://ftp.zedz.net, http://www.pgp.com и с http://www.pgpi.org.
Альтернатива PGP, GnuPG (GPG) с полностью открытым исходным кодом и GNU licensed. Доступна на http://www.gnupg.org , в исходниках и откомпилированных модулях для windows и RPM. Моя статья о GnuPG есть на http://www.securityportal.com/closet/closet19990922.html.
pgp4pine PGP-shell для pine, позаоляет легко работать с PGP/GnuPG из pine. Скачать можно с http://www.rhrk.uni-kl.de/~lamm/pgp4pine.
HardEncrypt генератор записей времени и набор утилит для работы с ними. В теории каждая такая запись практически непробиваема. Идеален для передачи важных данных. Скачать HardEncrypt можно с http://www.csuglab.cornell.edu/Info/People/jcr13/HardenedCriminal/main.html .
secret-share позволяет Вам разрывать файл на так много кусков, на сколько Вы посчитаете нужным. Все части шифруются и необходимы для прочтения файла. Скачать можно с http://www.mindrot.org/code/secret-share.php3.
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 представляет собой утилиту уровня ядра для шифрования данных, похожую на CFS. Поскольку реализована она на уровне ядра, работает куда быстрее. Благодаря интеграции с NFS Вы можете распространять зашифрованные данные за пределами локальной машины. Дешифровка производится на машине клиента, что позволяет передавать по сети пароли и прочуб критичную информацию. Скачать TCFS можно с http://tcfs.dia.unisa.it.
PPDD позволяет создать зашифрованный раздел на диске. Это может быть настоящий раздел или loopback device (который расположен в файле, но монтируется как файловая система). Он использует довольно хороший и быстрый алгоритм. Скачать PPDD можно с http://linux01.gwdg.de/~alatham.
Encrypted Home Directory похож на CFS, но ориентирован на шифрование одиночного каталога. Обычно он создает файл размера X в /crypt с Вашим UID и монтирует его как loopback device, чтобы Вы могли к нему обратиться. Данные шифруются и дешифруются на лету по мере доступа к ним (аналогично CFS). Скачать можно с http://members.home.net/id-est.
BestCrypt коммерческий продукт с исходниками доступными для Windows и Linux. Скачать можно с http://www.jetico.com .
В основном 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 можно с http://www.stego.com.
Steganographic File System фактически скрывает данные на диске, делая трудным доказательство того, что они вообще есть. Это может быть очень полезно, поскольку нападавший сначала должен найти данные, уже не говоря о том, что они зашифрованы. Скачать StegFS можно с http://ban.joh.cam.ac.uk/~adm36/StegFS.
OutGuess прячет данные в файлах картинок, так что файлы можно передавать не привлекая к ним лишнего внимания. Скачать можно с http://www.outguess.org.
![]() Written by Kurt Seifried |
Совместное исппользование файлов в UNIX
Разделение файлов и печать в Windows
Samba
Общие методы совместного использования файлов
Имеется много способов совместно использовать ресурсы в локальной сети (LAN). Основонй интерес редставляет то, что клиенты работают под чем угодно: (UNIX, Windows, MAC, Novell...). Вы также должны принять во внимание тип файлов, которые Вы используете совместно: они просто файлы данных, документы, исходные тексты, файлы для сетевой загрузки или еще что-то?
tftp используется всем от X терминалов до маршрутизаторов Cisco при загрузке, чтобы получить их начальные файлы начальной загрузки и данные конфигурации.
NFS наиболее универсальный метод разделения файлов, вообще поддерживаемый UNIX. Почти каждая UNIX OS (Linux, *BSD, Sun...) поддерживает NFS. Есть коммерческие клиенты и серверы NFS для Windows. NFS идеален для разделения каталогов пользователей и других файловых систем реального времени.
rsync идеальный метод для синхронизирования больших количеств данных, которые не критические ко времени (то есть, для ftp зеркального отражения сайтов). Это средство использует чрезвычайно эффективный алгоритм, чтобы найти файлы, которые являются более новыми, и затем копирует их, а также имеет несколько хороших свойств защиты.
Имеется ряд демонов печати (print daemons) для Linux, но они подражают lpd (оригиналу).
lpd старый демон печати строк (когда все, что Вы печатали, было текстом), который учитывает совместное использование принтеров.
Common UNIX Printing System (CUPS) доступен по лицензии GPL и только что появился (версия 1.0). CUPS можно скаччать с http://www.cups.org.
Новое поколение LPR, вариант LPR.
SMB (server message block) текущий протокол совместного использования файлов в windows. Samba делает невероятную работу для обеспечения всех услуг, требуемых, чтобы правильно совместно использовать файлы windows (например, поддерживает сервисы Primary и Backup Domain Controller). Вы также можете предоставить windows-доступ к принтерам через Samba и обращать через smbclient к Windows-принтерам.
Имеется также ряд общих методов совместного использования файлов, поддерживаемых многими клиентами и серверами.
Расширенная сетевая файловая система. http://www.coda.cs.cmu.edu.
Основанная на https система безопасного разделения файлов. Скачать можно с http://www.edlund.org/hacks/drall/index.html.
Коммерческий протокол совместного использования файлов для крупных систем с очень большими требованиями к защите и эффективности.
CVS используется, чтобы централизованно поддерживать исходный текст в архиве и позволить людям делать модификации, с акцентированием на способности отмены изменений, получения старой версии и тому подобного. Это очень популярно для больших программных проектов.
![]() Written by Kurt Seifried |
Надежная операционная система нуждается в надежной файловой системе. В случае 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 надежно удаляет данные, перезаписывая файл многократно разными образцами. Вы можете использовать wipe для файлов или устройств. В первом случае помните, что имя файла и техническая информация о нем удалена не будет, будет уничтожено только его содержимое, после чего файл будет бесполезен для какого-либо восстановления. Скачать wipe можно с http://gsu.linux.org.tr/wipe.
Еще один удалитель для файлов, но он не поддерживает чистку устройств. Доступен на http://users.erols.com/thomassr/zero/download/wipe.
Один главный компонент файловой системы, которого пока нет в Linux, это поддержка Access Control Lists (списков контроля доступа) вместо обычных User, Group и Other. ACL позволяет более гибко управлять доступом, предоставляя права доступа к каждому объекту конкретному пользователю. Например, можно предоставить полный доступ к файлу пользователю bob , доступ на чтение пользователю mary, доступ для изменения группе sales и закрыть доступ всем остальным. В настоящее время в Linux обычными методами сделать такое нельзя или крайне трудно. Значит, нужна ACL. Сейчас поддержка ACL для Linux есть в виде патча для ядра. Справедливости ради надо отметить, что поддержка ACL реализована в NT (для файловой системы NTFS), и является одним из самых уязвимых мест защиты NT (если применительно к NT вообще корректно говорить о какой-либо защите).
Файл паролей, возможно, наиболее критический системный файл в 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).
Файл shadow хранит пары "username:password" и дополнительные сведения о логине, например, время окончания его действия. Он должен быть доступен на чтение и запись только для root.
Файл groups хранит данные о принадлежности пользователей к группам и опциональные поля, вроде групповых паролей (сейчас обычно хранятся в файле gshadow), данный файл должен быть доступен на чтение всем пользователям для корректной работы системы. Его формат:
groupname:encrypted_password:GID:member1,member2,member3...
Группа может не содержать членов (не используется), одного члена или многих членов, а также опционально иметь пароль доступа (обычно не используется).
Аналогично файлу shadow, данный файл хранит группы и пароли для них. Данный файл должен быть доступен на чтение и запись только для root.
Этот файл (/etc/login.defs) позволяет Вам определять некоторые полезные значения по умолчанию для различных программ типа useradd или окончания времени действия пароля. Он имеет тенденцию немного изменяться в разных дистрибутивах, но обычно хорошо прокомментирован и имеет тенденцию содержать нормальные значения по умолчанию.
Файл shells хранит список доступных оболочек (shells), если оболочка пользователя в нем не упомянута, зайти в систему он не сможет. Подробности в разделе про telnetd.
Данный файл хранит список терминалов с которых может зайти root. Консоли обычно обозначены с /dev/tty1 по /dev/tty6. Последовательные порты (если root может заходить по модему) обозначены обычно начиная с /dev/ttyS0 и выше. Если допускается вход root по сети (плохая идея, пользуйтесь лучше sudo), то добавьте /dev/ttyp1 и выше (если зашли 30 пользователей, а потом попытался зайти root, то он зайдет с /dev/ttyp31). Лучше всего ограничьте доступ root устройством /dev/tty1 и поставьте программу sudo: так оно безопасней.
![]() Written by Kurt Seifried |
Firewalling представляет собой фильтрацию сетевого трафика между Вашей сетью и другими сетями (Internet, какая-то другая LAN), который может быть запрещен (в случае Internet) или разрешен (другой этаж Вашего здания). Подобно межэтажным перегородкам в больших домах, сетевой firewall может защитить от атаки при нарушении безопасности в одном сегменте сети. Хорошей FAQ по Internet firewall есть на http://www.interhack.net/pubs/fwfaq.
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 надежный фильтр пакетов для 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 содержит несколько новых свойств по сравнению с 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 следующее поколение firewallа пакетов для Linux. Поддерживает много полезных функций, понимает IPSec, позволяет гибко управлять пакетами. HOWTO доступно на http://netfilter.kernelnotes.org.
IPF альтернативный пакет firewall, доступный для Linux (и ряда других ОС). Получить его можно с http://coombs.anu.edu.au/~avalon.
SINUS Firewall еще один firewall для Linux (ядра 2.0.x и 2.2.x). Скачать его можно с http://www.sinusfirewall.org.
Я только изучаю этот пакет, но уже считаю его очень хорошим. Он польностью заменяет ipchains и добавляет много умного и полезного в процесс firewall. Это коммерческий продукт (около $3000 US), и это первый firewall, который ICSA сертифицировала для Linux. Доступен на http://www.progressive-systems.com/products/phoenix.
Для маленьких Linux типа firewall/gateway. Скачать можно с http://edge.fireplug.net.
Иногда защита может наделать много проблем, особенно при неправильной настройке. Например, не пустить Вас к Вашим же данным. Есть 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.
Многие скрипты для Red Hat Linux в rpm-формате: http://www.webideal.de/rh-isdn/downloads.
Простой скрипт для конвертации правил ipfwadm в правила ipchains, доступен на http://users.dhp.com/~whisper/ipfwadm2ipchains
Mason автоматизированный генератор правил firewall для ipfwadm и ipchains. Вы загружаете его, и он контролирует пакеты, идущие через машину, затем основываясь на этом создает набор правил, чтобы позволить такие действия. Хороший инструмент в течение первого раза firewall, доступен на http://users.dhp.com/~whisper/mason.
Mklinuxfw утилита, написанная на Perl, имеет набор интерфейсов (CGI, KDE, command line) для создания правил firewall. Сейчас поддерживает интерфейс CGI, GTK находится в стадии разработки. Скачать можно с http://www.madhouse.org.uk/~red/framepage.phtml?/mklinuxfw/index.html.
fwconfig основанная на www утилита настройки для ipfwadm и ipchains. Доступна на http://www.mindstorm.com/~sparlin/fwconfig.shtml.
Приложение xipfwadm написано на Tcl/Tk для X и предназначено для работы с правилами ipfwadm. Скачать можно с http://www.x25.org/xipfwadm.html.
Интересный сайт с online cgi для создания правил и скриптов firewall. Увы, работает медленно, но посмотреть можно на http://www.linux-firewall-tools.com/.
Графическая программа на Tcl/Tk. Скачать можно с http://www.linux-kheops.com/pub/easyfw/easyfwGB.html.
DNi представляет собой online cgi для создания наборов правил для ipfwadm. Попробовать можно на http://members.tripod.com/~robel/dni.
![]() Written by Kurt Seifried |
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 для Linux. Популярные (Wu-FTPD и 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: использование 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 очень мощный ftp-сервер, но бесплатен только для личного или учебного пользования. Доступен на http://www.ncftpd.com/ncftpd.
BSD ftp server (ftpd) также был перенесен к Linux, так что если Вы хотите использовать именно его, Вы можете это сделать. Доступен на ftp://quatramaran.ens.fr/pub/madore/ftpd-BSD.
Muddleftpd маленький сервер ftp. Доступен на http://www.computing.edu.au/~kuiperba/muddleftpd.
Troll ftpd чрезвычайно маленький и относительно надежный сервер. Он не может выполнять внешние программы и очень прост в настройке. Доступен на http://www.troll.no/freebies/ftpd.html.
BetaFTPD однопоточный маленький сервер. Скачать можно с http://members.xoom.com/_XOOM/sneeze/betaftpd.html.
Еще один FTP-сервер, распространяемый по GPL, доступен на http://www.ftp4all.de/v3/noframes.
Замена Вашего любимого ftpd (возможно, WU-FTPD), также доступен как набор патчей для WU-FTPD. Вроде бы повышает защиту. Можно скачать tarball с ftp://ftp.uni-mainz.de/pub/internet/security/ssl, или пакет RPM с ftp://ftp.zedz.net/pub/replay/linux/redhat.
SRP также может использоваться для шифрования username/password Ваших ftp-сеансов. SRP доступен на http://srp.stanford.edu/srp
sftp работает поверх ssh, что позволяет использовать безопасные ftp-сеансы. Доступен на http://www.xbill.org/sftp.
![]() 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 листочки, которые висят на многих мониторах?).
![]() Written by Kurt Seifried |
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 в ядре. К сожалению ни один дистрибутив 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, или Вы будете должны каждый раз набирать полный путь.
Надо разрешить 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. Параметры настройки обычно задаются в файлах /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
В нашем примере мы будем иметь следующую сеть:
Сервер 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 или на внешние адреса шлюза, так как Вы не сконфигурировали туннели, чтобы обработать такие пакеты). Если это работает, Вы все установили правильно.
В этом примере я буду объяснять настройку, не касаясь установки, как выше.
Диаграмма сети:
Я решил, что не помешает упомянуть здесь коммерческие пакеты для IPSec, с акцентированием, конечно, на тех, которые основаны на Linux и FreeS/WAN.
i-data создала несколько пакетов, в том числе VPN-сервер, основанный на Linux и FreeS/WAN. Они размещены в Дании, что делает их пакеты доступными по всему миру. Подробности на сайте http://www.i-data.com/networks.
Имеется также ряд пакетов под Windows для поддержки IPSec.
Авторы (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.
![]() Written by Kurt Seifried |
Правильная установка Linux, первый шаг в устойчивую, безопасную систему. Имеются различные советы, предупреждения и приемы, чтобы заставить установку проходить проще, также как и некоторые проблемы, которые лучше всего решать в процессе установки (дисковое размещение, например).
Это проблема #1 от которой зависят скорость установки и в значительной степени безопасность. Мой любимый способ: установка по ftp, поскольку вставить временно сетевую карту нетрудно (если она еще не вставлена), а пакеты ставятся со скоростью более 1 megabyte/sec. Установка с CD-ROM вообще самая простая, поскольку диски обычно самозагружаемые, Linux находит CD и не задает вопросов по поводу каталога или имени файла (в противоположность установке с жесткого диска). Этот диск является оригиналом дистрибутива Linux, и Вы можете быть относительно уверены, что он безопасен (если получили его из уважаемого источника), если Вы параноидальны, однако не стесняйтесь проверить сигнатуры файлов.
Если Вы хотите жечь ваш собственный CD с дистрибутивом X, то образ можно взять на http://freeiso.linuxsw.net и записать его на CD.
Red hat обеспечивает средство для автоматизации установки, которое может быть очень полезным. Просто создайте текстовый файл с различными спецификациями установки, и положите его к установщику Red Hat, после чего сидите и смотрите на процесс установки. Это очень полезно при установке на несколько машин или при восстановлении машин пользователей (предполагается, что их данные зарезервированы). Подробности смотрите на: http://www.redhat.com/mirrors/LDP/HOWTO/KickStart-HOWTO.html.
Итак, Вы имеете свежий дистрибутив Linux (Red Hat, Debian, или еще какой-нибудь). Пожалуйста НЕ СТАВЬТЕ старый дистрибутив, чтобы потом его обновлять: это кошмар. (Замечание переводчика: не такой уж и кошмар.) Но есть еще много программных пакетов, которые надо обновлять, если Вы не хотите получить систему, скомпрометированную на первых 15 секундах uptime (в случае BIND/Sendmail). Хорошей идеей является хранение локальной копии каталога обновлений для Вашего дистрибутива (в конце данного документа есть список проблем для разных дистрибутивов). Проще всего сделать такой каталог доступным для Вас, положив его на NFS/ftp или записав на CD. Также следует удвлить ненужное программное обеспечение, как и то, которое Вы заменили на более безопасные версии (например, замените RSH на SSH).
Если Вы запустили Red Hat Linux попробуйте использовать укрепляющий скрипт Bastille Linux, доступный на: http://www.bastille-linux.org/.
![]() Written by Kurt Seifried |
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.
Данная заплата добавляет ряд интересных возможностей, прежде всего нацеленных на обнаружение нападения. Вы можете "блокировать" файлы, правила firewall, есть еще ряд интересных параметров. Вы можете скачать патч с http://www.soaring-bird.com.cn/oss_proj/lids.
Проект Linux (ACL) ряд заплат и утилит, чтобы конфигурировать ACL-доступ к файловой системе. Это решение все еще немного ненадежно, поскольку хранит разрешения в файле и действует как уровень фильтрации между файлом и пользователями, что не соответствует ACL (но это начало). Вы можете получить пакет на http://www.braysystems.com/linux/trustees.html.
Rule Set Based Access Control всесторонний набор заплат и утилит, чтобы управлять различными аспектами системы. Доступен на http://www.rsbac.de/rsbac.
LOMAC (Low Water-Mark Mandatory Access Control for Linux) набор заплат, чтобы расширить защиту Linux. Вы можете получить его с ftp://ftp.tislabs.com/pub/lomac.
auditd позволяет Вам использовать регистрирующие средства на уровне ядра (очень мощный инструмент). Вы можете регистрировать сообщения почты, события системы и нормальные элементы, что делает и syslog, но в дополнение к этому Вы можете отслеживать события типа специфических пользователей, открывающих файлы, выполнение программ, setuid-программ, и так далее. Если Вы нуждаетесь в твердом контрольном следе, значит этот инструмент для Вас! Вы можете получить его с ftp://ftp.hert.org/pub/linux/auditd.
Загружаемый модуль ядра, который позволяет Вам управлять максимальным числом процессов на пользователя и максимальным числом ветвлений, очень полезен для shell-серверов. Скачать можно с http://rexgrep.tripod.com/rexfbdmain.htm.
Отладчик ядра SGI доступен на http://oss.sgi.com/projects/kdb.
В SGI написали инструмент, который позволяет Вам делать отладку ядра, дистанционно, не связываясь с консолью. Доступен на http://oss.sgi.com/projects/kgdb.
![]() Written by Kurt Seifried |
kha0S в настоящее время находится в стадии разработки, но в него входит много пакетов криптографических программ. Подробности можно посмотреть на: http://www.kha0s.org/ и загрузить его с: ftp://ftp.zedz.net/pub/replay/linux/kha0s/.
![]() Written by Kurt Seifried |
Протокол Lightweight directory access, кажется, является будущим хранения информации пользователя (пароли, местные каталоги, номера телефона, и т.д.). Много программ (ADS, NDS, etc.) поддерживают интерфесы LDAP, делая важной для Linux поддержку LDAP, поскольку она будет требоваться, чтобы связаться с будущими сетями предприятий.
OpenLDAP полностью opensource (но не GPL) пакет, который предоставляет LDAP-сервер, replication-сервер и утилиты. Его можно получить с http://www.openldap.org.
NSS LDAP Module позволяет Вам сделать авторизацию пользователя по LDAP. Скачать можно с http://www.padl.com/nss_ldap.html.
ldap-client-cgi.py программа на Python, которая выполняется как cgi и обеспечивает www-интерфейс к LDAP-каталогу. Скачать можно с http://sites.inka.de/ms/python/ldap-client-cgi.
Основанная на KDE утилита для просмотра LDAP со способностью редактировать объекты (в основном, инструмент администрирования LDAP). Вы можете скачать его с http://www.mountpoint.ch/oliver/kldap.
Основанный на GTK клиент LDAP, который может изменять настройки. Доступен на http://biot.com/gq
Основанный на www инструмент администрирования LDAP. Доступен на http://igloo.its.unimelb.edu.au/LDAPExplorer.
Несколько пакетов разработчика для LDAP доступны для скачивания на http://www.mozilla.org/directory
![]() Written by Kurt Seifried |
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.
![]() Written by Kurt Seifried |
Одной из главных частей любой 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 и обрабатываются (пишутся в локальный файл, пересылаются на другой сервер, посылаются программе или обрабатываются как-то еще).
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 (помните, что программы ротации журналов воспринимают это болезненно).
Основная проблема, это исправленные журналы. Можно установить режим append only с помощью chattr +a, но с правами root его также легко снять и поставить на место после необходимой правки журнала. Есть безопасная версия syslogd, доступная на http://www.core-sdi.com/english/freesoft.htm (эти парни вообще делают хорошие инструментальные средства и имеют хорошую репутацию). Здесь есть возможность криптоподписи файла протокола, что гарантировано обеспечит данные о том, что его никто не трогал. В конечном счете, однако, нападавший может все же удалять журналы, так что хорошая идея послать их другому хосту, особенно в случае firewall, чтобы предотвратить диск от переполнения.
Другая альтернатива: syslog-ng (Next Generation Syslog), который кажется намного больее настраиваемым чем syslog или secure-syslog, он поддерживает цифровые сигнатуры, чтобы предотвратить вмешательство в файлы регистрации, и может фильтровать данные, исходя из содержания сообщения, а не только того, откуда это исходит или приоритета (что является очень полезным для сокращения объема). Syslog-ng доступен на http://www.balabit.hu/products/syslog-ng.
Nsyslogd поддерживает tcp и SSL для протоколирования удаленных систем. Работает на разных UNIX-платформах и доступен на http://coombs.anu.edu.au/~avalon/nsyslog.html.
Log-файлы бесполезны, если не уметь извлекать из них данные. К сожалению, они часто превосходят все разумные размеры, так что вопрос об автоматизации извлечения нужных данных вполне логичен.
Psionic Logcheck регулярно (можно из crontab) изучает файл messages (и другие) и посылает по e-mail отчет о всем подозрительном. Он легко настраивается с помощью классов событий: которые нужно игнорировать, активные попытки проникновения, просто плохие действия. Psionic Logcheck доступен на http://www.psionic.com/abacus/logcheck.
colorlogs ракрашивает log-файлы, позволяя легко найти подозрительное. Основанный на файле конфигурации, он ищет ключевые слова и сопоставляет им цвета строк (red, cyan и другие), требуется ввод с STDIN, так что Вы можете использовать это средство чтобы сделать быстрый обзор журналов (используя cat, tail или другие утилиты, чтобы передать файл программе). Получить можно на http://www.resentment.org/projects/colorlogs.
WOTS собирает log-файлы с нескольких источников и генерирует отчеты или сам принимает меры основываясь на том, что Вы ему велели. WOTS ищет регулярные выражения которые Вы определяете, и затем выполняет команды, которые Вы вносите в список. WOTS требует установки Perl и доступен на http://www.vcpc.univie.ac.at/~tc/tools.
swatch очень подобен WOTS, и настройка журналов тоже очень похожа. Вы можете скачать swatch с ftp://ftp.stanford.edu/general/security-tools/swatch.
Самый низкий уровень регистрации идет на уровне ядра. Вообще говоря, пользователи не могут отключить этот тип регистрации и даже обычно не знают, что такое существует.
Ряд оболочек имеет встроенные возможности регистрации.
Я рассмотрю 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. Правда, такой подход создаст еще ряд проблем, так что заручитесь согласием пользователей.
![]() Written by Kurt Seifried |
NetMAX делает несколько программ, firewall, webserver, file server и "Linux Professional" основанный на Linux (а также еще одну линейку на FreeBSD). Они прислали мне копию firewall, так что ждите информацию, как только я с ней разберусь. Коробка выгялдит вполне прилично.
![]() Written by Kurt Seifried |
Основные файлы настройки и утилиты
Сетевая безопасность довольно широкая тема, так что я разбил ее на пару разделов. В этом я описываю нижние 4 уровня (transport, network, datalink, physical) 7-уровневой модели OSI protocol stack, верхние 3 (application, presentation, session) будут рассмотрены в разделах по сетевым сервисам. Я такэе рассмотрю некоторые базисные файлы конфигурации сети, так как их объяснение всегда полезно.
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 очень умно построен, но к сожалению не имеет никаких реальных условий для защиты (то есть аутенфикации, проверки, шифрования и так далее). Перехват пакетов, чтение полезного груза данных и тому подобные вещи легко осуществимы в сегодняшней сети Internet.
Имена хостов и их IP-адреса не всегда соответствуют друг другу. Не используйте авторизацию на основании имени хоста, если возможно. Поскольку обман кэша DNS довольно прост, надежней использовать IP-адрес (замечание автора русской версии: лично сталкивался с тем, что кто-то перехватывал IP-адрес доужественной мне фирмы, благодаря чему подставил меня по обвинению в атаке на университетский сервер, к которой я отношения не имел). Не имеется никаких механизмов в широком использовании, чтобы проверить, кто послал данные и кто их получает, за исключением использованием шифрования уровня сеанса или IP (IPSEC/IPV6 и другие VPN-технологии получают хороший импульс, благодаря такому подходу).
Вы можете отбрасывать входящие данные, которые уверяют, что пришли из Вашей сети: здесь ложь очевидна. Также надо запретить все исходящие данные, которые идут не с адресов Вашей сети. Это относительно просто, но огромное число сетей не делает этого (я потратил около года, приставая к моему ISP, прежде, чем они это запустили). Если бы каждая сеть блокировала ложные пакеты, опасности не было бы вовсе, а проследить хакера было бы на порядок проще (замечание автора русской версии: покажите мне админа, которому охота с этим разбираться. Обвинить пользователя ни за что много проще). Вы должны также блокировать зарезервированные сети (127.*, 10.* и им подобные). Я отметил много нападений из Internet с пакетами, помеченными как пришедшие из этих диапазонов IP. Если Вы используете сетевую трансляцию адреса (подобно IPMASQ) и не имеете правильного firewall, Вы можете быть легко атакованы или использованы, чтобы передать нападение третьему лицу.
Если Вы связались надежно с людьми, рассмотрите использование VPN-технологией. Единственная доступная технология, которая имеет широкую поддержку и планируется в качестве стандарта (в IPv6), это IPSec, это открытый стандарт, поддержанный многими разработчиками, и основные разработчики имеют фактические рабочие реализации в их OS (хотя некоторые повреждены, чтобы выполнить экспортные законы США). Пожалуйста см. подробности в приложении B или в разделе "Шифрование сервисов и данных".
IPSec посвящена отдельная глава. Я считаю его будущим сетей типа VPN, поскольку на сегодняшний день он поддерживается очень широко и входит в стандарт IPv6).
IPv6 сам по себе не имеет мер безопасности, это просто другая форма адресации. Но в стандарт встроены возможности поддержки защиты. Например, там есть IPSec. Подробности об IPv6 есть на http://www.bieringer.de/linux/IPv6. Linux сейчас уже поддерживает IPv6 в полном объеме (одна из немногих OS, которые могут этим похвалиться).
Проект HUNT представляет собой набор инструментов для управления TCP-IP (обычно в Ethernet LAN), который может перезапускать соединения, наблюдать за ними и делать другие подобнгые вещи. Он также имеет несколько несколько атак, основанных на ARP. Скачать HUNT можно с http://www.cri.cz/kra.
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.
Файл 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 управляется двумя файлами:
/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" тоже будет проигнорирована!
Как можно говорить о безопасности, когда Вы не знаете, что работает в системе? Для этой задачи ps и netstat неоценимы; ps сообщит Вам, что в настоящее время работает (httpd, inetd и т.д), а netstat сообщит Вам о состоянии портов (здесь мы заинтересованы портами, которые являются открытыми и слушают, которые ждут подключения). Мы можем смотреть на различные файлы конфигурации, которые управляют сервисами сети.
Программа 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 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 удобная программа, подобная 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 один из стандартных пакетов маршрутизации для Linux. Он поддерживает RIP (самый старый протокола маршрутизации, все еще используется). RIP очень прост, роутеры просто передают таблицы маршрутизации соседним маршрутизаторам, создавая в результате (в теории) полную таблицу маршрутизации, которая содержит записи для каждого адресата в Internet. Этот метод опасен и очень неэффективен вне маленьких безопасных сетей. Вы можете использовать firewall для портов 520 и 521, которые использует RIP для передачи данных, но атакующие все еще могут применить спуффинг маршрутов.
gated более продвинутый вариант программ маршрутизации, чем routed. Он поддерживает RIP версий 1 и 2, DCN HELLO, OSPF версии 2, EGP версии 2 и BGP версий от 2 до 4. В настоящее время наиболее популярный протокол маршрутизации, кажется, BGP (Border Gateway Protocol), но набирает популярность и OSPF (он имеет встроенную защиту, очень эффективен и лишь немного более сложен).
MRT (Multi-threaded Routing Toolkit) routing daemon и набор тестовых утилит с поддержкой IPv4 и IPv6. Скачать можно с http://www.mrtd.net.
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.
![]() Written by Kurt Seifried |
NNTP (network news transfer protocol) полезен для совместного использования больших количеств информации множеством серверов. Он полезен для организации дискуссий и форумов по разным проблемам (например, криптографии).
Сервер 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 свободный пакет, нацеленный на транспортировку новостей между серверами, то есть прием статей с других NNTP-серверов и передачу их на другие сервера. Он не нацелен на использование конечными пользователями для чтения или отправки статей. Вы можете получить Diablo с http://apollo.backplane.com/diablo.
Коммерческий NNTP-сервер для разных платформ. Доступен на http://netwinsite.com/dnews.htm.
Cyclone является коммерческим сервером NNTP, нацеленный на транспортировку новостей между серверами, то есть прием статей с других NNTP-серверов и передачу их на другие сервера. Он не нацелен на использование конечными пользователями для чтения или отправки статей. Вы можете получить Cyclone на http://bcandid.com.
Typhoon коммерческий сервер NNTP, нацеленный на конечных пользователей, то есть позволяет им читать и посылать статьи. Загрузить можно с http://bcandid.com.
![]() Written by Kurt Seifried |
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
![]() Written by Kurt Seifried |
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
Новое поколение LPR, вариант LPR. Имеет больше возможностей защиты и предоставляет более богатый сервис. LPRng поддерживает Kerberos и авторизацию на основе PGP, доступ контролируется файлом /etc/lpd.perms, в котором можно управлять доступом на основе пользователя, группы или IP. LPRng имеет хорошую документацию и доступен на http://www.astart.com/lprng/LPRng.html.
pdq другая замена для LPD, никакой реальной защиты не добавилось, но, кажется, предлагается некоторые усовершенствования управления и рост эффективности по сравнению с LPD. Вы можете получить pdq с http://feynman.tam.uiuc.edu/pdq.
Common UNIX Printing System (CUPS), доступна по лицензии GPL, пока вышла версия 1.0. CUPS можно скачать с http://www.cups.org.
![]() Written by Kurt Seifried |
Серверы proxy уровня приложений
Как обычно, есть несколько пакетов proxy для Linux. Некоторые работают на уровне приложений (SQUID), другие на уровне сессии (SOCKS).
Серверы proxy уровня приложений
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 (CTC) ориентирован на блокировку баннеров и экономию трафика при работе в сети за счет отсечения явно лишних данных. Скачать можно с http://www.softlab.ece.ntua.gr/~ckotso/CTC.
WWWOFFLE хороший proxy для UNIX-систем, обрабатывает HTTP и FTP. Скачать его можно с http://www.gedanken.demon.co.uk/wwwoffle.
SOCKS сервер proxy уровня сессии, обычно используется на firewall из-за хороших возможностей контроля доступа. Приложения должны поддерживать протокол SOCKS, многие популярные web-браузеры, ftp-клиенты и тому подобное имеет такую поддержку. Скачать можно с http://www.socks.nec.com.
Dante свободная начинка популярного сервера SOCKS. Доступен на http://www.inet.no/dante.
DeleGate многопротокольный proxy с поддержкой HTTP, NNTP, FTP, SSL proxying и другого. Имеет серьезные возможности защиты, доступен на http://wall.etl.go.jp/delegate.
Набор proxy, написаных для разных применений vja2@cornell.edu. Поддержижвают UDP, TCP, HTTP, Hand-off (для игры в Ultima Online) и tunneling. Доступны на http://www.home.ctc.shadowlan.net/~vinny/projects/proxy.
![]() Written by Kurt Seifried |
В течение установки Red Hat 6.0 позволит Вам установить теневые пароли и поддержку MD5-паролей. Обновите ядро Red Hat 6.0, поскольку оно уязвимо для атак denial of service (на основе icmp).
![]() Written by Kurt Seifried |
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
![]() Written by Kurt Seifried |
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 очень хороший инструмент администрирования 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 позволяет пользователю Linux устанавливать права разделения файлов в Windows менять ACL для файлов (под NT) и тому подобное. Вы можете получить CIFS для Linux с http://www.linuxstart.com/~cifs
![]() Written by Kurt Seifried |
Chrooting
http://madhouse.lonyay.edu.hu/dep/
![]() Written by Kurt Seifried |
Аутентификация: NIS/NIS+, Kerberos, Radius
DHCP: ISC DHCP, Moreton Bay DHCP Server
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
Time - NTP
Пользовательская информация: Finger, Identd
WWW - HTTP, HTTPS
![]() Written by Kurt Seifried |
Получение доступа к серверу дистанционно критично для большинства администраторов. Большинство из нас не может сидеть за консолью, и в любом случае удаленный доступ чочень удобен.
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, 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 основан на OpenSSL и поддерживает сертификаты X.509. Slush распространяется по GPL, но не закончен (все необходимое поддерживается, но есть досадные ограничения). В конце концов может составить хорошую замену для SSH. Скачать можно с http://violet.ibs.com.au/slush.
SSH безопасный протокол и набор инструментальных средств, чтобы заменить некоторые общие (опасные) средства. Это было разработано из желания предложить максимум защиты и позволить удаленный доступ к серверам безопасным способом. SSH может использоваться, чтобы защитить любое сетевое соединение, устанавливая его как 'канал' (то есть, связывая с некоторым портом на обеих концах). Это хорошо для таких вещей как использование X через Internet. В дополнение к этому компоненты сервера выполняются на большинстве UNIX-систем, и NT, а компоненты клиента выполняются практически на всем и везде. К сожалению SSH больше не свободен; однако, имеется проект создать свободную реализацию протокола SSH. Не имеется проблем с SSH, подобных проблемам с telnet, все данные сеанса шифрованы, и обмен ключами выполняется относительно надежно (альтернатива: Вы можете предзагрузить ключи с обеих концов, чтобы предотвращать атаки посередине канала.
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 проект, начатый OpenBSD project для создания полнофункциональной версии SSH клиент и сервер, лицензируемых свободно (то есть, BSD и GPL). Они очистили код, устранили кучу ошибок и сделали лучшую поддержку PAM, чем в "официальный" SSH клиенте и сервере. Этот проект собирается заменить традиционный SSH полностью. Доступен на http://www.openssh.com. Я лично использую его и никаких проблем нет.
LSH свободная реализация протокола SSH (клиент и сервер), LSH GNU licensed и создан как альтернатива SSH (который все же не свободен полностью). Скачать можно с http://www.net.lut.ac.uk/psst, но помните, что он еще только разрабатывается.
Я так и не смог понять толком, что это за штука, но сложилось впечатление, что это версия SSH с некоторыми расширениями (типа поддержки SecureID). Скачать можно с ftp://ftp.nada.kth.se/pub/krypto/ossh.
Большинство из нас все еще должно сидеть за windows workstations, а найти ssh-клиент для windows трудно. Fresh Free FiSSH является свободным клиентом ssh для Windows 95/NT 4.0. Хотя разработка еще не завершена, я рекомендую присматривать за пакетом повнимательнее: он того стоит. URL: http://www.massconfusion.com/ssh .
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 Windows SSH-клиент, очень удобный, свободный и очень маленький (184k всего). Скачать можно с http://www.chiark.greenend.org.uk/~sgtatham/putty.html.
mindterm свободный java ssh-клиент, скачать можно с http://www.mindbright.se/mindterm.
Коммерческий клиент Telnet/SSH от Vandyke software. Скачать/купить можно на http://www.vandyke.com.
Fsh (Fast remote command execution) подобен rsh/rcp. Он создает шифрованный туннель, используя SSH или LSH и выполняет через него все команды. Скачать можно с http://www.lysator.liu.se/fsh.
SSH для Win32 можно скачать с http://guardian.htu.tuwien.ac.at/therapy/ssh.
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 коммерческий пакет со встроенной поддержкой шифрования. Не знаю, насколько прочное шифрование, поскольку открытых исходников тут нет. Легкость использования высока, Вы cd //computername и начинается регистрация на заданном компьютере, моджно легко упраялть файлами, запустить ps и получить список процессов на компьютере и многое другое. NSH идеален для управления несколькими подобными системами благодаря встроенному модулю Perl для изготовления скриптов. К тому же, NSH доступен для многих платформ (Linux, BSD, Irix), а для Red Hat есть RPM-пакет. NSH доступен на http://www.networkshell.com, там есть 30-дневная версия.
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-авторизация отправителя и источника, что является в некоторых случаях более важным, чем шифрование данных).
![]() Written by Kurt Seifried |
SNA очень общий сетевой протокол, который напоминает возвращение назад к дням IBM и "тяжелого железа".
http://www.icenetworking.com/products/sna/fire/index.html
![]() Written by Kurt Seifried |
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
![]() Written by Kurt Seifried |
Один из авторов SuSE (Marc Heuse) написал несколько хороших утилит для SuSE Linux, доступных на http://www.suse.de/~marc. Первая называется "Harden SuSE" и в основном удаляет сомнительные объекты, сжимает права доступа файлов и блокирует лишние демоны. Другая, "SuSE security check", является набором скриптов оболочки, которые ежемесячно проверяют файл паролей, списки установленных пакетов и так далее.
![]() Written by Kurt Seifried |
Это детально рассмотрено в книге "Practical Unix and Internet Security", но я кратко изложу основные положения. Кто-то перезагружает Ваш сервер со специально подготовленной дискеты и передает payroll.db на некий ftp-сайт. Известны истории и про уборщиц, вытаскивавших шнур питания сервера из розетки, чтобы включить туда пылесос. Были и другие случаи, типа стоящего на полу сервера и лопнувшей батареи отопления... Так что сервер должен быть в закрытой комнате и желательно его поставить на какую-то приподнятую поверхность.
BIOS состоит из нескольких низкоуровневых компонентов, управляющих загрузкой компьютера и другими подобными задачами. Старые BIOS имеют универсальные пароли для доступа к системе, убедитесь, что у Вас такого нет. Bios может использоваться, чтобы настроить загрузку только с диска C:, что в общем хорошая мысль. Можно также использовать bios для блокировки floppy-дисковода. Также имеет смысл вылючить лишние последовательные порты, они едят лишние IRQ. Кстати, это упростит и настройку системы за счет уменьшения числа конфликтов IRQ и тому подобного. Есть программы, которые вытаскивают пароль из BIOS, одна такая есть на http://www.esiea.fr/public_html/Christophe.GRENIER, в версиях для DOS и Linux.
При загрузке с диска 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.
![]() Written by Kurt Seifried |
tftp (Trivial File Transfer Protocol) используется для устройств, которые требуют информации из сети, обычно при начальной загрузке. Это чрезвычайно простая форма ftp, в которой нет большинства средств защиты и продвинутых команд, это в основном позволяет устройству отыскивать и передавать файлы с сервера очень простым способом. 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 безопасный вариант tftpd, обеспечивает намного более удобное управление доступом и поддержку некоторых других интересных свойств (типа управления изменениями). Вы можете также предоставлять доступ на основе IP-адреса, это означает, что Ваши конфигурации маршрутизатора и конфигурации автоматизированного рабочего места без диска могут сохраняться отдельно и независимо друг от друга. utftpd доступен по GPL на http://www.nrw.net/uwe/utftpd.html.
![]() Written by Kurt Seifried |
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
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.
ntpdate входит во многие дистрибутивы.
![]() Written by Kurt Seifried |
TurboLinux имеет установку, очень похожую на Red Hat, Вы работаете с с текстовыми экранами, отвечаете на вопросы, а затем система устанавливает пакеты, и Вы настраиваете некоторые из них дополнительно (например, X). Имеется пара проблем с TurboLinux, который Вы будете должны исправить. Есть несколько утилит, которые входят в поставку TurboLinux, и которые стоило бы добавить в другие дистрибутивы (например, sudo).
Файл 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.
TurboLinux (подобно большинству распределений) позволит Вам загружаться в однопользовательском режиме без пароля. Поместите команду restricted в файл lilo.conf и добавьте пароль, чтобы никто не мог получить root доступ к системе простой перезагрузкой машины.
ipchains отсутствует на установочном CD, его можно найти на добавочном CD или на сайте ftp ftp://ftp.turbolinux.com/pub/TurboLinux/tlw-3.6-companion/TurboContrib/RPMS.
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 есть на добавочном CD с TurboLinux, советую его использовать. Я не знаю, как данная копия лицензирована (free for non commercial use only, one license или что-то еще). Есть Tripwire 1.3.
Данный диск содержит много дополнительных полезных программ (например, 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.
![]() Written by Kurt Seifried |
Имеется ряд сервисов, которые могут предоставлять информацию относительно локальных пользователей другим локальным пользователям и пользователям на других машинах. Они могут быть полезны, если Вы хотите выяснить который пользователь соединен с машиной, или когда он вошел. Конечно это большие услуги для нападавших, так как они могут получить много информации из них.
Сервис 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 поддерживает несколько хороших свойств и может быть легко установлен, чтобы выполниться как пользователь не-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, предположительно с расширенной безопасностью.
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 одна из тех вещей, которые многие администраторы отключает и игнорирует. Это полезный инструмент при случае, но если Вы хотите позволить другим администраторам вычислять, который из Ваших пользователей в настоящее время пробует раскалывать их машины, используйте 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 (configurable fingerd) отличная замена для обычного fingerd, он сделан с учетом безопасности, работает обычно как не-root пользователь, и пользователи могут настроить как именно они будут представлены этим сервисом, Cfingerd можно скачать с http://ftp.bitgate.com/cfingerd.
PFinger проще Cfingerd, но тоже безопасная замена обычного fingerd. Вы можете скачать PFinger http://www.xelia.ch/unix/pfinger.
The Finger Server хороший finger-сервер, основанный на web, который дает пользователям возможность модифицировать их finger-информацию самостоятельно. Скачать можно с http://www.glazed.org/finger.
![]() Written by Kurt Seifried |
Имеются много плохих дел, которые пользователь может сделать, если он имеет интерактивный доступ к shell. Имеется также много способов предотвратить это. Квоты использования диска, процессора и тому подобные решения хорошее начало, более продвинутые методы, типа контроля пользователей для больших сред также помогают. Одна из самых простых вещей, которые пользователь может делать: исчерпание всей памяти или исчерпание всех файловых дескрипторов с fork bomb.
Новые дистрибутивы 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 имеет встроенный ограничитель, к которому обращаются через ulimit. Любые жесткие ограничения не могут быть установлены выше, если Вы имеете ограничения, определенные в /etc/profile. Это полезно для старых дистрибутивов без поддержки PAM. Вы должны также гарантировать, что пользователь не может изменять оболочку. Параметры настройки ограничений подобны методу PAM&:
ulimit Sc 0 ulimit Su 100 ulimit Hu 150
Эти три правила достигли бы того же результата как вышеприведенные в примере с PAM. Первое правило отключает дампы ядра, второе правило устанавливает soft-ограничение в 100 процессов, и третье правило устанавливает жесткое ограничение в 150 процессов. Справка по ulimit доступна по команде help ulimit на приглашение bash.
Quota является системой для ограничения использования диска пользователями. Она встроена в большинство дистрибутивов. Справка доступна на man-странице командой man quota.
Одна проблема общая на серверах с shell-достуом, заставляет уверенных пользователей не злоупотреблять сервером. Довольно просто контролировать стандартные ресурсы (типа дискового использования, использования CPU и т.д) но наиболее часто злоупотребляемый элемент bandwidth, к счастью имеется ряд способов контролировать это злоупотребление.
Конечно это все хорошо, когда все правильно. Но что, если Вы фактически хотите контролировать то, что пользователь делает. Ttysnoop позволяет Вам контролировать то, что пользователь делает и записывать это. Вы можете получать ttysnoop с http://uscan.cjb.net.
UserIPAcct позволяет Вам контролировать использование bandwidth пользователем, это включает патч ядра и устанавливает правила (подобные в концепции firewalling) чтобы контролировать количество данных, которые программы пользователя посылают или получают. Вы не можете получить данные относительно PPP подключений но ведь и PPP daemon не выполняется от имени обычного пользователя (хотя сделать это в общем можно). Я рекомендую это на сервере оболочки, чтобы контролировать пользователей. Полный пает можно загрузить с http://zaheer.grid9.net/useripacct.
![]() Written by Kurt Seifried |
Bugs: bugs@caldera.com
Security:
http://www.calderasystems.com/support/security
Support: support@caldera.com
Bugs: bugs@debian.org
Security:
http://www.debian.org/security
Support: http://www.linuxcare.com
Support: 1-888-546-4878
Support: support@netmax.com
Bugs:
http://developer.redhat.com/bugzilla
Security:
http://www.redhat.com/support
Support: support@redhat.com
Bugs:
http://www.stormix.com/bugtrack/input_bug_html и
bugs@stormix.com
Security: security@stormix.com
Support:
http://www.stormix.com/support/index_html
Bugs: bugs@suse.com
Security:
http://www.suse.de/de/support/security/index.html
Support: support@suse.com
Bugs: jht@turbolinux.com
Security: jht@turbolinux.com
Support: support@turbolinux.com
http://www.turbolinux.com/support
![]() Written by Kurt Seifried |
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 могут быть полезны при фильтрации email/других форм содержания на шлюзах Вашей сети (Windows-машины встречаются где угодно). Очень обнадеживает тот факт, что платформа, которая используется как дополнительная линия защиты от вирусной опасности, сама не может быть атакована этой опасностью. Вы можете также проверять файлы на сервере файлов под Linux, к которому обращаются Windows-клиенты. К счастью, имеется несколько хороших антивирусных программ, доступных для Linux.
Sophos Anti-Virus коммерческий сканер, работает на разных Windows и UNIX платформах. Свободен для персонального и относительно недорог для коммерческого использования. Скачать можно с http://www.sophos.com.
AntiVir еще один коммерческий сканер, работает на разных Windows и Linux. Скачать можно с http://www.hbedv.com.
Trend Micro портировала этот продукт под Linux, и его можно скачать с их сайта http://www.antivirus.com/products/isvw.
Data Fellow's тоже портировала свой антивирусный сканер под Linux. Скачать его можно с http://www.europe.datafellows.com/products
Kaspersky lab's тоже портировала свой антивирусный сканер под Linux. Скачать его можно с http://www.kasperskylab.ru/eng/products/linux.html
Данная тема подробно описана в разделе email-серверах и подразделе о проверке входящей почты (очень важно при наличии windows-клиентов).
![]() Written by Kurt Seifried |
Весь сетевой трафик может быть легко прочитан, поскольку он не шифруется. Разные механизмы существуют или создаются для шифрования трафика на разных уровнях стека протоколов. Некоторые схемы только шифруют данные, посланные (типа 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 решений для Linux. Очень советую при возможности использовать IPSec, поскольку он представляет собой прообраз стандарта для if VPN в Internet, и будет включен в IPv6. С другой стороны, если Вы защищены firewall, и Вам нужен туннель, пользуйтесь SSH, поскольку из-за изменения заголовков пакетов IPSec обычно проваливается.
IPSec подробно описан в соответствующей главе. Я полагаю, что это решение является будущим VPN (оно поддерживается большинством стандартов и является частью проекта IPv6).
PPTP, составляющий собственность протокол, созданный Microsoft для VPN решений. До настоящего времени показал многожество дефектов. Однако, если Вы должны интегрировать Linux в PPTP среду, еще не все потеряно: http://www.moretonbay.com/vpn/pptp.html содержит Linux реализацию PPTP.
CIPE свободная схема шифрования IP-уровня, предполагаемая для использования между маршрутизаторами. Это подходит для безопасного соединения сетей через опасную сеть (подобную Internet). Официальный сайт CIPE: http://sites.inka.de/~W1011/devel/cipe.html.
Доступное по GNU licensed решение для Linux VPN. Пока на тестировании (и не рекомендуется для массового использования). Официальная страничка http://eclipt.uni-klu.ac.at/projects/est.
Stunnel представляет собой решение для безопасных сетей на основе SSL.
Сервер работает под UNIX, клиенты под UNIX или Windows.
http://mike.daewoo.com.pl/computer/stunnel
Virtual Private Server (VPS) использует Perl и SSH для создания VPN. Загрузить можно с http://www.strongcrypto.com.
Virtual Tunnel (VTUN) поддерживает набор протоколо соединения и разные алгоритмы шифрования. Скачать можно с http://vtun.netpedia.net.
Zebedee предоставляет шифрование трафика TCP между хостами и доступен для UNIX и Windows. Скачать можно с http://www.winton.org.uk/zebedee.
Virtual Private Server решение для VPN на основе PPP и SSH. Скачать можно с http://www.strongcrypto.com.
![]() Written by Kurt Seifried |
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
По умолчанию 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.
Самый простой способ ограничить доступ: создайте каталог /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.
Простой сервер http для web-интерфейса (например, Phoenix Adaptive firewall использует такой интерфейс). Скачать можно с http://www.acme.com/software/thttpd
Я знаю, это звучит странно, но это правда. AOL Server это свободный www-сервер с доступными исходными кодами. К тому же, он поддерживает SSL и несколько других продвинутых свойств. Определенно, стоит посмотреть... Скачать можно с http://aolserver.com.
После установки и настройки www-сервера надо предоставить доступ к файловой системе, чтобы пользователи могли выкладывать странички. Для этого есть 4 наиболее популярных способа, но о них позже.
webfs легкий www-сервер с поддержкой базовых функций, доступен на http://www.in-berlin.de/User/kraxel/webfs.html.
Simple Web Server полностью соответствует своему названию. Базовые функции и никаких наворотов. Скачать можно с http://linuxstuffs.cjb.net.
Простой и быстрый www-сервер, скачать можно с http://www.cs.rice.edu/~vivek/flash.
Имеется несколько свободных и несколько коммерческих вариантов 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 доступен на 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 основан на 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 еще один коммерческий www-сервер с поддержкой https, доступен по GPL. Вы можете свободно скачать его, если Вы находитесь в Объединенной Европе, Австралии, Канаде, Японии, Новой Зеландии, Норвегии, США или Швейцарии. Версия со слабой (40 бит) криптографией может быть загружена из любой страны без проблем. Roxen доступен на http://www.roxen.com.
Zeus www-сервер высшего уровня с поддержкой SSL. Это коммерческий продукт, и Вы можете получить 30-дневную демонстрашку с http://www.zeustechnology.com.
Пока на тестировании (но ставится и работает нормально) для Linux, доступен на http://www.iplanet.com/downloads/iwsonlinux.html.
IBM также сделала HTTP-сервер для Linux (основанный на Apache), который можно скачать с http://www-4.ibm.com/software/webservers/httpservers/download.html.
Теперь надо обновлять файлы на сервере... Зайти и использовать текстовый редактор (даже если у Вас shell-доступ) не самая лучшая мысль. Писать файлы на другой машине, а потом синхронизировать с сайтом... Бр-р, я сам этим занимаюсь, и должен сказать, что такая система заставляет о дальнейшем совершенствовании процесса. Есть несколько популярных пакетов HTML-разработки, способных обновлять сайт самостоятельно по FTP или windows file sharing.
Классический способ предоставления доступа пользователям к ftp-серверу. Пользователи имеют обыкновение читать чужие файлы, лазать везде, куда дотянутся, и вообще портить жизнь сисопу. Chrooting ftp-сессий решает большинство этих проблем, однако основная проблема с ftp, в том что шифрование username и пароля обычно является невыполнимым из-за факта, что большинство людей работают с клиентами FTP для Windows. Я рекомендую ProFTPD вместо WU-FTPD, ProFTPD имеет много лучшие средства управления доступом.
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 одна из наиболее популярных программ 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 представляет собой cgi-программу для предоставления пользователям доступа к их каталогам через обычный web-браузер. Скачать можно с http://listes.cru.fr/rs/fd.
Fast Webpage Exchanger сам синхронизирует файлы через ftp и имеет удобный файл настройки. Скачать можно с http://www.enjoy.ne.jp/~gm/program/iwe_en.html.
WebRFM (Web-based Remote File Manager), CGI-программа (на Perl), позволяет пользователям управлять своими файлами. Скачать можно с http://webrfm.netpedia.net.
![]() Written by Kurt Seifried |
Одно из лучших решений использовать www-доступ к почте сводится к тому, чтобы запускать сервис на защищенной машине с минимальной нагрузкой. Пользователи должны иметь возможность обращаться к машине для просмотра почты откуда угодно, а не только из локальной сети.
AtDot доступен по лицензии GNU и написан на perl. Он имеет несколько режимов работы, делающих его подходящим для ряда ситуаций (провайдеры в стиле hotmail, ISP, и т.п.). Загрузить можно с http://www.nodomainname.net/software/atdot.
http://www.nodomainname.net/software/atdot
http://www.lysator.liu.se/~stewa/IMHO
IMP требует модуль Horde (доступен на его же сайте) и www-сервер, способный к поддержке PHP3. Вы можете загрузить IMP и Horde с http://www.horde.org/imp.
MailMan свободный (для некоммерческого использования) шлюз от www к POP. Если Вы планируете использовать его в коммерческих целях, надо его купить. А скачать можно с http://www.endymion.com/products/mailman.
http://squirrelmail.sourceforge.net
http://www.coconutsoftware.com
http://netwinsite.com/dmailweb/index.htm
http://netwinsite.com/webimap/index.htm
![]() Written by Kurt Seifried |
Безопасность и настройка 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-серверу.
xhost просто позволяет Вам определять, какие машины могут, а какие нет, соединяться с сервером. Конечно, это очень просто, в современных сетях само по себе помогает мало, но часто может пригодиться. Команда проста: 'xhost +example.org' добавляет example.org, 'xhost -example.org' удаляет example.org из списка допущенных, Вы должны также определить 'xhost -' чтобы включить список управления доступом.
mkxauth представляет собой хорошее дополнение к xhost. mkxauth создает файлы ~/.Xauthority, которые используются, чтобы определить hostnames и связанные магические cookies (маркер, используемый чтобы получить доступ). Эти cookies могут затем использоваться, чтобы получить доступ к удаленному X-хосту (Вы по существу имеете копию cookie на каждом конце) и передаются как текст (опасно) или зашифрованными по DES (совершенно безопасно). При использовании этого метода Вы можете быть в относительной безопасности. Файлы Xauthority могут также использоваться вместе с Kerberos. mkxauth отлично описан на man-странице 'man mkxauth' и много деталей можно почерпнуть на man-странице Xsecurity.
SSH или OpenSSH может использоваться, чтобы создать туннель между хостами (или между двумя X-серверами), шифруя канал, обеспечивая авторизацию и вообще делая работу более безопасной. Следующая web-страница объясняет это подробно http://csociety.ecn.purdue.edu/~sigos/projects/ssh/forwarding.
![]() Written by Kurt Seifried |
Alan Mead amead@soltec.net внес очень много поправок и пытался обучать меня языку (при переходе к письменности мои дела плохи).
Если Вы можете помочь в разработке и редактировании LASG, пишите мне на seifried@seifried.org. Вы будете внесены в список contributor.
Пожалуйста обратите внимание, что я использую этот ключ для 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%) и работает без проблем (никаких сбоев за несколько месяцев).
![]() Written by Kurt Seifried |
Локальные инструментальные средства
Инструментальные средства, основанные на WWW
Инструментальные средства, основанные на сети
Имеется ряд инструментальных средств, чтобы упростить управление системой. От локальных инструментальных средств подобных sudo, которые предоставляют ограниченные привилегии суперпользователя, до Webmin и Linuxconf, которые основаны на www. Информации относительно того как войти в систему дистанционно (то есть, через telnet или ssh) есть в разделе shell server.
YaST (Yet Another Setup Tool) довольно хороший инструмент на основе командной строки (очень похож на scoadmin), который обеспечивает простой интерфейс к наиболее частым административным задачам. Он не имеет никаких условий для предоставления пользователям ограниченного доступа, так что годится только для root. Другая проблема: в отличие от Linuxconf, это не сетевое средство, так что придется регистрироваться на каждой управляемой системе, что может и повышает безопасность, но создает неудобства.
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 одно из немногих инструментальных средств, которые могут реально использоваться, чтобы дать некоторым пользователям (и группам) измененные уровни доступа к администрированию системы. В дополнение к этому Вы можете определять время и позволять доступ к скриптам, давая setuid доступ к командам, которые могли бы иметь непредвиденные последствия (любой редактор, любые инструментальные средства манипулирования файлами подобные chown, chmod, инструментальные средства вроде lp вообще-то могут поставить под угрозу части системы). Debian поставляется с super, к тому же есть rpm-пакет. Это очень мощный инструмент но требует значительных усилий при настройке (подобно любому мощному инструменту), но я думаю, что это стоит усилий. Некоторые примеры файла конфигурации обычно в каталоге /usr/doc/super-xxxx. Главный сайт для super ftp://ftp.ucolick.org/pub/users/will.
runas очень похож на sudo и Super с некоторыми отличиями. Вы создаете файл настройки в котором указываете кто, как и что может выполнять. В дополнение к этому однако Вы можете ограничивать использование параметров, и Вы можете запрашивать пользователя о причинах (ответы пишутся в syslog). Это одно из моих любимых свойств. Загрузить runas можно с http://www.mindspring.com/~carpinello/runas/index.html.
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 универсальный инструмент администрирования, который является пригодным для использования из командной строки, из-под 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 (Caldera Open Administration System) очень честолюбивый проект, призванный обеспечить управление системами из командной строки (с псевдографическим интерфейсом), из X (использование набора qt widget) и по сети. Вышла версия 1.0. Сайт COAS: http://www.coas.org.
Инструмент администрирования WebRAT основан на web. Доступен на http://hq.hellug.gr/~webrat.
Pikt чрезвычайно интересный инструмент, это фактически язык скриптов для администрирования системы. Pikt позволяет Вам делать многое: уничтожать неактивные процессы пользователя, устанавливать квоты почты, контролировать систему на предмет подозрительных действий и многое другое. Единственной проблемы с Pikt будет трудность изучения, поскольку он использует собственный язык создания скриптов, но в конечном счете я думаю этот язык того стиот, особенно если Вы имеете много систем (тем более, что Pikt сейчас работает на Solaris, Linux и FreeBSD). Pikt доступен на http://pikt.uchicago.edu/pikt.
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 набор инструментальных средств для автоматизации задач администрации и контроля сети. Доступен на http://www.iu.hioslo.no/cfengine/.
SAS сейчас специфичен для Stormix (новый дистрибутив Linux), но его можно скачать с http://www.stormix.com/products/sas/index_html.
![]() Written by Kurt Seifried |
Информация для связи с поставщиками
![]() Written by Kurt Seifried |
За последние несколько лет число инструментальных средств защиты для Windows и UNIX резко возросло. Интересен факт, что большинство из них является свободно доступными в Internet. Я буду описывать только свободные инструментальные средства, так как большинство коммерческих инструментальных средств смехотворно дорого, не имеют открытых исходников и во многих случаях содержат сильные дефекты защиты (подобно сохранению паролей в чистом тексте после установки). Любой серьезный cracker/hacker будет иметь эти инструментальные средства в их распоряжении, так, почему не должен Вы?
Имеются несколько основных категорий инструментальных средств, одни просматривают хосты с одного из них, другие сообщают о том, какая OS используется (технология TCP-IP fingerprinting), перечисляют сервисы, которые являются доступными и так далее, наиболее сложными являются средства для вторжения, которые фактически пытаются вторгнуться в систему и формируют отчет о найденных дырках. К тому же, есть эксплойты (exploits).
Имеются также много свободных инструментальных средств и методы, которые Вы можете использовать, чтобы провести проверку. Утилиты вроде nmap, nessus, crack и им подобных могут быстро использоваться, чтобы просмотреть Вашу сеть и ее хосты, быстро находя любые очевидные проблемы.
Хост-сканеры представляют собой программы, которые запускаются на локальной системе в поисках проблем.
Cops чрезвычайно устаревший сканер. Упомянут только для исторической точности.
Tiger все еще в разработке, хотя кое-где уже начал использоваться (например, в Texas Agricultural and Mechanical University). Скачать можно с ftp://net.tamu.edu/pub/security/TAMU.
check.pl хорошая программа на Perl которая проверяет права доступа к каталогам и файлам и сообщает обо всех странностях и несоответствиях, которые найдет. Скачать можно с http://opop.nols.com/proggie.html.
Сетевые сканеры предназначены для изучения открытых сервисов. Имейте в виду, что многие хакеры используют их для поиска дырок в защите Вашей системы, так что лучше бы Вам найти эти дырки первым.
Strobe один из старых сканеров портов. Он просто пытается соединяться с различными портами на машине и сообщает результат. Прост в использовании и очень быстр, но не имеет свойств, которые имеют более новые сканеры портов. Strobe доступен для почти всех дистрибутивов, исходники есть на ftp://suburbia.net/pub.
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 и использованию некоторых его хитрых возможностей.
http://members.tripod.de/linux_progz
Portscanner очень маленькая утилита с настраиваемыми уровнями вывода, что делает его удобным для использования в скриптах. Имеет открытые исходники и свободен, скачать можно с http://www.ameth.org/~veilleux/portscan.html.
Queso не сканер, но сообщит Вам с довольно хорошей степенью точности под какой ОС работает удаленный компьютер. При использовании ряда допустимых и ошибочных пакетов tcp он сравнивает получаемые ответы со списком известных ответов для разных ОС. Скачать Queso можно с http://www.apostols.org/projectz/queso.
Сканеры вторжения представляют собой следующий шаг в развитии сетевых сканеров. Эти пакеты программ идентифицируют уязвимость, и в некоторых случаях позволяют Вам активно пробовать атаковать систему. Если Ваши машины восприимчивы к этим нападениям, Вы должны принять меры защиты, поскольку любой нападаюший может получить эти программы и использовать их.
Nessus относительно нов, но быстро движется к позиции самого лучшего пакета такого назначения. Он имеет архитектуру client/server, сервер пока работает под Linux, FreeBSD, NetBSD и Solaris, клиенты есть для Linux и Windows, есть также Java-клиент. Связь между клиентом и сервером зашифрована. Nessus поддерживает просмотр портов и нападение, основанное на адресах IP или именах. Может также прерывать сеть DNS-информация и нападать на связанные хосты в сети. Nessus работает относительно медленно в режиме нападения, но имеет более 200 вариантов атаки и язык для написания plug-in, так что можно писать свои сценарии атаки. Nessus доступен на http://www.nessus.org.
Saint продолжение Satan, сетевой сканер защиты. Saint также использует архитектуру client/server, но с www-интерфейсом вместо клиентской программы. Saint производит очень простой в чтении и понимании вывод с описанием проблем защиты, градуируемыми приоритетом (хотя не всегда правильными) и также поддерживает add-in модули сканирования, делающих его очень гибким. Saint доступен на http://www.wwdsi.com/saint.
Вообще-то, это не сканер, но позволяет быстро определить тип ОС на большом числе машин. Cheops представляет собой усиленный вариант "network neighborhood", он создает образ домена или IP-блока с указанием ОС и подобной инофрмации. Это чрезвычайно полезно для подготовки начального просмотра, поскольку Вы можете быстро найти интересные элементы (HP-принтеры, Ascend-роутеры и тому подобное). Cheops доступен на http://www.marko.net/cheops.
Две простых утилиты, которые сканируют серверы ftp и mail. Доступны на http://david.weekly.org/code.
Security Auditors Research Assistant (SARA) похож на SATAN и Saint. SARA поддерживает многопоточное сканирование, хранит свои данные в базе данных для простого доступа и строит хорошие HTML-отчеты. SARA свободна для использования и доступна с http://home.arc.com/sara.
BASS is the Bulk Auditing Security Scanner позволяет просмотреть internet на предмет известных эксплойтов. Скачать можно с http://www.securityfocus.com/data/tools/network/bass-1.0.7.tar.gz
Имеется также ряд программ, которые выполняют просмотр firewalls и другие тесты проникновения, чтобы выяснить, как firewall конфигурирован.
Firewalk программа, которая использует traceroute стиль пакетов, чтобы просмотреть firewall и пытаться выводить правила этого firewall. Не имеется никакой реальной защиты против этого кроме тихого отрицания пакетов вместо того, чтобы посылать сообщения отклонения. Я советую использовать этот инструмент против Ваших систем, поскольку результаты могут помочь Вам усилить защиту. Firewalk есть на http://www.packetfactory.net/firewalk.
Я не буду рассматривать эксплойты специально (их сотни, если не тысячи для Linux). Я только перечислю основные сайты, где их можно найти.
Один из главных архивных сайтов эксплойтов, имеет удобный поиск.
![]() Written by Kurt Seifried |
Автообновление и tarballs / tgz
Преобразование форматов файлов
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 и списков рассылки с информацией об ошибках и обновленниях пакетов доступны дальше в этом документе.
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 удобнее.
Наиболее современные дистрибутивы 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-пакеты могут иметь (и обычно имеют) PGP-подпись автора. Она может быть проверена, и в случае несовпадения, пакет, скорее всего, троянский. Это подробно описано в главе 7 в Maximum RPM (online-версия на http://www.rpm.org), проверка состоит из добавления ключей разработчиков к общему PGP-брелку, и затем использования опции -K, которая захватит соответствующий ключ и проверит сигнатуру.
dpkg поддерживает MD5. MD5 входит во многие дистрибутивы.
Многие tarballs распространяются с PGP-сигнатурами в отдельных ASCII-файлах, для их проверки добавьте ключ разработчиков к Вашему брелку и используйте PGP с опцией -o. PGP для Linux доступен на ftp://ftp.zedz.net.
Также используется GnuPG, полностью открытая исходная версия PGP, которая не использует никаких патентованных алгоритмов. Вы можете скачать ее с http://www.gnupg.org.
Другой путь проверки пакета состоит в том, чтобы создать MD5 контрольную сумму. Проблема в том, что как-то надо получить надежные данные о контрольной сумме. Обычно это делается по email после анонсирования павкета.
NSBD (not-so-bad-distribution) метод автоматического безопасного распространения и обновления пакетов по сети. Скачать можно с http://www.bell-labs.com/project/nsbd.
AutoRPM вероятно самый лучший инструмент для обновления rpm. Вам надо просто указать каталог ftp, после чего будут скачаны и установлены пакеты, которые являются более новыми чем те, которые Вы имеете. Пожалуйста имейте в виду что если кто-то отравляет Ваш кэш DNS, Вы легко попадете в неприятную историю, так что удостоверьтесь, что используете IP-адрес ftp-сайта, а не имя. AutoRPM требует установки пакета libnet Net::FTP для Perl и доступен на http://www.kaybee.org/~kirk/html/linux.html.
Rhlupdate также соединяется с ftp-сайтом и захватывает любые необходимые модификации, те же самые проблемы, что и в предыдущем случае, имеются и с ним. Также требуется, чтобы Вы установили пакет libnet Net::FTP для Perl. Скачать можно с ftp://missinglink.darkorb.net/pub/rhlupdate.
RpmWatch простой Perl-скрипт, который установит модификации. Обратите внимание, что пакеты должны быть доступны локально, хотя бы через NFS или CODA. RpmWatch лежит на http://www.iaehv.nl/users/grimaldo/info/scripts.
Менеджер пакетов 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.
Я не знаю никаких утилит, так что если знаете, сообщите мне (утилита должна хотя бы зеркалировать, автоматически распаковывать и выполнять ./configure; make; make install).
Если программа установлена путем компиляции исходников, а не из пакета, удалить ее бывает мягко говоря затруднительно.
installwatch контролируют все, что делает программа, и регистрирует любые изменения, которые она делает в системе, через syslog. Вы выполняете программу например как installwatch /usr/src/something/make (опционально можно задать o filename для записи протокола в специальный файл filename). installwatch доступна на http://datanord.datanord.it/~pdemauro/installwatch.
instmon запускается до и после установки пакетов tarball/tgz. Он создает список измененных файлов, который можно потом использовать для отмены изменений. Доступен на: http://hal.csd.auth.gr/~vvas/instmon.
Другой способ иметь дело с пакетами: преобразовывать их. Имеется несколько утилит, чтобы преобразовать rpm-файлы в tarballs, rpm в deb и тому подобное.
alien возможно лучшая утилитав для конвертации файлов. Поддерживает rpm, deb и tarball. Скачать можно с http://kitenet.net/programs/alien .
slurp ведет себя подобно installwatch, но имеет и возможности alien. Он отслеживает систему при установке пакетов и создает из него rpm-пакет. Вы можете скачать slurp с http://students.vassar.edu/~jajohnst/slurp.
Проблема с Linux возникает при поиске софта, не поставляемого в дистрибутиве. Поиск через Internet особыми прелестями не отличается. Но есть несколько приятных ресурсов:
Основной проблемой защиты в Linux является то, что программы либо написаны с дырами, либо опасно поставлены. Большинство дыр (в том числе наиболее популярная buffer overruns) вызваны именно этим. Проблемы становятся еще заметней, когда программа выполняется через механизм etuid как root. Есть ряд приемов, которые позволяют программисту избежать проблем.
Эта энциклопедия описывает много приемов безопасного программирования вообще, и специфики Linux в частности. Скачать можно с http://www.dwheeler.com/secure-programs.
Этот документ освещает вопросы безопасного программирования, в том числе ряд низкоуровневых моментов: inherited trust, sharing credentials и подобное. Документ доступен на http://www.whitefang.com/sup и я очень рекомендую почитать его всем, кто собирается что-то писать для Linux (или UNIX вообще).
Secure Internet Programming (SIP) лаборатория (из-за отсутствия лучшего слова) которая изучает компьютерную защиту, и более определенно проблемы с подвижным кодом типа Java и ActiveX. Они имеют ряд интересных проектов и много интерактивных публикаций, которые дают превосходное чтение. Если Вы собираетесь программировать на Java, посетите их сайт: http://www.cs.princeton.edu/sip.
Writing Safe Setuid Programs чрезвычайно всесторонняя работа, которая охватывает почти все и доступна в формате HTML для простого чтения. Должна быть изучена любым, кто использует setuid-программы, уже не говоря о тех, кто их пишет. Доступно на http://olympus.cs.ucdavis.edu/~bishop/secprog.html.
userv позволяет программам вызывать другие программы более безопасным способом, чем обычно. Это полезно для программ, которые требуют уровней доступа выше, чем нормальный пользователь, но Вы не хотите давать им root-доступ. Доступно на http://www.chiark.greenend.org.uk/~ian/userv.
Есть ряд типичных программистских ошибок, которые делают программы уязвимыми. Есть и инструменты для тестирования на эти ошибки.
Написан Ben Woodward, fuzz частично интеллектуальная программа, которая дает совершенно неожиданные исходные данные и смотрит на реакцию программы (то есть, не свалится ли она?). fuzz доступен на http://fuzz.sourceforge.net.
Есть несколько патчей компилятора для повышения безопасности.
Stackguard представляет собой набор патчей для GCC, которые компилируют программы так, чтобы предотвратить их от записи в те места памяти, куда они не должны ничего записывать (это простое объяснение, web-сайт Stackguard имеет кудабольше деталей). Stackguard разрывает некоторые функциональные возможности: программы подобные gdb и другие отладчики будут терпеть неудачу, но это не имеет значения для отлаженных программ. Скачать Stackguard можно с http://www.immunix.org.
Stack Shield альтернативный метод защиты Linux от переполнения буфера, но я его не пробовал. Скачать можно с http://www.angelfire.com/sk/stackshield.
![]() Written by Kurt Seifried |