Участник:Clint/Черновики
Материал из Xgu.ru
Черновые заметки Сергея Черепенина.
Therefore http://www.felipelopezfoundation.org/ Garcinia Cambogia Classification of garcinia cambogia style .
[править] Добавление в initrd модулей SATA в Debian
Необходимо:
- Создать каталог
/lib/modules/verion_kernel/initrd
- В него положить необходимые модули
- Эти модули будут добавлены в initrd командой
mkinitrd -o /boot/initrd.img-2.6.15.2.mod 2.6.15.2
- Изменить menu.lst
- Проверить fstab
[править] Пересборка initrd
- Создаём рабочий каталог
mkdir /tmp/NEW ; cd /tmp/NEW
- Копируем необходимый образ initrd в каталог /tmp
cp /boot/initrd.img ..
- Смотрим что за файл:
file /boot/initrd.img /boot/initrd.img: gzip compressed data, was "initrd.img.cpio2", from Unix, last modified: Thu Aug 10 17:19:31 2006
- Отсюда видно, что файл сжат программой gzip, распаковываем его:
mv initrd.img initrd.img.gz gzip -d initrd.img.gz
- Снова смотрим что за файл:
file initrd.img initrd.img: ASCII cpio archive (SVR4 with no CRC)
- Это cpio архив, распаковываем:
cpio -iv < ../initrd.img
- В каталоге /tmp/NEW будет создано дерево каталогов распакованного образа initrd, в каталог /tmp/NEW/lib копируем необходимые модули:
cp /lib/modules/версия ядра/kernel/drivers/нужный модуль.ko lib/
- В файле /tmp/NEW/init необходимо добавить стороки для загрузки модуля:
vi init >> echo "Loading нужный модуль.ko module" >> insmod /lib/нужный модуль.ko
- Сжимаем обратно образ. Сначала cpio:
find ./ | cpio -H newc -o > /boot/new-initrd.img
- Потом gzip:
gzip /boot/new-initrd.img
- Исправляем записи в конфигурационном файле grub:
vi /boot/grub/grub.conf
[править] Установка монитора виртуальных машин Xen
apt-get install libvncserver-dev bcc bin86 elks-libc zlib1g-dev libgcrypt11-dev libcrypto++-dev libssl0.9.8 libcurl3-dev python2.4-devlibxxf86misc-dev libxkbfile-dev qemu bzip2 ntpdate vim patch console-cyrillic
- Отключение сообщений об ошибке usb-устройств
echo 1 1 1 1 > /proc/sys/kernel/printk
[править] Расходный материал
Из переписки:
> что я сделал? > 1.apt-get install udev > 2.в /etc/mkinitrd/mkinitrd.conf дописал yes > BUSYBOX=yes > 2а.что в файле /etc/mkinitrd/modules > > > ahci > ata_piix > libata > sata_mv > sata_nv > sata_promise > sata_qstor > sata_sil24 > sata_sil > sata_sis > sata_svw > sata_sx4 > sata_via > sata_vsc > scsi_debug > scsi_mod > sd_mod > sr_mod > > 2б.Что в каталоге /lib/modules/2.6.16.13-xen/initrd/ > > ahci.ko > ata_piix.ko > libata.ko > sata_mv.ko > sata_nv.ko > sata_promise.ko > sata_qstor.ko > sata_sil24.ko > sata_sil.ko > sata_sis.ko > sata_svw.ko > sata_sx4.ko > sata_via.ko > sata_vsc.ko > scsi_debug.ko > scsi_mod.ko > sd_mod.ko > sr_mod.ko > > 2в.depmod -a 2.6.16.13-xen > > 3.mkinitrd -o /boot/initrd-xen-test 2.6.16.13-xen > > 4.При попытке загрузится с него происходит та же ошибка - не могу примонтировать root > > 5.И теперь: > mount -o loop -t cramfs /boot/initrd-xen-test /mnt/1 > dd if=/dev/zero of=/tmp/newimage count=31000 bs=512 > mkfs.etx2 /tmp/newimage > mount -o loop /tmp/newimage /mnt/2 > rsync -auv /mnt/1/ /mnt/2/ > umount /mnt/1 > gzip -9 /tmp/newimage > cp /tmp/newimage.gz /boot > reboot >
[править] Установка и настройка ftp-сервера proftpd с поддержкой MySQL
ОС Debian Etch Установка необходимых пакетов:
apt-get install proftpd mysql-server
Создание баз и таблиц в MySQL:
mysql -u root -p Enter password: Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 13 Server version: 5.0.45-Debian_1-log Debian etch distribution Type 'help;' or '\h' for help. Type '\c' to clear the buffer. mysql> show databases; +--------------------+ | Database | +--------------------+ | information_schema | | mysql | +--------------------+ 2 rows in set (0.00 sec) mysql> create database proftpd; Query OK, 1 row affected (0.00 sec) mysql> use proftpd; Database changed mysql> CREATE TABLE users ( -> userid VARCHAR(30) NOT NULL UNIQUE, -> passwd VARCHAR(80) NOT NULL, -> uid INTEGER UNIQUE, -> gid INTEGER, -> homedir VARCHAR(255), -> shell VARCHAR(255) -> ); Query OK, 0 rows affected (0.02 sec) mysql> CREATE TABLE groups ( -> groupname VARCHAR(30) NOT NULL, -> gid INTEGER NOT NULL, -> members VARCHAR(255) -> ); Query OK, 0 rows affected (0.01 sec) mysql> insert into groups values('ftp','5001',''); Query OK, 1 row affected (0.00 sec) mysql> insert into users values('test','testftp','5001','5001','/home/ftp/test','/sbin/nologin'); Query OK, 1 row affected (0.00 sec) mysql> show tables -> ; +-------------------+ | Tables_in_proftpd | +-------------------+ | groups | | users | +-------------------+ 2 rows in set (0.00 sec) mysql> describe users -> ; +---------+--------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +---------+--------------+------+-----+---------+-------+ | userid | varchar(30) | NO | PRI | | | | passwd | varchar(80) | NO | | | | | uid | int(11) | YES | UNI | NULL | | | gid | int(11) | YES | | NULL | | | homedir | varchar(255) | YES | | NULL | | | shell | varchar(255) | YES | | NULL | | +---------+--------------+------+-----+---------+-------+ 6 rows in set (0.00 sec) mysql> select * from users; +--------+---------+------+------+----------------+---------------+ | userid | passwd | uid | gid | homedir | shell | +--------+---------+------+------+----------------+---------------+ | test | testftp | 5001 | 5001 | /home/ftp/test | /sbin/nologin | +--------+---------+------+------+----------------+---------------+ 1 row in set (0.00 sec)
Настройка proftpd:
egrep -v "^#|\ $" /etc/proftpd/proftpd.conf Include /etc/proftpd/modules.conf UseIPv6 off ServerName "Debian" ServerType standalone DeferWelcome off MultilineRFC2228 on DefaultServer on ShowSymlinks on TimeoutNoTransfer 600 TimeoutStalled 600 TimeoutIdle 1200 DisplayLogin welcome.msg DisplayFirstChdir .message ListOptions "-l" DenyFilter \*.*/ Port 21 MaxInstances 30 User proftpd Group nogroup Umask 022 022 AllowOverwrite on <IfModule mod_sql.c> SQLBackend mysql SQLConnectInfo proftpd@localhost:3306 root rootpass SQLAuthTypes Backend PlainText SQLUserInfo users userid passwd uid gid homedir shell DefaultRoot ~ RequireValidShell off SQLGroupInfo groups groupname gid members SQLAuthenticate users groups SQLLogFile /var/log/proftpd.log </IfModule> TransferLog /var/log/proftpd/xferlog SystemLog /var/log/proftpd/proftpd.log <IfModule mod_tls.c> TLSEngine off </IfModule> <IfModule mod_quota.c> QuotaEngine on </IfModule> <IfModule mod_ratio.c> Ratios on </IfModule> <IfModule mod_delay.c> DelayEngine on </IfModule> <IfModule mod_ctrls.c> ControlsEngine on ControlsMaxClients 2 ControlsLog /var/log/proftpd/controls.log ControlsInterval 5 ControlsSocket /var/run/proftpd/proftpd.sock </IfModule> <IfModule mod_ctrls_admin.c> AdminControlsEngine on </IfModule>
Создание домашнего каталога для ftp пользователя:
sudo mkdir /home/ftp/test sudo chown 5001:5001 /home/ftp/test sudo touch /home/ftp/test/test_file
Проверка:
ftp 77.123.137.68 Connected to 77.123.137.68. 220 ProFTPD 1.3.0 Server (Debian) [77.123.137.68] Name (77.123.137.68:clint): test 331 Password required for test. Password: 230 User test logged in. Remote system type is UNIX. Using binary mode to transfer files. ftp> ls 200 PORT command successful 150 Opening ASCII mode data connection for file list -rw-r--r-- 1 root root 0 Aug 19 19:58 test_file 226 Transfer complete. ftp> quit 221 Goodbye.
[править] Использование стандартной таблицы mysql.user
mysql> use mysql Database changed mysql> show tables; +---------------------------+ | Tables_in_mysql | +---------------------------+ | columns_priv | | db | | func | | help_category | | help_keyword | | help_relation | | help_topic | | host | | proc | | procs_priv | | tables_priv | | time_zone | | time_zone_leap_second | | time_zone_name | | time_zone_transition | | time_zone_transition_type | | user | +---------------------------+ 17 rows in set (0.00 sec)
- Создание пользователя
create user 'ftptestuser'@'%';
- Пароль
set password for 'ftptestuser'=PASSWORD('password');
- Настройка proftpd на использование таблицы mysql.user
База mysql:
SQLConnectInfo mysql@localhost:3306 root password
Проверка пароля:
SQLAuthTypes Backend
Так как в таблице mysql.user отсутствуют поля для uid, gid, homedir, shell, то необходимо изменить следующее (если поле shell указано как null, то оно не используется):
SQLDefaultUID 5002 SQLDefaultGID 5002 SQLDefaultHomedir /home/ftp/test2
Таблица user и поля:
SQLUserInfo user user password null null null null
Так как в таблице mysql.user нет информации о группах, то отключаем использование информации о группах:
SQLAuthenticate users
- Проверка:
ftp 77.123.137.68 Connected to 77.123.137.68. 220 ProFTPD 1.3.0 Server (Debian) [77.123.137.68] Name (77.123.137.68:clint): ftptestuser 331 Password required for ftptestuser. Password: 230 User ftptestuser logged in. Remote system type is UNIX. Using binary mode to transfer files. ftp> pwd 257 "/" is current directory. ftp> ls 200 PORT command successful 150 Opening ASCII mode data connection for file list -rw-r--r-- 1 root root 0 Aug 19 22:00 testfile_test2 226 Transfer complete. ftp> quit 221 Goodbye.
- Конфиг сервера:
egrep -v "^#|\ $" /etc/proftpd/proftpd.conf Include /etc/proftpd/modules.conf UseIPv6 off ServerName "Debian" ServerType standalone DeferWelcome off MultilineRFC2228 on DefaultServer on ShowSymlinks on TimeoutNoTransfer 600 TimeoutStalled 600 TimeoutIdle 1200 DisplayLogin welcome.msg DisplayFirstChdir .message ListOptions "-l" DenyFilter \*.*/ Port 21 MaxInstances 30 User proftpd Group nogroup Umask 022 022 AllowOverwrite on <IfModule mod_sql.c> SQLBackend mysql SQLConnectInfo mysql@localhost:3306 root password SQLAuthTypes Backend PlainText SQLDefaultUID 5002 SQLDefaultGID 5002 SQLDefaultHomedir /home/ftp/test2 SQLUserInfo user user password null null null null DefaultRoot ~ RequireValidShell off SQLAuthenticate users SQLLogFile /var/log/proftpd/proftpd.log </IfModule> TransferLog /var/log/proftpd/xferlog SystemLog /var/log/proftpd/proftpd.log <IfModule mod_tls.c> TLSEngine off </IfModule> <IfModule mod_quota.c> QuotaEngine on </IfModule> <IfModule mod_ratio.c> Ratios on </IfModule> <IfModule mod_delay.c> DelayEngine on </IfModule> <IfModule mod_ctrls.c> ControlsEngine on ControlsMaxClients 2 ControlsLog /var/log/proftpd/controls.log ControlsInterval 5 ControlsSocket /var/run/proftpd/proftpd.sock </IfModule> <IfModule mod_ctrls_admin.c> AdminControlsEngine on </IfModule>
[править] Базовая настройка прокси-сервера squid
[править] Установка и начальная настройка
- Настройка интерфейсов такова:
# ifconfig eth0 Link encap:Ethernet HWaddr AA:00:00:00:00:03 inet addr:192.168.16.200 Bcast:192.168.16.255 Mask:255.255.255.0 UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:2749 errors:0 dropped:0 overruns:0 frame:0 TX packets:1766 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:1656718 (1.5 MiB) TX bytes:272841 (266.4 KiB) lo Link encap:Local Loopback inet addr:127.0.0.1 Mask:255.0.0.0 UP LOOPBACK RUNNING MTU:16436 Metric:1 RX packets:763 errors:0 dropped:0 overruns:0 frame:0 TX packets:763 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0 RX bytes:333837 (326.0 KiB) TX bytes:333837 (326.0 KiB)
- Посмотрим, ведется ли прослушивание порта прокси-сервера:
# netstat -lnp | grep :3128
- Установка:
# apt-get install squid Чтение списков пакетов... Готово Построение дерева зависимостей... Готово Будут установлены следующие дополнительные пакеты: squid-common Предлагаемые пакеты: squidclient squid-cgi logcheck-database resolvconf smbclient НОВЫЕ пакеты, которые будут установлены: squid squid-common обновлено 0, установлено 2 новых пакетов, для удаления отмечено 0 пакетов, и 47 пакетов не обновлено. Необходимо скачать 1061kБ архивов. ... Выбор ранее не выбранного пакета squid-common. (Чтение базы данных... на данный момент установлено 24580 файлов и каталогов.) Распаковывается пакет squid-common (из файла .../squid-common_2.6.3-1_all.deb)... Выбор ранее не выбранного пакета squid. Распаковывается пакет squid (из файла .../squid_2.6.3-1_i386.deb)... Настраивается пакет squid-common (2.6.3-1) ... Настраивается пакет squid (2.6.3-1) ... Creating squid spool directory structure 2006/10/12 17:00:34| Creating Swap Directories Restarting Squid HTTP proxy: squid.
Еще раз проверяем прослушивание порта squid:
# netstat -lnp | grep :3128 tcp 0 0 0.0.0.0:3128 0.0.0.0:* LISTEN 3394/(squid)
Промотрим файл конфигурации:
- http_port - порт прослушивания, по умолчанию 3128, взможны другие варианты записи, в версии 2.3 можно указывать перед портом имя хоста или IP-адрес:
http_port 3128
- cache_mgr - Адрес электроннй почты администратора прокси-сервера, по умолчанию имеет значение webmaster
- ftp_user - Описание пользователя для анонимного входа
- hierarchy_stoplist (список строк - через пробел, - при встрече которых в URL, запрос будет направлен сразу напрямую, а не "по соседям"; по-умолчанию - "cgi-bin ?"):
hierarchy_stoplist cgi-bin ?
- Постараться не кэшировать эти файлы:
acl QUERY urlpath_regex cgi-bin \? cache deny QUERY
- Размер кэша( В ЧЕМ?), количество каталогов первого уровня в каталоге /var/spool/squid и ворого уровня того же каталога
cache_dir ufs /var/spool/squid 100 16 256
- Настройка логирования:
access_log /var/log/squid/access.log squid cache_log /var/log/squid/cache.log cache_store_log none
- Программа аутентификации и путь к файлу с паролями:
auth_param basic program /usr/lib/squid/ncsa_auth /usr/etc/passwd
- Ограничение на количество дочерних процессов:
auth_param basic children 5
- Определение имени хоста и домена, которое будет указываться в заголовке окна аутентификации:
auth_param basic realm Squid proxy-caching web server
- Оределение времени, в течении которго пара username:password действительны. По соображениям безопасности дефолтное значение 2 часа:
auth_param basic credentialsttl 2 hours
- Определение чуствительности к регистру в имени пользователя:
auth_param basic casesensitive off
- Дефолтные настройки определения срока жизни данных кэша squid. Данные описываются регулярными выражениями:
#Suggested default: refresh_pattern ^ftp: 1440 20% 10080 refresh_pattern ^gopher: 1440 0% 1440 refresh_pattern . 0 20% 4320
* Запись вида
refresh_pattern [-i] regex MIN_AGE(В ЧЕМ?) percent MAX_AGE[options]
- Рекомендуемый минимум access листов:
#Recommended minimum configuration: acl all src 0.0.0.0/0.0.0.0 acl manager proto cache_object acl localhost src 127.0.0.1/255.255.255.255 acl to_localhost dst 127.0.0.0/8 acl SSL_ports port 443 563 # https, snews acl SSL_ports port 873 # rsync acl Safe_ports port 80 # http acl Safe_ports port 21 # ftp acl Safe_ports port 443 563 # https, snews acl Safe_ports port 70 # gopher acl Safe_ports port 210 # wais acl Safe_ports port 1025-65535 # unregistered ports acl Safe_ports port 280 # http-mgmt acl Safe_ports port 488 # gss-http acl Safe_ports port 591 # filemaker acl Safe_ports port 777 # multiling http acl Safe_ports port 631 # cups acl Safe_ports port 873 # rsync acl Safe_ports port 901 # SWAT acl purge method PURGE acl CONNECT method CONNECT
- И рекомендуемый минимум правил доступа по access листам:
#Recommended minimum configuration: # # Only allow cachemgr access from localhost http_access allow manager localhost http_access deny manager # Only allow purge requests from localhost http_access allow purge localhost http_access deny purge # Deny requests to unknown ports http_access deny !Safe_ports # Deny CONNECT to other than SSL ports http_access deny CONNECT !SSL_ports
- Проверим - отвечает ли на интерфейсах squid:
# telnet 127.0.0.1 3128 Trying 127.0.0.1... Connected to 127.0.0.1. Escape character is '^]'. ^] telnet> q Connection closed. # telnet 192.168.16.200 3128 Trying 192.168.16.200... Connected to 192.168.16.200. Escape character is '^]'. ^] telnet> q Connection closed.
- Как видно - всё работает.
- Проверяем: в настройках internet-browser`a необходимо указать прокси-сервер 127.0.0.1 на порту 3128 - выход в интернет имеется.Если прописать сейчас в качестве прокси-сервера адрес 192.168.16.200:3128 то работать ничего не будет. Это означает, что прокси -сервер в дефолтной конфигурации настроен на access localhost only!
[править] Администрирование прокси-сервера
[править] Разрешение доступа к сети Интернет пользователям сети
Для решения зтой задачи необходимо указвать явно в конфигурационном файле /etc/squid/squid.conf хосты или сети, которым разрешать доступ к Интернет.
- Например, для раазрешения доступа к сети Интернет сети 192.168.16.0/24 необходимо вписать в /etc/squid/squid.conf следующие строки:
# vi /etc/squid/squid.conf 2577,2578c2577,2579 < #acl our_networks src 192.168.1.0/24 192.168.2.0/24 < #http_access allow our_networks --- > acl our_networks src 192.168.16.0/24 > http_access allow our_networks
- Даём:
squid -k reconfigure
и проблема решена.
[править] Парольная аутентификация
- Если есть необходимость устроить парольную аутентификацию пользователей сети 192.168.16.0/24 то необходимо немного модифицировать конфигурационный файл:
# vi /etc/squid/squid.conf 1799,1803c1799,1803 < #auth_param basic program <uncomment and complete this line> < #auth_param basic children 5 < #auth_param basic realm Squid proxy-caching web server < #auth_param basic credentialsttl 2 hours < #auth_param basic casesensitive off --- > auth_param basic program /usr/lib/squid/ncsa_auth /etc/squid/passwd > auth_param basic children 5 > auth_param basic realm Squid proxy-caching web server > auth_param basic credentialsttl 2 hours > auth_param basic casesensitive off
- Назначение этих строк описано выше.
- Кроме этого необходимо:
- назначить авторизацию acl листу; - определить группу пользователей для аутентификации.
# vi /etc/squid/squid.conf > acl myacl proxy_auth REQUIRED < http_access allow our_networks --- > http_access allow our_networks myacl
- Генерацию пар пользователь-пароль можно выполнить внешней программой htpasswd, которая входит в состав пакета apache2-utils:
htpasswd -c /etc/squid/passwd foo New password: Re-type new password: Adding password for user foo
- Теперь
squid -k reconfigure
и после настойки броузера все должно работать.
[править] Ограничение доступа отдельным пользователям
- Если необходимо запретить доступ отельным пользователям (в примере nouser), то необходимо ввести следующие строки в /etc/squid/squid.conf
acl deny_users proxy_auth nouser http_access deny deny_users
Или при объединении с другими acl:
acl deny_users proxy_auth nouser acl no_google url_regex -i search acl daytime time 08:00-17:00 http_access deny deny_users no_google daytime
И пользователь nouser не сможет осуществлять поиск через google с 8 до 17 часов
[править] Ограничение доступа на определённые сайты и домены
- Если существует необходимость ограничить доступ на определенные сайты, то нужно их описать:
# vi /etc/squid/squid.conf > acl nomailru url_regex -i ^http://mail.ru > http_access deny nomailru
- Теперь
squid -k reconfigureи на mail.ru не зайти.
- Есть возможность описывать запрещенные сайты группами - по доменам:
vi /etc/squid/squid.conf 50,51c50,53 > acl no_google_search dstdomain .google.com > http_access deny no_google_search
- И все попытки поиска в google завершатся неудачей для пользователя.
[править] Блокирование определённого трафика на примере редиректора rejik3
- Наверняка может возникнуть необходимость блокирования определенного тррфика ( например сайты и файлы mp3 или порнографические сайты). Рассмотрим на примере программы http://rejik.ru/index.html
Инсталляция и настройка на сайте http://rejik.ru/index.html
- И далее, принятым в операционной системе методом, устанавливаем необходимые программы:
# wget http://rejik.ru/download/redirector-3.2.1.tgz --17:59:01-- http://rejik.ru/download/redirector-3.2.1.tgz => `redirector-3.2.1.tgz' Распознаётся rejik.ru... 84.252.152.241 Устанавливается соединение с rejik.ru|84.252.152.241|:80... соединение установлено. Запрос HTTP послан, ожидается ответ... 200 OK Длина: 46.022 (45K) [application/x-tar] 100%[====================================>] 46.022 68.29K/s 17:59:02 (68.17 KB/s) - `redirector-3.2.1.tgz' сохранён [46022/46022] # tar xvzfC redirector-3.2.1.tgz /usr/src redirector-3.2.1/ redirector-3.2.1/tools/ redirector-3.2.1/tools/benchmark redirector-3.2.1/tools/IN.gz redirector-3.2.1/tools/kill-cache redirector-3.2.1/AUTHORS redirector-3.2.1/COPYING redirector-3.2.1/INSTALL redirector-3.2.1/Makefile redirector-3.2.1/VERSION ... redirector-3.2.1/prune_urls.c redirector-3.2.1/redirect.c redirector-3.2.1/redirector.c redirector-3.2.1/redirector.conf.dist redirector-3.2.1/run_make_cache.c redirector-3.2.1/vars.h redirector-3.2.1/write_cache.c redirector-3.2.1/raw_change.c redirector-3.2.1/pass.c redirector-3.2.1/Log # cd /usr/src/redirector-3.2.1/ # vi Makefile 3,4c3,4 < SQUID_USER=nobody < SQUID_GROUP=nogroup --- > SQUID_USER=proxy > SQUID_GROUP=proxy # apt-get install libpcre3-dev Чтение списков пакетов... Готово Построение дерева зависимостей... Готово Будут установлены следующие дополнительные пакеты: libc6-dev libpcre3 libpcrecpp0 linux-kernel-headers Предлагаемые пакеты: glibc-doc manpages-dev НОВЫЕ пакеты, которые будут установлены: libc6-dev libpcre3-dev libpcrecpp0 linux-kernel-headers Пакеты, которые будут обновлены: libpcre3 ... Распаковывается замена для пакета libpcre3... Выбор ранее не выбранного пакета libpcrecpp0. Распаковывается пакет libpcrecpp0 (из файла .../libpcrecpp0_6.7-1_i386.deb)... Выбор ранее не выбранного пакета libpcre3-dev. Распаковывается пакет libpcre3-dev (из файла .../libpcre3-dev_6.7-1_i386.deb)... Настраивается пакет linux-kernel-headers (2.6.17.10-3) ... Настраивается пакет libc6-dev (2.3.6.ds1-4) ... Настраивается пакет libpcre3 (6.7-1) ... Настраивается пакет libpcrecpp0 (6.7-1) ... Настраивается пакет libpcre3-dev (6.7-1) .. # make rm -f pass.o raw_change.o load_cache.o pcre.o parse_input.o init_vars.o check_urls.o run_make_cache.o new_url.o redirect.o err_mes.o now.o get_opt.o parse_urls.o cache2url.o ip.o id.o comparing.o load_urls.o prune_urls.o write_cache.o need_cache_update.o err_mes.o now.o get_opt.o parse_urls.o cache2url.o ip.o id.o comparing.o redirector make-cache OUT gcc -Wall -I/usr/include -I/usr/local/include -I/usr/include/pcre -c pass.c gcc -Wall -I/usr/include -I/usr/local/include -I/usr/include/pcre -c raw_change.c raw_change.c: In function ‘raw_change’: raw_change.c:25: warning: pointer targets in passing argument 1 of ‘strstr’ differ in signedness raw_change.c:25: warning: pointer targets in passing argument 2 of ‘strstr’ differ in signedness raw_change.c:25: warning: pointer targets in assignment differ in signedness raw_change.c:33: warning: pointer targets in passing argument 1 of ‘strlen’ differ in signedness raw_change.c:34: warning: pointer targets in passing argument 1 of ‘strlen’ differ in signedness raw_change.c:35: warning: pointer targets in passing argument 1 of ‘strchr’ differ in signedness ... redirector.c:51: warning: pointer targets in passing argument 1 of ‘fopen’ differ in signedness redirector.c:53: warning: pointer targets in passing argument 1 of ‘sprintf’ differ in signedness redirector.c:54: warning: pointer targets in passing argument 1 of ‘printf’ differ in signedness redirector.c:69: warning: pointer targets in passing argument 1 of ‘fgets’ differ in signedness redirector.c:78: warning: pointer targets in passing argument 1 of ‘sprintf’ differ in signedness redirector.c:79: warning: pointer targets in passing argument 1 of ‘err_mes’ differ in signedness redirector.c:133: warning: pointer targets in passing argument 2 of ‘parse_urls’ differ in signedness redirector.c:136: warning: pointer targets in passing argument 1 of ‘sprintf’ differ in signedness redirector.c:137: warning: pointer targets in passing argument 1 of ‘err_mes’ differ in signedness gcc -Wall -I/usr/include -I/usr/local/include -I/usr/include/pcre -o make-cache make-cache.c -L/lib `pcre-config --libs` load_urls.o prune_urls.o write_cache.o need_cache_update.o err_mes.o now.o get_opt.o parse_urls.o cache2url.o ip.o id.o comparing.o # make install mkdir -p /usr/local/rejik3/tools cp make-cache /usr/local/rejik3 cp redirector /usr/local/rejik3 cp redirector.conf.dist /usr/local/rejik3 echo "#!/bin/sh" > /usr/local/rejik3/tools/check-redirector echo 'su proxy -c "echo \"http://sex.ru 127.0.0.1/- - GET\" | /usr/local/rejik3/redirector /usr/local/rejik3/redirector.conf;"' >> /usr/local/rejik3/tools/check-redirector chmod 755 /usr/local/rejik3/tools/check-redirector echo "#!/bin/sh" > /usr/local/rejik3/tools/set-permissions echo 'chown -R proxy:proxy /usr/local/rejik3' >> /usr/local/rejik3/tools/set-permissions chmod 755 /usr/local/rejik3/tools/set-permissions cp tools/kill-cache /usr/local/rejik3/tools chmod 755 /usr/local/rejik3/tools/kill-cache cp tools/benchmark /usr/local/rejik3/tools chmod 755 /usr/local/rejik3/tools/benchmark cp tools/IN.gz /usr/local/rejik3/tools chmod 644 /usr/local/rejik3/tools/IN.gz chown -R proxy:proxy /usr/local/rejik3 chmod 770 /usr/local/rejik3 chmod 644 /usr/local/rejik3/redirector.conf.dist chmod 755 /usr/local/rejik3/redirector chmod 755 /usr/local/rejik3/make-cache
</pre>
- Необходимо переименовать и поправить файл:
#mv /usr/local/rejik3/redirector.conf.dist /usr/local/rejik3/redirector.conf #vi /usr/local/rejik3/redirector.conf < error_log /usr/local/rejik3/redirector.err < change_log /usr/local/rejik3/redirector.log --- > error_log /var/log/squid/redirector.err > change_log /var/log/squid/redirector.log
- Таким образом настроена система журнализации редиректора.
- Теперь необходим список сайтов для органиченя доступа пользователей сети:
#wget http://rejik.ru/download/banlists-2.x.x.tgz -18:03:11-- http://rejik.ru/download/banlists-2.x.x.tgz => `banlists-2.x.x.tgz' Распознаётся rejik.ru... 84.252.152.241 Устанавливается соединение с rejik.ru|84.252.152.241|:80... соединение установлено. Запрос HTTP послан, ожидается ответ... 200 OK Длина: 116.100 (113K) [application/x-tar] 100%[====================================>] 116.100 146.11K/s 18:03:12 (145.75 KB/s) - `banlists-2.x.x.tgz' сохранён [116100/116100]
- И распаковываем в /usr/local/rejik3/:
# tar xvzfC banlists-2.x.x.tgz /usr/local/rejik3/ banlists/ banlists/porno/ banlists/porno/urls banlists/banners/ banlists/banners/urls banlists/banners/pcre banlists/js/ banlists/js/urls banlists/mp3/ banlists/mp3/pcre
- Теперь необходимо поставить, если он еще не установлен в системе, веб-сервер apache:
# apt-get install apache Чтение списков пакетов... Готово Построение дерева зависимостей... Готово Будут установлены следующие дополнительные пакеты: apache-common mime-support Предлагаемые пакеты: apache-doc apache-ssl apache-perl НОВЫЕ пакеты, которые будут установлены: apache apache-common mime-support обновлено 0, установлено 3 новых пакетов, для удаления отмечено 0 пакетов, и 53 пакетов не обновлено. Необходимо скачать 1270kБ архивов. ... Настраивается пакет mime-support (3.37-1) ... Настраивается пакет apache-common (1.3.34-4) ... Настраивается пакет apache (1.3.34-4) ... WARNING: local host name (;; connection timed out; no servers could be reached) is not qualified; see cf/README: WHO AM I? /etc/mail/aliases: 5 aliases, longest 10 bytes, 79 bytes total Creating config file /etc/apache/httpd.conf with new version Creating config file /etc/apache/srm.conf with new version Creating config file /etc/apache/access.conf with new version Creating config file /etc/apache/modules.conf with new version Starting apache 1.3 web server....
- Проверяем:
# netstat -lnp | grep :80 tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 6247/apache
- И устанавливаем сами странички, которые будут нервировать пользователей:
# wget http://rejik.ru/download/www.tgz --18:04:54-- http://rejik.ru/download/www.tgz => `www.tgz' Распознаётся rejik.ru... 84.252.152.241 Устанавливается соединение с rejik.ru|84.252.152.241|:80... соединение установлено. Запрос HTTP послан, ожидается ответ... 200 OK Длина: 824 [application/x-tar] 100%[====================================>] 824 --.--K/s 18:04:54 (90.81 KB/s) - `www.tgz' сохранён [824/824]
- Распаковываем в /var/www/:
# tar xvzfC www.tgz /var/www/ www/ www/1x1.gif www/js.js www/mp3.html www/porno.html
Согласно /usr/local/rejik3/redirector.conf:
# mv /var/www/www /var/www/ban
Для корректного отображения символов страничек замены в /etc/apache/httpd.conf
# vi /etc/apache/httpd.conf 838c838,839 < AddDefaultCharset on --- > AddDefaultCharset off
- И далее:
# apachectl restart
- Прописываем в squid наш redirector:
# vi /etc/squid/squid.conf 1519a1520,1522 > url_rewrite_program /usr/local/rejik3/redirector /usr/local/rejik3/redirector.conf
- Проверяем:
# ls -l /usr/local/rejik3/ итого 100 drwxr-xr-x 6 nobody nogroup 4096 2006-10-12 21:40 banlists -rwxr-xr-x 1 proxy proxy 39108 2006-10-12 18:01 make-cache -rwxr-xr-x 1 proxy proxy 43897 2006-10-12 18:01 redirector -rw-r--r-- 1 nobody nogroup 3046 2006-10-12 18:09 redirector.conf -rw-r--r-- 1 proxy proxy 3052 2006-10-12 18:01 redirector.conf.dist drwxr-sr-x 2 proxy proxy 4096 2006-10-12 18:01 tools
- Такого быть не должно:
# chown -R proxy:proxy /usr/local/rejik3/
- И
# ls -l /usr/local/rejik3/ итого 100 drwxr-xr-x 6 proxy proxy 4096 2006-10-12 21:40 banlists -rwxr-xr-x 1 proxy proxy 39108 2006-10-12 18:01 make-cache -rwxr-xr-x 1 proxy proxy 43897 2006-10-12 18:01 redirector -rw-r--r-- 1 proxy proxy 3046 2006-10-12 18:09 redirector.conf -rw-r--r-- 1 proxy proxy 3052 2006-10-12 18:01 redirector.conf.dist drwxr-sr-x 2 proxy proxy 4096 2006-10-12 18:01 tools
- Проверим доступность страничек замены запрещенных веб-сайтов:
#. /usr/local/rejik3/tools/check-redirector http://127.0.0.1/ban/porno.html 127.0.0.1/- - GET
- Теперь сртаничка замены видна по адресу http://127.0.0.1/ban/porno.html в браузере.
- Теперь не будем запускать squid демоном, а привяжем его к терминалу для отладки:
# squid -d 1 -N 2006/10/12 21:43:57| Starting Squid Cache version 2.6.STABLE3 for i386-debian-linux-gnu... 2006/10/12 21:43:57| Process ID 7486 2006/10/12 21:43:57| With 1024 file descriptors available 2006/10/12 21:43:57| Using epoll for the IO loop 2006/10/12 21:43:57| Performing DNS Tests... 2006/10/12 21:43:57| Successful DNS name lookup tests... 2006/10/12 21:43:57| DNS Socket created at 0.0.0.0, port 32799, FD 5 2006/10/12 21:43:57| Adding domain chubba.net from /etc/resolv.conf 2006/10/12 21:43:57| Adding nameserver 192.168.16.100 from /etc/resolv.conf 2006/10/12 21:43:57| helperOpenServers: Starting 5 'redirector' processes ...
- Проверяем броузером...
- Все работает
- Ctrl+C
2006/10/12 21:44:21| Preparing for shutdown after 3 requests 2006/10/12 21:44:21| Waiting 0 seconds for active connections to finish 2006/10/12 21:44:21| FD 21 Closing HTTP connection 2006/10/12 21:44:22| Shutting down... 2006/10/12 21:44:22| FD 22 Closing ICP connection 2006/10/12 21:44:22| Closing unlinkd pipe on FD 20 2006/10/12 21:44:22| storeDirWriteCleanLogs: Starting... 2006/10/12 21:44:22| Finished. Wrote 67 entries. 2006/10/12 21:44:22| Took 0.0 seconds (376404.5 entries/sec). 2006/10/12 21:44:22| Squid Cache (Version 2.6.STABLE3): Exiting normally.
- И только потом:
#/etc/init.d/squid start
- Может возникнуть необходимость в добавлении новвых сайтов, обнаруженных Вами вручную в базу данных rejik`a:
#echo mp3.ru >> /usr/local/rejik3/banlists/mp3/urls
- Проверка --> см. рис. Проверка работы редиректора
[править] Выбор языка текста сообщений прокси-сервера
- Для того, чтобы странички ошибок и сообщений прокси-сервера были на русском языке, то можно исправить значение по умолчанию:
# vi /etc/squid/squid.conf 64a65,66 > > error_directory /usr/share/squid/errors/Russian-koi8-r
[править] Ограничение скорости скачивания определенного трафика
- Во-первых - необходимо описать файлы, скорость скачивания которых будет ограничиваться:
acl our url_regex \.iso$ \.avi$ \.mp3$
- Для организации задержек используются пулы задержек, количество которых определяестя количеством типов файлов.
- Создание пула --> Запись в /etc/squid/squid.conf:
delay_pools 1 delay_class 1 2 delay_parameters 1 -1/-1 8000/4000
- В результате был создан пул 1, класса 2 с ограничением каждого пользователя скоростью 4000 байт/сек, причем первые 8000байт cкачиваются на полной скорости
- И теперь в /etc/squid/squid.conf:
delay_access 1 allow our delay_access 1 deny all
- Теперь:
# squid -k reconfigure
- И проверяем
[править] Организация иерархии запросов и кэширования
- Для организации иерархии запросов и кэширования исмпользуется директива chache_peer:
cache_peer 10.0.1.1 parent 8080 3130 default login=foo:password no-query
- То есть порт 8080 родительского прокси-сервера будет доступен через интерфейс 127.0.0.1 порта 3130 локального хоста с именем пользователа foo и password - это пароль. Опция no_query отключает ICP-запросы к родительскому кэшу, опция default сообщает о том,что сервер должен использоваться по умолчанию.
[править] Примерный файл конфигурации прокси-сервера squid
http_port 3128 hierarchy_stoplist cgi-bin ? acl QUERY urlpath_regex cgi-bin \? cache deny QUERY acl apache rep_header Server ^Apache broken_vary_encoding allow apache cache_dir ufs /var/spool/squid 100 16 256 access_log /var/log/squid/access.log squid cache_log /var/log/squid/cache.log cache_store_log none hosts_file /etc/hosts url_rewrite_program /usr/local/rejik3/redirector /usr/local/rejik3/redirector.conf auth_param basic program /usr/lib/squid/ncsa_auth /etc/squid/passwd auth_param basic children 5 auth_param basic realm Squid proxy-caching web server auth_param basic credentialsttl 2 hours auth_param basic casesensitive off refresh_pattern ^ftp: 1440 20% 10080 refresh_pattern ^gopher: 1440 0% 1440 refresh_pattern . 0 20% 4320 acl all src 0.0.0.0/0.0.0.0 acl manager proto cache_object acl localhost src 127.0.0.1/255.255.255.255 acl to_localhost dst 127.0.0.0/8 acl SSL_ports port 443 563 # https, snews acl SSL_ports port 873 # rsync acl Safe_ports port 80 # http acl Safe_ports port 21 # ftp acl Safe_ports port 443 563 # https, snews acl Safe_ports port 70 # gopher acl Safe_ports port 210 # wais acl Safe_ports port 1025-65535 # unregistered ports acl Safe_ports port 280 # http-mgmt acl Safe_ports port 488 # gss-http acl Safe_ports port 591 # filemaker acl Safe_ports port 777 # multiling http acl Safe_ports port 631 # cups acl Safe_ports port 873 # rsync acl Safe_ports port 901 # SWAT acl purge method PURGE acl CONNECT method CONNECT http_access allow manager localhost http_access deny manager http_access allow purge localhost http_access deny purge http_access deny !Safe_ports http_access deny CONNECT !SSL_ports #acl nomailru url_regex -i ^http://mail.ru #http_access deny nomailru #acl no_google_search dstdomain .google.com #http_access deny no_google_search acl our_networks src 192.168.16.0/24 acl my_acl proxy_auth REQUIRED http_access allow our_networks my_acl http_access allow localhost http_access deny all http_reply_access allow all icp_access allow all coredump_dir /var/spool/squid error_directory /usr/share/squid/errors/Russian-koi8-r
[править] Clamav
Черновик
sudo apt-get install clamav clamav-daemon
dpkg -l | egrep 'libcurl3|apache' ii apache 1.3.34-4.1 versatile, high-performance HTTP server ii apache-common 1.3.34-4.1 support files for all Apache webservers ii apache2-utils 2.2.3-4 utility programs for webservers ii libcurl3 7.15.5-1 Multi-protocol file transfer library ii libcurl3-dev 7.15.5-1 Transitional package to libcurl3-openssl-dev ii libcurl3-gnutls 7.15.5-1 Multi-protocol file transfer library ii libcurl3-openssl-dev 7.15.5-1 Development files and documentation for libc
wget http://www.samse.fr/GPL/squidclamav/squidclamav-3.0.tar.gz
sudo tar xvzfC /old/install/squidclamav-3.0.tar.gz /usr/src Password: squidclamav/ squidclamav/squidclamav.c squidclamav/squidclamav.h squidclamav/clwarn.cgi.de_DE squidclamav/clwarn.cgi.en_EN squidclamav/clwarn.cgi.fr_FR squidclamav/clwarn.cgi.pt_BR squidclamav/depcomp squidclamav/.deps/ squidclamav/.deps/lists.Po squidclamav/.deps/config.Po squidclamav/.deps/squidclamav.Po squidclamav/.deps/main.Po squidclamav/.deps/log.Po squidclamav/Makefile.orig squidclamav/aclocal.m4 squidclamav/config.status squidclamav/log.c squidclamav/log.h squidclamav/README squidclamav/configure squidclamav/lists.c squidclamav/lists.h squidclamav/configure.in squidclamav/config.guess squidclamav/install-sh squidclamav/config.sub squidclamav/missing squidclamav/squidclamav.conf.dist squidclamav/mkinstalldirs squidclamav/config.c squidclamav/config.h squidclamav/Makefile.am squidclamav/Makefile.in squidclamav/main.c squidclamav/config.h.in squidclamav/clwarn.cgi squidclamav/paths.h squidclamav/INSTALL squidclamav/ChangeLog squidclamav/COPYING
sudo ./configure checking for a BSD-compatible install... /usr/bin/install -c checking whether build environment is sane... yes checking for gawk... gawk checking whether make sets $(MAKE)... yes checking for gcc... gcc checking for C compiler default output file name... a.out checking whether the C compiler works... yes checking whether we are cross compiling... no checking for suffix of executables... checking for suffix of object files... o checking whether we are using the GNU C compiler... yes checking whether gcc accepts -g... yes checking for gcc option to accept ANSI C... none needed checking for style of include used by make... GNU checking dependency style of gcc... gcc3 checking for a BSD-compatible install... /usr/bin/install -c checking for main in -lcurl... yes checking how to run the C preprocessor... gcc -E checking for egrep... grep -E checking for ANSI C header files... yes checking for sys/types.h... yes checking for sys/stat.h... yes checking for stdlib.h... yes checking for string.h... yes checking for memory.h... yes checking for strings.h... yes checking for inttypes.h... yes checking for stdint.h... yes checking for unistd.h... yes checking arpa/inet.h usability... yes checking arpa/inet.h presence... yes checking for arpa/inet.h... yes checking fcntl.h usability... yes checking fcntl.h presence... yes checking for fcntl.h... yes checking netdb.h usability... yes checking netdb.h presence... yes checking for netdb.h... yes checking netinet/in.h usability... yes checking netinet/in.h presence... yes checking for netinet/in.h... yes checking for stdlib.h... (cached) yes checking for string.h... (cached) yes checking sys/socket.h usability... yes checking sys/socket.h presence... yes checking for sys/socket.h... yes checking sys/timeb.h usability... yes checking sys/timeb.h presence... yes checking for sys/timeb.h... yes checking for unistd.h... (cached) yes checking for size_t... yes checking for stdlib.h... (cached) yes checking for GNU libc compatible malloc... yes checking for function prototypes... yes checking whether setvbuf arguments are reversed... no checking return type of signal handlers... void checking for ftime... yes checking for gethostbyname... yes checking for memset... yes checking for regcomp... yes checking for socket... yes checking for strdup... yes checking for strspn... yes checking for strstr... yes configure: creating ./config.status config.status: creating Makefile config.status: creating config.h config.status: executing depfiles commands
sudo make make all-am make[1]: Entering directory `/usr/src/squidclamav' if gcc -DHAVE_CONFIG_H -I. -I. -I. -g -O2 -MT config.o -MD -MP -MF ".deps/config.Tpo" -c -o config.o config.c; \ then mv -f ".deps/config.Tpo" ".deps/config.Po"; else rm -f ".deps/config.Tpo"; exit 1; fi if gcc -DHAVE_CONFIG_H -I. -I. -I. -g -O2 -MT lists.o -MD -MP -MF ".deps/lists.Tpo" -c -o lists.o lists.c; \ then mv -f ".deps/lists.Tpo" ".deps/lists.Po"; else rm -f ".deps/lists.Tpo"; exit 1; fi if gcc -DHAVE_CONFIG_H -I. -I. -I. -g -O2 -MT log.o -MD -MP -MF ".deps/log.Tpo" -c -o log.o log.c; \ then mv -f ".deps/log.Tpo" ".deps/log.Po"; else rm -f ".deps/log.Tpo"; exit 1; fi if gcc -DHAVE_CONFIG_H -I. -I. -I. -g -O2 -MT main.o -MD -MP -MF ".deps/main.Tpo" -c -o main.o main.c; \ then mv -f ".deps/main.Tpo" ".deps/main.Po"; else rm -f ".deps/main.Tpo"; exit 1; fi if gcc -DHAVE_CONFIG_H -I. -I. -I. -g -O2 -MT squidclamav.o -MD -MP -MF ".deps/squidclamav.Tpo" -c -o squidclamav.o squidclamav.c; \ then mv -f ".deps/squidclamav.Tpo" ".deps/squidclamav.Po"; else rm -f ".deps/squidclamav.Tpo"; exit 1; fi gcc -g -O2 -o squidclamav config.o lists.o log.o main.o squidclamav.o -lcurl make[1]: Leaving directory `/usr/src/squidclamav'
echo $? 0
sudo make install make[1]: Entering directory `/usr/src/squidclamav' test -z "/usr/local/bin" || mkdir -p -- "/usr/local/bin" /usr/bin/install -c 'squidclamav' '/usr/local/bin/squidclamav' make[1]: Цель `install-data-am' не требует выполнения команд. make[1]: Leaving directory `/usr/src/squidclamav'
sudo cp /usr/src/squidclamav/squidclamav.conf.dist /etc/squidclamav.conf
sudo touch /var/log/squid/squidclamav.log sudo chown proxy:proxy /var/log/squid/squidclamav.log sudo cp /usr/src/squidclamav/clwarn.cgi /usr/lib/cgi-bin/
sudo egrep -v '#|^\ *$' /etc/squid/squid.conf http_port 3128 hierarchy_stoplist cgi-bin ? acl QUERY urlpath_regex cgi-bin \? cache deny QUERY acl apache rep_header Server ^Apache broken_vary_encoding allow apache access_log /var/log/squid/access.log squid cache_log /var/log/squid/cache.log hosts_file /etc/hosts redirect_program /usr/local/bin/squidclamav redirect_children 15 auth_param basic program /usr/lib/squid/ncsa_auth /etc/squid/passwd auth_param basic children 5 auth_param basic realm Squid proxy-caching web server auth_param basic credentialsttl 2 hours auth_param basic casesensitive off refresh_pattern ^ftp: 1440 20% 10080 refresh_pattern ^gopher: 1440 0% 1440 refresh_pattern . 0 20% 4320 acl all src 0.0.0.0/0.0.0.0 acl manager proto cache_object acl localhost src 127.0.0.1/255.255.255.255 acl to_localhost dst 127.0.0.0/8 acl purge method PURGE acl CONNECT method CONNECT http_access allow manager localhost http_access deny manager http_access allow purge localhost http_access deny purge http_access deny !Safe_ports http_access deny CONNECT !SSL_ports http_access deny to_localhost http_access allow localhost acl myacl proxy_auth REQUIRED acl our_networks src 192.168.0.0/16 10.0.0.0/16 http_access allow our_networks acl our_networks2 src 192.168.17.22 http_access allow our_networks2 myacl redirector_access deny localhost http_access deny all http_reply_access allow all icp_access allow all cache_mgr clint@net.nt cache_effective_group proxy httpd_accel_no_pmtu_disc on error_directory /usr/share/squid/errors/Russian-koi8-r coredump_dir /var/spool/squid
sudo egrep -v '#|^\ *$' /etc/clamav/clamd.conf TCPSocket 65000 TCPAddr 10.0.17.1 FixStaleSocket true User clamav AllowSupplementaryGroups true ScanMail true ScanArchive true ArchiveMaxRecursion 5 ArchiveMaxFiles 1000 ArchiveMaxFileSize 10M ArchiveMaxCompressionRatio 250 ArchiveLimitMemoryUsage false ArchiveBlockEncrypted false MaxDirectoryRecursion 15 FollowDirectorySymlinks false FollowFileSymlinks false ReadTimeout 180 MaxThreads 12 MaxConnectionQueueLength 15 StreamMaxLength 10M LogSyslog false LogFacility LOG_LOCAL6 LogClean false LogVerbose false PidFile /var/run/clamav/clamd.pid DatabaseDirectory /var/lib/clamav TemporaryDirectory /tmp SelfCheck 3600 Foreground false Debug true ScanPE true ScanOLE2 true ScanHTML true DetectBrokenExecutables false MailFollowURLs false ArchiveBlockMax false ExitOnOOM false LeaveTemporaryFiles false AlgorithmicDetection true ScanELF true NodalCoreAcceleration false IdleTimeout 30 MailMaxRecursion 64 PhishingSignatures true LogFile /var/log/clamav/clamav.log LogTime true LogFileUnlock false LogFileMaxSize 0
sudo egrep -v '#|^\ *$' /etc/squidclamav.conf logfile /var/log/squid/squidclamav.log redirect http://10.0.17.1/cgi-bin/clwarn.cgi debug 1 force 1 stat 1 clamd_ip 10.0.17.1 clamd_port 65000 timeout 60 regexi ^.*\.txt$ regexi ^.*\.com$ regexi ^.*\.zip$
export http_proxy=http\://10.0.17.1\:3128 echo $http_proxy http://10.0.17.1:3128
lynx http://www.eicar.org/download/eicar.com SquidClamAv 3.0 : Virus detection __________________________________________________________________________________________________________________________________ The requested URL http://www.eicar.org/download/eicar.com contains the virus : Eicar-Test-Signature This URL can not be dowloaded. Origin: 10.0.17.1 / - __________________________________________________________________________________________________________________________________ Powered by SquidClamAv 3.0. Команды: стрелки - перемещение, '?' - помощь, 'q' - выход, '<-' - назад. Стрелки: Вверх, Вниз - перемещение. Вправо - переход по ссылке; Влево - возврат. H)elp O)ptions P)rint G)o M)Глав экран Q)uit /=поиск [delete]=список истории
sudo tail -f /var/log/clamav/clamav.log Thu Jun 14 19:22:23 2007 -> +++ Started at Thu Jun 14 19:22:23 2007 Thu Jun 14 19:22:23 2007 -> clamd daemon 0.90.1 (OS: linux-gnu, ARCH: i386, CPU: i486) Thu Jun 14 19:22:23 2007 -> Log file size limit disabled. Thu Jun 14 19:22:23 2007 -> Reading databases from /var/lib/clamav Thu Jun 14 19:23:13 2007 -> Loaded 125655 signatures. Thu Jun 14 19:23:13 2007 -> Bound to address 10.0.17.1 on tcp port 65000 Thu Jun 14 19:23:13 2007 -> Setting connection queue length to 15 Thu Jun 14 19:23:13 2007 -> Archive: Archived file size limit set to 10485760 bytes. Thu Jun 14 19:23:13 2007 -> Archive: Recursion level limit set to 5. Thu Jun 14 19:23:13 2007 -> Archive: Files limit set to 1000. Thu Jun 14 19:23:13 2007 -> Archive: Compression ratio limit set to 250. Thu Jun 14 19:23:13 2007 -> Archive support enabled. Thu Jun 14 19:23:13 2007 -> Algorithmic detection enabled. Thu Jun 14 19:23:13 2007 -> Portable Executable support enabled. Thu Jun 14 19:23:13 2007 -> ELF support enabled. Thu Jun 14 19:23:13 2007 -> Mail files support enabled. Thu Jun 14 19:23:13 2007 -> Mail: Recursion level limit set to 64. Thu Jun 14 19:23:13 2007 -> OLE2 support enabled. Thu Jun 14 19:23:13 2007 -> PDF support disabled. Thu Jun 14 19:23:13 2007 -> HTML support enabled. Thu Jun 14 19:23:13 2007 -> Self checking every 3600 seconds. Thu Jun 14 19:25:50 2007 -> stream 1278: Eicar-Test-Signature FOUND
sudo tail -f /var/log/squid/squidclamav.log Thu Jun 14 19:22:33 2007 [11748] LOG SquidClamav (PID 11748) started Thu Jun 14 19:22:33 2007 [11751] LOG SquidClamav (PID 11751) started Thu Jun 14 19:22:33 2007 [11752] LOG SquidClamav (PID 11752) started Thu Jun 14 19:22:33 2007 [11753] LOG SquidClamav (PID 11753) started Thu Jun 14 19:22:33 2007 [11754] LOG SquidClamav (PID 11754) started Thu Jun 14 19:22:33 2007 [11749] LOG SquidClamav (PID 11749) started Thu Jun 14 19:22:33 2007 [11756] LOG SquidClamav (PID 11756) started Thu Jun 14 19:22:33 2007 [11757] LOG SquidClamav (PID 11757) started Thu Jun 14 19:22:33 2007 [11758] LOG SquidClamav (PID 11758) started Thu Jun 14 19:22:33 2007 [11755] LOG SquidClamav (PID 11755) started Thu Jun 14 19:22:33 2007 [11759] LOG SquidClamav (PID 11759) started Thu Jun 14 19:22:33 2007 [11763] LOG SquidClamav (PID 11763) started Thu Jun 14 19:22:33 2007 [11764] LOG SquidClamav (PID 11764) started Thu Jun 14 19:22:33 2007 [11765] LOG SquidClamav (PID 11765) started Thu Jun 14 19:22:34 2007 [11760] LOG SquidClamav (PID 11760) started Thu Jun 14 19:25:49 2007 [11748] DEBUG Request:http://www.eicar.org/download/eicar.com 10.0.17.1/- - GET Thu Jun 14 19:25:49 2007 [11748] DEBUG regex matched: http://www.eicar.org/download/eicar.com Thu Jun 14 19:25:49 2007 [11748] DEBUG Getting header for url http://www.eicar.org/download/eicar.com Thu Jun 14 19:25:50 2007 [11748] DEBUG File size is 68.00 Thu Jun 14 19:25:50 2007 [11748] DEBUG Sending STREAM to clamd. Thu Jun 14 19:25:50 2007 [11748] DEBUG Received port 1278 from clamd. Thu Jun 14 19:25:50 2007 [11748] DEBUG Trying to connect to clamd [port: 1278]. Thu Jun 14 19:25:50 2007 [11748] DEBUG Scanning data received against clamd stream Thu Jun 14 19:25:50 2007 [11748] DEBUG Sending data to clamd Thu Jun 14 19:25:50 2007 [11748] DEBUG Write 68 bytes on 68 to socket Thu Jun 14 19:25:50 2007 [11748] DEBUG Connection to clamd on port: 1278 closed. Thu Jun 14 19:25:50 2007 [11748] DEBUG Reading clamd scan result. Thu Jun 14 19:25:50 2007 [11748] DEBUG received from Clamd: stream: Eicar-Test-Signature FOUND Thu Jun 14 19:25:50 2007 [11748] LOG Redirecting URL to: http://10.0.17.1/cgi-bin/clwarn.cgi?url=http://www.eicar.org/download/eicar.com&source=10.0.17.1/-&user=-&virus=stream: Eicar-Test-Signature FOUND Thu Jun 14 19:25:50 2007 [11748] DEBUG End reading clamd scan result. Thu Jun 14 19:25:50 2007 [11748] STAT Virus Scanning process time 0.108 second(s) Thu Jun 14 19:25:50 2007 [11748] DEBUG Virus found send redirection to Squid. Thu Jun 14 19:25:50 2007 [11748] STAT Total process time 0.226 second(s)
sudo apt-get install clamav-testfiles Чтение списков пакетов... Готово Построение дерева зависимостей... Готово НОВЫЕ пакеты, которые будут установлены: clamav-testfiles обновлено 0, установлено 1 новых пакетов, для удаления отмечено 0 пакетов, и 2 пакетов не обновлено. Необходимо скачать 157kБ архивов. После распаковки объем занятого дискового пространства возрастёт на 242kB. Получено:1 http://debian.org.ua etch/main clamav-testfiles 0.90.1-2 [157kB] Получено 157kB за 1s (144kB/c) Выбор ранее не выбранного пакета clamav-testfiles. (Чтение базы данных... на данный момент установлено 183726 файлов и каталогов.) Распаковывается пакет clamav-testfiles (из файла .../clamav-testfiles_0.90.1-2_all.deb)... Настраивается пакет clamav-testfiles (0.90.1-2) ...
dpkg -L clamav-testfiles /. /usr /usr/share /usr/share/clamav-testfiles /usr/share/clamav-testfiles/debugm.c /usr/share/clamav-testfiles/clam.cab /usr/share/clamav-testfiles/clam.exe /usr/share/clamav-testfiles/clam.exe.bz2 /usr/share/clamav-testfiles/clam-v2.rar /usr/share/clamav-testfiles/clam-v3.rar /usr/share/clamav-testfiles/clam.zip /usr/share/doc /usr/share/doc/clamav-testfiles /usr/share/doc/clamav-testfiles/AUTHORS /usr/share/doc/clamav-testfiles/BUGS /usr/share/doc/clamav-testfiles/FAQ /usr/share/doc/clamav-testfiles/NEWS.Debian.gz /usr/share/doc/clamav-testfiles/changelog.Debian.gz /usr/share/doc/clamav-testfiles/copyright /usr/share/doc/clamav-testfiles/changelog.gz /usr/share/doc/clamav-testfiles/README.gz /usr/share/doc/clamav-testfiles/README.Debian.gz
sudo cp /usr/share/clamav-testfiles/clam.zip /var/www/
lynx http://net.nt/clam.zip SquidClamAv 3.0 : Virus detection __________________________________________________________________________________________________________________________________ The requested URL http://net.nt/clam.zip contains the virus : ClamAV-Test-File This URL can not be dowloaded. Origin: 10.0.17.1 / - __________________________________________________________________________________________________________________________________ Powered by SquidClamAv 3.0. Команды: стрелки - перемещение, '?' - помощь, 'q' - выход, '<-' - назад. Стрелки: Вверх, Вниз - перемещение. Вправо - переход по ссылке; Влево - возврат. H)elp O)ptions P)rint G)o M)Глав экран Q)uit /=поиск [delete]=список истории
[править] Анализ логов прокси-сервера
- tail -f /var/log/squid/access.log - просмотр в реальном времени процесс определения доступа к ресурсам сети Интернет
- /var/log/squid/cache.log - логирование процесса кэширования
- /var/log/squid/redirector.log - журнал работы редиректора
- /var/log/squid/redirector.err - журнал ошибок редирекора
[править] Доплнительные источники
- [1] - Squid (кеширующий прокси для http): установка, настройка и использование.
- [2] - Как не получать рекламы через Internet
- [3] - squid-faq-rus
- [4] - Squid: Logfile Analysis
[править] MIMEDefang
Настройка yum
vi /etc/yum.repos.d/asplinux-updates.repo [updates-released] name=ASPLinux 11 - $basearch - Updates # Moscow #baseurl=http://download.asplinux.ru/$basearch/updates/11/ # Moscow2 #baseurl=http://download2.asplinux.ru/install/ftp/$basearch/updates/11/ # UA-IX only #baseurl=ftp://ftp.asplinux.com.ua/pub/$basearch/updates/11/ #baseurl=http://download.asplinux.ru/$basearch/updates/11/ baseurl=ftp://ftp.asp-linux.com.ua/pub/$basearch/updates/11/ enabled=1 gpgcheck=1 gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-asplinux
Далле обновим yum и поставим необходимые пакеты:
yum update yum yum install clamav.i386 yum install clamav-milter yum install spamassassin.i386 wget http://mimedefang.org/static/mimedefang-2.57.tar.gz tar xvzfC ~user/Desktop/mimedefang-2.57.tar.gz /usr/src cd /usr/src/mimedefang-2.57/redhat/ cp ~user/Desktop/mimedefang-2.57.tar.gz /usr/src/asplinux/SOURCES/mimedefang-2.57.tar.gz rpmbuild mimedefang.spec ошибка: Неудовлетворенные зависимости сборки: sendmail-devel > 8.12.0 нужен для mimedefang-2.57-1.i386 perl-MIME-tools нужен для mimedefang-2.57-1.i386 perl-IO-stringy нужен для mimedefang-2.57-1.i386 perl-MailTools нужен для mimedefang-2.57-1.i386 yum install sendmail-devel.i386 yum install perl-MIME-tools.noarch yum install perl-Archive-Zip.noarch yum install perl-File-Scan.noarch *** wget http://mailtools.anomy.net/dist/anomy-HTMLCleaner-1.26.tar.gz tar xvzfC ~user/anomy-HTMLCleaner-1.26.tar.gz /usr/src mv /usr/src/Anomy /usr/lib/perl5/5.8.6/ *** wget http://search.cpan.org/CPAN/authors/id/M/MH/MHARNISCH/Unix-Syslog-0.100.tar.gz tar xvzfC ~user/Unix-Syslog-0.100.tar.gz /usr/src/ cd /usr/src/Unix-Syslog-0.100/ perl Makefile.PL make test make install *** vim /usr/src/mimedefang-2.57/redhat/mimedefang.spec > 129 %define with_antivirus 1 *** rpmbuild -bb mimedefang.spec **** rpm -Uhv --force /usr/src/asplinux/RPMS/i386/mimedefang* ошибка: Неудовлетворенные зависимости: perl(Unix::Syslog) нужен для mimedefang-2.57-1.i386 [root@asp:redhat]# rpm -Uhv --nodeps /usr/src/asplinux/RPMS/i386/mimedefang* Подготовка... ########################################### [100%] 1:mimedefang-debuginfo ########################################### [ 33%] 2:mimedefang ########################################### [ 67%] In order to complete the installation of mimedefang, you will need to add the following line to your sendmail mc file: INPUT_MAIL_FILTER(`mimedefang', `S=unix:/var/spool/MIMEDefang/mimedefang.sock, F=T, T=S:1m;R:1m;E:5m') Use the sendmail-cf package to rebuild your /etc/mail/sendmail.cf file and restart your sendmail daemon. 3:mimedefang-contrib ########################################### [100%] ******* vi /etc/mail/sendmail.mc >112 dnl DAEMON_OPTIONS(`Port=smtp,Addr=127.0.0.1, Name=MTA')dnl >166 INPUT_MAIL_FILTER(`mimedefang', `S=unix:/var/spool/MIMEDefang/mimedefang.sock, F=T, T=S:1m;R:1m;E:5m') >167 define(`confINPUT_MAIL_FILTERS', `mimedefang')dnl ****
Что сделано!
[править] Анализ логов прокси-сервера
- tail -f /var/log/squid/access.log - просмотр в реальном времени процесс определения доступа к ресурсам сети Интернет
- /var/log/squid/cache.log - логирование процесса кэширования
- /var/log/squid/redirector.log - журнал работы редиректора
- /var/log/squid/redirector.err - журнал ошибок редирекора
[править] Доплнительные источники
- [5] - Squid (кеширующий прокси для http): установка, настройка и использование.
- [6] - Как не получать рекламы через Internet
- [7] - squid-faq-rus
[править] MIMEDefang
Настройка yum
vi /etc/yum.repos.d/asplinux-updates.repo [updates-released] name=ASPLinux 11 - $basearch - Updates # Moscow #baseurl=http://download.asplinux.ru/$basearch/updates/11/ # Moscow2 #baseurl=http://download2.asplinux.ru/install/ftp/$basearch/updates/11/ # UA-IX only #baseurl=ftp://ftp.asplinux.com.ua/pub/$basearch/updates/11/ #baseurl=http://download.asplinux.ru/$basearch/updates/11/ baseurl=ftp://ftp.asp-linux.com.ua/pub/$basearch/updates/11/ enabled=1 gpgcheck=1 gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-asplinux
Далле обновим yum и поставим необходимые пакеты:
yum update yum yum install clamav.i386 yum install clamav-milter yum install spamassassin.i386 wget http://mimedefang.org/static/mimedefang-2.57.tar.gz tar xvzfC ~user/Desktop/mimedefang-2.57.tar.gz /usr/src cd /usr/src/mimedefang-2.57/redhat/ cp ~user/Desktop/mimedefang-2.57.tar.gz /usr/src/asplinux/SOURCES/mimedefang-2.57.tar.gz rpmbuild mimedefang.spec ошибка: Неудовлетворенные зависимости сборки: sendmail-devel > 8.12.0 нужен для mimedefang-2.57-1.i386 perl-MIME-tools нужен для mimedefang-2.57-1.i386 perl-IO-stringy нужен для mimedefang-2.57-1.i386 perl-MailTools нужен для mimedefang-2.57-1.i386 yum install sendmail-devel.i386 yum install perl-MIME-tools.noarch yum install perl-Archive-Zip.noarch yum install perl-File-Scan.noarch *** wget http://mailtools.anomy.net/dist/anomy-HTMLCleaner-1.26.tar.gz tar xvzfC ~user/anomy-HTMLCleaner-1.26.tar.gz /usr/src mv /usr/src/Anomy /usr/lib/perl5/5.8.6/ *** wget http://search.cpan.org/CPAN/authors/id/M/MH/MHARNISCH/Unix-Syslog-0.100.tar.gz tar xvzfC ~user/Unix-Syslog-0.100.tar.gz /usr/src/ cd /usr/src/Unix-Syslog-0.100/ perl Makefile.PL make test make install *** vim /usr/src/mimedefang-2.57/redhat/mimedefang.spec > 129 %define with_antivirus 1 *** rpmbuild -bb mimedefang.spec **** rpm -Uhv --force /usr/src/asplinux/RPMS/i386/mimedefang* ошибка: Неудовлетворенные зависимости: perl(Unix::Syslog) нужен для mimedefang-2.57-1.i386 [root@asp:redhat]# rpm -Uhv --nodeps /usr/src/asplinux/RPMS/i386/mimedefang* Подготовка... ########################################### [100%] 1:mimedefang-debuginfo ########################################### [ 33%] 2:mimedefang ########################################### [ 67%] In order to complete the installation of mimedefang, you will need to add the following line to your sendmail mc file: INPUT_MAIL_FILTER(`mimedefang', `S=unix:/var/spool/MIMEDefang/mimedefang.sock, F=T, T=S:1m;R:1m;E:5m') Use the sendmail-cf package to rebuild your /etc/mail/sendmail.cf file and restart your sendmail daemon. 3:mimedefang-contrib ########################################### [100%] ******* vi /etc/mail/sendmail.mc >112 dnl DAEMON_OPTIONS(`Port=smtp,Addr=127.0.0.1, Name=MTA')dnl >166 INPUT_MAIL_FILTER(`mimedefang', `S=unix:/var/spool/MIMEDefang/mimedefang.sock, F=T, T=S:1m;R:1m;E:5m') >167 define(`confINPUT_MAIL_FILTERS', `mimedefang')dnl ****
Что сделано!
[править] Временно(взможно) исправлено
В /usr/src/mimedefang-2.57/redhat/mimedefang.spec
%define dir_spool /var/spool/MIMEDefang %define dir_quarantine /var/spool/MD-Quarantine %define dir_log /var/log/mimedefang %define user defang %define with_antivirus 0
[править] /etc/mail/mimedefang-filter
[root@asp:~]# cat /etc/mail/mimedefang-filter
[править] Описание....
114 sub filter_begin { 115 my($entity) = @_; 116 # ALWAYS drop messages with suspicious chars in headers 117 if ($SuspiciousCharsInHeaders) { 118 md_graphdefang_log('suspicious_chars'); 119 action_quarantine_entire_message("Message quarantined because of suspicious characters in headers"); 120 # Do NOT allow message to reach recipient(s) 121 return action_discard(); 122 } 123 md_copy_orig_msg_to_work_dir_as_mbox_file(); 129 my($code, $category, $action) = message_contains_virus(); 132 $FoundVirus = ($category eq "virus"); 135 $FoundVirus = ($action eq "quarantine"); 137 if ($FoundVirus) { 138 md_graphdefang_log('virus', $VirusName, $RelayAddr); 139 md_syslog('warning', "Discarding because of virus $VirusName"); 140 return action_discard(); 141 } 142 143 if ($action eq "tempfail") { 144 action_tempfail("Problem running virus-scanner"); 145 md_syslog('warning', "Problem running virus scanner: code=$code, category=$category, action=$action"); 146 } 147 }
[править] Описание
172 sub filter { 173 my($entity, $fname, $ext, $type) = @_; 174 175 return if message_rejected(); # Avoid unnecessary work 176 177 # Block message/partial parts 178 if (lc($type) eq "message/partial") { 179 md_graphdefang_log('message/partial'); 180 action_bounce("MIME type message/partial not accepted here"); 181 return action_discard(); 182 } 183 184 if (filter_bad_filename($entity)) { 185 md_graphdefang_log('bad_filename', $fname, $type); 186 action_quarantine($entity, "A known virus was discovered and del eted. Virus-scanner messages follow:\n$VirusScannerMessages\n\n"); 188 } 190 # eml is bad if it's not multipart 191 if (re_match($entity, '\.eml')) { 192 md_graphdefang_log('non_multipart'); 193 action_quarantine($entity, "A known virus was discovered and del eted. Virus-scanner messages follow:\n$VirusScannerMessages\n\n"); 205 return action_accept(); 206 }
[править] Описание
224 sub filter_multipart { 225 my($entity, $fname, $ext, $type) = @_; 226 227 return if message_rejected(); # Avoid unnecessary work 228 229 if (filter_bad_filename($entity)) { 230 md_graphdefang_log('bad_filename', $fname, $type); 231 action_notify_administrator("A MULTIPART attachment of type $typ e, named $fname was dropped.\n"); 232 action_quarantine($entity, "A known virus was discovered and del eted. Virus-scanner messages follow:\n$VirusScannerMessages\n\n"); 236 # eml is bad if it's not message/rfc822 237 if (re_match($entity, '\.eml') and ($type ne "message/rfc822")) { 238 md_graphdefang_log('non_rfc822',$fname); 239 action_quarantine($entity, "A known virus was discovered and del eted. Virus-scanner messages follow:\n$VirusScannerMessages\n\n"); 241 242 } 244 # Block message/partial parts 245 if (lc($type) eq "message/partial") { 246 md_graphdefang_log('message/partial'); 247 action_bounce("MIME type message/partial not accepted here"); 248 return; 249 } 250 251 return action_accept(); 252 }
[править] Описание
266 sub defang_warning { 267 my($oldfname, $fname) = @_; 268 return 269 "An attachment named '$oldfname' was converted to '$fname'.\n" . 270 "To recover the file, right-click on the attachment and Save As\ n" . 271 "'$oldfname'\n"; 272 }
[править] Описание
276 sub filter_end { 277 my($entity) = @_; 288 return if message_rejected(); 291 if ($Features{"SpamAssassin"}) { 292 if (-s "./INPUTMSG" < 100*1024) { 296 my($hits, $req, $names, $report) = spam_assassin_check(); 297 my($score); 298 if ($hits < 40) { 299 $score = "*" x int($hits); 300 } else { 301 $score = "*" x 40; 302 } 309 if ($hits >= $req) { 310 action_change_header("X-Spam-Score", "$hits ($score) $na mes"); 311 md_graphdefang_log('spam', $hits, $RelayAddr); 314 action_add_part($entity, "text/plain", "-suggest", 315 "$report\n", 316 "SpamAssassinReport.txt", "inline"); 317 } else { 318 # Delete any existing X-Spam-Score header? 319 action_delete_header("X-Spam-Score"); 320 } 321 } 322 } 332 md_graphdefang_log('mail_in'); 344 } 347 1;
[править] /etc/sysconfig/mimedefang
[root@asp:~]# egrep -v '#|^ *$' /etc/sysconfig/mimedefang SPOOLDIR=/var/spool/MIMEDefang SOCKET=$SPOOLDIR/mimedefang.sock LOG_FILTER_TIME=yes MX_USER=defang MX_LOG=yes LOOPBACK_RESERVED_CONNECTIONS=-1 MX_SOCKET=$SPOOLDIR/mimedefang-multiplexor.sock MX_MINIMUM=2 ALLOW_NEW_CONNECTIONS_TO_QUEUE=yes MX_MAXIMUM=10 MX_BUSY=600 SUBFILTER=/etc/mail/mimedefang-filter
[править] /etc/clamd.conf
[root@asp:~]# egrep -v '#|^ *$' /etc/clamd.conf LogFile /var/log/clamav/clamd.log LogFileMaxSize 1M LogTime LogSyslog LogVerbose PidFile /var/run/clamav/clamd.pid TemporaryDirectory /tmp DatabaseDirectory /var/lib/clamav LocalSocket /var/spool/MIMEDefang/clamd.sock FixStaleSocket MaxConnectionQueueLength 30 MaxThreads 50 ReadTimeout 300 VirusEvent /usr/local/bin/send_sms 380676666666@2sms.kiyvstar.net "VIRUS ALERT: %v" User defang AllowSupplementaryGroups Debug LeaveTemporaryFiles ScanPE DetectBrokenExecutables ScanOLE2 ScanMail MailFollowURLs ScanHTML ScanArchive ArchiveMaxFileSize 10M ArchiveMaxRecursion 9 ArchiveMaxFiles 1500 ArchiveMaxCompressionRatio 250 ArchiveLimitMemoryUsage ArchiveBlockEncrypted ArchiveBlockMax
Перезапускаем:
[root@asp:~]# /etc/init.d/clamd restart Stopping Clam AV daemon: [ СБОЙ ] Starting Clam AV daemon: LibClamAV debug: Setting /tmp as global temporary direc tory LibClamAV debug: Loading databases from /var/lib/clamav LibClamAV debug: Loading /var/lib/clamav/daily.cvd LibClamAV debug: in cli_cvdload() LibClamAV debug: MD5(.tar.gz) = 2667d3188bb524ca5cb7f0c5fd165be8 LibClamAV debug: Decoded signature: 2667d3188bb524ca5cb7f0c5fd165be8 LibClamAV debug: Digital signature is correct. LibClamAV debug: in cli_untgz() LibClamAV debug: Unpacking /tmp/clamav-09d49669922f6331/COPYING LibClamAV debug: Unpacking /tmp/clamav-09d49669922f6331/daily.db LibClamAV debug: Unpacking /tmp/clamav-09d49669922f6331/daily.hdb LibClamAV debug: Unpacking /tmp/clamav-09d49669922f6331/daily.ndb LibClamAV debug: Unpacking /tmp/clamav-09d49669922f6331/daily.zmd LibClamAV debug: Unpacking /tmp/clamav-09d49669922f6331/daily.fp LibClamAV debug: Unpacking /tmp/clamav-09d49669922f6331/daily.info LibClamAV debug: Loading databases from /tmp/clamav-09d49669922f6331 LibClamAV debug: Loading /tmp/clamav-09d49669922f6331/daily.db LibClamAV debug: Initializing main node LibClamAV debug: Initializing trie LibClamAV debug: Initializing BM tables LibClamAV debug: in cli_bm_init() LibClamAV debug: BM: Number of indexes = 63744 LibClamAV debug: Loading /tmp/clamav-09d49669922f6331/daily.hdb LibClamAV debug: Initializing md5 list structure LibClamAV debug: Loading /tmp/clamav-09d49669922f6331/daily.ndb LibClamAV debug: Loading /tmp/clamav-09d49669922f6331/daily.zmd LibClamAV debug: Loading /tmp/clamav-09d49669922f6331/daily.fp LibClamAV debug: Loading /var/lib/clamav/main.cvd LibClamAV debug: in cli_cvdload() LibClamAV debug: MD5(.tar.gz) = c6c0e5c39b28fdbc7f2e23ce1c5166fc LibClamAV debug: Decoded signature: c6c0e5c39b28fdbc7f2e23ce1c5166fc LibClamAV debug: Digital signature is correct. LibClamAV debug: in cli_untgz() LibClamAV debug: Unpacking /tmp/clamav-8774734a52b5bbee/COPYING LibClamAV debug: Unpacking /tmp/clamav-8774734a52b5bbee/main.db LibClamAV debug: Unpacking /tmp/clamav-8774734a52b5bbee/main.hdb LibClamAV debug: Unpacking /tmp/clamav-8774734a52b5bbee/main.ndb LibClamAV debug: Unpacking /tmp/clamav-8774734a52b5bbee/main.zmd LibClamAV debug: Unpacking /tmp/clamav-8774734a52b5bbee/main.fp LibClamAV debug: Unpacking /tmp/clamav-8774734a52b5bbee/main.info LibClamAV debug: Loading databases from /tmp/clamav-8774734a52b5bbee LibClamAV debug: Loading /tmp/clamav-8774734a52b5bbee/main.db LibClamAV debug: Loading /tmp/clamav-8774734a52b5bbee/main.hdb LibClamAV debug: Loading /tmp/clamav-8774734a52b5bbee/main.ndb LibClamAV debug: Loading /tmp/clamav-8774734a52b5bbee/main.zmd LibClamAV debug: Loading /tmp/clamav-8774734a52b5bbee/main.fp [ ОК ]
[править] /etc/mail/sendmail.mc
[root@asp:~]# egrep -v '^dnl|^ *$' /etc/mail/sendmail.mc divert(-1)dnl include(`/usr/share/sendmail-cf/m4/cf.m4')dnl VERSIONID(`setup for ASPLinux')dnl OSTYPE(`linux')dnl INPUT_MAIL_FILTER(`mimedefang', `S=unix:/var/spool/MIMEDefang/mimedefang.sock, F =T, T=S:1m;R:1m;E:5m') define(`confDEF_USER_ID',``8:12'')dnl define(`confTO_CONNECT', `1m')dnl define(`confTRY_NULL_MX_LIST',true)dnl define(`confDONT_PROBE_INTERFACES',true)dnl define(`PROCMAIL_MAILER_PATH',`/usr/bin/procmail')dnl define(`ALIAS_FILE', `/etc/aliases')dnl define(`STATUS_FILE', `/var/log/mail/statistics')dnl define(`UUCP_MAILER_MAX', `2000000')dnl define(`confUSERDB_SPEC', `/etc/mail/userdb.db')dnl define(`confPRIVACY_FLAGS', `authwarnings,novrfy,noexpn,restrictqrun')dnl define(`confAUTH_OPTIONS', `A')dnl define(`confTO_IDENT', `0')dnl FEATURE(`no_default_msa',`dnl')dnl FEATURE(`smrsh',`/usr/sbin/smrsh')dnl FEATURE(`mailertable',`hash -o /etc/mail/mailertable.db')dnl FEATURE(`virtusertable',`hash -o /etc/mail/virtusertable.db')dnl FEATURE(redirect)dnl FEATURE(always_add_domain)dnl FEATURE(use_cw_file)dnl FEATURE(use_ct_file)dnl FEATURE(local_procmail,`',`procmail -t -Y -a $h -d $u')dnl FEATURE(`access_db',`hash -T<TMPF> -o /etc/mail/access.db')dnl FEATURE(`blacklist_recipients')dnl EXPOSED_USER(`root')dnl DAEMON_OPTIONS(`Port=smtp, Name=MTA')dnl FEATURE(`accept_unresolvable_domains')dnl LOCAL_DOMAIN(`localhost.localdomain')dnl MASQUERADE_DOMAIN(ukr.net)dnl MAILER(smtp)dnl MAILER(procmail)dnl
[править] Куда все попадает: /var/spool/MD-Quarantine/
[root@asp:~]# tree /var/spool/MD-Quarantine/ /var/spool/MD-Quarantine/ |-- qdir-2006-10-30-18.11.04-001 | |-- HEADERS | |-- MSG.1 | |-- PART.1.BODY | |-- PART.1.HEADERS | |-- RECIPIENTS | |-- SENDER | `-- SENDMAIL-QID |-- qdir-2006-10-30-18.11.57-001 | |-- HEADERS | |-- MSG.1 | |-- PART.1.BODY | |-- PART.1.HEADERS | |-- RECIPIENTS | |-- SENDER | `-- SENDMAIL-QID `-- qdir-2006-10-30-18.15.56-001 |-- HEADERS |-- MSG.1 |-- PART.1.BODY |-- PART.1.HEADERS |-- RECIPIENTS |-- SENDER `-- SENDMAIL-QID 3 directories, 21 files
[править] Просмотр прикрепленных файлов, попавших в карантин:
[root@asp:~]# cat /var/spool/MD-Quarantine/qdir-2006-10-30-18.15.56-001/PART.1.HEADERS Content-Type: application/octet-stream Content-Disposition: attachment; filename="Thunderbird Setup 1.5.0.4.exe" Content-Transfer-Encoding: base64
и
[root@asp:~]# file /var/spool/MD-Quarantine/qdir-2006-10-30-18.15.56-001/PART.1.BODY /var/spool/MD-Quarantine/qdir-2006-10-30-18.15.56-001/PART.1.BODY: PE executable for MS Windows (GUI) Intel 80386 32-bit, UPX compressed
[править] Логи:
less /var/log/maillog Oct 30 18:15:54 asp sendmail[10055]: k9UGFr4G010055: from=root, size=8558821, class=0, nrcpts=1, msgid=<20061030161552.GA10051@ asp.linux.nt>, relay=root@localhost Oct 30 18:15:55 asp sendmail[10056]: k9UGFslK010056: from=<root@asp.linux.nt>, size=8558967, class=0, nrcpts=1, msgid=<20061030 161552.GA10051@asp.linux.nt>, proto=ESMTP, daemon=MTA, relay=localhost.localdomain [127.0.0.1] Oct 30 18:15:56 asp mimedefang.pl[9772]: MDLOG,k9UGFslK010056,bad_filename,Thunderbird Setup 1.5.0.4.exe,application/octet-stre am,<root@asp.linux.nt>,<user@asp.linux.nt>,re Oct 30 18:15:56 asp mimedefang.pl[9772]: MDLOG,k9UGFslK010056,mail_in,,,<root@asp.linux.nt>,<user@asp.linux.nt>,re Oct 30 18:15:57 asp mimedefang.pl[9772]: filter: k9UGFslK010056: quarantine=1 Oct 30 18:15:57 asp sendmail[10056]: k9UGFslK010056: Milter change: header Content-Type: from multipart/mixed; boundary="fdj2Rf SjLxBAspz7" to multipart/mixed; boundary="fdj2RfSjLxBAspz7" Oct 30 18:15:57 asp sendmail[10056]: k9UGFslK010056: Milter change: header MIME-Version: from 1.0 to 1.0 Oct 30 18:15:57 asp sendmail[10056]: k9UGFslK010056: Milter change: header Content-Disposition: from inline to inline Oct 30 18:15:57 asp sendmail[10056]: k9UGFslK010056: Milter message: body replaced Oct 30 18:15:58 asp sendmail[10056]: k9UGFslK010056: Milter add: header: X-Scanned-By: MIMEDefang 2.57 on 192.168.15.150 Oct 30 18:15:58 asp sendmail[10055]: k9UGFr4G010055: to=user@asp.linux.nt, ctladdr=root (0/0), delay=00:00:05, xdelay=00:00:04, mailer=relay, pri=8588821, relay=[127.0.0.1] [127.0.0.1], dsn=2.0.0, stat=Sent (k9UGFslK010056 Message accepted for delivery) Oct 30 18:15:59 asp sendmail[10059]: k9UGFslK010056: to=<user@asp.linux.nt>, ctladdr=<root@asp.linux.nt> (0/0), delay=00:00:05, xdelay=00:00:01, mailer=local, pri=8613319, dsn=2.0.0, stat=Sent
[править] После рестарта mimedefang`a все остается
[править] nt-fbsdnet
[править] Эталонная модель OSI
При написании статьи использовались следующие материалы: Модель ISO/OSI Сетевая модель OSI
Уровень OSI | Протоколы |
---|---|
Прикладной | NFS, IMAP, POP3, SMB |
Представления | HTTP/HTML, XML, FTP, Telnet, SMTP, NCP |
Сеансовый | ASP, NetBIOS, SSL, TLS |
Транспортный | TCP, UDP, NetBEUI, SMB, TFTP |
Сетевой | IP, IPv6, ICMP, IGMP, IPX, NetBEUI, IPSec, ARP, RARP, DHCP, BootP |
Канальный | WiFi, PPTP |
Физический | ISDN, T-carrier (T1, E1), модификации стандарта Ethernet: 10BASE-T, 10BASE2, 10BASE5, 100BASE-TX, 100BASE-FX, 100BASE-T, 1000BASE-T, 1000BASE-TX, 1000BASE-SX |
[править] Прикладной уровень
Верхний уровень сетевой иерархии.На этом уровне расположено множество служб и протоколов, требующихся клиентскими приложениями для установки взаимных связей в сети. Они предназначены для управления сетью, дистанционного выполнения задач и доступа к файлам, использования каталога, пересылки почты. Это тот уровень, с которым взаимодействует польователь. Также отвечает за передачу служебной информации, предоставляет приложениям информацию об ошибках и формирует запросы к уровню представления.
[править] Уровень представления
На этом уровне лежит ответственность за правильное и однозначное преобразование протоколов и кодирование/декодирование данных. Запросы приложений, полученные с уровня приложений, он преобразует в формат для передачи по сети, а полученные из сети данные преобразует в формат, понятный приложениям. На этом уровне может осуществляться сжатие/распаковка или кодирование/раскодирование данных, а также перенаправление запросов другому сетевому ресурсу, если они не могут быть обработаны локально.
[править] Сеансовый уровень
На этом уровне осуществляется контроль диалога между устройствами. Служит для организации связи в трёх режимах:
- симплексный;
- полудуплексный;
- дуплексный.
Сеанс связи имеет 3 фазы:
- фаза установления связи: устройства согласовывают межлу собой параметры связи и протоколы;
- фаза передачи данных: узлы вступают в диалог и обмениваются информациеий;
- завершения сеанса.
На этом уровне также происходит синхронизация передачи, которая обеспечивается помещением в поток данных контрольных точек, начиная с которых возобновляется процесс при нарушении взаимодействия.
На практике редко такие функции выделяются в отдельный уровень - обычно они встраиваются в прикладной и объединяются в одном протоколе прикладного уровня.
[править] Транспортный уровень
На сетевом уровне нет никаких гарантий, что данные поступят в том виде, в котором они отправлялись - пакеты могут быть повреждены, перемешаны или повреждены. Кроме того, на сетевом уровне отсутствует информация о том, какому процессу на хосте предназначаются данные — он знает только об адресе самого хоста. Транспортный уровень решает все эти проблемы — он организует надежную доставку данных между процессами. Транспортный уровень обеспечивает надежную доставку данных с использованием подтверждения приема, нумерации байтов в канале и других специальных решений. Для адресации процесса в пределах компьютера используется номер порта. Существует два вида доставки, которые реализуются на этом уровне:
- - гарантированная
- - негарантированная
При гарантированной доставке транспортный уровень обрабатывает ошибки двумя способами:
- - сообщение на более высокие уровни о наличии ошибок
- - самостоятельная отправка испорченных пакетов
При негарантированной доставке транспортный уровень не ведет учета ошибок, что приводит к увеличению производительноси сети за счет снижения нагрузки на нее. Применяется в достаточнро надежных сетях, при работе с loopback устройствами, а также для различных запросов служб Inernet (например DNS-запросы).
[править] Сетевой уровень
Сетевой уровень служит для создания единой транспортной системы, объединяющей несколько сетей, причем эти сети могут использовать совершенно различные принципы работы, обладать произвольной структурой. На сетевом уровне термин сеть означает совокупность компьютеров, которые могут обмениваться между собой данными на канальном уровне. Внутри сети проблема доставки данных полностью решается канальным уровнем, а при передаче данных за пределы сети обязательно включается сетевой уровень. Сети соединены между собой маршрутизаторами — устройствами, которые передают данные из одной сети в другую на основании известных им таблиц маршрутизации. Последовательность маршрутизаторов, через которые должен пройти пакет по пути от отправителя к получателю, образует маршрут. Маршрут не известен заранее, он строится по мере прохождения пакета каждым маршрутизатором. Проблема выбора наилучшего маршрута для пакета называется маршрутизацией (routing).
[править] Канальный уровень
Этот уровень предназначен для обеспечения взаимодействия сетей на физическом уровне и контроля за ошибками, которые могут возникнуть. Полученные с физического уровня данные он упаковывает в кадры данных, проверяет на целостность, если нужно исправляет ошибки и отправляет на сетевой уровень. Канальный уровень может взаимодействовать с одним или несколькими физическими уровнями, контролируя и управляя этим взаимодействием. Спецификация IEEE 802 разделяет этот уровень на 2 подуровня — MAC (Media Access Control) регулирует доступ к разделяемой физической среде, LLC (Logical Link Control) обеспечивает обслуживание сетевого уровня. На этом уровне работают коммутаторы, мосты и сетевые адаптеры. В программировании этот уровень представляет драйвер сетевой платы, в операционных системах имеется программный интерфейс взаимодействия канального и сетевого уровня между собой, это не новый уровень, а просто реализация модели для конкретной ОС.
[править] Физический уровень
Самый нижний уровень модели, предназначен непосредственно для передачи потока данных. Этот уровень имеет дело с передачей битов по физическим каналам, таким, например, как коаксиальный кабель, витая пара или оптоволоконный кабель. К этому уровню имеют отношение характеристики физических сред передачи данных, такие как полоса пропускания, помехозащищенность, волновое сопротивление и другие. На этом же уровне определяются характеристики электрических сигналов, такие как требования к фронтам импульсов, уровням напряжения или тока передаваемого сигнала, тип кодирования, скорость передачи сигналов. Кроме этого, здесь стандартизуются типы разъемов и назначение каждого контакта. На этом уровне работают концентраторы и повторители (ретрансляторы) сигнала.
[править] Стек протоколов TCP/IP
Стек TCP/IP, называемый также стеком DoD и стеком Internet, является одним из наиболее популярных и перспективных стеков коммуникационных протоколов. Стек был разработан по инициативе Министерства обороны США (Department of Defence, DoD) более 20 лет назад для связи экспериментальной сети ARPAnet с другими сателлитными сетями как набор общих протоколов для разнородной вычислительной среды. Большой вклад в развитие стека TCP/IP внес университет Беркли, реализовав протоколы стека в своей версии ОС UNIX. Широкое распространение ОС UNIX привело и к широкому распространению протокола IP и других протоколов стека. На этом же стеке работает всемирная информационная сеть Internet. Так как стек TCP/IP был разработан до появления модели взаимодействия открытых систем ISO/OSI, то, хотя он также имеет многоуровневую структуру, соответствие уровней стека TCP/IP уровням модели OSI достаточно условно.
[править] Уровень IV (Network Access)
Как видно из рисунка, физический и канальный уровни модели OSI объединены в VI уровень стека TCP/IP. Этот уровень в протоколах TCP/IP не стандартизирован, но поддерживает все популярные стандарты физического и канального уровня: для локальных сетей это Ethernet, Token Ring, FDDI, Fast Ethernet, 100VG-AnyLAN, для глобальных сетей - протоколы соединений "точка-точка" SLIP и PPP.
[править] Ни туда - ни сюда протоколы
[править] Протокол ARP (Address Resolution Protocol)
Любое устройство, подключенное к локальной сети (Ethernet, FDDI и т.д.), имеет уникальный физический сетевой адрес, заданный аппаратным образом. 6-байтовый Ethernet-адрес выбирает изготовитель сетевого интерфейсного оборудования из выделенного для него по лицензии адресного пространства. Если у машины меняется сетевой адаптер, то меняется и ее Ethernet-адрес.
Формат Ethrnet-адреса (или MAC-адреса) имеет следующий формат: MAC-адрес всегда записывается в виде последовательности из 12 шестнадцатеричных цифр (2 числа - 1 байт)
ff:ff:ff:ff:ff:ff
где: первые три байта указывают на произодителя (Vendor ID), последние три байта - уникальная последовательность
Узнать производителя сетевого адаптера по Vendor ID его MAC-адреса можно на сайте http://standards.ieee.org/regauth/oui/oui.txt|standards.ieee.org
MAC-адреса формируют основу сетей на канальном уровне, которую используют протоколы более высокого (сетевого) уровня. Для преобразования MAC-адресов в адреса сетевого уровня и обратно применяются специальные протоколы (например, ARP и RARP в сетях TCP/IP).
Когда фрейм Ethernet отправляется от одного хоста по локальной сети к другому, по его 48-битному Ethernet адресу определяется, к какому интерфейсу он должен быть доставлен. Драйвер сетевой платы никогда не смотрит на IP адрес назначения в IP датаграмме.
Другими словами возникает необходимость установить соответствие между двумя различными формами адресов: 32-битными IP адресами и каким-либо типом адресов канального уровня.
официальная спецификация ARP находится в стандарте RFC 826.
[править] Формат ARP-пакета
- Два первых поля в Ethernet заголовке - поля источника и назначения Ethernet. Специальный адрес назначения Ethernet, состоящий из всех единиц, означает широковещательный адрес. Фреймы с таким адресом будут получены всеми Ethernet интерфейсами на кабеле.
- Двухбайтовый тип фрейма (frame type) Ethernet указывает, данные какого типа, пойдут следом. Для ARP запроса или ARP отклика это поле содержит 0x0806.
- Поле hard type указывает на тип аппаратного адреса. Для Ethernet это значение равно единице. Prot type указывает тип адреса протокола, к которому будет приведено соответствие. Для IP адресов используется значение 0x0800. По своему целевому назначению это значение соответствует полю типа во фрейме Ethernet, который содержит IP датаграмму.
- Два следующих однобайтных поля, hard size и prot size, указывают на размеры в байтах аппаратного адреса и адреса протокола. В ARP запросах и откликах они составляют 6 для Ethernet и 4 для IP адреса
- Поле op указывает на тип операции: ARP запрос (значение устанавливается в 1), ARP отклик (2), RARP запрос (3) и RARP отклик (4). Это поле необходимо, так как поля типа фрейма (frame type) одинаковы для ARP запроса и ARP отклика.
- Следующие четыре поля: аппаратный адрес отправителя (Ethernet адрес в данном примере), адрес протокола (IP адрес), аппаратный адрес назначения и адрес протокола назначения. Обратите внимание, что в данном случае происходит некоторое дублирование информации: аппаратный адрес отправителя может быть получен как из Ethernet заголовка, так и из ARP запроса.
Для ARP запроса все поля заполнены, за исключением аппаратного адреса назначения. Когда система получает ARP запрос, который предназначается ей, она вставляет свой аппаратный адрес, меняет местами адреса источника и назначения, устанавливает поле op в значение 2 и отправляет отклик.
[править] Протокол RARP
Обратный протокол определения адреса
Когда загружается система с локальным диском, она обычно получает свой IP адрес из конфигурационного файла, который считывается с диска. Однако для систем, не имеющих диска, таких как X терминалы или бездисковые рабочие станции, требуются другой способ определения собственного IP адреса.
Каждая система в сети имеет уникальный аппаратный адрес, который назначается производителем сетевого интерфейса (сетевой платы). Принцип работы RARP заключается в том, что бездисковая система может считать свой уникальный аппаратный адрес с интерфейсной платы и послать RARP запрос (широковещательный фрейм в сеть), где потребует кого-нибудь откликнуться и сообщить IP адрес (с помощью RARP отклика).
Несмотря на то что концепция довольно проста, ее реализация как правило значительно сложнее чем ARP, который был описан в выше. Официальная спецификация RARP находится в RFC 903.
[править] Формат пакета RARP
Формат пакета RARP практически идентичен пакету ARP (см. рисунок выше). Единственное отличие заключается в том, что поле тип фрейма (frame type) для запроса или отклика RARP установлено в 0x8035, а поле op имеет значение 3 для RARP запроса и значение 4 для RARP отклика.
RARP запрос является широковещательным, а RARP отклик обычно персональный.
[править] Протокло Bootp
При использовании RARP возникает две проблемы: (1) единственное, что можно узнать, это IP адрес, и (2) так как RARP использует широковещательный запрос на канальном уровне, запросы RARP не перенаправляются маршрутизаторами (поэтому RARP сервер должен находиться в каждой физической сети). В этой главе мы опишем альтернативный метод загрузки бездисковых систем, который называется протоколом загрузки (BOOTP - Bootstrap Protocol).
BOOTP использует UDP и обычно используется совместно с TFTP (глава 15). Официальная спецификация BOOTP приведена в RFC 951 [Croft and Gilmore 1985], пояснения даются в RFC 1542 [Wimer 1993].
[править] Формат пакета BOOTP
- Код операции (opcode) равен 1 для запроса и 2 для отклика.
- Поле типа аппаратного адреса (hardware type) равно 1 для Ethernet 10 Мбит/сек, это же значение находится в поле с таким же именем в ARP запросе или отклике
- Счетчик пересылок (hop count) устанавливается клиентом в 0, однако может быть использован уполномоченным сервером
- Идентификатор транзакции (transaction ID) - 32-битное целое число, которое устанавливается клиентом и возвращается сервером. Оно позволяет клиенту сопоставить отклик с запросом. Клиент устанавливает в это поле случайное число для каждого запроса.
- В поле количество секунд (number of seconds) клиент записывает время, когда он предпринял первую попытку загрузиться. На основании значения этого поля вторичный сервер делает вывод о том, что первичный сервер не доступен. (Вторичный сервер делает подобный вывод если величина в поле количества секунд достигла определенного значения.)
- Если клиент уже знает свой IP адрес, он заполняет поле IP адрес клиента (client IP address). Есле нет - клиент устанавливает это значение в 0. В последнем случае сервер вставляет в поле ваш IP адрес (your IP address) IP адрес клиента. Поле IP адрес сервера (server IP address) заполняется сервером. Если используется уполномоченный сервер, он заполняет IP адрес шлюза (gateway IP address).
- Клиент должен установить свой аппаратный адрес клиента (client hardware address). Это то же значение, которое находиться в заголовке Ethernet и в поле UDP датаграммы, благодаря чему оно становится доступным любому пользовательскому процессу (например, серверу BOOTP), который получил датаграмму. Обычно процессу, работающему с UDP датаграммами, сложно или практически невозможно определить значение, находящееся в поле заголовка Ethernet датаграммы, в которой передается UDP датаграмма.
- Имя хоста сервера (server hostname) это строка, которая заполняется сервером (не обязательно). Сервер также может заполнить поле имени загрузочного файла (boot filename). В это поле заносится полный путь к файлу, который используется при загрузке.
- Область производителя (vendor-specific) используется для различных расширений BOOTP.
[править] Уровень III (Inernet)
К уровню межсетевого взаимодействия относятся и все протоколы, связанные с составлением и модификацией таблиц маршрутизации, такие как протоколы сбора маршрутной информации RIP (Routing Internet Protocol) и OSPF (Open Shortest Path First), а также протокол межсетевых управляющих сообщений ICMP (Internet Control Message Protocol). Последний протокол предназначен для обмена информацией об ошибках между маршрутизатором и шлюзом, системой-источником и системой-приемником, то есть для организации обратной связи. С помощью специальных пакетов ICMP сообщается о невозможности доставки пакета, о превышении времени жизни или продолжительности сборки пакета из фрагментов, об аномальных величинах параметров, об изменении маршрута пересылки и типа обслуживания, о состоянии системы и т.п.
Двумя главными функциями этого уровня являются:
- маршрутизация
- обеспечение единого сетевого интерфейса для верхних уровней
Ни один из протоколов других уровней не имеет отношения к маршрутизации. Эта сложная иважная процедура выполняется именно на Internet уровне протоколом с такимже названием Internet Protocol. Другие протоколы этого уровня служат лишь для поддержки IP. Протокол IP просматривает адреса всех IP-пакетов, а затем с помощью протокола маршрутизации определяет следующий пункт назначения конкретного пакета, выбирая для него лучший маршрут.
Второй важной функцией уровня Internet является создание единого сетевого интерфейса для протоколов верхних уровней. Без него создателям програмного обеспечения необходимо было бы включать в каждое приложение програмные методы для каждого отличающегося от других протокола сетевого доступа, что привело бы к созданию различных версий каждого приложения - для Ethernet, Token Ring и т.д. Вместо этого IP создает единый сетевой интерфейс, обеспечивающий совмесную работу множества протоколов сетевого доступа.
[править] Протокол RIP
[править] Протокол (E)IGRP
[править] Протокол OSPF
[править] Протокол IP
[править] IP-датаграмма
На рисунке показан формат IP датаграммы. Стандартный размер IP заголовка составляет 20 байт, если не присутствуют опции.
- Номер версии - первые 4 бита
4 - для протокола IPv4
6 - для протокола IPv6
- Длина заголовка - следующие 4 бита
Длина заголовка в 32-битных словах. Обычно заголовок имеет длину в 20 байт (октетов), что составляет 5 32-битных слов, но в некоторых случаях может быть больше.
- Тип сервиса - 8 битов
!!!!!!!!!!!! Вставить таблицу типов сервисов [8]
Указывает на приоритет и срочность датаграммы.
- Первые три бита характеризуют величину приоритета: от 0 (нормальная датаграмма-самы низкий приоритет) до 7(управляющая информация - самый высокий приоритет)
- Следующие три бита указывают на флаги определения критерия выбора маршрута:
- D(Delay) - минимальная задержка
- T(Throughput) - Максимальная пропускная способность
- R(Reliability) - Максимальная надежность
- Следующие три бита указывают на флаги определения критерия выбора маршрута:
- Следующие 2 бита зарезервированы и не используются
- Длина датараммы - 16 битов
Полная длина датаграммы . Определяет полную длину датаграммы, включая заголовок и поле данных, в 8-битных октетах. Таким образом, максимальная длина IP-датаграммы не может превышать 65535 октетов.
- Идентификатор датаграммы - 16 битов
Уникальное число, позволяющее определить какой датаграмме принадлежит данный фрагмент. Все фрагменты одной датаграммы имеют одинаковый номер.
- Флаги -3 бита
Используются для управления фрагментами датаграммы.
- Первый бит не используется.
- Второй бит (DF, Don't Fragment) запрещает фрагментировать датаграмму. Установленный бит гарантирует, что если адресат получит датаграмму, то она обязательно будет состоять из одного фрагмента (Маршрутизаторы обязаны уметь передавать нефрагментированные датаграммы размером 576 байт и менее. В некоторых случаях маршрутизаторы не могут передать датаграммы большего размера без фрагментирования. Тогда они просто отбрасываются.) .
- Третий бит (MF, More Fragments)
означает, что этот фрагмент является не последним в датаграмме и будет продолжение. Последний фрагмент в датаграмме имеет бит MF равный нулю.
- Смещение фрагмента - 13 битов.
Указывает местоположение блока данных текущего фрагмента в оригинальной датаграмме. Размеры всех фрагментов (за исключением последнего) должны быть кратны 8, поэтому смещение указывается без последних трех битов.
- Время жизни (TTL) - 8 битов.
Означает предельный срок, в течение которого датаграмма может перемещаться по сети. При прохождении маршрутизатора (hop) значение TTL уменьшается на 1. Когда значение TTL достигает 0, датаграмма уничтожается, а отправитель получает сообщение о том, что время жизни пакета истекло. Тем самым мы избавляемся от опасности бесконечного блуждания паке- тов по сети.
- Протокол верхнего уровня - 8 битов.
Информация о протоколе нужна для того чтобы выбрать, куда именно должны передаваться данные по стеку протоколов вверх. Номера протоколов определены документом RFC 1700. Например, TCP имеет номер 6, а UDP — 17.
- Контрольная сумма заголовка - 16 битов.
Защищает заголовок от наличия ошибок в нем. Вычисляется как логическое дополнение суммы всех остальных данных заголовка, разбитых на 16-битные слова. Таким образом, сумма всех 16-битных слов заголовка должна быть равна нулю. Если это не так, датаграмма считается поврежденной и отбрасывается.
- Адрес отправителя - 32 бита.
- Адрес получателя - 32 бита.
Оба поля имеют одинаковую структуру.Они содержат так называемые IP-адреса хостов сети.
- Опции.
Поле, которое является не обязательным и используется в основном только при отладке сети.
- Безопасность. Поле, которое теоретически, должно запрещать передачу датаграмм через небезопасные маршрутизаторы. На практике не используется.
- Строгая маршрутизация от источника. Требует чтобы датаграмма передавалась через указанную последовательность маршрутизаиторов.
- Нестрогая маршрутизация от источника. Требует, чтобы датаграмма прошла через заданные маршрутиазаторы.
- Маршрут. Можно заставить маршрутизаторы добавлять к этому полю информацию о том, что датаграмма прошла через них. В результате, поле содержит список всех узлов, через которые проходил пакет.
- Временной штамп. Маршрутизаторы добавляют в поле не только информацию о собственном адресе, но и временной штамп (32-битное слово).
- Выравнивание. Поле, заполненное нулями до 32-битной границы.
[править] IP-адреса
[править] Понятие IP-адреса
IP-адрес представляет собой 32-битное двоичное число. Обычно его принято записывать в так называемой десятичной точечной нотации (dotted quad notation), когда каждый байт адреса представляется в виде числа в десятеричной системе счисления и отделяется от остальных точкой. Например, ниже приведены различные представления одного и того же адреса:
192.168.1.15 11000000 10101000 00000001 00001111 C0A8010F
В первом случае адрес записан в традиционной форме, так, как с ним обычно работают люди, во втором случае — в двоичном виде, то есть так, как он представляется электрическими сигналами, в третьем случае - в шестнадцатеричной системе счисления, как он представляется некоторым программным обеспечением.
[править] Классы IP-адресов
Одно из основных достоинств использования классов заключается в том, что каждый адрес содержит ключ, который идентифицирует точку, расположенную между сетевым префиксом и номером хоста. Например, если старшие два бита адреса установлены в 1 и 0, то линия раздела пролегает между 15 и 16-м битами. IP-адрес разбивается на два элемента: адрес сети и адрес хоста. В зависимости от того, какому классу принадлежит IP-адрес, граница сеть-хост может пролегать между первым и вторым (класс A), вторым и третьим (класс B) или третьим и четвертым байтами (класс C).
Таблица Итоговые сведения о классах IP-адресов
Класс | Пределы значений первого октета | Общее количество сетей | Общее количество хостов в сети | Применяемая маска по умолчанию | Назначение |
---|---|---|---|---|---|
A | 1-126 | 126 | 16,7 млн | 255.0.0.0 | Стандартный класс |
B | 128-191 | 16384 | 65534 | 255.255.0.0 | Стандартный класс |
C | 192-223 | 2 млн | 254 | 255.255.255.0 | Стандартный класс |
D | 224-239 | Не рассматривается | Не рассматривается | 224.0.0.0 | Mногоадресатная рассылка |
E | 240-255 | Не рассматривается | Не рассматривается | Не рассматривается | Экспериментальный класс |
[править] IP-адреса, зарезервированные для часного использования
Таблица IP-адресов, зарезервированных для часного использования
Диапазон IP-адресов | Количество IP-адресов | Наибольший блок | Описано в |
---|---|---|---|
10.0.0.0 – 10.255.255.255 | 16,777,216 | 10.0.0.0/8 | RFC 1597, RFC 1918 |
172.16.0.0 – 172.31.255.255 | 1,048,576 | 172.16.0.0/12 | |
192.168.0.0 – 192.168.255.255 | 65,536 | 192.168.0.0/16 | |
169.254.0.0 – 169.254.255.255 | 65,536 | 169.254.0.0/16 | RFC 3330, RFC 3927 |
[править] Специальные IP-адреса
Существует несколько наборов адресов, которые не могут появиться в адресном пространстве Интернета. IP-пакеты, имеющие такие адреса, не передаются в Интернет, а могут свободно перемещаться только в пределах внутренней сети. Таким образом, значительно экономится ад- ресное пространство Интернет, поскольку две независимые сети могут использовать одни и те же адреса, не заботясь о том, что кто-то их уже использует.
- Этот хост. Адрес, состоящий из всех нулей, означает сам хост;
- Адрес сети. Адрес, хост-часть которого состоит из одних нулей, означает адрес этой сети;
- Адрес в текущей сети. Адрес, сетевая часть которого состоит из одних нулей, означает хост с заданным адресом в этой сети;
- Широковещательный адрес. Адрес, хост-часть которого наоборот состоит из одних единиц, означает широковещательный адрес. Датаграммы, отправленные по этому адресу, получат все компьютеры, находящиеся в этой сети;
- Широковещательный адрес в пределах этой сети. Адрес, состоящий из всех единиц, означает широковещательный адрес в пределах этой сети.
- Петля обратной связи. Любой адрес, первый байт которого равен 127, зарезервирован для петли обратной связи. Такой адрес всегда принадлежит самому хосту. Обычно, для петли обратной связи принято использовать адрес 127.0.0.1, однако это не имеет никакого значения.
[править] Разбиение заданного адресного пространства на подсети
Разбиение пространства на сети, в том виде, в каком оно обеспечивается классами адресов, оказалось не очень удобным. Огромное количество сетей в действительности содержат намного меньше чем 254 хоста. Даже для адресов класса C, значительная часть адресов сети попросту не используется. Для сетей классов A и B ситуация обостряется еще сильнее. В результате, адресное пространство расходуется неэкономно. Для того чтобы сделать разбиение адресного пространства более гибким, было введено понятие подсети и маски подсети. Часть IP-адреса, которая относится к адресу хоста, разбивается на две части: несколько старших битов адресуют подсеть, остальные хост — в пределах этой подсети. Маска подсети представляет собой 32-разрядное двоичное число, которое содержит 0 в разрядах, относящихся к адресу хоста и 1 во всех остальных. Таким образом, маска описывает границу, проходящую между адресом подсети и адресом хоста. Например, пусть адрес 172.16.1.2 принадлежит подсети с маской 255.255.255.0:
Адрес: 172.16.1.2
Маска подсети: 255.255.255.0
Адрес подсети: 172.16.1.0
Широковещательный адрес: 172.16.1.255
Обратите внимание на то, что в соответствии с классом адреса (класс B), адрес сети должен быть равен 172.16.0.0, а широковещательный: 172.16.255.255. Но так как маска задана явно, граница сетевой и хостовой части находится в другом месте, между третьим и четвертым байтом. В любой подсети адреса, хост-часть которых равна нулю и хост-часть которых содержит одни единицы, зарезервирована для адреса подсети и широковещательного адреса. Адреса, в которых номер подсети равен нулю или наоборот, содержит одни единицы, также зарезервированы, и использовать их не рекомендуется. Из-за того, что некоторые адреса зарезервированы, количество адресов, которые можно использовать для назначения компьютерам, после разбиения сокращается. Например, пусть сеть 192.168.1.0 нужно разбить на 18 подсетей. Какое количество адресов будет доступно в каждой подсети, и каково суммарное количество доступных адресов? Разбиение проходит по границе бита, поэтому количество подсетей может быть только степени 2, минус зарезервированные сети. То есть, мы можем получить: 2, 6, 14, 30 или 62 подсети, выделяя для этого под ее адрес 2, 3, 4, 5 или 6 битов соответственно. Подсеть с адресом, состоящим из одного бита, использовать можно, но в этом случае нам придется задействовать зарезервированные адреса. Разбить сеть ровно на 18 подсетей не удастся, сеть придется разбить минимум на 30 подсетей (Разбиение можно выполнить и иначе. Например, разделить сеть на 14 подсетей одну или две из которых разбить на более мелкие части и получить тем самым необходимое их количество). При разбиении на 32-2 сети адрес подсети занимает 5 битов, а под адрес хоста отводится 3 бита. Таким образом, маска подсети выглядит так:
11111111 11111111 11111111 11111000
255.255.255.248
В каждой подсети может быть 8-2 хоста (2 адреса резервируются под широковещательный адрес и адрес подсети). В итоге получается, что после разбиения число доступных адресов равно 180 (30*6), против тех 254, которые были доступны изначально. Адреса полученных сетей:
192.168.1.0 - зарезервирован 192.168.1.8 192.168.1.16 ... 192.168.1.240 192.168.1.248 - зарезервирован
Бесклассовая маршрутизация (CIDR, Classless IntrerDomain Routing), описанная документом RFC 1519, предлагает не разбивать адреса на классы, а выполнять разбиение просто исходя из потребностей в адресном пространстве.
[править] Протокол ICMP
протокол управления сообщениями Internet
С его помощью передаются сообщения об ошибках и сообщения о возникновении условий и ситуаций, которые требуют к себе особого внимания. ICMP сообщения обрабатываются IP уровнем или более высокими уровнями (TCP или UDP). При появлении некоторых ICMP сообщений генерируются сообщения об ошибках, которые передаются пользовательским процессам.
Официальная спецификация ICMP находится в RFC 792
На рисунке показан формат ICMP сообщения.
- Первые 4 байта одинаковы для всех сообщений, однако остальные отличаются в зависимости от типа сообщения.
- Существует 15 различных значений для поля типа (type), которые указывают на конкретныей тип ICMP сообщения. Для некоторых ICMP сообщений используются различные значения в поле кода (code), подобным образом осуществляется дальнейшее подразделение ICMP сообщений.
- Поле контрольной суммы (checksum) охватывает ICMP сообщения целиком.
Сообщение об ошибке ICMP никогда не генерируется в ответ на:
ICMP сообщение об ошибке. (ICMP сообщение об ошибке, однако, может быть сгенерировано в ответ на ICMP запрос.) Датаграмму, направляющуюся на широковещательный IP адрес (рисунок 3.9) или групповой адрес IP (адрес класса D, рисунок 1.5). Датаграмму, которая посылается широковещательным запросом на канальном уровне. Фрагмент, который не является первым. Датаграмму, адрес источника которой не указывает на конкретный хост. Это означает, что адрес источника не может быть нулевым, loopback адресом, широковещательным или групповым адресом.
Таблица - типы сообщений ICMP
тип | код | Описание |
---|---|---|
0 | 0 | эхо-отклик (отклик-Ping) |
3 | назначение недоступно: | |
0 | сеть недоступна - network unreachable | |
1 | хост недоступен - host unreachable | |
2 | протокол недоступен - protocol unreachable | |
3 | порт недоступен - port unreachable | |
4 | необходима фрагментация, однако установлен бит “не фрагментировать”- fragmentation needed but don’t-fragment bit set | |
5 | не работает маршрутизация от источника - source route failed | |
6 | неизвестна сеть назначения - destination network unknown | |
7 | неизвестен хост назначения - destination host unknown | |
8 | хост источник изолирован - source host isolated | |
9 | сеть назначения закрыта администратором - destination network administrativrly prohibited | |
10 | хост назначения закрыт администратором - destination host administrativrly prohibited | |
11 | сеть недоступна для TOS - network unreachable for TOS | |
12 | хост недоступен для TOS - host unreachable for TOS | |
13 | связь административно закрыта путем фильтрации - communication administratively prohibited by filtering | |
14 | нарушено старшинство для хоста - host precedence violation | |
15 | старшинство разъединено - precedence cutoff in effect | |
4 | 0 | подавление источника (элементарное управление потоком данных) - source quench |
5 | перенаправление - redirect | |
0 | перенаправление в сеть - redirect for network | |
1 | перенаправление в хост - redirect for host | |
2 | перенаправление для типа сервиса и сети - redirect for type-of-service and network | |
3 | перенаправление для типа сервиса и хоста - redirect for type-of-service and host | |
8 | 0 | эхо запрос - echo request (Ping запрос) |
9 | 0 | объявление маршрутизатора - router advertisement |
10 | 0 | запрос к маршрутизатору - router solicitation |
11 | время истекло - time exceeded: | |
0 | время жизни стало равным 0 в процессе передачи - time-to-live equals 0 during transit | |
1 | время жизни стало равным 0 в процессе повторной сборки - time-to-live equals 0 during reassembly | |
12 | проблемы с параметрами - parameter problem: | |
0 | неверный IP заголовок - IP header bad | |
1 | отсутствует необходимая опция - required option missing | |
13 | 0 | запрос временной марки - timestamp request |
14 | 0 | отклик с временной маркой - timestamp reply |
15 | 0 | информационный запрос - information request |
16 | 0 | информационный отклик - information reply |
17 | 0 | запрос маски адреса - address mask request |
18 | 0 | отклик с маской адреса - address mask reply |
[править] Уровень II (Transport)
Транспортный уровень (transport layer) отвечает за передачу потока данных между двумя компьютерами и обеспечивает работу прикладного уровня, который находится выше. В семействе протоколов TCP/IP существует два транспортных протокола: TCP (Transmission Control Protocol) и UDP (User Datagram Protocol). TCP осуществляет надежную передачу данных между двумя компьютерами. Он обеспечивает деление данных, передающихся от одного приложения к другому, на пакеты подходящего для сетевого уровня размера, подтверждение принятых пакетов, установку тайм-аутов, в течение которых должно прийти подтверждение на пакет, и так далее. Так как надежность передачи данных гарантируется на транспортном уровне, на прикладном уровне эти детали игнорируются. UDP предоставляет более простой сервис для прикладного уровня. Он просто отсылает пакеты, которые называются датаграммами (datagram) от одного компьютера к другому. При этом нет никакой гарантии, что датаграмма дойдет до пункта назначения. За надежность передачи данных, при использовании датаграмм отвечает прикладной уровень. Для каждого транспортного протокола существуют различные приложения, которые их используют.
[править] протокол TCP
TCP строит пакеты из пользовательских данных, упаковывая их в сегменты, устанавливает тайм-ауты в тот момент, когда он посылает данные, подтверждает принятые данные с удаленного конца, меняет порядок данных, которые пришли хаотически, отбрасывает продублированные данные, осуществляет контроль потока данных, рассчитывает и проверяет контрольную сумму в конечных точках передачи.
На рисунке показан формат TCP-заголовка и включает в себя он следующее:
- Порт источника и порт назначения:
Каждый TCP сегмент содержит номер порта (port number) источника и назначения, с помощью которых идентифицируются отправляющее и принимающее приложения. Эти два значения вместе с IP адресом источника и назначения в IP заголовке уникально идентифицируют каждое соединение.
- Номер последовательности (sequence number)
Идентифицирует байт в потоке данных от отправляющего TCP к принимающему TCP. Если мы представим поток байтов, текущий в одном направлении между двумя приложениями, TCP нумерует каждый байт номером последовательности. Номер последовательности представляет собой 32-битное беззнаковое число, которое переходит через 0, по достижению значения 232 - 1.
При установлении нового соединения, взводится флаг SYN. Поле номера последовательности (sequence number field) содержит исходный номер последовательности (ISN - initial sequence number), который выбирается хостом для данного соединения. Номер последовательности первого байта данных, который посылается этим хостом, будет равен ISN плюс один, потому что флаг SYN занимает собой номер последовательности.
- Номер подтверждения (acknowledgment number)
Так как каждый байт, который участвует в обмене, пронумерован, номер подтверждения (acknowledgment number) это следующий номер последовательности, который ожидает получить отправитель подтверждения. Это номер последовательности плюс 1 последнего успешно принятого байта данных. Это поле принимается в рассмотрение, только если флаг ACK взведен.
- Длина заголовка (header length)
Содержит длину заголовка в 32-битных словах. Это объясняется тем, что длина поля опций переменная. С 4-битным полем у TCP есть ограничение на длину заголовка в 60 байт. Без опций, однако, стандартный размер составляет 20 байт.
- Флаги
В TCP заголовке существуют 6 флаговых битов. Один или несколько из них могут быть установлены в единицу в одно и то же время. Вот их краткое описание:
- URG
Указатель срочности (urgent pointer)
- ACK
Номер подтверждения необходимо принять в рассмотрение (acknowledgment).
- PSH
Получатель должен передать эти данные приложению как можно скорее.
- RST
Сбросить соединение.
- SYN
Синхронизирующий номер последовательности для установления соединения.
- FIN
Отправитель заканчивает посылку данных.
- Размер окна
Контроль потока данных TCP осуществляется на каждом конце с использованием размера окна (window size) . Это количество байт, начинающееся с указанного в поле номера подтверждения, которое приложение собирается принять. Это 16-битовое поле ограничивает размер окна в 65535 байт.
- Контрольная сумма (checksum)
Охватывает собой весь TCP сегмент: TCP заголовок и TCP данные. Это обязательное поле, которое должно быть рассчитано и сохранено отправителем, а затем проверено получателем.
- Указатель срочности (urgent pointer)
Действителен только в том случае, если установлен флаг URG. Этот указатель является положительным смещением, которое должно быть прибавлено к полю номера последовательности сегмента, чтобы получить номер последовательности последнего байта срочных данных. Режим срочности TCP это способ, с помощью которого отправитель передает срочные данные на удаленный конец.
[править] Установка и закрытие соединения
[править] Порты
В то время как задача IP заключается в передаче данных между произвольными узлами сети, задача транспортного уровня, которую решает протокол TCP, заключается в передаче данных между любыми прикладными процессами, выполняющимися на любых узлах сети. Данные, которые доставляет протокол IP на компьютер, должны быть переданы конкретном процессу на этом хосте. Пакеты, поступающие на транспортный уровень, организуются в виде очередей к множеству точек входа различных прикладных процессов. Такие очереди называются портами . Таким образом, адресом назначения, который используется протоколом является идентификатор (номер) порта прикладной службы.
Номер порта в совокупности с адресом узла и типом протокола однозначно определяют прикладной процесс в сети. Такой набор идентифицирующих параметров носит название сокет (socket).
Номер порта представляет собой двухбайтное число от 0 до 65535. Назначение номеров портов прикладным процессам осуществляется либо централизованно, если эти процессы обеспечивают популярные общедоступные службы (например, порт 25 закреплен за службой ретрансляции сообщений электронной почты SMTP), либо локально для тех служб, которые еще не стали столь распространенными, чтобы закреплять за ними зарезервированные номера.
[править] Протокол UDP (User Datagram Protocol)
В тех случаях, когда нижние сетевые уровни обеспечивают достаточно надежную доставку, а потеря передаваемых данных не вызывает больших проблем, вся мощь протокола TCP оказывает ненужной и даже в определенном смысле вредной: с одной стороны, генерируется дополнительный трафик; с другой — передача требует больших вычислительных и временных затрат.
Для выхода их этой ситуации разработан протокол UDP, который является ненадежным (с точки зрения не качества передачи, а типа услуги) протоколом без установления соединения. Заголовок UDP-датаграммы предельно прост:
- Порт отправителя (16 битов). Числовой идентификатор порта отправителя данных.
- Порт получателя (16 битов). Числовой идентификатор порта получателя данных.
- Длина (16 битов). Суммарное количество октетов в заголовке и поле данных. Не может быть меньше 8.
- Контрольная сумма (16 битов). Логическое дополнение суммы, вычисляемой по полю данных и заголовку сообщения.
[править] Уровень I (Applications)
Верхний уровень (уровень I) называется прикладным. За долгие годы использования стек TCP/IP накопил большое количество протоколов и сервисов прикладного уровня. К ним относятся такие широко используемые протоколы, как протокол копирования файлов FTP, протокол эмуляции терминала telnet, почтовый протокол SMTP, используемый в электронной почте сети Internet, гипертекстовые сервисы доступа к удаленной информации, такие как WWW и многие другие.
[править] Протокол SNMP (Simple Network Management Protocol)
Протокол SNMP (Simple Network Management Protocol) используется для организации сетевого управления. Проблема управления разделяется здесь на две задачи. Первая задача связана с передачей информации. Протоколы передачи управляющей информации определяют процедуру взаимодействия сервера с программой-клиентом, работающей на хосте администратора. Они определяют форматы сообщений, которыми обмениваются клиенты и серверы, а также форматы имен и адресов. Вторая задача связана с контролируемыми данными. Стандарты регламентируют, какие данные должны сохраняться и накапливаться в шлюзах, имена этих данных и синтаксис этих имен. В стандарте SNMP определена спецификация информационной базы данных управления сетью. Эта спецификация, известная как база данных MIB (Management Information Base), определяет те элементы данных, которые хост или шлюз должен сохранять, и допустимые операции над ними.
[править] Протокол FTP (File Transfer Protocol)
FTP отличается от других приложений тем, что он использует два TCP соединения для передачи файла.
- Управляющее соединение устанавливается как обычное соединение клиент-сервер. Сервер осуществляет пассивное открытие на заранее известный порт FTP (21) и ожидает запроса на соединение от клиента. Клиент осуществляет активное открытие на TCP порт 21, чтобы установить управляющее соединение. Управляющее соединение существует все время, пока клиент общается с сервером. Это соединение используется для передачи команд от клиента к серверу и для передачи откликов от сервера. Тип IP сервиса для управляющего соединения устанавливается для получения "минимальной задержки", так как команды обычно вводятся пользователем.
- Соединение данных открывается каждый раз, когда осуществляется передача файла между клиентом и сервером. (Оно также открывается и в другие моменты, как мы увидим позже.) Тип сервиса IP для соединения данных должен быть "максимальная пропускная способность", так как это соединение используется для передачи файлов.
[править] Протокол TFTP (Trivial File Transfer Protocol)
Приложения, которым не требуются все возможности FTP, могут использовать другой, более экономичный протокол - простейший протокол пересылки файлов TFTP (Trivial File Transfer Protocol). Этот протокол реализует только передачу файлов, причем в качестве транспорта используется более простой, чем TCP, протокол без установления соединения - UDP.
[править] Протокол Telnet
Telnet был разработан, для того чтобы работать между хостами работающими под управлениием любых операционных систем, а также с любыми терминалами. Его спецификация, приведенная в RFC 854 [Postel and Reynolds 1983a], определяет терминал, который может являться наиболее общим, и который называется виртуальным сетевым терминалом (NVT - network virtual terminal). NVT это воображаемое устройство, находящееся на обоих концах соединения, у клиента и сервера, с помощью которого устанавливается соответствие между их реальными терминалами. Таким образом, операционная система клиента должна определять соответствие между тем типом терминала, за которым работает пользователь, с NVT. В свою очередь, сервер должен устанавливать соответствие между NVT и теми типами терминалов, которые он (сервер) поддерживает.
[править] Протокол SMTP
[править] Элементы компьютерных сетей
Устройства, образующие компьютерную сеть, можно разделить на два класса:
- Коммуникационные устройства, то есть устройства, которые предназначены в первую очередь для передачи данных и решения сопутствующих задач;
- Серверы, то есть системы, которые предоставляют свои ресурсы для использования другим компьютерам сети.
Это разделение весьма условно, поскольку в первом случае, можно говорить о предоставлении коммуникационного ресурса, во втором — о том, что некоторые серверы, например почтовый, занимаются передачей данных. Тем не менее, его смысл ясен.
Коммуникационные устройства работают на нижних уровнях модели сетевого взаимодействия, а серверы — на ее верхних уровнях.
[править] 2.1. Коммуникационные устройства
В зависимости от того, на каком уровне OSI работает устройство, и, соответственно, какие функции выполняет, различают:
- повторители (repeater) и концентраторы (hub);
- мосты (bridge) и коммутаторы (switch);
- маршрутизаторы (router).
Повторитель и концентратор — устройства, которое объединяют несколько сетей на физическом уровне. Главное различие между повторителем и концентратором заключается в том, что первый объединят 2 сети, а второй — несколько, от 8 и более.
Основная их задача — передавать сигнал, поступающий на один вход, на все остальные входы. При этом уровень сигнала и его форма восстанавливаются и принимают требуемый вид.
Концентратор может выполнять и другие функции, например, анализировать сигналы, поступающие на его порты и, в том случае, если сигнал выглядит некорректно, блокировать этот порт.
Концентратор не анализирует данные и повторяет сигналы на всех портах, даже в том случае, если компьютера, которому адресуются данные, на этих портах заведомо нет. Концентратор не предотвращает коллизии, то есть столкновение и наложение сигналов от нескольких сетевых устройств. Так, если коллизия возникла в одном сегменте, то она будет распространена во все другие сегменты, подключенные к концентратору. В этом случае, говорят о том, что устройства, соединенные между собой при помощи концентратора или повторителя, составляют домен коллизий.
Повторитель и концентратор работают на первом, физическом, уровне модели сетевого взаимодействия OSI.
Коммутатор (и мост) в отличие от концентратора работает на канальном уровне. Это значит, что он воспринимает передающуюся по сети информацию не просто как электрический сигнал, а как набор кадров, каждый из которых имеет своего отправителя и получателя. Коммутатор анализирует адреса и отправляет кадр только туда, где получатель может быть. Коммутатор не передает кадр в том случае, если он имеет ошибку. Возникающие в одном сегменте коллизии не передаются на другие, то есть домен коллизий ограничен сегментом, подключенным к коммутатору. В том случае, если компьютеры подключаются к коммутаторам напрямую, коллизии не возникают вовсе. Существуют интеллектуальные коммутаторы, которые кроме своих основных задач выполняют ряд дополнительных.
Коммутатор строит таблицы используемые им для отправки пакетов самостоятельно, анализируя адреса отправителей кадров, поступающих на его порты. Широковещательные кадры отправляются коммутатором на все его порты: таким образом, все компьютеры соединенные одним или несколькими коммутаторами между собой будут получать одинаковые широковещательные кадры. Такие компьютеры по аналогии с доменом коллизий образуют широковещательный домен.
Коммутаторы могут передавать информацию только в пределах одной сети. В том случае, если данные должны быть отправлены куда-то за ее пределы, на помощь приходят маршрутизаторы.
Маршрутизаторы работают на сетевом уровне — они рассматривают поток данных как набор пакетов, например, IP-пакетов, каждый из которых имеет структурированный адрес уникальный для всей сети или, как еще говорят, межсети (internet8). Маршрутизатор анализирует таблицу маршрутизации и отправляет пакет основываясь на данных таблицы. Функции маршрутизатора могут быть возложены на Unix-машину. Для этого она обладает всеми необходимыми возможностями:
- поддержка маршрутизации IP-пакетов реализована в Unix на уровне ядра;
- модули ядра предоставляют возможности расширенной маршрутизации;
- под Unix работает несколько развитых программ динамической маршрутизации.
В английском языке слова internet и Internet имеют разные значения. В первом случае это сеть, состоящая из нескольких сетей, объединенных между собой маршрутизаторами. Во второй — собственно всемирная сеть.
[править] Серверы
Сеть обычно помимо простой задачи передачи данных предоставляет разнообразные вычислительные и информационные возможности, которые оформлены в виде так называемых сервисов или служб. Сервисы обеспечиваются серверами — компьютерами, предоставляющими свои ресурсы для совместного использования сетью.
FreeBSD является одной из наилучших платформ для построения сетевых серверов. Это связано с множеством причин: в первую очередь с тем, что ядро FreeBSD очень хорошо обеспечивает решение разнообразных задач сетевого взаимодействия, а так же с большим объемом качественного программного обеспечения, написанного или перенесенного под FreeBSD.
Популярные сетевые службы
Служба | Назначение |
---|---|
Служба | Назначение |
HTTP | Протокол HTTP (HyperText Transfer Protocol) — протокол передачи гипертекстовой информации. Один из важнейших протоколов Ин тернет, лежит в основе WWW.
Apache - это мощный, полнофункциональный, эффективный, свободно распространяемый и самый популярный WWW-сервер. |
Кэширующий прокси-сервер | Прокси-сервер — сервер посредник при помощи которого Web-клиенты получают доступ к Web-серверам. Это, с одной стороны, ускоряет доступ (за счет того, что прокси-сервер ускоряет кэширование и некоторые запрашиваемые данные извлекает из кэша, вместотого чтобы обращаться за ними к Web-серверу), с другой — позволяет контролировать трафик, выполнять его анализ и журнализацию.
Squid - это высокоэффективный кэширующий прокси-сервер для веб-клиентов, поддерживающий протоколы FTP, gopher и HTTP. |
DNS | DNS (Domain Name System) — система доменных имен — механизм представления IP-адресов пакетов в символьном виде, удобном для запоминания и использования людьми.
BIND (Berkeley Internet Name Domain) это реализация протокола DNS (Domain Name System). BIND включает в себя сервер DNS, конвертирующий имена узлов в IP адреса; библиотеку резолвера и утилиты для проверки корректности работы сервера. |
FTP | FTP (File Transfer Protocol) — протокол передачи файлов.
Программа wu-ftpd — сервер FTP, которой обладает следующими возможностями: ведение журналов передачи данных и команд, сжатие и архивация "на лету", классификация пользователей и их местонахождение, ограничения по классу, загрузка в разрешенные директории, ограничение гостевого входа, передача системных сообщений и сообщений для определенных каталогов, создание псевдонимов каталогов, наличие фильтра имен и поддержка виртуальных серверов. |
SMB | SMB (Server Message Blocks) - это протокол, при помощи которого компьютеры PC пользуются общими файлами, принтерами и другой информацией (например, списком доступных файлов и принтеров). Операционные системы Windows NT, OS/2 и FreeBSD поддерживают его изначально, а дополнительные пакеты могут сделать это возможным для DOS, Windows, VMS, UNIX всех видов, MVS и т.д. В FreeBSD поддержка протокола SMB обеспечивается при помощи пакета Samba. |
NFS | NFS (Network FileSystem) — сетевая файловая система, распространенная в UNIX-мире. FreeBSD поддерживает функции клиента NFS на уровне ядра. Сервер NFS организуется при помощи утилит nfsd и mountd. |
Telnet | Telnet - это распространенный протокол доступа к удаленным системам в интернет. Под FreeBSD работают программа telnet — клиент службы Telnet и telnetd — сервер Telnet. |
SSH | OpenSSH это версия SSH (Secure SHell), программы для входа и исполнения команд на удаленной машине. Демон sshd позволяет клиентам SSH безопасно соединяться с сервером SSH. |
SMTP | SMTP - протокол доставки сообщений электронной почты, используемый в Интернет.
Программа sendmail - это широко используемая система доставки электронной почты(MTA). Программа выполняет основную задачу транспортировки почты — передачи с одного хоста на другой с использованием протокола SMTP. |
POP3 | Протокол доступа к удаленному почтовому ящику.
Программа popper — небольшой сервер POP3. Имеет минимальный набор возможностей и, тем самым, обеспечивает высокую производительность и безопасность. |
DHCP и BOOTP | DHCP (Dynamic Host Configuration Protocol) и BOOTP (Boot Protocol) - это протоколы, предоставляющие отдельным устройствам в IP-сети возможность получать с серверов собственную конфигурационную информацию (IP-адреса, маску подсети, вещательные адреса и т.д.). Главное предназначение DHCP и BOOTP - это обеспечить достаточно легкое управление большой сетью.
DHCP-сервер — программа dhcpd; DHCP-клиент — программа pump. |
NTP | NTP (Network Time Protocol) используется для синхронизации системных часов с другим источником. Пакет программ ntp содержит демоны и утилиты для синхронизации времени с серверами точного времени через Internet.
Программа ntpdate — утилита для получения точного времени с другой машины посредством сети. Программа ntpd — демон непрерывной настройки системного времени. |
[править] Сетевые интефейсы
Сетевое взаимодействие Unix-компьютера происходит через сетевые интерфейсы. Любые данные, которые компьютер отправляет в сеть или получает из сети проходят через сетевой интерфейс. Интерфейс определен реализацией модели TCP/IP для того чтобы скрыть различия в сетевом обеспечении и свести сетевое взаимодействие к об- мену данными с абстрактной сущностью. Для каждого устройства, поддерживаемого ядром, существует сетевой интерфейс. Существует соглашение о наименовании интерфейсов, в соответствии с которым имя интерфейса состоит из префикса, характеризующего его тип, и числа, соответствующего номеру интерфейса данного типа в системе. Имя типа интерфейса определяется драйвером соответствующего сетевого устройства. Так, например, ppp0 соответствует первому интерфейсу PPP, а xl1 — второму интерфейсу 3Com Ethernet. Обратите внимание на то, что нумерация интерфейсов начинается с 0.
[править] SSH
clint:Dom0~$ ssh -v 10.0.17.1 OpenSSH_4.3p2 Debian-3, OpenSSL 0.9.8c 05 Sep 2006
Версия клиента ssh
debug1: Reading configuration data /etc/ssh/ssh_config debug1: Applying options for *
Просмотр и применение конфигурационного файла клиента ssh /etc/ssh/ssh_config
debug1: Connecting to 10.0.17.1 [10.0.17.1] port 22. debug1: Connection established.
Этап установки TCP-соединения завершен
debug1: identity file /home/clint/.ssh/identity type -1 debug1: identity file /home/clint/.ssh/id_rsa type 1 debug1: identity file /home/clint/.ssh/id_dsa type -1
Просмотр пользовательского каталога .ssh и определение существующих ассиметричных ключей пользователя.
debug1: Remote protocol version 2.0, remote software version OpenSSH_4.3p2 Debian-9 debug1: match: OpenSSH_4.3p2 Debian-9 pat OpenSSH*
Определение версии протокола SSH и версии программного обеспечения сервера.
debug1: Enabling compatibility mode for protocol 2.0 debug1: Local version string SSH-2.0-OpenSSH_4.3p2 Debian-3
Вывод информации о версии клиента ssh (то есть о самом клиенте).
debug1: SSH2_MSG_KEXINIT sent debug1: SSH2_MSG_KEXINIT receivedКлиент отправил ключ SSH2_MSG_KEXINIT что за ключ?зачем?. И потом его получил
debug1: kex: server->client aes128-cbc hmac-md5 none debug1: kex: client->server aes128-cbc hmac-md5 none
Наверное, тут они договаривались о возможных алгоритмах шифрования
debug1: SSH2_MSG_KEX_DH_GEX_REQUEST(1024<1024<8192) sent debug1: expecting SSH2_MSG_KEX_DH_GEX_GROUP debug1: SSH2_MSG_KEX_DH_GEX_INIT sent debug1: expecting SSH2_MSG_KEX_DH_GEX_REPLY
????
debug1: Host '10.0.17.1' is known and matches the RSA host key. debug1: Found key in /home/clint/.ssh/known_hosts:16 debug1: ssh_rsa_verify: signature correct
Проверка открытого ключа сервера в файле /home/clint/.ssh/known_hosts
debug1: SSH2_MSG_NEWKEYS sent debug1: expecting SSH2_MSG_NEWKEYS debug1: SSH2_MSG_NEWKEYS received debug1: SSH2_MSG_SERVICE_REQUEST sent debug1: SSH2_MSG_SERVICE_ACCEPT received
???
debug1: Authentications that can continue: publickey,password debug1: Next authentication method: publickey debug1: Trying private key: /home/clint/.ssh/identity debug1: Offering public key: /home/clint/.ssh/id_rsa debug1: Server accepts key: pkalg ssh-rsa blen 277 debug1: read PEM private key done: type RSA debug1: Authentication succeeded (publickey). debug1: channel 0: new [client-session] debug1: Entering interactive session. debug1: Sending environment. debug1: Sending env LANG = ru_UA.UTF-8