Установим одну из самых стабильных операционных систем linux Debian 8. Настроим учитывая основные требования системного администратора. Нужна стабильность в работе? Выбирайте этот дистрибутив OC Linux. Самая большая база программ и огромное сообщество.

Предисловие

Операционная система Debian является основоположником целого семейства OC Linux и зарекомендовала себя как одна из самых надежных и стабильных систем. На рабочем компьютере устаревшие но проверенные версии программного обеспечения могут вызвать неудобство в работе но для сервера надежность прежде всего. Каждый выбирает сам, что он хочет получить, стабильность или современность. Для серверов мой выбор однозначно падает на стабильность.

Где скачать Debian 8

На сайте разработчика вы всегда можете скачать любую необходимую версию системы Debian.
Скачать OC Linux

Установка Debian 8

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

Для установки системы на RAID1 можете воспользоватся информацией из другого материала.
Установка на RAID1

Настройка Debian 8

Подключение по ssh

Откроем консоль и определим ip адрес:

local@xrdp:~$ ip addr
= вывод команды =
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default 
 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
 inet 127.0.0.1/8 scope host lo
 valid_lft forever preferred_lft forever
 inet6 ::1/128 scope host 
 valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
 link/ether 02:74:8a:ed:a9:d3 brd ff:ff:ff:ff:ff:ff
 inet 192.168.0.150/24 brd 192.168.0.255 scope global dynamic eth0
 valid_lft 31965sec preferred_lft 31965sec
 inet6 fe80::74:8aff:feed:a9d3/64 scope link 
 valid_lft forever preferred_lft forever

Подключимся по ssh под простым пользователем:

ssh local@192.168.0.150
= вывод команды =
Warning: Permanently added '192.168.0.150' (ECDSA) to the list of known hosts.
local@192.168.0.150's password: 

The programs included with the Debian GNU/Linux system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.

Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.
local@xrdp:~$

По умолчанию к системе Debian 8 нельзя подключится сразу под суперпользователем root!

Переключится на пользователя root:

local@xrdp:~$ su -
= вывод команды =
Пароль: 
root@xrdp:~#

Обновление

Обновим индекс пакетов в Debian 8 до актуального состояния:

apt-get update

Выполним обновление всех пакетов системы:

apt-get upgrade

Необходимые пакеты для работы

Установим без вопросов пакеты которые обычно используются в работе c Debian 8:

apt-get -y install mc htop iftop cifs-utils davfs2
  • mc — консольный редактор,
  • htop — консольный монитор просмотра состояния сервера,
  • cifs-utils — пакет необходимый для монтирование сетевых ресурсов,
  • davfs2 — пакет для подключения по протоколу WebDav

Определим редактор mc в системе по умолчанию:

select-editor
= вывод команды с необходимым параметром =
Select an editor. To change later, run 'select-editor'.
 1. /bin/nano <---- easiest
 2. /usr/bin/mcedit
 3. /usr/bin/vim.tiny

Choose 1-3 [1]: 2

Разрешим подключение root по ssh

Произведем изменения в файле конфигурации ssh:

mcedit /etc/ssh/sshd_config
= необходимые изменения =
# Можно поменять на другой порт при желании
Port 22
# Разрешение подключаться под root
PermitRootLogin yes

Перезагрузим сервис ssh:

service sshd restart

Проверим правильность изменения порта (если это делали):

netstat -tulnp | grep ssh
= вывод команды =
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 2015/sshd 
tcp6 0 0 :::22 :::* LISTEN 2015/sshd

Можем теперь сразу подключаться под root.

Не забудьте добавить порт в настройки firewall!

Сетевые параметры

После установки наша система получает ip адрес используя DHCP.

При установке после определения сетевых параметров по DHCP вы можете сделать шаг назад и сразу настроить статический ip адрес.

Для назначения статического адреса вы можете использовать два варианты:

  1. Привязать mac адрес на DHCP сервере и закрепить нужный ip,
  2. Назначить сетевые параметры изменив настройки.

Обычно я использую первый вариант, но это не всегда разумно.

Изменим сетевые параметры (обратите внимание на название сетевой карты у нас она eth0):

