II. Настройка после установки
0. Замечания перед настройкой:
- имя пользователя test замените на то, которое вам больше нравится;
- вводимые пароли на экране не отображаются (даже звёздочек не будет);
- считаем, что устанавливающий сумеет справиться с текстовым редактором ee;
- у вас под руками должен быть адрес электронной почты, куда будут отсылаться сообщения rthunter-ом;
- считаем, что компьютер подключен к сети, которая имеет прямое подключение к Интернету,
- в приглашении командного интерпретатора у пользователя root перед знаком решетки отображается имя компьютера. В моем случае это
будет "host", в вашем - имя вашего компьютера;
- для удобства ввода команд настройки нужно использовать следующие полезные функции командного интерпретатора:
- история команд: можно вызвать предыдущую команду нажатием клавиши "стрелка вверх", отредактировать ее и нажать <Enter> для выполнения;
- автодополнение: если при наборе команды, имени файла или пути к файлу, не набрав это имя до конца нажать <TAB>,то система попробует
сама дополнить имя. Если совпадающее имя одно, то оно будет дополнено до конца, если их несколько, то ничего не произойдет до тех пор,
пока введенные введенная строка не станет соответствовать только одному имени файла или каталога. Попробуйте, например, в командной
строке интерпретатора набрать sh и нажать <TAB> - курсор останется на месте, потому что в системе есть несколько файлов, начинающихся
с "sh". Но если вы добавите символ "u" и снова нажмете <TAB>, то система сразу дополнит имя до полного shutdown. Эту функцию удобно
использовать для ускорения ввода и проверки наличия файла или правильности набора пути к файлу.
- неплохо было бы иметь под руками компьютер, подключенный к той же сети, что и устанавливаемый вами и имеющий программу SSH-клиента
(например, PuTTY). Это позволит вам: во-первых, привыкнуть работать не от имени учетной записи root, а во-вторых, позволит не вводить команды,
приведенные в этом тексте руками, а копировать через буфер обмена,
- начинаем с конца 1-й главы, т.е. с загрузки установленной системы.
1. По окончании загрузки вводим имя пользователя root и пароль и получаем доступ к командному интерпретатору (времена входов в систему будут отличаться от указанных ниже):
login: root <Enter>
Password: <ВВОДИМ ПАРОЛЬ ПОЛЬЗОВАТЕЛЯ root><Enter>
Aug 19 00:18:25 host login: ROOT LOGIN (root) ON ttyv0
Copyright (c) 1992-2012 The FreeBSD Project.
Copyright (c) 1979, 1980, 1983, 1986, 1988, 1989, 1991, 1992, 1993, 1994
The Regents of the University of California. All rights reserved.
FreeBSD 8.3-RELEASE (GENERIC) #0: Mon Apr 9 21:23:18 UTC 2012
Welcome to FreeBSD!
Before seeking technical support, please use the following resources:
o Security advisories and updated errata information for all releases are
at
http://www.FreeBSD.org/releases/ - always consult the ERRATA section
for your release first as it's updated frequently.
o The Handbook and FAQ documents are at
http://www.FreeBSD.org/ and,
along with the mailing lists, can be searched by going to
http://www.FreeBSD.org/search/. If the doc distribution has
been installed, they're also available formatted in /usr/share/doc.
If you still have a question or problem, please take the output of
`uname -a', along with any relevant error messages, and email it
as a question to the
questions@FreeBSD.org mailing list. If you are
unfamiliar with FreeBSD's directory layout, please refer to the hier(7)
manual page. If you are not familiar with manual pages, type `man man'.
You may also use sysinstall(8) to re-enter the installation and
configuration utility. Edit /etc/motd to change this login announcement.
host#
2. Отрежем лишнее из /etc/motd
host# ee /etc/motd <Enter>
Переместим курсор на строку номер 4 (сверху) и будем нажимать <Ctrl>+<K>, пока не будут стерты все нижние строки. Затем <ESC>,<A>,<A> и получаем на экране результирующий вывод редактора ee
"/etc/motd" 4 lines, 85 characters
3. Проверяем доступность сети:
host# ping -c 5
http://www.ru
Если получаем вывод наподобие приведенного ниже (ttl в предпоследнем столбце и время в последнем столбце и в последней строке будут отличаться), то сеть настроена правильно:
PING
http://www.ru (194.87.0.50): 56 data bytes
64 bytes from 194.87.0.50: icmp_seq=0 ttl=47 time=4.133 ms
64 bytes from 194.87.0.50: icmp_seq=1 ttl=47 time=4.612 ms
64 bytes from 194.87.0.50: icmp_seq=2 ttl=47 time=4.285 ms
64 bytes from 194.87.0.50: icmp_seq=3 ttl=47 time=4.743 ms
64 bytes from 194.87.0.50: icmp_seq=4 ttl=47 time=3.992 ms
---
http://www.ru ping statistics ---
5 packets transmitted, 5 packets received, 0.0% packet loss
round-trip min/avg/max/stddev = 3.992/4.353/4.743/0.284 ms
host#
4. Создадим непривилегированного пользователя, учетную запись которого мы будем использовать для входа на сервер через SSH. Для этого воспользуемся командой adduser:
host# adduser <Enter>
Username: test <Enter>
Full name: <Enter>
Uid (Leave empty for default): <Enter>
Login group [test]: <Enter>
Login group is test. Invite test into other groups? []:<Enter>
Login class [default]: <Enter>
Shell (sh csh tcsh bash rbash nologin) [sh]: tcsh <Enter>
Home directory [/home/test]: <Enter>
Home directory permissions (Leave empty for default): <Enter>
Use password-based authentication? [yes]: <Enter>
Use an empty password? (yes/no) [no]: <Enter>
Use a random password? (yes/no) [no]: <Enter>
Enter password: <ЗДЕСЬ ВЫ ДОЛЖНЫ ВВЕСТИ ПАРОЛЬ ДЛЯ ПОЛЬЗОВАТЕЛЯ test> <Enter>
Enter password again: <ЗДЕСЬ ВЫ ДОЛЖНЫ ЕЩЕ РАЗ ВВЕСТИ ПАРОЛЬ ДЛЯ ПОЛЬЗОВАТЕЛЯ test> <Enter>
Lock out the account after creation? [no]: <Enter>
Username : test
Password : *****
Full Name :
Uid : 1001
Class :
Groups : test
Home : /home/test
Home Mode :
Shell : /bin/tcsh
Locked : no
OK? (yes/no): yes <Enter>
adduser: INFO: Successfully added (test) to the user database.
Add another user? (yes/no): no <Enter>
Goodbye!
host#
5. Чтобы пользователь смог получать права root, добавим его в файл /usr/local/etc/sudoers (не будем заморачиваться с точным определением
необходимых прав - сделаем права как у пользователя root):
host# echo 'test ALL=(ALL) ALL' >> /usr/local/etc/sudoers <Enter>
6. и тут же проверим что настройка пользователя выполнена правильно:
- переключимся на 1-ю виртуальную консоль <Alt>+<F2> (виртуальных консолей по умолчанию 8, нумерация идет с 0)
- введем логин пользователя и пароль:
FreeBSD/amd64 (host) (ttyv1)
login: test <Enter>
Password: <ВВОДИМ ПАРОЛЬ ПОЛЬЗОВАТЕЛЯ test><Enter>
Copyright (c) 1992-2012 The FreeBSD Project.
Copyright (c) 1979, 1980, 1983, 1986, 1988, 1989, 1991, 1992, 1993, 1994
The Regents of the University of California. All rights reserved.
FreeBSD 8.3-RELEASE (GENERIC) #0: Mon Apr 9 21:23:18 UTC 2012
Welcome to FreeBSD!
>
- попробуем получить права пользователя root:
> sudo -s <Enter>
We trust you have received the usual lecture from the local System
Administrator. It usually boils down to these three things:
#1) Respect the privacy of others.
#2) Think before you type.
#3) With great power comes great responsibility.
Password:
текст перед запросом пароля выводится только при первом запуске sudo -s. Вводим пароль пользователя test (не root!) и получаем
командную строку с правами суперпользователя.
host#
- если все действия выполнились без ошибок, то выходим из режима суперпользователя
host# exit <Enter>
exit
>
- и проверяем, пускает ли нас SSH. Шестнадцатиричные числа во второй строке в вашем случае будут отличаться.
> ssh 127.0.0.1 <Enter>
The authenticity of host '127.0.0.1 (127.0.0.1)' can't be established.
RSA key fingerprint is 7f:fa:94:c3:00:27:56:51:0d:51:d4

