Category Archives: freebsd

updating freebsd box without internet connection

To update freebsd box, isolated from internet:

1. portupgrade -arRFO | grep "fetch: ftp://ftp6.ru" | sort | uniq | sed 's/.*h: (.*):.*/1/' > fetch.txt
On machine with internet connection run:
2. wget -x -i fetch.txt

Still, I have’nt figured out what to do with “pkgdb -F” required downloads in such circumstances.

Handling Filenames with Spaces in Bash

http://www.macgeekery.com/tips/cli/handling_filenames_with_spaces_in_bash

If you set IFS to $’n’ then it will only split on newlines, not spaces. And you can enclose the entire thing in a subshell using ( foo ) to scope IFS to just that for loop.

Example:

(
IFS=$’n’
for file in $files
do
echo “$file” rocks.
done
)

wget download manager script

http://www.mtdev.com/2002/05/linux-wget

#!/usr/local/bin/bash

cd /shared/archive/downloads/
PATH=/bin:/usr/bin

line=1
max_proc=5
list_file=”/shared/archive/downloads/todo.txt”
prog=”/usr/local/bin/wget”

while true
do
while true
do
proc=`ps -f -U $USER | grep -c $prog`
# grep is in the list too
let proc–

lines=`grep -c “” $list_file`
echo “Proc: $proc / $max_proc Line: $line / $lines”

[[ $proc -ge $max_proc || $line -gt $lines ]] && break

params=`grep -n “” $list_file | grep “^$line:” | sed -e “s/^$line://”`
echo $params | tee -a done.txt archive.txt

# ignore empty lines
if [ “$params” ]; then
$prog -b $params
sleep 3
fi
let line++
done

echo “Waiting…”
sleep 10
done

Некоторые полезные 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 процесс

dante socks

/usr/ports/net/dante

пример конфигурации

logoutput: /var/log/socks/socksd.log
internal: re0 port = 1080
internal: 127.0.0.1 port = 1080
external: rl0
#отрубаю авторизацию. хотя возможно имело смысл использовать.
method: username none
#user.privileged: sockd
#user.notprivileged: sockd
#user.libwrap: sockd
#настройки клиентов: разрешенная подсеть клиента
client pass {
from: 192.168.1.0/24 port 1-65535 to: 0.0.0.0/0
}
client block {
from: 0.0.0.0/0 to: 0.0.0.0/0
log: connect error
}
block {
from: 0.0.0.0/0 to: 127.0.0.0/8
log: connect error
}
#пускаем разрешенных клиентов к аське/мэйл.ру агенту и заносим в лог. на всякий случай
pass {
from: 192.168.1.0/24 to: login.icq.com
log: connect error
}
pass {
from: 192.168.1.0/24 to: 83.69.96.123/32
log: connect error
}
pass {
from: 192.168.1.0/24 to: mra.mail.ru
log: connect error
}
pass {
from: 192.168.1.0/24 to: mrim.mail.ru
log: connect error
}
pass {
from: 192.168.1.0/24 to: .aol.com
log: connect error
}
#это необходимо для какого то приложения. не помню уже точно
pass {
from: 192.168.1.0/24 to: 194.186.55.36/32
log: connect error
}#подсети аськи
pass {
from: 192.168.1.0/24 to: 205.188.0.0/16
protocol: tcp udp
}
pass {
from: 192.168.1.0/24 to: 64.12.0.0/16
protocol: tcp udp
log: connect error
}
#остальных блочим.
block {
from: 0.0.0.0/0 to: 0.0.0.0/0
log: connect error

Valknut

linuxdcpp на freebsd 7.1-prerelease у меня стабильно подвисает при загрузке на этапе “Loading: Hash database”
и это на 2х машинах.
поэтому в качестве альтернативы установил Valknut

Valknut
Русский язык в нем можно подправить добавив одну строчку кода в /usr/src/valknut-0.3.8.1/valknut/main.cpp
Спасибо QT internationalization.
1) открываем искомый файл
2) ищем строку
pApplication = new QApplication(argc, argv);
3) на следующей строке пишем
QTextCodec::setCodecForCStrings ( QTextCodec::codecForName(“CP1251”) );
4) дальше собираем как обычно

mpd5

in rc.conf add:
mpd_flags=”-b -s mpd5″

to log all communications with mpd add a logging entry into /etc/syslog.conf:
!mpd5
*.* /var/log/mpd5.log
then:
touch /var/log/mpd5.log
/etc/rc.d/syslogd restart

dump & restore для клонирования hdd

http://www.freebsd.org/doc/en_US.ISO8859-1/books/faq/disks.html#NEW-HUGE-DISK
копия hdd

/dev/ad2 = новый винт
загружаемся в single user mode
для удобства: set -o emacs
fsck исходный hdd
sysinstall’ом новый винт разбит, загрузчик добавлен;
форматируем разделы нового диска: newfs /dev/ad2s1a
mount -uw /
mkdir -p /usr/backup/root && mount /dev/ad2s1a
все разделы из fstab в ro за исключением /tmp:
mount -ura && mount -uw /tmp

(dump -0f – /)|(cd /mnt/root; restore -rf -)