mcedit /etc/network/interfaces
=вывод команды с необходимыми изменениями=
# This file describes the network interfaces available on your system
# and how to activate them. For more information, see interfaces(5).
source /etc/network/interfaces.d/*
# The loopback network interface
auto lo
iface lo inet loopback
# The primary network interface
allow-hotplug eth0
# Запускать автоматически при загрузке системы
auto eth0 
# Интерфейс eth0 в диапазоне IPv4 со статическим адресом
iface eth0 inet static
# IP адрес
address 192.168.0.107
# Шлюз по умолчанию
gateway 192.168.0.106
# Маска сети
netmask 255.255.255.0
# DNS
dns-nameservers 8.8.8.8

Выполним перезапуск сети командой:

/etc/init.d/networking restart
= вывод команды =
[ ok ] Restarting networking (via systemctl): networking.service.

Проверим правильность изменений:

ip addr
= вывод команды =
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default 
 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
 inet 127.0.0.1/8 scope host lo
 valid_lft forever preferred_lft forever
 inet6 ::1/128 scope host 
 valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
 link/ether 02:74:8a:ed:a9:d3 brd ff:ff:ff:ff:ff:ff
 inet 192.168.0.150/24 brd 192.168.0.255 scope global dynamic eth0
 valid_lft 29523sec preferred_lft 29523sec
 inet 192.168.0.107/24 brd 192.168.0.255 scope global secondary eth0
 valid_lft forever preferred_lft forever
 inet6 fe80::74:8aff:feed:a9d3/64 scope link 
 valid_lft forever preferred_lft forever

После перезагрузки системы  отображение  inet 192.168.0.150/24 пропадет!

Проверим соединение с интернетом отправив 4 пакета на ya.ru:

ping -c 4 ya.ru
= вывод команды =
PING ya.ru (87.250.250.242) 56(84) bytes of data.
64 bytes from ya.ru (87.250.250.242): icmp_seq=1 ttl=54 time=15.2 ms
64 bytes from ya.ru (87.250.250.242): icmp_seq=2 ttl=54 time=15.1 ms
64 bytes from ya.ru (87.250.250.242): icmp_seq=3 ttl=54 time=16.0 ms
64 bytes from ya.ru (87.250.250.242): icmp_seq=4 ttl=54 time=18.4 ms

--- ya.ru ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3004ms
rtt min/avg/max/mdev = 15.186/16.235/18.422/1.310 ms

Настройка iptables

Изначально фаервол в Debian 8 полностью открыт. Проверим это:

iptables -L -v -n
= вывод команды =
Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target prot opt in out source destination 

Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target prot opt in out source destination 

Chain OUTPUT (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target prot opt in out source destination

Всё пропускает.

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

Создадим скрипт настройки iptables:

mcedit /etc/iptables.sh
= вывод команды с необходимой информацией =
#!/bin/bash
#
# Объявление переменных
export IPT="iptables"

# Сетевой интерфейс
export WAN=eth0
export WAN_IP=192.168.0.107

# Очистка всех цепочек iptables
$IPT -F
$IPT -F -t nat
$IPT -F -t mangle
$IPT -X
$IPT -t nat -X
$IPT -t mangle -X

# Политики для трафика, не соответствующего ни одному правил у
$IPT -P INPUT DROP
$IPT -P OUTPUT DROP
$IPT -P FORWARD DROP

# Локальный трафик для loopback
$IPT -A INPUT -i lo -j ACCEPT
$IPT -A OUTPUT -o lo -j ACCEPT

# Ping
$IPT -A INPUT -p icmp --icmp-type echo-reply -j ACCEPT
$IPT -A INPUT -p icmp --icmp-type destination-unreachable -j ACCEPT
$IPT -A INPUT -p icmp --icmp-type time-exceeded -j ACCEPT
$IPT -A INPUT -p icmp --icmp-type echo-request -j ACCEPT

# Исходящие и Входящие соединения
$IPT -A OUTPUT -o $WAN -j ACCEPT
#$IPT -A INPUT -i $WAN -j ACCEPT

# Доступ к web серверу
#$IPT -A INPUT -p tcp -m tcp --dport 80 -j ACCEPT
#$IPT -A INPUT -p tcp -m tcp --dport 443 -j ACCEPT

# Доступ к Samba
#$IPT -A INPUT -p tcp -m tcp --dport 137 -j ACCEPT
#$IPT -A INPUT -p tcp -m tcp --dport 138 -j ACCEPT
#$IPT -A INPUT -p tcp -m tcp --dport 139 -j ACCEPT
#$IPT -A INPUT -p tcp -m tcp --dport 445 -j ACCEPT
#$IPT -A INPUT -p tcp -m tcp --dport 901 -j ACCEPT
# Состояние ESTABLISHED говорит что это не первый пакет в соединении
# Пропускать все уже инициированные соединения, а также дочерние от них
$IPT -A INPUT -p all -m state --state ESTABLISHED,RELATED -j ACCEPT
# Пропускать новые, а так же уже инициированные и их дочерние соединения
$IPT -A OUTPUT -p all -m state --state ESTABLISHED,RELATED -j ACCEPT
# Форвардинг для уже инициированных и их дочерних соединений
$IPT -A FORWARD -p all -m state --state ESTABLISHED,RELATED -j ACCEPT

# Включаем фрагментацию пакетов. Необходимо из за разных значений MTU
$IPT -I FORWARD -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu

# Отбрасывать все пакеты, которые не могут быть идентифицированы
$IPT -A INPUT -m state --state INVALID -j DROP
$IPT -A FORWARD -m state --state INVALID -j DROP

# Приводит к связыванию системных ресурсов, так что реальный
# обмен данными становится не возможным, обрубаем
$IPT -A INPUT -p tcp ! --syn -m state --state NEW -j DROP
$IPT -A OUTPUT -p tcp ! --syn -m state --state NEW -j DROP

# Открываем порт для ssh
$IPT -A INPUT -i $WAN -p tcp --dport 22 -j ACCEPT
# Открываем порт для DNS
$IPT -A INPUT -i $WAN -p udp --dport 53 -j ACCEPT
# Открываем порт для NTP
$IPT -A INPUT -i $WAN -p udp --dport 123 -j ACCEPT
# Открываем порт для RDP
#$IPT -A INPUT -i $WAN -p tcp --dport 3389 -j ACCEPT
# Логирование
$IPT -N block_in
$IPT -N block_out
$IPT -N block_fw

$IPT -A INPUT -j block_in
$IPT -A OUTPUT -j block_out
$IPT -A FORWARD -j block_fw

$IPT -A block_in -j LOG --log-level info --log-prefix "--IN--BLOCK"
$IPT -A block_in -j DROP
$IPT -A block_out -j LOG --log-level info --log-prefix "--OUT--BLOCK"
$IPT -A block_out -j DROP
$IPT -A block_fw -j LOG --log-level info --log-prefix "--FW--BLOCK"
$IPT -A block_fw -j DROP
# Сохраняем правила
/sbin/iptables-save > /etc/iptables_rules

Даем файлу права на запуск:

chmod +x /etc/iptables.sh

Всегда очень внимательно настраивайте правила! В случае неправильной настройки вы можете потерять доступ к серверу!

Запускаем скрипт:

sh /etc/iptables.sh

Проверяем правила:

iptables -L -v -n
= вывод команды =
Chain INPUT (policy DROP 0 packets, 0 bytes)
 pkts bytes target prot opt in out source destination 
 0 0 ACCEPT all -- lo * 0.0.0.0/0 0.0.0.0/0 
 0 0 ACCEPT icmp -- * * 0.0.0.0/0 0.0.0.0/0 icmptype 0
 0 0 ACCEPT icmp -- * * 0.0.0.0/0 0.0.0.0/0 icmptype 3
 0 0 ACCEPT icmp -- * * 0.0.0.0/0 0.0.0.0/0 icmptype 11
 0 0 ACCEPT icmp -- * * 0.0.0.0/0 0.0.0.0/0 icmptype 8
 5 356 ACCEPT all -- eth0 * 0.0.0.0/0 0.0.0.0/0 
 0 0 ACCEPT all -- * * 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED
 0 0 DROP all -- * * 0.0.0.0/0 0.0.0.0/0 state INVALID
 0 0 DROP tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp flags:!0x17/0x02 state NEW
 0 0 ACCEPT tcp -- eth0 * 0.0.0.0/0 0.0.0.0/0 tcp dpt:22
 0 0 ACCEPT udp -- eth0 * 0.0.0.0/0 0.0.0.0/0 udp dpt:53
 0 0 ACCEPT udp -- eth0 * 0.0.0.0/0 0.0.0.0/0 udp dpt:123
 0 0 block_in all -- * * 0.0.0.0/0 0.0.0.0/0 

Chain FORWARD (policy DROP 0 packets, 0 bytes)
 pkts bytes target prot opt in out source destination 
 0 0 TCPMSS tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp flags:0x06/0x02 TCPMSS clamp to PMTU
 0 0 ACCEPT all -- * * 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED
 0 0 DROP all -- * * 0.0.0.0/0 0.0.0.0/0 state INVALID
 0 0 block_fw all -- * * 0.0.0.0/0 0.0.0.0/0 

Chain OUTPUT (policy DROP 0 packets, 0 bytes)
 pkts bytes target prot opt in out source destination 
 0 0 ACCEPT all -- * lo 0.0.0.0/0 0.0.0.0/0 
 3 308 ACCEPT all -- * eth0 0.0.0.0/0 0.0.0.0/0 
 0 0 ACCEPT all -- * * 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED
 0 0 DROP tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp flags:!0x17/0x02 state NEW
 0 0 block_out all -- * * 0.0.0.0/0 0.0.0.0/0 

Chain block_fw (1 references)
 pkts bytes target prot opt in out source destination 
 0 0 LOG all -- * * 0.0.0.0/0 0.0.0.0/0 LOG flags 0 level 6 prefix "--FW--BLOCK"
 0 0 DROP all -- * * 0.0.0.0/0 0.0.0.0/0 

Chain block_in (1 references)
 pkts bytes target prot opt in out source destination 
 0 0 LOG all -- * * 0.0.0.0/0 0.0.0.0/0 LOG flags 0 level 6 prefix "--IN--BLOCK"
 0 0 DROP all -- * * 0.0.0.0/0 0.0.0.0/0 

Chain block_out (1 references)
 pkts bytes target prot opt in out source destination 
 0 0 LOG all -- * * 0.0.0.0/0 0.0.0.0/0 LOG flags 0 level 6 prefix "--OUT--BLOCK"
 0 0 DROP all -- * * 0.0.0.0/0 0.0.0.0/0 

Настроим применение правил при загрузке сервера.  Добавляем необходимую строку в файл сетевых настроек:

mcedit /etc/network/interfaces
= необходимое дополнение =
# Загрузка правил iptables при старте машины
pre-up iptables-restore < /etc/iptables_rules

Применим изменения командой:

/etc/init.d/networking restart
= вывод команды =
[ ok ] Restarting networking (via systemctl): networking.service.

 

Логирование Cron

В Debian нет отдельного файла логов cron. Исправим это недоразумение.

Редактируем необходимый файл:

mcedit /etc/rsyslog.conf
= Раскомментируем строку =
cron.*                                /var/log/cron.log
= Редактируем строку добавив cron.none =
*.*;auth,authpriv.none,cron.none     -/var/log/syslog

Перезапустим rsyslog:

service rsyslog restart

Осталось проверить ротацию логов cron:

mcedit /etc/logrotate.d/rsyslog
= вывод команды с необходимыми параметрами =
cat /etc/logrotate.d/rsyslog 
/var/log/syslog
{
 rotate 7
 daily
 missingok
 notifempty
 delaycompress
 compress
 postrotate
 invoke-rc.d rsyslog rotate > /dev/null
 endscript
}

/var/log/mail.info
/var/log/mail.warn
/var/log/mail.err
/var/log/mail.log
/var/log/daemon.log
/var/log/kern.log
/var/log/auth.log
/var/log/user.log
/var/log/lpr.log
/var/log/cron.log
/var/log/debug
/var/log/messages
{
 rotate 4
 weekly
 missingok
 notifempty
 compress
 delaycompress
 sharedscripts
 postrotate
 invoke-rc.d rsyslog rotate > /dev/null
 endscript
}

Строка присутствует значит все будет ротироваться как надо.

Результат

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

Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.

Хотите сказать денежное спасибо? Подарите денежку!