Все о Linux. LinuxRSP.Ru


Cвежие новости Linux и BSD, анонсы статей и книг прямо в почтовый ящик!
Подписаться письмом


 Сегодняшние новости:

25 лет исполнилось ядру Linux

Релиз KDevelop 5.0

Oracle открывает код JDK9 для ARM

Выпущен Timewarrior 1.0.0

Релиз Android 7.0

Percona Memory Engine для MongoDB на базе WiredTiger

PowerShell открыт и доступен для Linux

Форк TrueCrypt: VeraCrypt 1.18

Релиз Snapcraft 2.14

Релиз Go 1.7

Стабильный выпуск рабочего стола Lumina

Вышла первая версия аналога OpenCV - DCV 0.1

Выпуск минималистичной программы для мониторинга jsonmon 3

В MIT разработали новый язык программирования

Первый релиз Qt5Gtk2

Godot 2.1 - новая версия открытого игрового движка

Свободная цифровая станция звукозаписи: Ardour 5.0

Обновление SkypeWeb Plugin for Pidgin

Вышла версия 3.0 Android File Transfer для Linux (и для OS X)

Программный аналог MIDI-контроллера для создания музыки: Launchpadd v1.3

Mozilla спонсирует поддержку Python 3.5 в PyPy

Ef 0.08 - программа для моделирования динамики заряженных частиц

Обновление текстового редактора TEA до версии 42.0.0

Релиз OpenOrienteering Mapper 0.6.4

Вышли Guix и GuixSD 0.11

Релиз Opera 39

Выпуск LibreOffice 5.2

В OpenSSH обнаружены и устранены некоторые уязвимости

Эмулятор FCEUX 2.2.3

Компания Билайн переходит на российскую СУБД с открытым исходным кодом Tarantool

Google

 Новые статьи :

Утилиты для восстановления потерянных данных в Linux

Лучшие файловые менеджеры для Android

20 лучших бесплатных книг о Linux

Как сгенерировать открытый/закрытый SSH-ключ в Linux

Grive - клиент Google Drive для Linux с открытым исходным кодом

Протокол IPv6: варианты подключения

Сервер из образа: DHCP + TFTP + Initrd + OpenVZ

Обзор веб-панелей управления хостингом

Приёмы работы с Vim

Nginx как Reverse Proxy для сайта, использующего SSL

Разработка модулей ядра Linux

Мониторинг нагрузки http-сервера Apache 2

Перевод комментариев к файлу конфигурации Squid

Решение проблем при использовании "1c предприятие" 8.2 в Linux

Advanced Bash-Scripting Guide Искусство программирования на языке сценариев командной оболочки







Rambler's Top100





 
 

Linux-сервер для Интернет-кафе

Эта статья описывает мой собственный опыт построения Linux-сервера для Интернет-кафе. Статья ориентирована как на новичков в мире Linux, так и на знакомых с Linux людей, но не имеющих опыта использования его в сети, которым в сжатые сроки понадобилось установить Linux-сервер. Я постарался описать лишь основные моменты установки, большей частью что относительно стандартной конфигурации было изменено. Все примеры файлов конфигураций, приведенные здесь, не претендуют на "идеологическую верность". Они получены опытным путем, путем чтения документаций и FAQ. Они могут быть даже неверны, тем не менее они работают :)

В мою задачу входило установить Linux-сервер для Интернет-кафе. Интернет-кафе - это место, куда люди, не имеющие компьютера (или интернета) приходят полазить по страничкам, почитать почту, потрепаться в аське.

В качестве дистрибутива мной был выбран Mandrake 6.0, который постепенно перерос в Mandrake 7.0.

Имеется один реальный интернет-адрес (будем использовать 123.123.123.123) и две внутренние подсети - 192.168.1.0 и 192.168.2.0. В сервере имеется три сетевые карты - две 10-мегабитные и одна 100-мегабитная.

После прописывания их в linuxconf появилось три интерфейса - eth0, идущий к провайдеру, и eth1, eth2 - внутренние.
 
 

squid

Я использовал прокси-сервер squid для предоставления www и ftp пользователям. Нужно ограничить доступ к прокси только локальной сетью. У нашего провайдера есть тестовый dial-up вход, с которого доступен наш сервер. Если открыть squid наружу, то, соединившись по тестовому входу и указав в настройках прокси наш
адрес, можно было бы иметь бесплатныe сервисы, работающие через squid. Фрагменты файла конфигурации squid (squid.conf):

прописываем хосты, откуда можно получать доступ:
acl allowed_hosts src 192.168.0.0/255.255.0.0
acl localhost src 127.0.0.1/255.255.255.255

разрешенные SSL порты:
acl SSL_ports port 443 563 5190 15100 15101

порт 5190 используется новыми ICQ для соединения по HTTPS, т.е. можно и ICQ пустить через squid, а 15100 и 15101 - я использовал для одной банковской программы.

запретим метод CONNECT для всех портов, кроме указанных в acl SSL_ports:
http_access deny CONNECT !SSL_ports

