Документация по ОС FreeBSD Пятница, 19.04.2024, 01:30
Приветствую Вас Гость | RSS
Меню сайта

Категории каталога
Мои статьи [0]
Установка и настройка [281]
X Window [25]
Man pages [30]
Ports & Packages [26]
cvs [18]
Multimedia [20]
Нововсти в мире Unix [0]
RFC [4]
RFC (Request for Comments, Запрос на комментарии) - серия документов, публикуемая сообществом исследователей и разработчиков, руководствующихся практическими интересами, в которой описывается набор протоколов и обобщается опыт функционирования Интернет.
Безопасность [52]
Работа с железом [58]
Книги по FreeBSD [17]
Сеть [505]
Программирование [40]
FireWall [58]
Темы экзамена BSDA [14]
Официальные темы экзамена BSDA, включая подробноые описания и советы по обучению.

Главная » Статьи » Безопасность

Повышаем безопасность FreeBSD [2012]
Несмотря на то, что FreeBSD по праву считается одной из самых безопасных ОС в мире, тем не менее дам несколько советов, как эту самую безопасность улучшить.
 
Для начала, я не буду рассказывать про пользу обновлений операционной системы, обновление ПО, правильная настройка фаервола и т.д. и т.п. Это Вы и так должны понимать.
 
Для начала, поиграемся с sysctl.conf
 
vi /etc/sysctl.conf

net.inet.tcp.blackhole=2 # Это превращает машину в черную дыру при попытке подключиться к портам, которые не обслуживаются вашим сервером.

net.inet.udp.blackhole=1
kern.ps_showallprocs=0 # только пользователь root может видеть все запущенные процессы, это работает только для 4ки

kern.ipc.somaxconn=1024 — увеличивает размер очереди для сокетов, чем помогает предотвратить SYN-атаку, когда очередь сокета переполняется некорректными попытками соединений.
 
net.inet.icmp.drop_redirect=1 — уничтожать icmp-датаграммы переадресации
 
net.inet.icmp.log_redirect=1 — записывать в журнал событий icmp-датаграммы с указанием переадресации
 
# Запрещает юзерам видеть процессы соседа&root
security.bsd.see_other_uids=0
# Запрещает видеть групповые процессы
security.bsd.see_other_gids=0
# Указываем размер очереди сокета
kern.ipc.somaxconn=1024
# Отрубаем ip-редиректы
net.inet.icmp.drop_redirect=1
net.inet.icmp.log_redirect=1
net.inet.ip.redirect=0
 
# Назначаем размеры буфера для TCP-подключений. Если на сервер ожидается большая
# нагрузка, и у него много памяти – лучше поставить 65535. Значение выше 65535
# не рекомендуется.
net.inet.tcp.sendspace=32768
net.inet.tcp.recvspace=32768
# Обновляем ARP-таблицу каждые 20 минут
net.link.ether.inet.max_age=1200
# Запрещаем отвечать на все лишние запросы.
net.inet.icmp.maskrepl=0
net.inet.ip.sourceroute=0
net.inet.ip.accept_sourceroute=0
net.inet.icmp.bmcastecho=0
 
security.bsd.see_other_uids=0
security.bsd.see_other_gids=0

Для увеличения безопасности машин, на которые есть шелл у других пользователей, можно сделать так, чтобы каждому пользователю показывались только его процессы, а чужие он невидел. На 4.11 такого пункта нет, в 6.0 есть. Пятую ветку надо проверять. По дефолту значение `1` — все всё видят. Если поставить `0` — то только свои процессы.
 
Некоторые полезные sysctl переменные для FreeBSD

 security.bsd.* — управление моделью безопасности
