Содержание


Devil Linux

Часть 2. Конфигурирование основных серверных служб

Comments

Серия контента:

Этот контент является частью # из серии # статей: Devil Linux

Следите за выходом новых статей этой серии.

Этот контент является частью серии:Devil Linux

Следите за выходом новых статей этой серии.

В предыдущей статье рассматривались вопросы установки и первичной настройки Devil Linux-системы, ориентированной в первую очередь на использование в качестве файервола/роутера и работающей без установки на жесткий диск. В этой статье будет описана настройка основных служб.

Запуск ssh

Главным конфигурационным файлом всей системы и ее основных служб является файл /etc/sysconfig/config. В нем описаны разнообразные параметры, в том числе – сервиса ssh.

Служба ssh в основном применяется для удаленного обслуживания системы и копирования файлов через защищенный туннель. Для запуска этой службы в Devil Linux необходимо по команде setup зайти в «main menu – services – select which services are started on boot». Необходимо отметить клавишей «пробел» службу SSHD. Перед перезагрузкой в обязательном порядке необходимо выполнять скрипт save-config –d /dev/fd0 (подразумевается, что устройство /dev/fd0 – это диск floppy).

После перезагрузки системы будут сформированы закрытый и открытый ключи и запущен демон sshd (рисунок 1).

Рисунок 1.
Рисунок 1.
Рисунок 1.

Запуск Web-сервера apache2

Для запуска Web-сервера apache2 необходимо перейти по команде setup в «main menu – services – select which services are started on boot». В перечне всех имеющихся служб выбрать apache2, выполнить скрипт save-config –d /dev/fd0 и после перезагрузки посмотреть в процессах наличие httpd, а в логах – отсутствие ошибок. Основной конфигурационный файл apache2 находится в /etc/apache2/httpd.conf. Журналы можно просмотреть в /var/log/apache2/access_log и error_log. Просмотр лог-файлов и их запись возможна после подсоединения жесткого диска (этот процесс рассмотрен в предыдущей статье) и монтирования (как в примере) логического тома с созданной на нем файловой системой: # mount /dev/devil/log /var/log.

Каталог в /var/log/apache2 должен существовать, в противном случае логи писаться не будут, и служба httpd не стартует.

Есть один нюанс. Он заключается в том, что DocumentRoot находится в /usr/share/apache2/default-site/htdocs/, но эта часть файловой системы является read only, т.е. что-либо положить туда и заставить это отображаться будет нельзя. Перенести «в лоб» DocumentRoot в другое место не получается из-за настроек безопасности – сервер реагирует на подобную попытку запретом доступа. Решить эту проблему можно, смонтировав логический том data прямо в DocumentRoot. Тогда можно будет проверить работу сервера (а заодно и поддержку PHP), положив туда файл file_name.php (рисунок 2).

Рисунок 2.
Рисунок 2.
Рисунок 2.

Запуск ftp-сервера vsftpd

Для запуска ftp-сервера vsftpd необходимо перейти по команде setup в «main menu – services – select which services are started on boot» и там отметить его клавишей пробел. Основной конфигурационный файл сервера находится в /etc/vsftpd.conf. Сервер поддерживает широкий спектр конфигурационных параметров. Среди них есть возможность включения (отключения) анонимных, а также локальных пользователей, включение поддержки технологии chroot, поддержка pam и многое другое. Ниже приведен работоспособный конфигурационный файл с поддержкой локальных пользователей, chroot и возможностью загружать файлы на сервер (upload).

anonymous_enable=NO
local_enable=YES
write_enable=YES
local_umask=002
#anon_upload_enable=YES
#anon_mkdir_write_enable=YES
dirmessage_enable=YES
connect_from_port_20=YES
#chown_uploads=YES
#chown_username=whoever
idle_session_timeout=600
data_connection_timeout=120
nopriv_user=nobody
#async_abor_enable=YES
#ascii_upload_enable=YES
#ascii_download_enable=YES
ftpd_banner=Welcome to this DEVIL-FTP service.
#deny_email_enable=YES
#banned_email_file=/etc/vsftpd.banned_emails
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd.chroot_list
chroot_local_user=YES
#ls_recurse_enable=YES
listen=yes
text_userdb_names=YES
userlist_enable=YES
userlist_deny=NO
userlist_file=/etc/vsftpd.users
secure_chroot_dir=/var/empty
#dual_log_enable=YES
#xferlog_file=/var/log/vsftpd.log
#xferlog_std_format=YES
#xferlog_enable=YES
syslog_enable=YES
#ftp_username=nobody
check_shell=NO
background=YES
pam_service_name=vsftpd