и запретим доступ всем, кроме тех, кому можно:
http_access allow localhost
http_access allow allowed_hosts
http_access allow SSL_ports
http_access deny all

можно сделать авторизацию по имени и паролю:
authenticate_program /usr/local/squid/bin/ncsa_auth /usr/local/squid/bin/passwd

в бинарный rpm squid от Mandrake программа ncsa_auth не входит (по крайней мере, не входила), так что, возможно, ее придется собрать из исходников.

И пропишем пользователей, которым разрешено пользоваться squid:
acl allowed_users proxy_auth username

Если у вас мало свободного места в разделе, где находится каталог /var/spool, то вы можете разместить кэш на другом разделе:
cache_dir /mnt/disk1/var/spool/squid 1000 16 256
 

Анализ работы squid можно сделать при помощи программы sqmgrlog. Она показывает достаточно много интересной информации, в том числе и трафик, проходящий через squid для каждого пользователя.
URL: http://www.ineparnet.com.br/orso/index.html
 
 

sendmail

Установленный sendmail был почти готов к работе. Нужно было настроить сервер так, чтобы из интернета принимались только письма, адресованные нам (ourdomain.ru). Пропишем в access:
192.168 RELAY
127.0.0.1 RELAY

Учтите, что sendmail читает информацию не из файла access, а из бинарного файла access.db. Используйте makemap для создания файла access.db.

На других машинах я использую postfix (он проще в настройке).

Доступ пользователей к почте осуществляется через web-интерфейс w3mail.
URL: http://www.tbcc.cc.or.us/~spencer/w3mail/
 
 

apache

Установленный бинарный rpm apache от Mandrake был готов к работе и почти не нуждался в дополнительных настройках.

Виртуальные хосты прописываются в файле Vhosts.conf:

<VirtualHost 123.123.123.123>
ServerAdmin webmaster@ourdomain.ru
DocumentRoot /home/clients/client/public_html
ServerPath /~client
ServerName client.ourdomain.ru
ErrorLog logs/error_log
TransferLog logs/access_log
</VirtualHost>

Обратите внимание, что адрес client.outdomain.ru должен быть прописан в DNS (см. ниже).

Директория с нашим веб-интерфейсом должна быть доступна только из локальной сети, прописываем в httpd.conf:

<Directory /home/httpd/mail>
order deny,allow
deny from all
allow from localhost
allow from 192.168
allow from 123.123.123.123
Options ExecCGI
</Directory>

А в секции Vhosts.conf, где прописан виртуальный хост - почтовый веб-интерфейс, прописываем:

<VirtualHost 123.123.123.123>
ServerAdmin webmaster@ourdomain.ru
DocumentRoot /home/httpd/mail
ServerPath /mail
ServerName mail.ourdomain.ru
ErrorLog logs/error_log
TransferLog logs/access_log
ErrorDocument 403 http://www.ourdomain.ru/messages/insideonly.html
</VirtualHost>

insideonly.html - сообщение о том, что веб-интерфейс доступен только из локальной сети.
 

Некоторые пользователи используют Netscape Roaming Access. Эта функция позволяет хранить на сервере настройки, историю, сертификаты и т.п. браузера Netscape. Пользователь набирает свой логин и пароль и браузер загружает необходимые файлы, а после завершения сессии обновляет их на сервере. Это удобно, когда пользователь, пришедший поработать в интернете, пользуется постоянно разными компьютерами. Для создания roaming access я использовал модуль mod_roaming в apache.
URL: http://www.klomp.org/mod_roaming/

Если вы будете использовать mod_roaming, обратите внимание на то, что доступ к roaming access серверу должен быть прямым, не через прокси, иначе могут возникнуть проблемы с закачкой файлов на сервер.

Красиво анализировать работу apache можно с помошью программы webalizer.
URL: http://www.mrunix.net/webalizer/
Не забудьте указать Incremental yes в webalizer.conf, для того, чтобы правильно обрабатывались логи apache.
 
 

named

bind использует файл начальной загрузки /etc/named.conf, в котором прописываем:

options {
        directory "/var/named";
};
zone "." {
        type hint;
        file "named.ca";
};
zone "ourdomain.ru"{
        type master;
        file "ourdomain";
        notify yes;
};
zone "0.0.127.IN-ADDR.ARPA"{
        type master;
        file "named.local";
};
zone "123.123.123.IN-ADDR.ARPA"{
        type master;
        file "123.123.123";
        notify yes;
};

dns сервер является авторитетным для нашей зоны (ourdomain.ru) и кэширует остальное.

В файле /var/named/named.ca содержится список корневых серверов, этот файл можно создать командой dig.
Фрагменты файла /var/named/ourdomain - файла зоны ourdomain.ru:

начало зоны:
@               IN      SOA     ourdomain.ru.       admin.ourdomain.ru

Обратите внимание, что e-mail администратора должен содержать точку, а не @.

сервера имен - первичный - у нас, вторичный - у провайдера:
@               IN      NS      ns
@               IN      NS      ns.ourprovider.ru.

