Вход на сайт
Навигация
- Cisco
- FreeBSD
- Colorize - подсвечивание ключевых слов
- Munin — мониторинг сервера на основе FreeBSD
- Postfix + Postgrey. Небольшой пример того, как можно бороться со спамом.
- Roudcube. Установка и настройка.
- VPN между FreeBSD и Windows. Установка mpd4.
- Блокируем TeamViewer
- Выполнение mount из-под прав обычного пользователя
- Добавление базы и пользователя в MySQL
- Как узнать серийный номер винчестера в FreeBSD
- Модули Apache22 (Apache22 modules)
- Мониторинг винтчестеров (HDD/жестких дисков) с помощью SMART (smartmontools)
- Мониторинг загрузки канала (MRTG)
- Мониторинг загрузки сетевых интерфейсов в реальном времени
- Мониторинг нагрузки процессора (SNMP MRTG CPU Monitoring)
- Настройка DNS сервера named
- Настройка сервера времени NTP
- Настройка фаервола (firewall ipfw) на ОС FreeBSD
- Обновление FreeBSD. Краткий мануал.
- Обновление портов (CVSup)
- Обновление портов. Portupgrade.
- Организация VPN между 3-мя офисами
- Повышаем безопасность FreeBSD
- Проблема после обновление SpamAssassin
- Работа с .htaccess и .htpasswd
- Скрипты
- Тестирование MySQL
- Управление дуплексным режимом и скоростью подключения к порту.
- Установка MySQL сервера
- Установка связки Apache22+php5+mysql5
- Шейпер на ipfw
- Подсказки по редактированию
Повышаем безопасность FreeBSD
Zmej чт, 29/12/2011 - 10:29
Несмотря на то, что FreeBSD по праву считается одной из самых безопасных ОС в мире, тем не менее дам несколько советов, как эту самую безопасность улучшить. Для начала, я не буду рассказывать про пользу обновлений операционной системы, обновление ПО, правильная настройка фаервола и т.д. и т.п. Это Вы и так должны понимать.
Для начала, поиграемся с sysctl.conf
vi /etc/sysctl.confnet.inet.tcp.blackhole=2 # Это превращает машину в черную дыру при попытке подключиться к портам, которые не обслуживаются вашим сервером.net.inet.udp.blackhole=1kern.ps_showallprocs=0 # только пользователь root может видеть все запущенные процессы, это работает только для 4киkern.ipc.somaxconn=1024 - увеличивает размер очереди для сокетов, чем помогает предотвратить SYN-атаку, когда очередь сокета переполняется некорректными попытками соединений.net.inet.icmp.drop_redirect=1 - уничтожать icmp-датаграммы переадресацииnet.inet.icmp.log_redirect=1 - записывать в журнал событий icmp-датаграммы с указанием переадресации# Запрещает юзерам видеть процессы соседа&rootsecurity.bsd.see_other_uids=0# Запрещает видеть групповые процессыsecurity.bsd.see_other_gids=0# Указываем размер очереди сокетаkern.ipc.somaxconn=1024# Отрубаем ip-редиректыnet.inet.icmp.drop_redirect=1net.inet.icmp.log_redirect=1net.inet.ip.redirect=0# Назначаем размеры буфера для TCP-подключений. Если на сервер ожидается большая# нагрузка, и у него много памяти – лучше поставить 65535. Значение выше 65535# не рекомендуется.net.inet.tcp.sendspace=32768net.inet.tcp.recvspace=32768# Обновляем ARP-таблицу каждые 20 минутnet.link.ether.inet.max_age=1200# Запрещаем отвечать на все лишние запросы.net.inet.icmp.maskrepl=0net.inet.ip.sourceroute=0net.inet.ip.accept_sourceroute=0net.inet.icmp.bmcastecho=0security.bsd.see_other_uids=0security.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 /rootchmod 0600 /etc/syslog.confchmod 0600 /etc/rc.confchmod 0600 /etc/newsyslog.confchmod 0600 /etc/hosts.allowchmod 0600 /etc/login.confchmod 0700 /usr/home/*
Console Access (доступ к консоли)
Запомните что хоть мы и блокируем доступ от неавторизованного доступа в однопользовательском режиме, это не обеспечивает полную защиту вашего сервера. Некто с плохими намерениями может снять жесткий диск с вашего сервера и установить его на другом компьютере. Если сервер не защищен физически, то никакие программные настройки, вас не спасут от взлома вашей системы. Изменение прав доступа к первой консоли означает что вы не сможете войти в систему в однопользовательском режиме, не зная пароля пользователя
vi /etc/ttysconsole none unknown off insecure # запрашивать пароль пользователя root в однопользовательском режиме.ttyv0 “/usr/libexec/getty Pc” cons25 on insecure# Virtual terminalsttyv1 “/usr/libexec/getty Pc” cons25 on insecurettyv2 “/usr/libexec/getty Pc” cons25 on insecurettyv3 “/usr/libexec/getty Pc” cons25 on insecurettyv4 “/usr/libexec/getty Pc” cons25 on insecurettyv5 “/usr/libexec/getty Pc” cons25 on insecurettyv6 “/usr/libexec/getty Pc” cons25 on insecurettyv7 “/usr/libexec/getty Pc” cons25 on insecure
Некоторые данные, которые необходимы в rc.conf
vi /etc/rc.confinetd_enable=”NO” # Better ways to run your daemonssyslogd_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” # Если не используется NFSicmp_bmcastecho=”NO” # Предотвращает springboarding и smurf атаки, запрещая серверу отвечать# на широковещательные ping-пакеты.fsck_y_enable=”YES” # При ошибках файловой системы на этапе загрузки утилита fsck будет# запущена с флагом -y (man fsck)update_motd=”NO” #Не обновлять файл с сообщением дня /etc/motdtcp_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 адреса.
Вот, собственно и все. Если Вы знаете еще что то интересное, делитесь.
З.Ы. Вышеуказанное не мое (или мое). Нашел где то в инете давно. Вот решил поделится.
- Войдите чтобы оставить комментарии
Новые пользователи
- Zmej
Сейчас на сайте
Пользователей онлайн: 0.

Последние комментарии