Управлять сервером можно и вручную, используя команды #/etc/init.d/vsftpd start(stop, restart).

Для работы с локальными пользователями последние должны существовать в системе. Добавить пользователя можно командой #useradd user_name (см. man useradd). Домашний каталог можно создать вручную (не забудьте задать для него соответствующие права). Логи сервер пишет в /var/log/messages при соответствующей настройке демона syslog-ng или syslogd.

Запуск демона syslogd

Вся деятельность каждой работающей службы в системе должна протоколироваться на соответствующем уровне. Для этого в системе Devil Linux предусмотрено использование на выбор одной из двух служб – syslog-ng или syslogd. Рассмотрим конфигурирование демона syslogd как более традиционного. Часть главного конфигурационного файла (/etc/sysconfig/config), отвечающего за ряд параметров, имеющих отношение к работе демона syslogd, приведена ниже:

# name of keyboard layout to be loaded
# e.g. us or de-latin1
KEYBOARD_LAYOUT="us"
#KEYBOARD_LAYOUT="de-latin1"
# timezone
TIMEZONE=Europe/Moscow
#TIMEZONE="MET"
# set if local clock has time in UTC
UTC=0
# try to mount configuration media with the following
# option if "-t auto" failed
FS_TYPE=vfat
HOSTNAME="Devil.mydomen.job"
DOMAIN="mydomen.job"
#
# IPv4/IPv6 default routes are set in the interface config 
# files. See the examples files nic/ifcfg-eth*.sample 
#
# enable IPv4 routing -> yes/no
START_ROUTING=yes
# enable IPv6 routing -> yes/no
START_IPV6_ROUTING=no
# Start the firewall script -> yes/no
START_FIREWALL=yes
# Disable ECN (early congestion notification)
DISABLE_ECN=yes
# set file permissions for more security?
SET_FILE_PERM=yes
# debug file permission setting?
# writes log to /tmp/permissions.log
SET_FILE_PERM_DEBUG=no
# where to create the chroot jails
# !!! DO NOT CHANGE THIS PATH !!!
JAIL_DIR=/jail
# use the chroot jails?
JAIL_ENABLE=yes
# for more infos about the next 3 parameters to a: man jk_socketd
# max message bytes per interval
JAIL_SYSLOG_BASE=2048
# peek  message bytes per interval
JAIL_SYSLOG_PEEK=4096
# interval in seconds
JAIL_SYSLOG_INTERVAL=10
# log level for klogd
KERNEL_LOGLEVEL=2
# which modules should be loaded in the initial ramdisk
# seperate by space
#INITRD_MODULES="BusLogic aic7xxx 3w-xxxx"
INITRD_MODULES=""
# which syslog daemon?
# options: syslog-ng syslogd
SYSLOG_DAEMON=syslogd
# additional parameters for syslogd
SYSLOGD_PARAM=

Теперь система знает, кто ведет протоколирование всех событий, и как это будет происходить. Служба syslogd ведет протоколирование как системных сообщений, так и сообщений ядра. Ниже приведена часть конфигурационного файла демона syslogd, находящегося в /etc/syslog.conf.

# /etc/syslog.conf - Configuration file for syslogd(8)
# For info about the format of this file, see "man syslog.conf".#
# print most on tty10 and on the xconsole pipe
#
*.*				/dev/tty10
#*.emerg				 *

# enable this, if you want that root is informed
# immediately, e.g. of logins
#*.alert				 root
# all email-messages in one file
#
#mail.*				-/var/log/mail
#
# all news-messages
#
# these files are rotated and examined by "news.daily"
#news.crit			-/var/log/news/news.crit
#news.err			-/var/log/news/news.err
#news.notice			-/var/log/news/news.notice
# enable this, if you want to keep all news messages
# in one file
#news.*				-/var/log/news.all
# Warnings in one file
#
#*.=warn;*.=err			-/var/log/warn
#*.crit				 /var/log/warn