Запись для виртуального хоста apache - client.ourdomain.ru:
client            IN      A       123.123.123.123
 

Файлы named.local и 123.123.123 содержат зоны обратного преобразования - преобразования ip - адресов в имена.
Фрагмент файла 123.123.123, прописаны вначале сервера имен, потом указатель, обозначающий, что машина с адресом 123.123.123.123 имеет имя ns.ourdomain.ru:

@               IN      NS      ns.ourdomain.ru.
@               IN      NS      ns.ourprovider.ru.
123             IN      PTR     ns.ourdomain.ru.
 
 

socks

Если вы не используете ip-masquerading, то вам понадобится socks-сервер для работы некоторых клиентов ICQ, IRC и т.п. Я использовал dante-socks.

Фрагменты sockd.conf:

internal: 192.168.1.1 port = 1080
 

наш настоящий адрес:
external: 123.123.123.123
 

кто может пользоваться прокси:
client pass {
        from: 192.168.0.0/16 to: 0.0.0.0/0
        }
 

и кто может отвечать клиентам:
pass {
        from: 0.0.0.0/0 to: 192.168.0.0/16
        command: bindreply udpreply
        log: connect error
}
 
 

ftp

BeroFTPD не потребовал никакой дополнительной настройки. Могу разве что порекомендовать установить версию посвежее. Старые версии были, если не ошибаюсь, с какой-то серьезной security hole.
 
 

samba

Samba используется для файлового общения между win-машинами и unix.

Привожу мой файл конфигурации samba почти полностью:

[global]
        workgroup = workgroup
        netbios name = ourdomain
        server string = Samba Server
        security = SHARE
        encrypt passwords = Yes
        log file = /var/log/samba/log.%m
        max log size = 50
        socket options = TCP_NODELAY SO_RCVBUF=8192 SO_SNDBUF=8192
        dns proxy = no
        wins support = yes
        domain master = yes
        interfaces = 192.168.1.1/24 192.168.2.1/24
        client code page = 866
        character set = koi8-r

[samba]
        comment = Public
        path = /mnt/disk1/samba
        read only = No
        guest ok = Yes

[admin]
        comment = admin's dir
        path = /home/admin
        valid users = admin root
        read only = no

Обратите внимание на опцию encrypt passwords, если ее не указать, то машины с win98 (возможно, и не только они) не смогут подключиться. wins support - поддержка wins. При помощи wins машины "быстрее находятся" в сетевом окружении, т.к. клиенту не придется делать широковещательный запрос всем, а нужно будет только спросить у wins. Использование wins обязательно, если имеется больше одной подсети, иначе машины в разных подсетях не увидят друг друга. Укажите интерфейсы, на которые будет работать samba. И для предотвращения проблем с русских - client code page и character set. Далее идут описания расшареных ресурсов.
 
 

firewall

Несколько слов о применениях ipchains.

Маршрутизация между подсетями 192.168.1.0 и 192.168.2.0:
ipchains -P forward DENY
ipchains -A forward -s 192.168.1.0/24 -d 192.168.2.0/24 -j ACCEPT
ipchains -A forward -s 192.168.2.0/24 -d 192.168.1.0/24 -j ACCEPT

Создадим цепочку, через которую пойдет весь трафик от провайдера:
ipchains -N prov
ipchains -A input -i eth0 -j prov

Можно запретить ip-spoofing:
ipchains -A prov -s 192.168.1.1/16 -l -j DENY
ipchains -A prov -s 127.0.0.1/8 -l -j DENY
(не знаю, нужна ли вторая строчка)

Опция -l позволяет вести лог ip-spoofed пакетов, соответствующие сообщения появляются в /var/log/messages. (И появляются они чаще, чем можно было предположить :)

На всякий случай запретим телнет снаружи:
ipchains -A prov -p tcp --destination-port 23 -j REJECT

Если хотите, чтобы samba не светилась наружу, запретите порты 137-139
ipchains -A prov -p tcp --destination-port 137 -j REJECT
ipchains -A prov -p udp --destination-port 137 -j REJECT
то же с портами 138, 129

Подсчет трафика я веду с помощью bandmin.
URL: http://www.mrunix.net/webalizer/
Пришлось немного подкорректировать файл Acct.pm, чтобы он считал трафик по моим правилам.

Создаем цепочку для подсчета трафика:
ipchains -N trafin
ipchains -I input -i eth0 -s ! 123.123.123.0/24 -p all -j trafin
ipchains -A trafin -d 123.123.123.123

То есть считаем трафик на наш адрес отовсюду, кроме подсети 123.123.123.0, за трафик с которой мы не платим провайдеру.

И в файле Acct.pm (там, где раздел про ipchains) прописываем вместо acctboth цепочку trafin.
 

Ali Albakov, 6-Dec-2000
Вопросы, комментарии и критика приветствуются: guldur at transit.samara.ru
 


      

Связь | О проекте LinuxRSP | Реклама | О Linux
© 1999-2017 LinuxRSP