Установим одну из самых стабильных операционных систем linux Debian 8. Настроим учитывая основные требования системного администратора. Нужна стабильность в работе? Выбирайте этот дистрибутив OC Linux. Самая большая база программ и огромное сообщество.
Содержание:
Предисловие
Операционная система Debian является основоположником целого семейства OC Linux и зарекомендовала себя как одна из самых надежных и стабильных систем. На рабочем компьютере устаревшие но проверенные версии программного обеспечения могут вызвать неудобство в работе но для сервера надежность прежде всего. Каждый выбирает сам, что он хочет получить, стабильность или современность. Для серверов мой выбор однозначно падает на стабильность.
Где скачать Debian 8
На сайте разработчика вы всегда можете скачать любую необходимую версию системы Debian.
Установка 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 адрес.
Для назначения статического адреса вы можете использовать два варианты:
- Привязать mac адрес на DHCP сервере и закрепить нужный ip,
- Назначить сетевые параметры изменив настройки.
Обычно я использую первый вариант, но это не всегда разумно.
Изменим сетевые параметры (обратите внимание на название сетевой карты у нас она 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
}
Строка присутствует значит все будет ротироваться как надо.
Результат
Сервер готов к дальнейшей настройке под необходимые требования. Конечно, это не самые идеальные параметры настройки, но для меня такая базовая настройка оказалась самой удобной.