#
# save the rest in one file
#
#*.*;mail.none;news.none		-/var/log/messages

#
# enable this, if you want to keep all messages
# in one file
*.*				-/var/log/messages
#
# Some foreign boot scripts require local7
#
#local0,local1.*			-/var/log/localmessages
#local2,local3.*			-/var/log/localmessages
#local4,local5.*			-/var/log/localmessages
#local6,local7.*			-/var/log/localmessages

Теперь, к примеру, ftp-сессия, с машина 10.0.16.114 не пройдет незамеченной и будет записана в /var/log/message (рисунок 3).

Рисунок 3.
Рисунок 3.
Рисунок 3.

Настройка iptables

В системе есть shorewall, но есть и чистый iptables. Конечно, писать правила межсетевого экрана – это целое искусство, которому посвящены многие книги. Я дам пример скрипта, который предназначен для работы на хосте Devil Linux, имеющем один сетевой интерфейс с запущенными демонами DNS, FTP, HTTP, IMAP, POP3, SMTP, Samba, SSH.

	Chain INPUT (policy DROP)
target     prot opt source               destination         
ACCEPT     tcp  --  10.0.16.254          anywhere            
		tcp flags:!FIN,SYN,RST,ACK/SYN 
ACCEPT     udp  --  10.0.16.254          anywhere            
ACCEPT     all  --  anywhere             anywhere            
LSI        udp  --  anywhere             anywhere            udp dpt:33434 
LSI        icmp --  anywhere             anywhere            
NR         all  -- !10.0.16.0/24         anywhere            
DROP       all  --  anywhere             255.255.255.255     
DROP       all  --  anywhere             10.0.16.255         
DROP       all  --  BASE-ADDRESS.MCAST.NET/8  anywhere            
DROP       all  --  anywhere             BASE-ADDRESS.MCAST.NET/8 
DROP       all  --  255.255.255.255      anywhere            
DROP       all  --  anywhere             0.0.0.0             
DROP       all  --  anywhere             anywhere            state INVALID 
LSI        all  -f  anywhere             anywhere            limit: avg 10/min burst 5 
INBOUND    all  --  anywhere             anywhere            
LOG_FILTER  all  --  anywhere             anywhere            
LOG        all  --  anywhere             anywhere            
		LOG level info prefix `Unknown Input' 

Chain FORWARD (policy DROP)
target     prot opt source               destination         
LSI        udp  --  anywhere             anywhere            udp dpt:33434 
LSI        icmp --  anywhere             anywhere            
LOG_FILTER  all  --  anywhere             anywhere            
LOG        all  --  anywhere             anywhere            
		LOG level info prefix `Unknown Forward' 

