Translation(s): Deutsch — English — Français — Italiano — Español — Português Brasileiro
ToDo: merge (and translate) this page and the french one (more complete)
- Introduction
- Installation
- Installation of the client
- Installation of the server
- Configuration files
- Regenerating host keys
- Remote login
- With password
- Using shared keys
- Keys management
- Using GUI
- Securing
- SSH Server
- Good practices with SSH Server
- Configuration Options
- External Utilities
- SSH Client
- Good practices with SSH Client
- Additional Functions
- View files in GUI
- Additional Commands
- scp
- sftp
- text mode
- graphical mode
- ssh-agent and ssh-add
- keychain
- ssh-askpass
- libpam-usb
- Remote commands
- Good practices of SSH usage
- Troubleshooting
- OpenSSL version mismatch. Built against 1000105f, you have 10001060
- SSH hangs
- Resolution with IPQoS 0x00
- Resolution with netcat
- Keep SSH connection alive
- For Debian 7.x server
- See also
- Система
- Политика установки ПО
- Дата и время
- Настройка
- Синхронизация локально
- Синхронизация для клиентов в сети
- Автоматическое обновление
- Пользователи и группы
- sudo
- Вход в систему
- Автологин в консоли с mingetty
- Автологин в консоли с стандартным agetty
- Локализация
- Глобальные параметры локализации системы
- Кириллица в консоли
- Удаление неиспользуемых файлов локализации
- Загрузчик
- GRUB2
- Управление запуском служб
- Сглаживание шрифтов
- Аппаратное обеспечение
- Интернет и сети
- Сетевые настройки
- Базовая настройка
- Настройка в консольном интерфейсе wicd-curses
- Firewall (брандмауэр, межсетевой экран и т
- Общие сведения
- Apf-firewall
- Vuurmuur
- Установка
- Настройка rsyslog
- Настройка
- Подсчёт трафика
- Решение проблем.
- Диагностика DNS
- Нагрузка на сеть
- Анонимный доступ в интернет
- Динамическая регистрация в DNS
- Удаленный доступ к консоли
- Авторизация по ключам
- Генерация ключей
- Настройка сервера
- Настройка клиента
- Настройка Putty
- Усиленные настройки безопасности
- Параноидальные настройки безопасности (knock)
- Общий доступ к файлам
- Тorrent
- SMB (CIFS)
- Корзина
- Аудит
- Принтеры
- Web интерфейс для администрирования
- Работа в консоли
- Файловый менеджер
- Сессии в консоли
- Screen
- Просмотр процессов
- Просмотр больших текстов в консоли
- Вывод сообщений ядра в консоль
- Работа в X
- Эмулятор терминала
- guake
- Прочее
- SQL сервер
- Web-сервер
- Apache2
- Поддержка PHP5
- Lighttpd
- Поддержка PHP5
- Множество сайтов на одном сервере (virtual host)
- Лог доступа
- Примечание 1 (настройка aptitude)
- Примечание 2 (ошибка запуска сети)
- Примечание 3 (настройка мс)
- Примечание 4 (ошибка pcspkr)
- Примечание 5 (setfacl неподдерживаемая операция)
Introduction
remote_host=<the remote computer> remote_user=<your user name on $remote_host>
Installation
Installation of the client
Normally the client is installed by default. If not it suffices to run as root:
apt install openssh-client
Installation of the server
The server allows to connect remotely and gets installed by running as root:
apt install openssh-server
Configuration files
The main configuration files are in the directory /etc/ssh :
-
ssh_config : client configuration file
-
sshd_config : server configuration file
-
/etc/ssh/ssh_config.d/*.conf : client configuration file
-
/etc/ssh/sshd_config.d/*.conf : server configuration file
These have been enabled with the Include parameter in ssh_config and sshd_confg. Making changes locally using these directories can ease configuration management, and avoid issues with upgrades that make changes to package managed configuration files.
In addition the /etc/ssh directory contains the private/public key pairs identifying your host :
- ssh_host_dsa_key
- ssh_host_dsa_key.pub
- ssh_host_rsa_key
- ssh_host_rsa_key.pub
Since OpenSSH 5.73, a new private/public key pair is available:
- ssh_host_ecdsa_key
- ssh_host_ecdsa_key.pub
Since OpenSSH 6.54, a new private/public key pair is available:
- ssh_host_ed25519_key
- ssh_host_ed25519_key.pub
Regenerating host keys
rm /etc/ssh/ssh_host_* dpkg-reconfigure openssh-server
Remote login
With password
ssh $remote_user@$remote_host
and then type in your password.
ssh $remote_host
If this is the first time you login to the remote computer, ssh will ask you whether you are sure you want to connect to the remote computer. Answer ‘yes’ after you verified the remote computer’s fingerprint, type in your password, and ssh will connect you to the remote host.
Using shared keys
One of the functions of ssh is using a pair of private/public keys to connect to a remote host. Also known as SSH keys. This method allows you to login to a remote host without typing your password every time. To do this you must generate a pair of private/public keys on your local machine and deposit the public key on the remote host.
ssh-keygen -t rsa
This program generates a pair of private/public keys in the directory ~/.ssh. The program first asks for the destination files for the keys, by default located in ~/.ssh. Afterwards a passphrase is requested.
Note: We recommend not to leave the passphrase empty. An attacker who gets hold of your private key can otherwise connect to the hosts where you deposited you public key since the passphrase is empty. Choose a long and complex passphrase.
Your private key is id_rsa (don’t give it to someone else), your public key is id_rsa.pub.
You copy your public key to a remote host with the command ssh-copy-id
ssh-copy-id -i ~/.ssh/id_rsa.pub $remote_user@$remote_host
Now you can connect simply to the remote host and the passphase is asked for. Once done, you get connected to the remote host. In case of a new connection the passphrase does not get asked for again during your entire session.
Keys management
Using GUI
Securing
SSH Server
By default a SSH server is relatively secure. With the help of some good practices, configuration options, and external utilities it is possible to make it even harder for ‘robots’ and crackers
Good practices with SSH Server
Configuration Options
One should edit the file /etc/ssh/sshd_config to change the parameters and then restart the ssh server with
service ssh restart
-
Deactivate using passwords for authentication (PasswordAuthentication no).
-
Deactivate using the root account (PermitRootLogin no).
sshd -T | sort
External Utilities
SSH Client
Good practices with SSH Client
Additional Functions
View files in GUI
In file managers like Konqueror, Dolphin, Krusader and Midnight Commander you can use FISH to view files in a GUI using:
fish://username@server_name_or_ip
Additional Commands
scp
scp is a command line utility allowing to transfer files between two machines.
- Sending a file:
scp $source_file $remote_user@$remote_host:$destination_file
- Copying a file to the local machine:
scp $remote_user@$remote_host:$source_file $destination_file
sftp
text mode
graphical mode
ssh-agent and ssh-add
# Check if ssh-agent is running env | grep -i ssh
You will still need to tell the agent to manage your keys.
# List keys managed by the agent ssh-add -l # Add your ssh key ssh-add ~/.ssh/your_private_key
When a private key is first needed, you are prompted for its passphrase. ssh-agent will then remember the key so that your passphrase doesn’t get asked anymore.
keychain
ssh-askpass
ssh-askpass is an utility to simply the question for the password of a private key when using it. Several implementations exist:
-
x11-ssh-askpass : version for X11
-
kaskpass : integration of ssh-askpass into the KDE environment
-
ssh-askpass-gnome : integration of ssh-askpass into the Gnome environment
libpam-usb
libpam-usb is an utility (only available up to Debian Jessie) allowing authentication with an USB stick. This package includes a useful utilty : pamusb-agent. This utility, once correctly configured, allows to load the SSH keys present on the USB stick once it is connected and to unload them when it is disconnected.
Remote commands
If you just want to run one command on the remote computer, you don’t need to login. You can tell ssh to run the command without login, for instance,
ssh $remote_user@$remote_host 'ls *.txt'
Good practices of SSH usage
You must read this: https://web.archive.org/web/20230114043301/https://lackof.org/taggart/hacking/ssh/
Configure your ~/.ssh/config to send only the right key.
Host master.debian.org User account IdentityFile ~/.ssh/id_rsa IdentitiesOnly yes
Troubleshooting
OpenSSL version mismatch. Built against 1000105f, you have 10001060
If you get an error message like this when starting the ssh daemon, you need to run:
apt install openssh-server openssh-client
Also see bug #732940.
SSH hangs
You are trying to SSH into a remote computer. But during SSH log-in the session hangs/freezes indefinitely. Thus you are not presented with the command prompt. And you are not able to use any SSH commands When using SSH debug mode the session hangs at this line debug2: channel 0: open confirm rwindow 0 rmax 32768
With some routers behind NAT and when using OpenSSH. During session setup, after the password has been given, OpenSSH sets the TOS (type of service) field in the IP datagram. The router choke on this. The effect is that your SSH session hangs indefinitely. In other words, SSH commands or connections are seldom working or not working at all.
Resolution with IPQoS 0x00
Until your router manufacturer fix their firmware. Here is one option to resolve that issue:
-
Double check your openssh-server and openssh-client version are 5.7 or more recent. For example the resolution below should work with Debian 7.11 Wheezy or more recent as it comes with OpenSSH version 6.0.
-
~/.ssh/config
/etc/ssh/ssh_config
File content before
Host *
File content after
Host * IPQoS 0x00
- If you have any Terminal/Console window(s) already open. Fully close all of them. Doing so will close any active SSH sessions.
-
No need to restart OpenSSH or your Debian. Try again to SSH into any remote server. It should work. Done you have successfully fixed that issue
Thanks to Joe and catmaker for this tip
Related documentation at https://www.openssh.com/txt/release-5.7
Resolution with netcat
WARNING: It is suggested to consider using that other resolution with IPQoS 0x00 instead of using netcat/ProxyCommand nc %h %p option. Because IPQoS 0x00 is the official built-in OpenSSH option. Also IPQoS 0x00 is a more direct way to resolve that issue, and potentially more secure option. Because IPQoS 0x00 uses SSH’s built in encryption for secure transfers. Compare to netcat’s not encrypted transfers. Sources: 1 2. If you choose to use netcat/ProxyCommand nc %h %p option read on.
ProxyCommand nc %h %p
Keep SSH connection alive
For security reason, by default a SSH connection is automatically closed after a set period of time. But in some cases you want to keep that connection open. Such as cloud storage over SSH connection.
For Debian 7.x server
Steps to keep SSH connection alive.
# Keep client SSH connection alive by sending every 300 seconds a small keep-alive packet to the server in order to use ssh connection. 300 seconds equal 5 minutes. ClientAliveInterval 300 # Disconnect client after 3333 "ClientAlive" requests. Format is (ClientAliveInterval x ClientAliveCountMax). In this example (300 seconds x 3333) = ~999,900 seconds = ~16,665 minutes = ~277 hours = ~11 days. ClientAliveCountMax 3333
service sshd restart
Please note that on recent Debian systems (e.g. Wheezy 7 with current updates as of Nov. 2015), the above command no longer works and returns the error:
sudo service sshd restart sshd: unrecognized service
sudo service ssh restart [ ok ] Restarting OpenBSD Secure Shell server: sshd.
See also
Translation(s): — Русский
Этот раздел поможет наглядно подготовить чистую систему Debian к полноценному использованию в качестве того, что вы выберите сами. Нижеуказанные настройки рекомендую выполнять в пошаговом режиме. Каждый блок проверен, теория, практика и описания подаются кратко, без излишеств. Если мало, подробности ищите в Google.
Настоятельно рекомендую использовать только чистый Debian, т.е. без «заранее подобранных наборов ПО».
Такой подход наиболее полно реализует преимущества Debian перед Ubuntu и Gentoo — оптимальное сочетание затрат на установку\настройку к эффективности\захламлённости ненужным ПО.
Разработка страницы завершена, новые рецепты добавляются по мере их изучения и отладки
Если есть что добавить, то смело дополняйте разделы новой информацией. Наши опечатки и ошибки в статье также правте смело, не нужно сообщать об этом на почту, просьба соблюдать стилевое оформление этой страницы и использовать разделители разделов (серые линии различной толщины).
Система
Политика установки ПО
aptitude — локализованный менеджер пакетов с псевдографическим интерфейсом, который используется для наглядной и функциональной установки программ в Debian.
В большинстве последующих разделов с его помощью будет проводиться установка различных программ, из-за чего требуется заранее определить политику получения, установки и обновления программ в вашей системе.
Запускем программу и настраиваем её параметры.
# aptitude --> F10 --> Параметры --> Предпочтения
См. примечание 1.
Дата и время
Настройка
С консоли время в системе можно установить так:
# date MMDDhhmmCCYY.ss #или # date --set 4/13/2004 # date --set 14:46:27
Где MM — месяц, DD — день месяца, hh — часы, mm — минуты, CCYY — 4 цифры года, ss — секунды.
Синхронизация локально
Если вам не нужно раздавать время на другие машины, можете довольствоваться пакетом ntpdate, который не запускает свой демон при старте системы.
# aptitude install ntpdate # ntpdate-debian # ntpdate-debian -bs
Вторая команда выдает разницу во времени с дебиановскими серверами, а третья — однократно синхронизирует время на вашей машине с одним из них. Можно также использовать другие сервера.
Синхронизация для клиентов в сети
Устанавливаем ntp: — комплекс программ, позволяющих получить текущее время со специальных серверов в интернет и стать таким сервером для локальной сети.
# aptitude install ntp
По-умолчанию все настройки рабочие. Время забирается с сервера ntp.pool.org, служба автоматически синхронизирует время сразу после запуска. Настройки службы находятся в файле /etc/ntp.conf. Для включения возможности приёма запросов от клиентов в локальной сети на обновление времени нужно добавить строку
Пример для сети 192.168.0.xx
restrict 192.168.0.0 mask 255.255.255.0 trust notrap nomodify nopeer noquery
Перезапускаем службу для применения новых настроек
/etc/init.d/ntp restart
Далее можно прописывать IP адрес компьютера в качестве источника синхронизации.
Автоматическое обновление
Устанавливаем unattended-upgrades (wiki.debian.org/UnattendedUpgrades):
# aptitude install unattended-upgrades
Правим общие настройки обновления:
nano /etc/apt/apt.conf.d/50unattended-upgrades // Выбираем все источники обновлений Unattended-Upgrade::Allowed-Origins { "${distro_id} stable"; "${distro_id} ${distro_codename}-security"; "${distro_id} ${distro_codename}-updates"; "${distro_id} ${distro_codename}-proposed-updates"; }; // Список пакетов, которые не должны обновляться, у меня таких нет. Unattended-Upgrade::Package-Blacklist { // "vim"; }; // Возможность оповещения об обновлении на почту пока отключаем. //Unattended-Upgrade::Mail "root@localhost"; // Удаляем не нужные пакеты Unattended-Upgrade::Remove-Unused-Dependencies "true"; // Автоматически перезагружаем систему, включаем Unattended-Upgrade::Automatic-Reboot "true"; // Можно ограничить скорость загрузки к примеру в 70 кб в сек., отключаем //Acquire::http::Dl-Limit "70";
Правим настройки периодичности обновления
nano /etc/apt/apt.conf.d/02periodic // Включаем обновление APT::Periodic::Enable "1"; // Проверяем обновления каждый 1 день APT::Periodic::Update-Package-Lists "1"; // Отключаем загрузку пакетов без установки APT::Periodic::Download-Upgradeable-Packages "0"; // Применяем обновления каждый 1 день APT::Periodic::Unattended-Upgrade "1"; // Удаляем устаревшие установочные пакеты каждые 7 дней APT::Periodic::AutocleanInterval "7";
Логи обновления смотрим тут — /var/log/unattended-upgrades/unattended-upgrades.log.
Указываем время выполнения обновления. Например каждый день в 6:25 утра:
nano /etc/сrontab 25 6 * * * root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.daily )
/etc/init.d/cron restart
Пользователи и группы
sudo
Устанавливаем sudo: — утилиту для временного получения root прав
aptitude install sudo
Добавляем пользователя в группу sudo
usermod -a -G sudo username
Для применения настроек пока приходится перезагружать систему
Для подробоностей — Гугл в помощь
Вход в систему
Автологин в консоли с mingetty
Устанавливаем Mingetty: — упрощённый вариант стандартной программы agetty, в задачи которой входит управление доступом к физическим и виртуальным терминалам.:
# aptitude install mingetty
sed -i '/:2345/s/^/\#/; /:2345/a 1:2345:respawn:\/sbin\/mingetty --autologin root --noclear tty1' /etc/inittab
nano /etc/inittab #1:2345:respawn:/sbin/getty 38400 tty1 1:2345:respawn:/sbin/mingetty --autologin root tty1 linux 2:23:respawn:/sbin/getty 38400 tty2
Автологин в консоли с стандартным agetty
Стандартный менеджер входа agetty (util-linux) начиная с v.2.20 содержит функциональность mingetty
nano /etc/inittab #1:2345:respawn:/sbin/getty 38400 tty2 1:2345:respawn:/sbin/getty --autologin root tty1 linux 2:23:respawn:/sbin/getty 38400 tty2
Локализация
Глобальные параметры локализации системы
Смотрим текущую локаль:
$ locale
Кроме LC_ALL все параметры должны быть ru_RU.UTF-8.
Если это не так, тогда запускаем настройку
# dpkg-reconfigure locales
Если системная локаль не применяется к пользователю, то стоит посмотреть файл настроек интерпретатора командной строки (bash, dash, ash) в домашнем каталоге пользователя.
Кириллица в консоли
См. примечания 2
Настраиваем кириллицу в консоли
Устанавливаем пакет console-cyrillic:
# aptitude install console-cyrillic
Настраиваем все параметры пакета:
# dpkg-reconfigure console-cyrillic
Удаление неиспользуемых файлов локализации
localepurge — утилита для удаления ненужных локализаций, документации и прочего. При установке пакета с помощью debconf выводится список языков в различных кодировках, отметить следует только нужные вам локализации. Рекомендуется сперва сделать backup системы и добавить к нужным английскую локализацию. В дальнейшем утилита будет автоматически запускаться и чистить файлы сразу после установки любых пакетов.
# aptitude install localepurge
Удаление происходит при запуске утилиты:
## localepurge localepurge: Disk space freed in /usr/share/locale: 345340 KiB localepurge: Disk space freed in /usr/share/man: 2060 KiB localepurge: Disk space freed in /usr/share/gnome/help: 65770 KiB localepurge: Disk space freed in /usr/share/omf: 435 KiB Total disk space freed by localepurge: 413605 KiB
Если вдруг понадобились удаленные языковые файлы, вернуть их можно так:
apt-get --reinstall install $(dpkg -S LC_MESSAGES | cut -d: -f1 | tr ', ' ' ' | sort -u)
Загрузчик
GRUB2
Управление запуском служб
sysv-rc-conf: — утилита с curses интерфейсом, преназначенная для быстрого управления работой и запуском служб (демонов, сервисов). Очень удобна для просмотра установленных служб в системе.
# aptitude install sysv-rc-conf
Помимо настройки автозапуска, утилита позволяет в реальном времени запускать и останавливать имеющиеся в системе службы.
Сглаживание шрифтов
Аппаратное обеспечение
Интернет и сети
Сетевые настройки
Базовая настройка
Этот метод настройки является самым гибким и функциональным, но требует ручной правки конфигурационных файлов.
Если Debian устанавливался по сети, то настройки будут перенесены из установщика в установленную систему, т.е. ничего настраивать уже не нужно.
Ищем нашу сетевую карту в списке:
# ifconfig -a
Для более детальной информации о сетевых картах можно воспользоваться специальными программами
Открываем файл конфигурации сети:
# nano /etc/network/interfaces
Строки, начинающиеся со слова «auto», используются для идентификации физических интерфейсов при их подьеме во время запуска ifup с опцией -a. (Эта опция используется сценариями загрузки системы.) Имена физических интерфейсов должны следовать за словом «auto» в той же строке. Может быть несколько строф «auto». ifup поднимет названные интерфейсы в порядке их перечисления.
Строки, начинающиеся с «allow-«, используются для идентификации интерфейсов, которые должны быть подняты автоматически различными подсистемами. Это может быть сделано, например, с использованием команды «ifup —allow=hotplug eth0 eth1», которая будет поднимать только eth0 или eth1, если они перечислены в строке «allow-hotplug». Учтите, что «allow-auto» и «auto» — синонимы.
Если настройки статические, тогда, к примеру, заполняем так:
auto lo iface lo inet loopback auto eth0 allow-hotplug eth0 iface eth0 inet static address 192.168.1.94 network 192.168.1.0 netmask 255.255.255.0 broadcast 192.168.1.255 gateway 192.168.1.1
Если настройки сети раздаются через DHCP, тогда, к примеру, заполняем по-другому:
auto eth0 allow-hotplug eth0 iface eth0 inet dhcp
Если необходимо использовать одновременно несколько IP адресов на одной сетевой карте, тогда, к примеру, добавляем строки:
auto eth0:1 iface eth0:1 inet static address 192.168.0.94 network 192.168.0.0 netmask 255.255.255.0 broadcast 192.168.0.255
Для настройки DNS нужно редактировать файл /etc/resolv.conf
Статичный DNS, например:
nameserver 10.30.1.11 212.45.2.5 search gspk domain bober.gspk
Динамический DNS по DHCP вносится в /etc/resolv.conf автоматически.
Настройка в консольном интерфейсе wicd-curses
wicd — cлужба управления проводными и беспроводными сетями для Linux с Qt, GTK+ и curses интерфейсами. Эта служба наиболее удобна, если часто возникает необходимость в быстром подключении к различным сетям.
После первого запуска wicd автоматические переключает все настройки сети на DHCP.
Для управления службой в консоли необходим curses клиент wicd-curses.
# aptitude install wicd-curses
# wicd-curses
Для применения настроек необходимо нажать «Shift+C»
Firewall (брандмауэр, межсетевой экран и т
Общие сведения
Межсетевой экран — средство контроля и фильтрации сетевых соединений. В защищенной домашней или корпоративной сети установка firewall не актуальна и может принести больше вреда чем пользы. В случае если Ваш компьютер напрямую подключен к Интернет, то использование сетевого экрана просто обязательно. В Debian эта задача решается с помощью утилиты Iptables. Эту утилиту можно использовать в «чистом» виде путём ручного ввода команд в консоли, или запускать команды в самописном скипте, либо с помощью различных надстроек, облегчающих формирование сложных команд iptables. В зависимости от поставленной задачи каждый из способов имеет свои достоинства и преимущества.
Apf-firewall
Простой аскетичный аpf-firewall для быстрой защиты сервера без самописных скриптов.
aptitude install аpf-firewall
Правим файл конфигурации
nano /etc/apf-firewall/conf.apf # чтобы через 5 минут фаерволл не перестал работать DEVEL_MODE="0" # Указываем что у нас монолитное ядро SET_MONOKERN="1" Сетевая которую будем защищать IFACE_IN="eth0" IFACE_OUT="eth0" # Это Открываем входящие TCP порты IG_TCP_CPORTS="22" # Это Открываем входящие UDP порты IG_UDP_CPORTS="" # Отключаем фильтрацию на исходящих портах EGF="0" # Открываем исходящие TCP порты, если EGF="1" EG_TCP_CPORTS="21,25,80,443,43" # Открываем исходящие UDP порты, если EGF="1" EG_UDP_CPORTS="20,21,53"
nano /etc/default/apf-firewall RUN="yes"
/etc/init.d/apf-firewall start
Vuurmuur
Vuurmuur — мощная свободная надстройка к iptables с curses интерфейсом. Псевдографический интерфейс значительно упрощает оперативную работу с сетевым экраном. К сожалению разработка программы продвигается очень медленно. Имеются deb пакеты в репозитории официального сайта. Раньше эти пакеты присутствовали в официальных репозиториях Debian, но были заброшены сопровождающим, что привело к их удалению. Программа полностью документирована и переведена на русский язык.
Аналогов даже близких по функциональности найдено не было. В итоге получаем что vuurmuur это единственный в современном linux интерактивный firewall менеджер c curses интерфейсом. Подобная функциональность оправдывает все усилия по его установке.
Пакеты установки можно взять с сайта разработчика и из репозиториев Ubuntu.
К сожалению оба варианта содержат в себе весьма досадные проблемы:
- Проблемы отображения кириллицы с системной кодировкой UTF8
- Собраны в бинарник только для i386
- init.d скрипт запуска, как я понял, имеет проблемы совместимости с Debian
- В консоль постоянно сыпется мусор, который по-идее должен литься только в лог и то не всегда.
Компиляция пакетов — лишь один из вариантов решения проблемы. Оставим его профессионалам. А мы пойдем другим путём:
Основой будет пакет из Ubuntu, пару органов получим из пакета офф.сайта. Такой вот франкенштейн.
Установка
Устанавливаем утилиту просмотра сетевых соединений conntrack
aptitude install conntrack
Качаем 3 пакета из официальных репозиториев Ubuntu (пример для amd64)
wget http://ubuntu.mirror.cambrium.nl/ubuntu//pool/universe/v/vuurmuur/vuurmuur_0.7+debian-2_amd64.deb wget http://ubuntu.mirror.cambrium.nl/ubuntu//pool/universe/libv/libvuurmuur/libvuurmuur0_0.7+debian-2_amd64.deb wget http://ubuntu.mirror.cambrium.nl/ubuntu//pool/universe/v/vuurmuur-conf/vuurmuur-conf_0.7+debian-2_amd64.deb
dpkg -i lib* dpkg -i vuur*
Далее донором будет вполне подходящий i386 пакет из официального сайта.
Выкапываем тело из официального могильника
wget ftp://ftp.vuurmuur.org/debian/dists/squeeze/main/vuurmuur_0.7-1_i386.deb
dpkg -x vuurmuur_0.7-1_i386.deb vrmr
Пересаживаем органы из одного тела в другое
cp vrmr/etc/init.d/vuurmuur /etc/init.d/vuurmuur cp vrmr/etc/default/vuurmuur /etc/default/vuurmuur
Рисуем магическое заклинание
nano /etc/default/vuurmuur VUURMUUR_START=1
И оживляем тело.
/etc/init.d/vuurmuur start
Установка завершена. 8)
Настройка rsyslog
Если оставить настройки rsyslog неизмеными, то messages лог будет забит сообщениями ядра о траффике. Перекинем этот поток в отдельный файл
nano /etc/rsyslog.conf # *.*;auth,authpriv.none /var/log/syslog *.*;auth,authpriv.none;kern.!debug /var/log/syslog # И добавляем в конец kern.=debug /var/log/vuurmuur/firewall.log
или одной строкой
sed -i '/\*.\*;auth/s/\(authpriv.none\)/\1;kern.!debug/' /etc/rsyslog.conf && echo "kern.=debug /var/log/vuurmuur/firewall.log" >> /etc/rsyslog.conf
Настраиваем vuurmuur (Настройки vuurmuur —> Ведение журналов)
vuurmuur_conf
/etc/init.d/rsyslog restart
Настройка
vuurmuur_conf
1. Настраиваем пути к служебным утилитам Vuurmuur Config —> General
2. Настраиваем interfaces, т.е. указываем с какими сетевыми картами будем работать.
Будьте внимательны — опция Active в настройках должна быть Yes, иначе Vuurmuur будет их игнорировать.
3. Смотрим Services, если нет нужных добавляем свои (версия от Ubuntu не содержит служб вообще, но позволяет добавлять новые). Я добавил входящий порт для Web морды SWAT.
4. Настраиваем Zones, т.е. делим и\или объединяем наши сети в «зонах» на «свои» и «чужие». Каждая «зона» может содержать несколько сетей, хостов (т.е. компьютеров в сети) и групп хостов. Я создал две.
5. В каждую из «зон» я добавил по одной соответствующей ей сети: интернет
- и локальную:
6. В «домашнюю зону» я добавил хост, т.к. для него будут отдельные правила доступа.
7. Настраиваем «rules», т.е. правила доступа в сети. Ниже переброс портов на комп локальной сети временно отключен.
Настройки применяем в главном меню нажав F11.
Подсчёт трафика
В текущей стабильной версии подсчет трафика невозможен из-за бага
Решение проблем.
-
Все попытики соединений можно отследить в логах Logview —> Traffic.log.
- Пробуйте работу с выключенным Vuurmuur.
- Для проверки портов из интернет можно использовать ping.eu.
- К уже настроенным Services в Vuurmuur нужно быть внимательным, т.к. они могут быть настроены с более узкими диапазонами портов (rdp, например).
- Дополнительные возможности хорошо описаны на русском в /usr/share/doc/vuurmuur
- Проверье опцию Асtive (нужно Yes)
- Проверьте включено ли правило (нужно [х])
- Подумайте как бы выглядело бы правило в самописном скрипте.
- Гугл в помощь.
Диагностика DNS
Устанавливаем dnsutils: — получаем утилиту nslookup, позволяющую быстро диагностировать проблемы преобрзования доменных имен в IP адреса.
# aptitude install dnsutils
Пример использования: получаем IP адрес сервера lenta.ru. Если dns не работает, либо настроен неправильно, тогда получить такую информацию не удастся
root@tt400:~# nslookup lenta.ru Server: 8.8.8.8 Address: 8.8.8.8#53 Non-authoritative answer: Name: lenta.ru Address: 81.19.85.116
Или более мощный варинант
dig @8.8.8.8 -p 53 lenta.ru
Нагрузка на сеть
Устанавливаем nethogs: — получаем утилиту наглядно отображающую какой процесс насколько сильно и какую нагружает сетевую карту.
# aptitude install nethogs
Анонимный доступ в интернет
aptitude install tor
Динамическая регистрация в DNS
Устанавливаем ddclient: — службу, позволяющую привязать динамический IP от вашего провайдера к бесплатному домену второго уровня (например от dyndns.org)
aptitude install ddclient
При установке скармливаем конфигуратору имя, пароль и домен. Для проверки работы этой службы можно использовать сайт http://ping.eu
Теперь служба будет автоматически обновлять Ваш IP в DNS сервере при его изменении.
Удаленный доступ к консоли
Устанавливаем ssh: — комплекс программ, позволяющих соединяться с удалёнными машинами по защищённому каналу и выполнять команды в консоли:
# aptitude install ssh
Этот метапакет содержит программу клиента ssh и службу sshd, обрабатывающую входящие ssh подключения к вашему компьютеру.
Авторизация по ключам
Генерация ключей
Вариaнт 1 (подходит для putty и native ssh клиентов Linux)
ssh-keygen -t rsa -b 2048 -C "комментрий к ключу" -f /user/.ssh/newserver.key
Вариaнт 2 (для всех + проприетарный Bitvise Tunnelier)
К сожалению, я не нашёл способа сконвертировать OpenSSH ключи в понятный Tunnelier-у формат. Поэтому действовать будем от обратного.
Настройка сервера
Перемещаем открытый ключ в список разрешённых ключей Например так
mv /user/.ssh/newserver.key.pub /user/.ssh/authorized_keys
Правим конфигурацию сервера
nano /etc/ssh/sshd_config # Разрешаем авторизацию по парам ключей PubkeyAuthentication yes # Путь к списку отпечатков открытых ключей AuthorizedKeysFile %h/.ssh/authorized_keys
Проверяем права доступа, должно быть так
root@gtw:~# ls -g .ssh итого 4 -rw------- 1 root 392 Мар 24 20:03 authorized_keys
Если права доступа отличаются, то выставляем правильные:
chmod 600 -R .ssh && chown root:root .ssh/authorized_keys
/etc/init.d/ssh restart
При появлении проблем доступа смотрим лог
cat /var/log/auth.log | tail
Настройка клиента
Выставляем права доступа, иначе ssh клиент проигнорирует ключ.
cd /home/user chmod 700 ./.ssh chmod 600 ./.ssh/newserver.key
Запускаем ssh клиента.
ssh -i /home/user/.ssh/newserver.key user@192.168.0.1
Всё должно работать.
Настройка Putty
К сожалению, Putty не понимает ключи в формате OpenSSH. Поэтому загружаем latest development snapshot Puttygen. Обычный Puttygen нам не подойдёт.
Скармливаем проге наш newserver.key (Conversions —> Import key), если нужно вводим пароль для доступа ключу. Получаем окно
Усиленные настройки безопасности
Рекомендую следующие настройки
nano /etc/ssh/sshd_config #Запрещаем вход под root PermitRootLogin no # Меняем порт по умолчанию - может помочь против поверхностного сканирования портов Port 17854 # Указываем на каком IP слушать порт ListenAddress 192.168.0.1 # Запрещаем вход по паролям, усложняет брутфорс PasswordAuthentication no # Запрещаем пустые пароли PermitEmptyPasswords no # Только root может авторизоваться по ssh AllowUsers root # Меняем стандартный порт, но мне больше нравится реализовывать это через port mapping # Port 4422
Параноидальные настройки безопасности (knock)
Общий доступ к файлам
Тorrent
Устанавливаем transmission-daemon: — простой и не прожорливый до ресурсов torrent клиент.
# aptitude install transmission-daemon acl.
/etc/init.d/transmission-daemon stop
Создаём папку для хранения загружаемых файлов
mkdir /mnt/data/downloads
Открываем полный доступ к папке только для пользователя debian-transmission
Если у Вас папка не на разделе ХFS, то смотрим примечание 5
setfacl -m u:debian-transmission:rwx /mnt/data/downloads
Правим файл конфигурации
nano /etc/transmission-daemon/settings.json "blocklist-enabled": false, "download-dir": "/mnt/data/downloads", "encryption": 1, "peer-port": 52413, "preallocation": 1, "rpc-authentication-required": true, "rpc-enabled": true, "rpc-password": "password", "rpc-port": 8091, "rpc-username": "user", "rpc-whitelist-enabled": false,
Чтобы не засорять daemon.log настраиваем вывод в отдельный лог файл:
mkdir -p /var/log/transmission echo > /var/log/transmission/transmission.log setfacl -m u:debian-transmission:rwx /var/log/transmission
Указываем путь к лог файлу (можно и в /dev/zero)
nano /etc/default/transmission-daemon ... OPTIONS="--config-dir $CONFIG_DIR --logfile /var/log/transmission/transmission.log"
Запускаем службу для применения новых настроек
/etc/init.d/transmission-daemon stop start
Далее можно управляеть загрузками по адресу http:\\ip_сервера:8091, либо с помощью клиентских программ. Также не забываем открыть порт 52413 для входящих соединений.
SMB (CIFS)
Устанавливаем samba: — набор утилит и служб, которые реализуют протокол SMB/CIFS в системах Unix, позволяя обслуживать запросы к файлам и принтерам
aptitude install samba samba-common-bin acl: dpkg-reconfigure samba dpkg-reconfigure samba-common
Выставляем базовые настройки:
nano /etc/samba/smb.conf [global] # сначала требуем вход с локальными логином и паролем клиента security = user # Если будет получен неправильный пароль, то клиенту будет дан гостевой доступ. map to guest = Bad Password # Принуждаем клиентов заходить под своим именем client schannel = Yes # Используем защищенную процедуру аутентификации server schannel = Yes # Работает только на нужной сетевой карте interfaces = eth1 # Чтобы корректно отображались имена файлов, заканчивающиеся на точку mangled names = no
Далее для примера решаем 2 типовые задачи:
1. Открываем папку для любых пользователей с правом на запись.
Создаём папку и выставляем разрешения
mkdir /mnt/data/share && chmod 777 /mnt/data/share
Вносим новые настройки в файл /etc/samba/smb.conf
# nano /etc/samba/smb.conf [share] path = /mnt/data/share/ browsable = yes read only = no guest ok = yes
2. Открываем папку только для пользователя Ivan с правом на запись.
Смотрим список пользователей в системе и в БД samba
cat /etc/passwd | cut -d: -f1 pdbedit -L
Создаём локального пользователя без права входа в систему и задаем пароль
useradd -c "Ivan" -m -g users Ivan -s /bin/false && passwd Ivan
Создаём пользователя в базе пользователей samba.
smbpasswd -a Ivan
Создаём папку и выставляем разрешения
Если у Вас папка не на разделе ХFS, то смотрим примечание 5
mkdir /mnt/data/doc && setfacl -m u:Ivan:rwx /mnt/data/doc
Вносим новые настройки в файл /etc/samba/smb.conf
# nano /etc/samba/smb.conf [doc] path = /mnt/data/doc/ browsable = yes read only = no guest ok = no
Перезапускаем samba для применения новых настроек
smbcontrol smbd reload-config
Если надо смотрим подключенных к шарам пользователей
smbstatus
Корзина
nano /etc/samba/smb.conf recycle:repository = .deleted/%U recycle:keeptree = Yes recycle:touch = Yes recycle:versions = Yes recycle:maxsize = 0 recycle:exclude = *.tmp|*.temp|*.o|*.obj|~$*|*.~??|*.trace recycle:exclude_dir = /tmp|/temp|/cache recycle:noversions = *.doc|*.ppt|*.dat|*.ini
nano /etc/samba/smb.conf ... vfs object = recycle
/etc/init.d/samba restart
Теперь в каждой так настроенной шаре при удалении создаться каталог .deleted/пользователь и в нём будут храниться все удалённые файлы. Чистить эту «Корзину» нужно вручную
Аудит
Можно будет узнать что, где, когда и кто сделал на Samba шаре.
nano /etc/samba/smb.conf ... [global] ... #Отключаем запись сообщений в syslog. syslog = 0 #Количество сообщений, записываемых в лог-файлы, для всех VFS модулей. log level = 0 vfs:2 # Снимаем ограничение на max размер log файла. max log size = 0 # Добавляем модуль к "vfs objects" модуль аудита vfs objects = full_audit # Указываем дополнительные параметры модулю full_audit. Префикс, сообщений в лог-файле,каждая строка будет начинаться с user|ip_adress full_audit:prefix = %u|%I #Какие ошибки должны отображаться в лог-файле: none не протоколируем ошибки. full_audit:failure = none #Действия пользователей, которые записываются в лог-файл: full_audit:success = connect, open, mkdir, rmdir, unlink, write, rename full_audit:failure = connect, open, mkdir, rmdir, unlink, write, rename #Параметры, позволяющие управлять записью в журналы демоном syslogd: full_audit:facility = local5 full_audit:priority = notice
Далее переносим лог аудита из /var/log/syslog в /var/log/samba/audit.log
Для этого правим /etc/rsyslog.conf
nano /etc/rsyslog.conf #*.*;auth,authpriv.none -/var/log/syslog *.*;local5,auth,authpriv.none -/var/log/syslog local5.notice -/var/log/samba/audit.log
В последнюю очередь настраиваем ротацию логов чтоб audit.log не разрастался и был удобен для поиска нужного события
nano /etc/logrotate.d/samba-audit /var/log/samba/audit.log { dateext compress copytruncate daily missingok notifempty rotate 300 }
И перезапускаем samba для применения новых настроек
smbcontrol smbd reload-config
Принтеры
Сперва настраиваем принтер
Далее вносим настройки:
nano /etc/samba/smb.conf [global] ... load printers = yes printing = cups printcap name = cups ... [printers] browseable = yes printable = yes guest ok = yes
Перезапускаем samba для применения новых настроек
smbcontrol smbd reload-config
Далее для Windows клиентов принтер устанавливается также, как и любой другой расшаренный из Windows принтер
Проблемы, которые не удалось решить
- Подключённый через samba принтер в Windows оснастке всегда будет иметь статус «Нет доступа, подключиться не удалось.» При этом принтер вполне успешно будет печатать.
-
Из-за ошибки result was WERR_UNKNOWN_PRINTER_DRIVER не удалось обеспечить автоматическую установку драйверов из print$. Интеграция драйверов проводилась по Руководству
Web интерфейс для администрирования
Устанавливаем swat: — веб-инструмент управления Samba.
Примечание — после установки SWAT 2:3.5.6 аккуратно подхватывает настройки из smb.conf, вносит свои и удаляет ВСЕ параметры которые система использует по-умолчанию. Очень полезный способ наглядного изучения многих настроек Samba
Устанавливаем swat и документацию к samba
aptitude install swat samba-doc
После установки SWAT будет доступен по адресу http:\\ip_сервера:901.
Для применения внесённых изменений в SWAT изменений нужно на вкладке STATUS нажать кнопку «Перезапустить всё»
Совместная работа с аудитом и корзиной не тестировалась
Работа в консоли
Файловый менеджер
Устанавливаем Midnight commander mc: — утилита ставшая стандартом де-факто для быстрой навигации по файловой системе компьютера:
aptitude install mc
См. примечание 3
Сессии в консоли
Screen
Устанавливаем screen: — утилиту-мультиплексор, предоставляющую пользователю доступ к нескольким консолям в рамках одной сессии.:
# aptitude install screen
nano /etc/screenrc # Отключаем приветствие startup_message off # Производить отключение сессии при разрыве связи с терминалом autodetach on # Включаем строку состояния hardstatus on # Параметры строки состояния hardstatus alwayslastline "%{+b wk} %c $LOGNAME@%H %=[ %w ] "
или одной командой:
sed -i 's/^#startup_message.*/startup_message off/; s/^#autodetach.*/autodetach on/; s/^hardstatus off.*/hardstatus on/; s/^hardstatus string.*/hardstatus alwayslastline "%{+b wk} %c $LOGNAME@%H %=[ %w ] "/' /etc/screenrc
Просмотр процессов
Устанавливаем htop: — «Диспетчер задач» для нашей системы
# aptitude install htop
Просмотр больших текстов в консоли
Устанавливаем less: — позволяет прокручивать текст на экране вверх\вниз
# aptitude install less
# ifconfig -a | less Клавиши ↑ и ↓ позволят прокручивать текст Для выхода нужно нажать Esc
Вывод сообщений ядра в консоль
По-умолчанию все сообщения ядра выводятся в консоль, что может мешать нормальной работе. Это можно отключить
nano /etc/sysctl.conf #Расскоментируем строчку kernel.printk = 3 4 1 4
Или одной командой
sed -i '/kernel.printk/s/#//' /etc/sysctl.conf
Работа в X
Эмулятор терминала
guake
Устанавливаем guake: — удобный терминал для Х. Достоинства: вкладки, горячие клавиши,
# aptitude install guake
Прочее
SQL сервер
Устанавливаем mysql-server: — попyлярный сервер БД, требует не менее 256 МБ памяти. Необходим для множетсва Web интерфейсов. Устанавливаем
aptitude install mysql-server mysql-client
Не забываем написать где-нибудь пароль root доступа к серверу БД.
Web-сервер
Apache2
Устанавливаем apache2: — самый функциональный и популярный Web сервер в мире. Рекомендуется для отдачи динамического содержимого. Также рекомендуется новичкам, т.к. многие Web интерфейсы (например Zabbix, Mantiss и т.д.)по-умолчанию подстроены именно по него.
Сперва нужно определиться, что нам важнее — стабильность или скорость? Если скорость тогда так
aptitude install apache2-mpm-worker apache2
если надёжность и совместимость, то
aptitude install apache2-mpm-prefork apache2
Далее можно очень просто открыть доступ к файлам по протоколу http.
Например хотим открыть доступ к /mnt/data/
ln -s /mnt/data /var/www
Далее в браузере открываем адрес http://ip_адрес/data
Поддержка PHP5
Устанавливаем php5: — скриптовый язык программирования общего назначения. Необходим для множества Web-интерфейсов.
aptitude install php5 libapache2-mod-php5
/etc/init.d/apache2 restart
Создаём файл для проверки
nano /var/www/test.php # test.php <?php phpinfo(); ?>
Или одной командой
echo "# test.php" > /var/www/test.php && echo -n "<?php phpinfo(); ?>" >> /var/www/test.php
Далее в браузере открываем адрес http://ip_адрес/test.php. Если всё работает, то увидим много интересного.
Lighttpd
Устанавливаем lighttpd: — быстрый и простой Web сервер. Рекомендуется для отдачи статического содержимого.
aptitude install lighttpd
Настройки по-умолчанию вполне работоспособны и находятся в файле /etc/lighttpd/lighttpd.conf
Далее можно очень просто открыть доступ к файлам по протоколу http.
Например хотим открыть доступ на чтение /mnt/data/
ln -s /mnt/data /var/www
Далее в браузере открываем адрес http://ip_адрес/data
Поддержка PHP5
Работа PHP обеспечивается с помощью FastCGI
aptitude install php5-cgi
Чтобы обеспечить работу PHP5 в Lighttpd, открываем /etc/php5/cgi/php.ini и раскомментируем строку cgi.fix_pathinfo=1:
nano /etc/php5/cgi/php.ini cgi.fix_pathinfo=1
или одной командой
sed -i '/cgi.fix_pathinfo=1/s/;//' /etc/php5/cgi/php.ini
Далее включаем поддержку
lighttpd-enable-mod fastcgi lighttpd-enable-mod fastcgi-php
При этом создаётся символическая ссылка к файлу /etc/lighttpd/conf-enabled/10-fastcgi.conf в каталоге /etc/lighttpd/conf-available
ls -l /etc/lighttpd/conf-enabled
/etc/init.d/lighttpd force-reload
Создаём файл для проверки
nano /var/www/test.php # test.php <?php phpinfo(); ?>
Или одной командой
echo "# test.php" > /var/www/test.php && echo -n "<?php phpinfo(); ?>" >> /var/www/test.php
Далее в браузере открываем адрес http://ip_адрес/test.php. Если всё работает, то увидим много интересного.
Множество сайтов на одном сервере (virtual host)
Создаём папки для сайтов
mkdir /var/www/firstsite.home mkdir /var/www/secondsite.home
Создаём страницы заглушки
cd /var/www/ echo 'Welcome on firstsite.home server!' > firstsite.home/index.html echo 'Welcome on secondsite.home server!' > secondsite.home/index.html
Добавляем строки в файл настроек /etc/lighttpd/lighttpd.conf. Оба примера демонстрируют 2 разных способа описания виртуальных сайтов.
$HTTP["host"] == "(\w+\.)?firstsite.home" { server.document-root = "/var/www/test.home/" } $HTTP["host"] == "(secondsite.home|www.secondsite.home" { server.document-root = "/var/www/secondsite.home/" server.errorlog = "/var/log/lighttpd/secondsiteError.log" accesslog.filename = "/var/log/lighttpd/secondsiteAccess.log" }
Перезапускаем Web сервер
/etc/init.d/lighttpd restart
Настраиваем dns в файле HOSTS или на DNS сервере Пример для dnsmasq — добавляем строки в dnsmasq.conf
address=/firstsite.home/192.168.0.100 address=/secondsite.home/192.168.0.100
Перезапускаем dns сервер
/etc/init.d/dnsmasq restart
Лог доступа
Включаем модуль accesslog
lighttpd-enable-mod accesslog
/etc/init.d/lighttpd force-reload
Лог доступа смотрим в /var/log/lighttpd/access.log
Примечание 1 (настройка aptitude)
По-умолчанию aptitude устанавливает рекомендумемые пакеты. Если это не нужно, к консольной команде установки следует добавить ключ «-R», либо в curses интерфейсе в настройках запретить автоустановку.
Примечание 2 (ошибка запуска сети)
Если установка проводилась по сети с настройкой по DHCP, то после перезагрузки сетевой интерфейс eth0 может не запуститься автоматически, а значит вы не сможете устанавливать новые пакеты из сети. Для решения проблемы настраиваем eth0:
nano /etc/networking interfaces Перед строкой "iface eth0 inet dhcp" добавляем новую строку "auto eth0"
# /etc/init.d/networking restart
Примечание 3 (настройка мс)
Яркие синие цвета в mc некоторым уже могли надоесть. Чтобы изменить цвета нужно закрыть mc (чтобы настройка не затёрлась самим мс ). Папка .mc создаётся в домашней директории вашего пользователя при первом запуске mc.
sed -i 's/^base_color=.*/base_color=normal=cyan,default::selected=black,cyan:directory=cyan,default:marked=brightgreen,default:errors=red,default:marked=yellow,default:executable=brightred,default:marked=brightgreen,default:link=grey,default:marked=brightgreen,default:device=brightmagenta,default:marked=brightgreen,default:menuhot=black,cyan:menusel=cyan,black:menuhotsel=gray,black:menu=black,cyan:helpnormal=cyan,black:editnormal=cyan,black:editbold=yellow,black:editmarked=cyan,black/; s/^confirm_delete=1*/confirm_delete=0/; s/^confirm_exit=1.*/confirm_exit=0/' /root/.mc/ini
Примечание 4 (ошибка pcspkr)
В Debian 6 при запуске ядро по-умолчанию пытается загрузить уже задействованный модуль системного динамика, о чём и выдает ошибку. Исправляем баг.
echo "blacklist pcspkr" >> /etc/modprobe.d/blacklist.conf
Примечание 5 (setfacl неподдерживаемая операция)
Для устранения ошибки файловая система должна быть смонтирована с опцией acl. Для XFS эта опция применяется по-умолчанию.