* security.bsd.see_other_uids, security.bsd.see_other_gids — если 1, то пользователи (группы) могут видеть чужие процессы, сокеты и т.д. через ps, netstat, procfs;
 * security.bsd.conservative_signals — если 1, то некоторые сигналы запрещается посылать setuid/setgid процессам;
 * security.bsd.unprivileged_proc_debug — если 1, то пользовательский процесс можно отлаживать через ptrace, procfs, ktrace и т.д..
 * security.bsd.unprivileged_read_msgbuf — если 1, то пользовательский процесс может читать из системного консольного буфера сообщений;
 * security.bsd.hardlink_check_uid, security.bsd.hardlink_check_gid — если 1, то пользователи могут делать hardlink только на собственные файлы;
 * security.bsd.unprivileged_get_quota — если 1, пользователи могут просматривать информацию по установленным для них квотам.
 * vfs.usermount — если 1, то непривилегированный пользователь может монтировать и размонтировать FS, если для устройства выставлены «rw» права и пользователь является владельцем точки монтирования;
 
security.jail.* — ограничения для jail
 * security.jail.set_hostname_allowed — если 1, то внутри jail можно поменять имя хоста;
 * security.jail.socket_unixiproute_only — если 1 , то сокет в jail можно создать только для доменов PF_LOCAL, PF_INET или PF_ROUTE, иначе, возвращается ошибка;
 * security.jail.sysvipc_allowed — если 1, то то в jail можно получить доступ к глобальному System V IPC;
 * security.jail.getfsstatroot_only — если 1, то в jail можно получить информацию (df)только о той файловой системе на которой создан jail;
 * security.jail.allow_raw_sockets — если 1, то в jail можно создавать raw sockets;
 * security.jail.chflags_allow — если 1, то процессы в jail могут модифицировать флаги ФС.
 
IPFW
 * net.link.ether.bridge_ipfw — если 1 и ядро собрано с опциями IPFIREWALL и BRIDGE, то позволяет использовать ipfw для трафика внутри бриджа;
 * net.link.ether.ipfw — если 1, то ipfw2 позволяет фильтровать по MAC адресам;
 * net.inet.ip.fw.autoinc_step — задается число на которое увеличивается счетчик при добавления нового ipfw правила, когда явно не указан его номер;
 * net.inet.ip.fw.debug — если 1, то в логи помещается дополнительная отладочная информация по работе ipfw;
 * net.inet.ip.fw.verbose — если 0, то не отображать работу «log» правил в syslog;
 * net.inet.ip.fw.one_pass — если 1, то просмотр правил ipfw прекращается сразу после подпадание под queue или pipe правило. Если 0, то продолжается обработка далее идущих правил;
 
ICMP, соединение.
 * net.inet.icmp.icmplim — задается максимальное число ICMP «Unreachable» и TCP RST пакетов, которое может быть отправлено в секунду, net.inet.icmp.icmplim_output=0 позволяет не отражать в логах факты превышения лимита;
 * net.inet.tcp.icmp_may_rst, если 1, то TCP соединения со статусом SYN_SENT, могут быть оборваны посредством сообщения «ICMP unreachable»;
 * net.inet.ip.redirect — если 0, то нет реакции на ICMP REDIRECT пакеты;
 * net.inet.icmp.log_redirect — если 1, то все ICMP REDIRECT пакеты отражаются в логе;
 * net.inet.icmp.drop_redirect — если 1, то ICMP REDIRECT пакеты игнорируются;
 * net.inet.tcp.icmp_may_rst — если 1, то игнорируются ICMP сообщения от блокировки пакета по пути;
 * net.inet.icmp.bmcastecho — для защиты от SMURF атак (ICMP echo request на broadcast адрес) нудно поставить 0;
 