18:8d:7c:e2.
Are you sure you want to continue connecting (yes/no)? yes <Enter>
Warning: Permanently added '127.0.0.1' (RSA) to the list of known hosts.
Password: <ВВОДИМ ПАРОЛЬ ПОЛЬЗОВАТЕЛЯ test><Enter>
Last login: Sun Aug 19 00:18:25 2012
Copyright (c) 1980, 1983, 1986, 1988, 1990, 1991, 1993, 1994
The Regents of the University of California. All rights reserved.
FreeBSD 8.3-RELEASE (GENERIC) #0: Mon Apr 9 21:23:18 UTC 2012
Welcome to FreeBSD!
>
- и тут же проверяем, что через SSH у нас тоже получится получить права root:
> sudo -s <Enter>
Password: <ВВОДИМ ПАРОЛЬ ПОЛЬЗОВАТЕЛЯ test><Enter>
host#
Если все действия выполнились без ошибок, то выходим из режима суперпользователя:
host# exit <Enter>
exit
>
- выходим из SSH:
> exit <Enter>
logout
Connection to 127.0.0.1 closed.
- Выходим из системы на 1-й виртуальной консоли:
> exit <Enter>
logout
FreeBSD/amd64 (host.) (ttyv1)
login:
- и возвращаемся на нулевую консоль, нажав <Alt>+<F1>.
7. Теперь можно подключиться к устанавливаемому компьютеру с другого и продолжить установку (Если другого компьютера нет, то можно этот пункт
пропустить). Для этого лучше выйти из нулевой консоли (чтобы не оставлять открытую командную строку под правами root):
host# exit <Enter>
logout
FreeBSD/amd64 (host.) (ttyv0)
login:
и подключиться через сеть с использованием SSH-клиента. Подключение должно осуществляться под именем созданного вами в п.4 пользователя,
а не под именем root. После подключения, выполнив в окне терминала команду sudo -s, вы получите права root и сможете продолжить настройку
системы:
login: test <Enter>
Password: <ВВОДИМ ПАРОЛЬ ПОЛЬЗОВАТЕЛЯ test><Enter>
Copyright (c) 1992-2012 The FreeBSD Project.
Copyright (c) 1979, 1980, 1983, 1986, 1988, 1989, 1991, 1992, 1993, 1994
The Regents of the University of California. All rights reserved.
FreeBSD 8.3-RELEASE (GENERIC) #0: Mon Apr 9 21:23:18 UTC 2012
Welcome to FreeBSD!
> sudo -s <Enter>
Password: <ВВОДИМ ПАРОЛЬ ПОЛЬЗОВАТЕЛЯ test><Enter>
host#
Все дальнейшие команды вводятся в окне SSH-клиента.
8. Исправим файл /etc/fstab так, чтобы никто не смог запускать файлы, расположенные на разделах /tmp и /var. Для этого добавим флаги «noexec»
в поле Options каждого из этих разделов.
host# ee /etc/fstab <Enter>
Файл имеет вид:
# Device Mountpoint FStype Options Dump Pass#
/dev/ad0s1b none swap sw 0 0
/dev/ad0s1a / ufs rw 1 1
/dev/ad0s1e /tmp ufs rw 2 2
/dev/ad0s1f /usr ufs rw 2 2
/dev/ad0s1d /var ufs rw 2 2
/dev/acd0 /cdrom cd9660 ro,noauto 0 0
У вас должен получиться вид:
# Device Mountpoint FStype Options Dump Pass#
/dev/ad0s1b none swap sw 0 0
/dev/ad0s1a / ufs rw 1 1
/dev/ad0s1e /tmp ufs rw,noexec 2 2
/dev/ad0s1f /usr ufs rw 2 2
/dev/ad0s1d /var ufs rw,noexec 2 2
/dev/acd0 /cdrom cd9660 ro,noauto 0 0
Выход из редактора ee с сохранением изменений <ESC><A><A>
Результирующий вывод редактора ee (цифры могут отличаться)
"/etc/fstab" 7 lines, 253 characters
9. Установим более жесткие ограничения на доступ к системным файлам:
host# chmod 0600 /etc/syslog.conf <Enter>
host# chmod 0600 /etc/rc.conf <Enter>
host# chmod 0600 /etc/newsyslog.conf <Enter>
host# chmod 0600 /etc/login.conf <Enter>
10. Также сразу добавим несколько важных для нас опций:
Отключаем переадресацию пакетов и регистрируем все попытки переадресации
host# echo 'icmp_drop_redirect="YES"' >> /etc/rc.conf <Enter>
host# echo 'icmp_log_redirect="YES"' >> /etc/rc.conf <Enter>
Запрещаем ответы на широковещательные ping-запросы
host# echo 'icmp_bmcastecho="NO"' >> /etc/rc.conf <Enter>
Очищаем каталог /tmp при каждой загрузке
host# echo 'clear_tmp_enable="YES"' >> /etc/rc.conf <Enter>
Запрещаем обновление файла /etc/motd при каждой загрузке
host# echo 'update_motd="NO"' >> /etc/rc.conf <Enter>
Не принимаем пакеты с одновременно установленными флагами SYN и FIN
host# echo 'tcp_drop_synfin="YES"' >> /etc/rc.conf <Enter>
Увеличиваем число отображаемых строк на экране
host# echo 'allscreens_flags="80x50"' >> /etc/rc.conf <Enter>
Включаем межсетевой экран IPFW
host# echo 'firewall_enable="YES"' >> /etc/rc.conf <Enter>
host# echo 'firewall_script="/etc/ipfw.conf"' >> /etc/rc.conf <Enter>
host# echo 'firewall_logging="YES"' >> /etc/rc.conf <Enter>
11. Создадим скрипт для запуска межсетевого экрана
host# touch /etc/ipfw.conf <Enter>
host# chmod 0700 /etc/ipfw.conf <Enter>
Добавим необходимые правила.
host# echo '#\!/bin/sh' >> /etc/ipfw.conf <Enter>
Сброс всех правил
host# echo 'ipfw -f flush' >> /etc/ipfw.conf <Enter>
Включить сохранение состояния соединения
host# echo 'ipfw add check-state' >> /etc/ipfw.conf <Enter>
Разрешим весь трафик через localhost
host# echo 'ipfw add allow all from any to 127.0.0.1 via lo0' >> /etc/ipfw.conf <Enter>
host# echo 'ipfw add allow all from 127.0.0.1 to any via lo0' >> /etc/ipfw.conf <Enter>
Разрешаем исходящий PING
host# echo 'ipfw add allow icmp from me to any icmptypes 8' >> /etc/ipfw.conf <Enter>
host# echo 'ipfw add allow icmp from any to me icmptypes 0' >> /etc/ipfw.conf <Enter>
Разрешаем входящий PING
host# echo 'ipfw add allow icmp from any to me icmptypes 8' >> /etc/ipfw.conf <Enter>
host# echo 'ipfw add allow icmp from me to any icmptypes 0' >> /etc/ipfw.conf <Enter>
Разрешаем обращения к DNS (перед cut и после resolv.conf - обратные апострофы!)
host# echo 'ipfw add allow udp from me to `cut -f 2 /etc/resolv.conf` 53' >> /etc/ipfw.conf <Enter>
host# echo 'ipfw add allow udp from `cut -f 2 /etc/resolv.conf` 53 to me' >> /etc/ipfw.conf <Enter>
Разрешаем обращения к серверам NTP
host# echo 'ipfw add allow udp from me to any 123' >> /etc/ipfw.conf <Enter>
host# echo 'ipfw add allow udp from any 123 to me' >> /etc/ipfw.conf <Enter>
Разрешаем входящие соединения SSH, HTTP и HTTPS
host# echo 'ipfw add allow tcp from any to me 22 setup keep-state' >> /etc/ipfw.conf <Enter>
host# echo 'ipfw add allow tcp from any to me 80 setup keep-state' >> /etc/ipfw.conf <Enter>
host# echo 'ipfw add allow tcp from any to me 443 setup keep-state' >> /etc/ipfw.conf <Enter>
Добавляем правило для Webmin (управление компьютером через web-ориентированный интерфейс):
host# echo 'ipfw add allow tcp from any to me 10000 setup keep-state' >> /etc/ipfw.conf <Enter>
Разрешаем исходящие TCP соединения
host# echo 'ipfw add allow tcp from me to any setup keep-state' >> /etc/ipfw.conf <Enter>
Запретить все остальные пакеты и писать в журнал
host# echo 'ipfw add deny log all from any to any via any' >> /etc/ipfw.conf <Enter>
12. Включаем автоматическую загрузку межсетевого экрана
host# echo 'ipfw_load="YES"' >> /boot/loader.conf <Enter>
13. Перезагружаем систему и проверяем, что правила загрузились
host# shutdown -r now <Enter>
Входим в систему как пользователь root (если подключаемся через SSH-клиент, то под именем созданного в п.4 пользователя, а потом выполняем sudo -s):
login: root <Enter>
Password: <ВВОДИМ ПАРОЛЬ ПОЛЬЗОВАТЕЛЯ root><Enter>
Aug 19 00:18:25 host login: ROOT LOGIN (root) ON ttyv0
Copyright (c) 1992-2012 The FreeBSD Project.
Copyright (c) 1979, 1980, 1983, 1986, 1988, 1989, 1991, 1992, 1993, 1994
The Regents of the University of California. All rights reserved.
FreeBSD 8.3-RELEASE (GENERIC) #0: Mon Apr 9 21:23:18 UTC 2012
host# ipfw list <Enter>
00100 check-state
00200 allow ip from any to 127.0.0.1 via lo0
00300 allow ip from 127.0.0.1 to any via lo0
00400 allow icmp from me to any icmptypes 8
00500 allow icmp from any to me icmptypes 0
00600 allow icmp from any to me icmptypes 8
00700 allow icmp from me to any icmptypes 0
00800 allow udp from me to 10.1.16.1 dst-port 53
00900 allow udp from 10.1.16.1 53 to me
01000 allow udp from me to any dst-port 123
01100 allow udp from any 123 to me
01200 allow tcp from any to me dst-port 22 setup keep-state
01300 allow tcp from any to me dst-port 80 setup keep-state
01400 allow tcp from any to me dst-port 443 setup keep-state
01500 allow tcp from any to me dst-port 10000 setup keep-state
01600 allow tcp from me to any setup keep-state
01700 deny log ip from any to any
65535 deny ip from any to any
helpdesk#
14. Добавим несколько полезных строк в файл /etc/sysctl.conf:
Не отвечать на попытки подключения к закрытым портам (спасет от некоторых видов DoS-атак и затруднит сканирование портов)
host# echo 'net.inet.tcp.blackhole=2' >> /etc/sysctl.conf <Enter>
host# echo 'net.inet.udp.blackhole=1' >> /etc/sysctl.conf <Enter>
Защитим SSH-сервер от брутфорс-атак:
host# echo "MaxStartups 5:50:10" >> /etc/ssh/sshd_config <Enter>
Если вы подключены через SSH-клиент, то лучше перегрузить устанавливаемый компьютер командой host#
host# shutdown -r now <Enter>
и потом подключиться к нему заново. Если вы работаете на консоли, то:
host# /etc/rc.d/sshd restart <Enter>
Теперь SSH-сервер будет отбрасывать 50% новых подключений в случае, если будет произведено пять неправильных регистраций. Когда их станет десять, сервер перестанет отвечать вовсе.
15. Чтобы отключить поддержку IPV6 в устанавливаемых пакетах, добавим строку в файл /etc/make.conf
host# echo 'WITHOUT_IPV6=yes' >> /etc/make.conf <Enter>
16. Получим самый свежий срез портов, не содержащий устаревшего дырявого ПО
host# portsnap fetch extract <Enter>
...
<очень длинный вывод>
...
Building new INDEX files... done.
host#
17. Обновляем базовую систему:
host# freebsd-update fetch <Enter>
...
<опять длинный вывод>
...
--More--(byte 422) <БУДЕТ НЕСКОЛЬКО ПОДОБНЫХ СТРОК: НАЖАТЬ ПРОБЕЛ НЕСКОЛЬКО РАЗ>
...
/var/db/mergemaster.mtree
host# freebsd-update install <Enter>
Installing updates... done.
Перезагружаем систему
host# shutdown -r now <Enter>
18. После того как порты и система будут обновлены, установим в систему инструмент rkhunter, нужный для отлова руткитов, которые могут быть установлены в систему в будущем.
Входим в систему как пользователь root (если подключаемся через SSH-клиент, то под именем созданного в п.4 пользователя, а потом выполняем sudo -s):
login: root <Enter>
Password: <ВВОДИМ ПАРОЛЬ ПОЛЬЗОВАТЕЛЯ root><Enter>
Aug 19 00:18:25 host login: ROOT LOGIN (root) ON ttyv0
Copyright (c) 1992-2012 The FreeBSD Project.
Copyright (c) 1979, 1980, 1983, 1986, 1988, 1989, 1991, 1992, 1993, 1994
The Regents of the University of California. All rights reserved.
FreeBSD 8.3-RELEASE (GENERIC) #0: Mon Apr 9 21:23:18 UTC 2012
host# cd /usr/ports/security/rkhunter <Enter>
host# make install clean <Enter>
Во всех окнах выбора опций нажимаем "OK".
После установки обновим хэш директорий:
host# rehash <Enter>
Отредактируем в редакторе ee конфигурационный файл /usr/local/etc/rkhunter.conf так, чтобы опция MAIL-ON-WARNING содержала email, на который следует слать сообщения об обнаруженных аномалиях.
Заставим инструмент проверить себя на обновления:
host# rkhunter --update <Enter>
После этого создадим снимок системных файлов, который будет использоваться в качестве эталона во время поиска руткитов:
host# rkhunter --propupd <Enter>
Далее добавим в файл /etc/periodic.conf две строки, благодаря которым проверки обновлений и системы будут происходить каждый день:
host# echo 'daily_rkhunter_update_enable="YES"' >> /etc/periodic.conf <Enter>
host# echo 'daily_rkhunter_check_enable="YES"' >> /etc/periodic.conf <Enter>
Все, теперь все сообщения о подозрительной системной активности будут помещаться в лог /var/log/rkhunter.log и отсылаться на указанный в конфигурационном файле email.
19. Далее настроим cron на синхронизацию системных часов каждые два часа (пробелы вставлены с строку, чтобы она была отформатирована так же, как файл /etc/crontab):
host# echo "0 2 * * * root /usr/sbin/ntpdate -bs pool.ntp.org" >> /etc/crontab <Enter>
и перезапустим cron
host# /etc/rc.d/cron restart <Enter>
20. устанавливаем файловый менеджер mc:
host# cd /usr/ports/misc/mc <Enter>
host# make install clean <Enter>
Во всех окнах настройки опций нажимаем "OK"
После установки обновим хэш директорий:
host# rehash <Enter>
Система (F) готова к установке, собственно, AMP.
ЗЫ: Для повышения надежности и производительности неплохо было бы:
- пересобрать ядро;
- настроить ротацию логов;
- сделать программный RAID-1 на базе GEOM (понадобится второй жесткий диск);
- сконфигурировать отказоустойчивую сеть на базе LAGG (понадобится вторая сетевая карта).
Но, рассмотрение данных настроек выходит за границы статьи цель которой - подробное описание установки FAMP для человека не знакомого с UNIX.