Chain OUTPUT (policy DROP)
target     prot opt source               destination         
ACCEPT     tcp  --  10.0.16.77           10.0.16.254         tcp dpt:domain 
ACCEPT     udp  --  10.0.16.77           10.0.16.254         udp dpt:domain 
ACCEPT     all  --  anywhere             anywhere            
DROP       all  --  BASE-ADDRESS.MCAST.NET/8  anywhere            
DROP       all  --  anywhere             BASE-ADDRESS.MCAST.NET/8 
DROP       all  --  255.255.255.255      anywhere            
DROP       all  --  anywhere             0.0.0.0             
DROP       all  --  anywhere             anywhere            state INVALID 
OUTBOUND   all  --  anywhere             anywhere            
LOG_FILTER  all  --  anywhere             anywhere            
LOG        all  --  anywhere             anywhere            
		LOG level info prefix `Unknown Output' 

Chain INBOUND (1 references)
target     prot opt source               destination         
ACCEPT     tcp  --  anywhere             anywhere            state RELATED,ESTABLISHED 
ACCEPT     udp  --  anywhere             anywhere            state RELATED,ESTABLISHED 
ACCEPT     tcp  --  anywhere             anywhere            tcp dpt:domain 
ACCEPT     udp  --  anywhere             anywhere            udp dpt:domain 
ACCEPT     tcp  --  10.0.16.114          anywhere            tcp dpts:ftp-data:ftp 
ACCEPT     udp  --  10.0.16.114          anywhere            udp dpts:20:fsp 
ACCEPT     tcp  --  anywhere             anywhere            tcp dpt:www 
ACCEPT     udp  --  anywhere             anywhere            udp dpt:www 
ACCEPT     tcp  --  anywhere             anywhere            tcp dpt:imap2 
ACCEPT     udp  --  anywhere             anywhere            udp dpt:imap2 
ACCEPT     tcp  --  anywhere             anywhere            tcp dpt:pop3 
ACCEPT     udp  --  anywhere             anywhere            udp dpt:pop3 
ACCEPT     tcp  --  anywhere             anywhere            tcp dpt:smtp 
ACCEPT     udp  --  anywhere             anywhere            udp dpt:25 
ACCEPT     tcp  --  10.0.16.0            anywhere            
		tcp dpts:netbios-ns:netbios-ssn 
ACCEPT     udp  --  10.0.16.0            anywhere            
		udp dpts:netbios-ns:netbios-ssn 
ACCEPT     tcp  --  10.0.16.0            anywhere            
		tcp dpt:microsoft-ds 
ACCEPT     udp  --  10.0.16.0            anywhere            
		udp dpt:microsoft-ds 
ACCEPT     tcp  --  10.0.16.114          anywhere            tcp dpt:ssh 
ACCEPT     udp  --  10.0.16.114          anywhere            udp dpt:ssh 
LSI        all  --  anywhere             anywhere            

Chain LOG_FILTER (5 references)
target     prot opt source               destination         

Chain LSI (61 references)
target     prot opt source               destination         
LOG_FILTER  all  --  anywhere             anywhere            
LOG        tcp  --  anywhere             anywhere            
		tcp flags:FIN,SYN,RST,ACK/SYN limit: avg 1/sec burst 5 
		LOG level info prefix `Inbound ' 
DROP       tcp  --  anywhere             anywhere            
		tcp flags:FIN,SYN,RST,ACK/SYN 
LOG        tcp  --  anywhere             anywhere            
		tcp flags:FIN,SYN,RST,ACK/RST limit: avg 1/sec burst 5 
		LOG level info prefix `Inbound ' 
DROP       tcp  --  anywhere             anywhere            
		tcp flags:FIN,SYN,RST,ACK/RST 
LOG        icmp --  anywhere             anywhere            
		icmp echo-request limit: avg 1/sec burst 5 
		LOG level info prefix `Inbound ' 
DROP       icmp --  anywhere             anywhere            icmp echo-request 
LOG        all  --  anywhere             anywhere            
		limit: avg 5/sec burst 5 LOG level info prefix `Inbound ' 
DROP       all  --  anywhere             anywhere            

Chain LSO (0 references)
target     prot opt source               destination         
LOG_FILTER  all  --  anywhere             anywhere            
LOG        all  --  anywhere             anywhere            
		limit: avg 5/sec burst 5 LOG level info prefix `Outbound ' 
REJECT     all  --  anywhere             anywhere            
		reject-with icmp-port-unreachable 

Chain NR (1 references)
target     prot opt source               destination         
LSI        all  --  223.0.0.0/8          10.0.16.0/24        
LSI        all  --  BASE-ADDRESS.MCAST.NET/3  10.0.16.0/24        

Chain OUTBOUND (1 references)
target     prot opt source               destination         
ACCEPT     icmp --  anywhere             anywhere            
ACCEPT     tcp  --  anywhere             anywhere            state RELATED,ESTABLISHED 
ACCEPT     udp  --  anywhere             anywhere            state RELATED,ESTABLISHED 
ACCEPT     all  --  anywhere             anywhere

В данном случае мы включили фильтрацию ICMP-пакетов, фильтрацию широковещательных пакетов «снаружи» и прочие типовые для простого межсетевого экрана настройки.

Выводы

В статье изложен процесс установки и настройки сетевых сервисов системы Devil Linux. Приведены рабочие конфигурационные файлы основных служб, показаны развитые правила для формирования iptables на хосте с одним интерфейсом. Конечно, наш цикл статей не является исчерпывающим описанием этого замечательного дистрибутива. Скорее это небольшая вводная инструкция для системных администраторов, начинающих осваивать GNU/Linux.


Ресурсы для скачивания


Комментарии

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

static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=40
Zone=Linux
ArticleID=494183
ArticleTitle=Devil Linux: Часть 2. Конфигурирование основных серверных служб
publish-date=06032010