Тюнинг сетевой подсистемы, борьба с DoS атаками
 * net.inet.tcp.log_in_vain, net.inet.udp.log_in_vain — если 1, отражаем в логе попытки соединения к портам, для которых нет активных сервисов;
 * net.inet.tcp.blackhole — если 1, то SYN пакеты пришедшие на порты для которых нет активных сервисов, остаются без RST ответа, если 2, то на любые пакеты нет ответа (затрудняет сканирования портов);
 * kern.ipc.nmbclusters — если по «netstat -m» mbufs в «peak» приближается к «max», то число сетевых буферов нужно увеличить (kern.ipc.nmbclusters=N в /boot/locader.conf);
 * net.inet.ip.forwarding — если 1, то машина может форвадить пакеты между интерфейсами;
 * net.inet.tcp.sack.enable — если 1, то включен TCP Selective Acknowledgements (SACK, RFC 2018) позволяющий увеличить производительность системы в ситуации большой потери пакетов;
 * net.link.ether.inet.max_age — время жизни записи в IP route кэше, рекомендуется уменьшить для ослабления эффекта от DoS атак через ARP флуд;
 
Оборудование и системная информация
 * dev.cpu.0.freq_levels — выдает список поддерживаемых частот, на которые можно переключить CPU, путем указание нужной частоты через dev.cpu.0.freq;
 * hw.snd.maxautovchans, hw.snd.pcm0.vchans — задается число виртуальных звуковых каналов, для каждого из которых может быть отдельный источник звука (на выходе они будут смикшированы);
 * kern.boottime — время последней загрузки системы;
 * kern.disks — список дисков в системе;
 * kern.geom.debugflags, для работы boot0cfg и подобных утилит нужно установить в 16;
 
Изменение и тюнинг системных ограничений
 * kern.coredump — если 0, то при крахе приложения не будут создаваться core файлы, формат имени и путь для которых задается через kern.corefile (например: /tmp/%U.%N.core). kern.sugid_coredump=0 позволяет запретить генерацию core suid/sgid процессами;
 * kern.maxfiles — максимально допустимое число открытых файлов (файловых дескрипторов), текущее число открытых файлов можно посмотреть через kern.openfiles;
 * kern.maxprocperuid — максимально допустимое число процессов, которое может быть запущено из-под одного пользователя;
 * kern.maxvnodes — максимальное число vnode для кеширования дисковых операций, текущее значение можно посмотреть через vfs.numvnodes или debug.numvnodes/debug.freevnodes;
 
SMP (FreeBSD 5)
 * kern.smp.maxcpus (machdep.smp_cpus) — максимальное число процессоров, поддерживаемое текущей сборкой ядра;
 * kern.smp.active, kern.smp.disabled — число активных и выключенных CPU;
 * kern.smp.cpus (machdep.smp_active) — сколько CPU в online;
 * kern.smp.forward_signal_enabled — включить возможность мгновенной пересылки сигнала для процессов выполняемых в данный момент времени на разных CPU;
 * kern.smp.forward_roundrobin_enabled;
 
ARP
 * net.link.ether.inet.log_arp_movements — отражать в логе все широковещательные ARP пакеты с хостов MAC адрес которых отсутствует в локальном ARP кэше;
 * net.link.ether.inet.log_arp_wrong_iface — отражать в логе все ARP пакеты пришедшие с неправильного интерфейса;
 
Не забываем перегружаться:
 
/etc/rc.d/sysctl restart

Теперь поиграемся с правами доступа к крону
 
chmod 0600 /etc/crontab # только пользователь root должен иметь доступ к файлу настройки cron
 
Права доступа к файлам.
 
При помощи команды chmod 600, мы разрешаем доступ только пользователю root на запись и чтение файла. При помощи команды chmod 700, мы также даем возможность пользователю root возможность запускать файл.
 
chmod 0700 /root
chmod 0600 /etc/syslog.conf
chmod 0600 /etc/rc.conf
chmod 0600 /etc/newsyslog.conf
chmod 0600 /etc/hosts.allow
chmod 0600 /etc/login.conf
chmod 0700 /usr/home/*
 
Console Access (доступ к консоли)
 
Запомните что хоть мы и блокируем доступ от неавторизованного доступа в однопользовательском режиме, это не обеспечивает полную защиту вашего сервера. Некто с плохими намерениями может снять жесткий диск с вашего сервера и установить его на другом компьютере. Если сервер не защищен физически, то никакие программные настройки, вас не спасут от взлома вашей системы. Изменение прав доступа к первой консоли означает что вы не сможете войти в систему в однопользовательском режиме, не зная пароля пользователя
 
vi /etc/ttys
 console none unknown off insecure # запрашивать пароль пользователя root в однопользовательском режиме.
 ttyv0 "/usr/libexec/getty Pc” cons25 on insecure
 # Virtual terminals
 ttyv1 "/usr/libexec/getty Pc” cons25 on insecure
 ttyv2 "/usr/libexec/getty Pc” cons25 on insecure
 ttyv3 "/usr/libexec/getty Pc” cons25 on insecure
 ttyv4 "/usr/libexec/getty Pc” cons25 on insecure
 ttyv5 "/usr/libexec/getty Pc” cons25 on insecure
 ttyv6 "/usr/libexec/getty Pc” cons25 on insecure
 ttyv7 "/usr/libexec/getty Pc” cons25 on insecure
 
Некоторые данные, которые необходимы в rc.conf
 
vi /etc/rc.conf

inetd_enable=”NO” # Better ways to run your daemons
syslogd_enable=”YES” # Конечно мы хотим вести регистрацию событий. Если вы планируете настроить

# удаленную регистрацию событий, тогда пропустите следующую строку.
# Если файлы регистрации событий будут расположены на локальном диске,
# убедитесь что у вас смонтирован раздел /var.
syslogd_flags=”-ss” # Этим мы закроем 514 udp порт если мы не хотим использовать удаленную

# регистрацию событий на или с этого сервера. Естественно не нужно добавлять
# эту строчку, если вы планируете настроить удаленную регистрацию событий.
icmp_drop_redirect=”YES” # Отключаем прием и отправку переадресовующих ICMP пакетов.
icmp_log_redirect=”YES” # Регистрировать переадресовующие ICMP пакеты в журнальном файле
clear_tmp_enable=”YES” # Очищать директорию /tmp при загрузке.
portmap_enable=”NO” # Если не используется NFS
icmp_bmcastecho=”NO” # Предотвращает springboarding и smurf атаки, запрещая серверу отвечать

# на широковещательные ping-пакеты.
fsck_y_enable=”YES” # При ошибках файловой системы на этапе загрузки утилита fsck будет

# запущена с флагом -y (man fsck)
update_motd=”NO” #Не обновлять файл с сообщением дня /etc/motd
tcp_drop_synfin=”YES” # Отбрасывать synfin пакеты. Смотри ниже, необходимые изменения в ядре.
log_in_vain=”YES” # Установите эту опцию, если вы хотите записывать все попытки подключения

# к закрытым портам вашего сервера.
sshd_enable=”YES” # Это позволит сделать удаленный доступ к серверу более защищенным.

Если у Вас работает веб сервер, то тогда следующее правило Вам просто необходимо:
 
${fwcmd} add allow log ip from any to any 80 setup limit src-addr 60
 
Данное правило ограничит поличество подключений с одного IP адреса.
 
Вот, собственно и все. Если Вы знаете еще что то интересное, делитесь.
 
З.Ы. Вышеуказанное не мое (или мое). Нашел где то в инете давно. Вот решил поделится.


Источник: http://zmej.org.ua/%d0%bf%d0%be%d0%b2%d1%8b%d1%88%d0%b0%d0%b5%d0%bc-%d0%b1%d0%b5%d0%b7%d0%be%d0%bf%d0%b0%d1%81%d0%bd%d0%
Категория: Безопасность | Добавил: oleg (26.02.2012) | Автор: zmej
Просмотров: 1662 | Рейтинг: 4.0/1 |
Всего комментариев: 0
Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]
Форма входа

Beastie

Друзья сайта

Статистика

Онлайн всего: 1
Гостей: 1
Пользователей: 0
links

Copyright MyCorp © 2024