ftp-proxy в freebsd
Дело было ранней зимой. Требовалось обеспечить доступ из интернета к ftp-серверу в локальной сети. Сперва решил тупо перенаправить на него порт 21 и порты выше 1025, но выглядело это не очень красиво.
В результате было решено поднять на шлюзе прокси-сервер для протокола ftp (ftp-proxy - портированный из openbsd вместе с pf) и настроить его для работы в обратную сторону.
Что нужно сделать:
1. Добавить в файл /etc/inetd.conf строку:
ftp-proxy stream tcp nowait root /usr/libexec/ftp-proxy ftp-proxy -R <local-ftp-server> -S <local-net-if>
где
<local-ftp-server> - ip-адрес внутреннего ftp-сервера,
<local-net-if> - ip-адрес внутреннего интерфейса шлюза.
2. Настроить параметры запуска inetd в /etc/rc.conf:
inetd_enable="YES"
inetd_flags="-wW -c 60 -a 80.xx.yy.zz"
где 80.xx.yy.zz - внешний ip-адрес шлюза.
3. Настроить pf:
rdr on $ext_if proto tcp from any to $ext_ip port ftp tag TRAF_FTP -> 80.xx.yy.zz port 8021
< ... skip ... >
pass in on $ext_if reply-to proto tcp tagged TRAF_FTP flags S/SA keep state
pass out on $ext_if proto tcp from $ext_ip to any flags S/SA user proxy keep state
pass in on $ext_if proto tcp from any to $ext_ip flags S/SA user proxy keep state
pass out on $int_if proto tcp from $int_ip to any flags S/SA user proxy keep state
pass in on $int_if proto tcp from any to $int_ip flags S/SA user proxy keep state
где
$int_if - локальный интерфейс,
$int_ip - ip-адрес локального интерфейса,
$ext_if - внешний интерфейс,
$ext_ip - ip-адрес внешнего интерфейса,
proxy - имя пользователя ftp-proxy.
4. Запустить inetd.
# /etc/rc.d/inetd start
Прокси-сервер может работать в пассивном режиме. Работу в активном режиме не проверял.
Сброс буфера системных сообщений FreeBSD
Сбросить буфер системных сообщений (вывод команды dmesg) можно с помощью sysctl:
# sysctl kern.msgbuf_clear=0
Автор Князь на 15:35 0 комментария(ев) Ссылки на это сообщение
Ярлыки: freebsd, sysctl, заметки
20 Ноябрь 2007 г.
sftp
Раньше для закачивания файлов на сервер изощрялся как мог: ftp на сервере поднимал; на веб-сервере каком-нибудь выкладывал, чтоб потом оттуда скачать. Про SFTP (secured file transfer protocol) я конечно знал, но по необъяснимой мне причине ниразу им не пользовался.
Сегодня таки вспомнил о нем и решил попробовать. Оказалось что им просто пользоваться - почти как FTP. Ничего дополнительно на сервер ставить не нужно, т.к. он работает через SSH-сервер системы.
Синтаксис запуска: $ sftp -h
usage: sftp [-1Cv] [-B buffer_size] [-b batchfile] [-F ssh_config]
[-o ssh_option] [-P sftp_server_path] [-R num_requests]
[-S program] [-s subsystem | sftp_server] host
sftp [[user@]host[:file [file]]]
sftp [[user@]host[:dir[/]]]
sftp -b batchfile [user@]host
Команды sftp:
sftp> ls - смотреть список файлов на удаленном сервере.
sftp> lls - смотреть локальный список файлов.
sftp> lcd - изменить текущий локальный каталог.
sftp> cd - изменить текущий каталог на удаленном сервере.
sftp> put - положить файл на удаленный сервер.
sftp> get - скачать файл с удаленного сервера.
sftp> help - помощь по командам.
Из Windows доступ к серверу по sftp можно получить посредством программы EngInSite DataFreeway.
----------
Самыми качественными считаются натяжные, безшовные потолки из Франции. Однако при недостатке средств вас не разочаруют натяжные потолки отечественного происхождения.
Samba внутри jail + MS AD
На сервере был поднят веб-сервер с сайтом компании и поддерживать его поручили мне. Так как мне очень не хотелось перегонять файлы по FTP туда и обратно, решил поднять сервер Samba и через его шары рулить файлами сайта. И дизайнерам будет проще править дизайн. Чтобы не засорять систему поднял jail для Samba.
Порядок действий внутри созданного jail:
1. cd /usr/ports/net/samba3
2. в make config отметил:
[X] LDAP With LDAP support
[X] ADS With Active Directory support
[X] WINBIND With WinBIND support
[X] UTMP With UTMP accounting support
[X] MSDFS With MSDFS support
[X] POPT With system-wide POPT library
3. И далее установил командой make install.
4. Настроил Kerberos5:
# cat > /etc/krb5.conf
[libdefaults]
default_realm = MY-DOMAIN.LOCAL
dns_lookup_realm = false
dns_lookup_kdc = false
[realms]
MY-DOMAIN.LOCAL = {
kdc = MY-DOMAIN.LOCAL
admin_server = MY-DOMAIN.LOCAL
kpasswd_server = 192.168.0.1
default_domain = my-domain.local
}
[domain_realm]
.my-domain.local = MY-DOMAIN.LOCAL
[logging]
default = FILE:/var/log/kerberos/krb5libs.log
kdc = FILE:/var/log/kerberos/krb5kdc.log
admin_server = FILE:/var/log/kerberos/kadmind.log
Где my-domain.local домен MS Active Directory.
Проверяем:
# kinit root
root@MY-DOMAIN.LOCAL's Password:
kinit: NOTICE: ticket renewable lifetime is 1 week
Если выходит другое сообщение - проверяем файл конфигурации.
4. Файл конфигурации Samba:
# cat > /usr/local/etc/smb.conf
[global]
# Имя домена
workgroup = MY-DOMAIN
realm = MY-DOMAIN.LOCAL
server string = Samba Server
# Машина в Active Directory
security = ads
hosts allow = 192.168.0.
# Принтеры нам не нужны
load printers = no
show add printer wizard = no
log file = /var/log/samba/log.%m
# Контроллеры домена
password server = pdc.my-domain.local bdc.my-domain.local
# Имя samba сервера
netbios name = FILESRV
# IP-адрес jail
bind interfaces only = yes
interfaces = 192.168.0.23/24
auth methods = winbind
idmap uid = 10000-20000
idmap gid = 10000-20000
winbind enum users = Yes
winbind enum groups = Yes
winbind use default domain = Yes
winbind refresh tickets = Yes
case sensitive = No
hide unreadable = Yes
socket options = TCP_NODELAY
dns proxy = no
display charset = koi8-r
unix charset = koi8-r
dos charset = cp866
[homes]
comment = Home Directories
browseable = no
writable = yes
[printers]
comment = All Printers
path = /var/spool/samba
browseable = no
guest ok = no
writable = no
printable = yes
4. Правим /etc/hosts:
192.168.0.23 FILESRV FILESRV.MY-DOMAIN.LOCAL
Иначе машина не войдет в домен.
5. Правим /etc/resolv.conf:
search my-domain.local
nameserver 192.168.0.xxx
Где 192.168.0.xxx ip-адрес DNS Active Directory.
6. Правим /etc/nsswitch.conf:
« ... skip ... »
group: files winbind
passwd: files winbind
« ... skip ... »
7. Вгоняем машину в домен:
# net ads join -U root
Если машина вошла в домен, на всякий случай проверяем:
# wbinfo -u
« ... Список пользователей домена ... »
# wbinfo -g
« ... Список групп домена ... »
8. Запускаем Samba:
# /usr/local/etc/rc.d/samba start
---------
Умрет ли ипотека в России так и не родившись, или же у направления жилищного кредитования есть перспективы для роста? Ответ на данный вопрос ищите на ипотечном портале ipoinf.ru.
Очень красивые бесплатные обои с природными видами, животными и привлекательными девушками можно найти на Yakako.ru.
Хотите наведаться на автобазар в Ровно, чтобы продать свою «ласточку»? Незачем тратить свое время и бензин – просто разместите объявление на портале купли-продажи авто Rulevoy.com.ua!
Монтирование разделов при запуске Jail
В rc.conf есть два интересных параметра, позволяющих при запуске jail монтировать необходимые разделы:
jail_<jail_name>_mount_enable="YES"
jail_<jail_name>_fstab="/path/to/fstab/file"
jail_<jail_name>_mount_enable разрешает монтировать разделы по списку в файле, указанного в jail_<jail_name>_fstab.
Формат файла идентичен формату /etc/fstab. Все пути к монтируемым точкам внутри jail задаются относительно корня основной системы.
Монтирование можно применить для усиления защиты jail при их взломе. Например, в случае если система в jail будет скомпрометирована, то злоумышленник не сможет подменить системные утилиты т.к. папки /usr/bin или /usr/lib примонтированы только чтения и не могут быть изменены.
Для этого нужно:
1. Создать папки:
? для jail-машин /opt/jail
? папку для конфигурационных файлов /opt/jail/conf
? папку Base для базового jail /opt/jail/Base
2. В папке Base создать базовый jail и настроить его (Например установить дополнительные и настроить пакеты perl5/sudo/etc, прописать DNS сервер).
3. Потом воспользоваться приведенным ниже скриптом new-jail.conf, предварительно изменив переменные J и JAIL_EXAMPLE (если у вас другое размещение jail).
Запуск скрипта от имени пользователя root:
# JAIL=New-jail-name ./new-jail.sh
Скрипт создает точки монтирования папок и копирует etc, var и usr/local из базового скрипта в новый jail. Потом в /opt/jail/conf создается файл в формате fstab и производится попытка записи параметров jail в /etc/rc.conf. Если /etc/rc.conf недоступен для записи, скрипт выводит список параметров.
Скрипт new-jail.conf:
#!/bin/sh
J="/opt/jail"
JAIL=${JAIL:?'$JAIL is not set'}
JAIL_LOWER="`echo $JAIL | /usr/bin/tr A-Z a-z`"
JAILDIR="$J/$JAIL"
JAIL_EXAMPLE="$J/Base"
DIR_EMPTY="dev proc media cdrom mnt boot rescue root usr usr/home usr/src usr/ports"
DIR_MOUNT="bin lib libexec sbin usr/bin usr/include usr/lib usr/libdata usr/libexec usr/sbin usr/share"
#Jail directory
echo -n "Checking $JAILDIR directory... "
if [ ! -e $JAILDIR ];
then {
/bin/mkdir -p $JAILDIR;
echo "created.";
}
else echo "already exists.";
fi;
# Empty directories
echo -n "Creating empty directories: $DIR_EMPTY... "
for dir in $DIR_EMPTY; do /bin/mkdir -p $JAILDIR/$dir; done;
echo "ok.";
# Mount points
echo -n "Creating mount points: $DIR_MOUNT... "
/usr/bin/touch $J/conf/$JAIL.fstab
echo "# Generated on `/bin/date`" >> $J/conf/$JAIL.fstab
for dir in $DIR_MOUNT;
do {
/bin/mkdir -p $JAILDIR/$dir;
printf "$JAIL_EXAMPLE/$dir\t$JAILDIR/$dir\tnullfs\tro\t0\t0\n" >> $J/conf/$JAIL.fstab;
} done;
echo "ok.";
echo "The fstab file created: $J/conf/$JAIL.fstab"
# Symbolic links
/bin/ln -s usr/home $JAILDIR/home
# Temporary directory
echo -n "Creating tmp... "
/bin/mkdir $JAILDIR/tmp
/bin/chmod ugo=rwx $JAILDIR/tmp
echo "ok.";
# Directories from $JAIL_EXAMPLE
echo -n "Copying files... "
/bin/cp -pR $JAIL_EXAMPLE/etc $JAILDIR/
/bin/cp -pR $JAIL_EXAMPLE/var $JAILDIR/
/bin/cp -pR $JAIL_EXAMPLE/usr/local $JAILDIR/usr/
/bin/rm -f $JAILDIR/var/{tmp,run}/*
for i in `/usr/bin/find -E $JAILDIR/var/log -type f \
-and -regex ".*\.[0-9]+(\..*|$)" -print`;
do /bin/rm -f $i; done;
for i in `/usr/bin/find $JAILDIR/var/log -type f -print`;
do /usr/bin/touch /dev/null > $i; done;
echo "ok.";
echo
echo The jail \'$JAIL\' created.
echo
if [ -w /etc/rc.conf ];
then {
/usr/bin/sed -Ei .bck '/^[\s]*jail_list=/s#jail_list="([^"]*)"#jail_list="\1 '${JAIL_LOWER}'"#g' /etc/rc.conf
echo >> /etc/rc.conf
echo \#\# ${JAIL} >> /etc/rc.conf
echo jail_${JAIL_LOWER}_rootdir=\"$J/${JAIL}\" \
>> /etc/rc.conf
echo jail_${JAIL_LOWER}_hostname=\"${JAIL}.local\" \
>> /etc/rc.conf
echo \# Don\'t forget add ip-address in \'.local\' domain zone \
>> /etc/rc.conf
echo jail_${JAIL_LOWER}_ip=\"127.0.0.xxx\" \
>> /etc/rc.conf
echo jail_${JAIL_LOWER}_interface=\"lo0\" \
>> /etc/rc.conf
echo jail_${JAIL_LOWER}_devfs_enable=\"YES\" \
>> /etc/rc.conf
echo jail_${JAIL_LOWER}_exec_start=\"/bin/sh /etc/rc\" \
>> /etc/rc.conf
echo jail_${JAIL_LOWER}_exec_stop=\"/bin/sh /etc/rc.shutdown\" \
>> /etc/rc.conf
echo jail_${JAIL_LOWER}_mount_enable=\"YES\" \
>> /etc/rc.conf
echo jail_${JAIL_LOWER}_fstab=\"$J/conf/${JAIL}.fstab\" \
>> /etc/rc.conf
}
else echo "Put in /etc/rc.conf:";
fi;
echo jail_${JAIL_LOWER}_rootdir=\"$J/${JAIL}\"
echo jail_${JAIL_LOWER}_hostname=\"${JAIL}.local\"
echo \# Don\'t forget add ip-address of jail in \'.local\' domain zone
echo jail_${JAIL_LOWER}_ip=\"127.0.0.xxx\"
echo jail_${JAIL_LOWER}_interface=\"lo0\"
echo jail_${JAIL_LOWER}_devfs_enable=\"YES\"
echo jail_${JAIL_LOWER}_exec_start=\"/bin/sh /etc/rc\"
echo jail_${JAIL_LOWER}_exec_stop=\"/bin/sh /etc/rc.shutdown\"
echo jail_${JAIL_LOWER}_mount_enable=\"YES\"
echo jail_${JAIL_LOWER}_fstab=\"$J/conf/${JAIL}.fstab\"
Интеграция VPN-сервера mpd4 с доменом на базе Samba 3 при посредничестве freeradius
Последовательность действий:
Пропатчить исходники и собрать новое ядро FreeBSD.
Установить и настроить в отдельной клетке (jail) samba как члена домена.
Установить в той же клетке freeradius и настроить на взаимодействие с локальным samba.
Установить в основной системе mpd4 и настроить авторизацию посредством ранее установленного freeradius.
Проверка работоспособности.
Бонус.
1. Сборка ядра FreeBSD.
1.1. В моем случае ядро было собрано с приведенными ниже опциями
options NETGRAPH
options NETGRAPH_ETHER
options NETGRAPH_NETFLOW
options NETGRAPH_SOCKET
options NETGRAPH_TEE
options NETGRAPH_MPPC_ENCRYPTION
options NETGRAPH_MPPC_COMPRESSION
options NETGRAPH_BPF
options NETGRAPH_IFACE
options NETGRAPH_KSOCKET
options NETGRAPH_PPP
options NETGRAPH_PPTPGRE
options NETGRAPH_TCPMSS
options NETGRAPH_VJC
options NETGRAPH_ONE2MANY
options NETGRAPH_RFC1490
options NETGRAPH_TTY
options NETGRAPH_UI
1.2. Перед сборкой ядро следует пропатчить, чтобы задействовать сжатие данных (опция NETGRAPH_MPPC_COMPRESSION).
Патч без проблем ложится на исходники ядра версий 6.x и 7.0-RC3 (патч лежит тут: http://www.mavhome.dp.ua/MPPC/).
Краткая инструкция по сборке:
1.2.1. Скачать архив и распаковать его содержимое в /usr/src/sys/net.
1.2.2. Изменить директорию на /usr/src/sys/modules/netgraph/mppc.
1.2.3. В Makefile изменить линию
NETGRAPH_MPPC_COMPRESSION?= 0
на
NETGRAPH_MPPC_COMPRESSION?= 1
1.2.4. Перейти в директорию /usr/src и запустить компиляцию ядра
# make kernel KERNCONF=YOUR-KERNEL
1.2.5. После успешной компиляции и установки перезагрузить систему
# shutdown -r now
2. Установка Samba 3 (на момент установки версия: samba-3.0.26a_1,1).
2.2. Создаем отдельную клетку и устанавливаем туда Samba 3 из портов.
2.3. Конфигурационный файл smb.conf
[global]
dos charset = cp866
unix charset = koi8-r
display charset = koi8-r
workgroup = CMYK
server string = Samba Server
interfaces = SELF-INTERFACE-IP/24
bind interfaces only = Yes
security = DOMAIN
auth methods = winbind
password server = PDC-SERVER-NAME
log file = /var/log/samba/log.%m
max log size = 50000
load printers = No
show add printer wizard = No
dns proxy = No
wins proxy = Yes
wins server = PDC-SERVER-IP
idmap uid = 10000-20000
idmap gid = 10000-20000
winbind enum users = Yes
winbind enum groups = Yes
winbind use default domain = Yes
winbind refresh tickets = Yes
hosts allow = 192.168.0.
case sensitive = No
hide unreadable = Yes
2.4. Редактируем файл /etc/nsswitch.conf
passwd: files winbind
group: files winbind
2.5. Вводим samba в домен.
# net rpc join -S PDC-SERVER-NAME -I PDC-SERVER-IP -U Administrator%password
2.6. В файл /etc/rc.conf добавляем: winbindd_enable="YES"
3. Устанавливаем freeradius из портов (версия: freeradius-1.1.7_2).
3.1. Настраиваем freeradius. В /usr/local/etc/raddb редактируем конфиги:
3.1.1. radiusd.conf
prefix = /usr/local
exec_prefix = ${prefix}
sysconfdir = ${prefix}/etc
localstatedir = /var
sbindir = ${exec_prefix}/sbin
logdir = /var/log
raddbdir = ${sysconfdir}/raddb
radacctdir = ${logdir}/radacct
confdir = ${raddbdir}
run_dir = ${localstatedir}/run/radiusd
log_file = ${logdir}/radius.log
libdir = ${exec_prefix}/lib
pidfile = ${run_dir}/radiusd.pid
# user = nobody
# group = nobody
max_request_time = 30
delete_blocked_requests = no
cleanup_delay = 5
max_requests = 1024
listen {
ipaddr = SELF-INTERFACE-IP
port = 0
type = auth
}
hostname_lookups = no
allow_core_dumps = no
regular_expressions = yes
extended_expressions = yes
log_stripped_names = no
log_auth = yes
log_auth_badpass = yes
log_auth_goodpass = yes
usercollide = no
lower_user = no
lower_pass = no
nospace_user = no
nospace_pass = no
checkrad = ${sbindir}/checkrad
security {
max_attributes = 200
reject_delay = 1
status_server = no
}
proxy_requests = no
$INCLUDE ${confdir}/clients.conf
snmp = no
$INCLUDE ${confdir}/snmp.conf
thread pool {
start_servers = 5
max_servers = 32
min_spare_servers = 3
max_spare_servers = 10
max_requests_per_server = 0
}
modules {
pap {
encryption_scheme = crypt
}
chap {
authtype = CHAP
}
pam {
pam_auth = radiusd
}
unix {
cache = no
cache_reload = 600
radwtmp = ${logdir}/radwtmp
}
$INCLUDE ${confdir}/eap.conf
mschap {
authtype = MS-CHAP
use_mppe = yes
require_encryption = yes
require_strong = yes
with_ntdomain_hack = yes
# Так как требовалось предоставлять доступ
# только отдельным пользователям домена, я
# создал группу "Remote Access Users" и ука-
# зал SID созданной группы в параметре
# --require-membership-of=SID-or-Name
ntlm_auth = "/usr/local/bin/ntlm_auth --require-membership-of=S-1-5-21-952150225-1155300134-1448941184-21001 --request-nt-key --username=%{Stripped-User-Name:-%{User-Name:-None}} --challenge=%{mschap:Challenge:-00} --nt-response=%{mschap:NT-Response:-00}"
}
preprocess {
huntgroups = ${confdir}/huntgroups
hints = ${confdir}/hints
with_ascend_hack = no
ascend_channels_per_line = 23
with_ntdomain_hack = no
with_specialix_jetstream_hack = no
with_cisco_vsa_hack = no
}
files {
usersfile = ${confdir}/users
acctusersfile = ${confdir}/acct_users
preproxy_usersfile = ${confdir}/preproxy_users
compat = no
}
detail {
detailfile = ${radacctdir}/%{Client-IP-Address}/detail-%Y%m%d
detailperm = 0600
}
detail auth_log {
detailfile = ${radacctdir}/%{Client-IP-Address}/auth-detail-%Y%m%d
detailperm = 0600
}
detail reply_log {
detailfile = ${radacctdir}/%{Client-IP-Address}/reply-detail-%Y%m%d
detailperm = 0600
}
detail pre_proxy_log {
detailfile = ${radacctdir}/%{Client-IP-Address}/pre-proxy-detail-%Y%m%d
detailperm = 0600
}
detail post_proxy_log {
detailfile = ${radacctdir}/%{Client-IP-Address}/post-proxy-detail-%Y%m%d
detailperm = 0600
}
acct_unique {
key = "User-Name, Acct-Session-Id, NAS-IP-Address, Client-IP-Address, NAS-Port"
}
# $INCLUDE ${confdir}/sql.conf
radutmp {
filename = ${logdir}/radutmp
username = %{User-Name}
case_sensitive = yes
check_with_nas = yes
perm = 0600
callerid = "yes"
}
radutmp sradutmp {
filename = ${logdir}/sradutmp
perm = 0644
callerid = "no"
}
attr_filter {
attrsfile = ${confdir}/attrs
}
counter daily {
filename = ${raddbdir}/db.daily
key = User-Name
count-attribute = Acct-Session-Time
reset = daily
counter-name = Daily-Session-Time
check-name = Max-Daily-Session
allowed-servicetype = Framed-User
cache-size = 5000
}
always fail {
rcode = fail
}
always reject {
rcode = reject
}
always ok {
rcode = ok
simulcount = 0
mpp = no
}
expr {
}
digest {
}
exec {
wait = yes
input_pairs = request
}
ippool main_pool {
# указанные ниже параметры фиктивны, т.к. выдаваемые
# IP адреса прописаны в настройках mpd4
range-start = 192.168.1.230
range-stop = 192.168.1.250
netmask = 255.255.255.0
cache-size = 800
session-db = ${raddbdir}/db.ippool
ip-index = ${raddbdir}/db.ipindex
override = no
maximum-timeout = 0
}
}
instantiate {
}
authorize {
preprocess
auth_log
attr_filter
mschap
eap
}
authenticate {
Auth-Type PAP {
pap
}
Auth-Type CHAP {
chap
}
Auth-Type MS-CHAP {
mschap
}
pam
eap
}
preacct {
preprocess
acct_unique
files
}
accounting {
detail
main_pool
}
session {
radutmp
}
post-auth {
main_pool
reply_log
}
pre-proxy {
}
post-proxy {
eap
}
3.1.2. clients.conf
client SELF-INTERFACE-IP {
secret = password-change-me
shortname = localhost
nastype = other
}
3.1.3. users
# Добавить в конец файла
DEFAULT Auth-Type := MS-CHAP
Service-Type = Framed-User,
Framed-Protocol = PPP,
Framed-IP-Address = 192.168.0.161+,
Framed-IP-Netmask = 255.255.255.255
3.1.4. acct_users
DEFAULT
Service-Type == Framed-User,
Service-Type == Login-User,
Login-Service == Telnet,
Login-Service == Rlogin,
Login-Service == TCP-Clear,
Login-TCP-Port <= 65536,
Framed-IP-Address == 255.255.255.254,
Framed-IP-Netmask == 255.255.255.255,
Framed-Protocol == PPP,
Framed-Protocol == SLIP,
Framed-Compression == Van-Jacobson-TCP-IP,
Framed-MTU >= 576,
Framed-Filter-ID =* ANY,
Reply-Message =* ANY,
Proxy-State =* ANY,
Session-Timeout <= 28800,
Idle-Timeout <= 600,
Port-Limit <= 2
3.1.5. naslist
localhost local portslave
SELF-INTERFACE-IP local portslave
Остальные файлы остаются без изменений.
3.2. В /etc/rc.conf прописать
radiusd_enable="YES"
4. Настройка mpd4 (версия: mpd-4.4)
4.1. В основной системе из портов устанавливаем mpd4.
4.2. Правим mpd.conf
default:
load pptp0
load pptp1
load pptp2
pptp0:
new -i ng0 pptp0 pptp0
set ipcp ranges GW-IP-ADDR/32 NG0-IP-ADDR/32
load pptp_standart
pptp1:
new -i ng1 pptp1 pptp1
set ipcp ranges GW-IP-ADDR/32 NG1-IP-ADDR/32
load pptp_standart
pptp2:
new -i ng2 pptp2 pptp2
set ipcp ranges GW-IP-ADDR/32 NG2-IP-ADDR/32
load pptp_standart
pptp_standart:
set iface disable on-demand
set bundle enable multilink
set bundle yes crypt-reqd
set bundle enable compression
set link yes acfcomp protocomp
set link no pap chap
set link enable chap
set link keep-alive 60 180
set ipcp yes vjcomp
set ipcp dns DNS-IP
set ipcp nbns PDC-SERVER-IP
set iface enable proxy-arp
set ccp yes mppc
set ccp yes mpp-e40
set ccp yes mpp-e56
set ccp yes mpp-e128
set ccp yes mpp-stateless
set ccp yes mppe-policy
set pptp self 0.0.0.0
set pptp enable incoming
set pptp disable originate
set pptp enable always-ack
set pptp disable windowing
set iface mtu 1460
set link mtu 1460
set radius server FREERADIUS-JAIL-IP password-change-me 1812 1813
set radius timeout 10
set radius retries 3
set auth enable radius-auth
4.3. mpd.links
pptp0:
set link type pptp
pptp1:
set link type pptp
pptp2:
set link type pptp
4.4. Создаем пустой файл mpd.secret
# touch mpd.secret
4.5. В /etc/rc.conf основной системы вписываем
mpd_enable="YES"
5. Проверка работы.
5.1. Запускаем в клетке:
# /usr/local/etc/rc.d/samba start
# /usr/local/etc/rc.d/radiusd start
5.2. Запускаем mpd4 в основной системе:
# /usr/local/etc/rc.d/mpd4 start
5.3. Пробуем соединиться с впн-сервером.
5.4. Для выявления проблем с mpd4 требуется запустить mpd4 без параметров
# mpd4
5.5. freeradius ведет лог в файле /var/log/radius.log. Так же его можно запустить с отладочном режиме
# radiusd -A -X
6. С виндовых клиентов (с Windows XP например), после соединения с сервером VPN, можно шариться в рабочих компьютерах домена. Для этого требуется назначить домен рабочей группой компьютера и указать его на форме соединения как домен входа.
---------
Подробные данные о состоянии спортивных объектов в регионе Южный Урал, а также конкретно в г. Челябинск, можно найти на ресурсе Polit74.ru. На сайте также можно обнаружить развернутые новости Челябинска и мнения горожан по тому или иному вопросу.
В FreeBSD реализована поддержка Linux LVM
Добавлен новый класс GEOM (драйвер) для доступа к логическим томам Linux LVM. Логические тома LVM в системе отображаются как /dev/lvm/<vol>-<logical>.
Пример: /dev/lvm/vg0-home.
GLVM в настоящее время поддерживает линейные страйпы с сегментами на многих физических дисках. Данные структуры LVM доступны только в режиме чтения и поэтому не могут быть созданы новые логические тома или изменен размер уже существующих.
Для встраивания этого драйвера непосредственно в ядро следует добавить следующую строку в конфигурационный файл ядра:
options GEOM_LVM
Альтернативный способ заключается в загрузке модуля ядра во время запуска системы. В этом случае добавьте следующую строку в /boot/loader.conf:
geom_lvm_load="YES"
Для просмотра представленных устройств воспользуйтесь командой geom:
# geom lvm list
Пример:
Geom name: vg1
Providers:
1. Name: lvm/vg1-home
Mediasize: 4294967296 (4.0G)
Sectorsize: 512
Mode: r0w0e0
2. Name: lvm/vg1-logs
Mediasize: 4294967296 (4.0G)
Sectorsize: 512
Mode: r0w0e0
Consumers:
1. Name: ad0s1
Mediasize: 80023716864 (75G)
Sectorsize: 512
Mode: r0w0e0
В интернет из lo0
Если ваши jail-машины висят на интерфейсе lo0, предоставить им доступ в локальную сеть (интернет) можно таким образом:
1. в /etc/rc.conf добавить
# Разрешить маршрутизацию
gateway_enable="YES"
# Включить PF
pf_enable="YES"
# Указываем файл конфигурации PF
pf_rules="/etc/pf-custom.conf"
2. создать или отредактировать файл /etc/pf-custom.conf, добавив следущее
# IP-адрес вашей jail-машины
my_jail="127.0.0.100"
lo="lo0"
if="if0"
nat on $if from $my_jail to !$lo:0:network tag FROM_JAIL -> $if
pass out on $if proto tcp to any tagged FROM_JAIL keep state flags S/SA
3. Запускаем PF из под рута
/etc/rc.d/pf start
Украшаем командную строку в csh/tcsh
Вид командной строки в csh/tcsh задается несколькими переменными окружения. Главная из них - prompt. По умолчанию приглашение командной строки имеет вид
%
что нас совершенно не устраивает. Введем команду
set prompt="%m%# "
где %m - имя компьютера, %# - символ > (или первый символ переменной promptchars) для обычных пользователей или символ # (или второй символ переменной promptchars) для суперпользователя.
Увидим, что приглашение изменилось
machine>
Мы перестаем путаться в в удаленных сессиях. Далее добавим имя текущего пользователя (%n) и полное имя директории, где мы сидим в данный момент (%/)
set prompt="%n@%m [%/]%# "
Вид меняется на
user@machine [/usr/local/etc]>
Наше приглашение стало более информативной. Но полный путь занимает слишком много места. Меняем %/ на %c, урезающий отображаемый путь до имени текущей директории
set prompt="%n@%m [%c]%# "
и у нас получилось
user@machine [etc]>
что уже выглядит лаконичнее. Добавим текущее время (счастливые могут пропустить
set prompt="%T %n@%m [%c]%# "
и вуаля
23:01 user@machine [etc]>
По правде говоря, лично меня символ > в конце приглашения раздражает. Для смены символа используем переменную promptchars
set promptchars="$#"
Первый символ подставляется вместо %# если вы обычный пользователь, а второй - если вы суперпользователь.
Теперь записываем полученный результат в ~/.tcshrc или в /etc/csh.cshrc.
Ниже приведен список допустимых подстановок (подробности в man csh):
%/
Текущая рабочая директория.
%~
Текущая рабочая директория, но домашная директория текущего пользователя представлено тильдой ~ и домашние директории остальных пользователей представлены как ~user. Подстановка ~user действует только в случае если оболочка (shell) уже использует ~user в имени пути в текущей сессии.
%c[[0]n], %.[[0]n]
Отслеживает конечный компонент пути к текущей рабочей директории или n конечных компонентов, при заданном n. Если n начинается с 0 количество пропущенных компонентов предваряет конечные в формате /<skipped>trailing. Если установлена переменная оболочки ellipsis, пропущенные компоненты будут представлены как ...trailing. Подстановка ~ действует аналогично %~, но будет игнорироваться при количестве конечных компонентов больше одного.
%C
Аналогично %c, но без подстановок ~.
%h, %!, !
Номер события в текущей истории.
%M
Полное имя машины.
%m
Сокращенное имя машины. Отображается часть до первой точки.
%S (%s)
Включить (отключить) стандартный режим.
%B (%b)
Включить (отключить) режим жирного шрифта.
%U (%u)
Включить (отключить) режим подчеркивания.
%t, %@
Время в 12-часовом (AM/PM) формате.
%T
Аналогично %t, но в 24-часовом формате (зависит от переменной ampm оболочки).
%p
Точное время суток в 12-часовом (AM/PM) формате, с секундами.
%P
Аналогично %p, но в 24-часовом формате (зависит от переменной ampm оболочки).
\c
c будет распознан как код символа.
%%
Символ %.
%n
Имя пользователя.
%j
Количество запущенных в оболочке работ (jobs).
%d
День недели в текстовом формате.
%D
День недели в числовом формате.
%w
Месяц в текстовом формате.
%W
Месяц в числовом формате.
%y
Год в двухзначном формате.
%Y
Год в четырехзначном формате.
%l
tty оболочки.
%L
Очищает от конца приглашения до конца экрана или строки.
%$
Подставляет значение переменной оболочки или окружения с именем, заданным сразу после $ (например %$PATH).
%#
> (или первый символ из переменной оболочки promptchars) для обычных пользователей и # (или второй символ из promptchars).
%{string%}
Включает строку как управляющая escape последовательность. Может использоваться для изменения атрибутов терминала (например для раскраски приглашения) и может не воздействовать на положение курсора. Не может быть последней последовательностью в приглашении.
%?
Возвращает код ошибки команды, запущенной непосредственно перед приглашением.
vsftpd и пользователи из базы LDAP.
Предполагается, что сервер каталогов openldap уже установлен и настроен.
Устанавливаем nss_ldap
# cd /usr/ports/net/nss_ldap
# make install
Отредактируем файл конфигурации /usr/local/etc/nss_ldap.conf
host small.server
base dc=small,dc=server
# Пользователь, которому разрешен просмотр каталога
binddn uid=proxy,dc=small,dc=server
# Пароль пользователя proxy
# Пароль не надо хешировать!
bindpw proxy-password
scope sub
bind_timelimit 3
bind_policy soft
nss_paged_results yes
pagesize 1000
pam_filter objectclass=posixAccount
pam_login_attribute uid
pam_password exop
nss_base_passwd ou=People,dc=small,dc=server?one
nss_base_shadow ou=People,dc=small,dc=server?one
nss_base_group ou=Group,dc=small,dc=server?one
Изменим следующие строки в /etc/nsswitch.conf
group: files ldap
passwd: files ldap
Проверяем работу nss_ldap
# id user-from-ldap
Должно выйти что-то похожее на
uid=10000(user-from-ldap) gid=10000(Group-from-LDAP) groups=10000(Group-from-LDAP)
Устанавливаем pam_ldap
#cd /usr/ports/security/pam_ldap
# make install
Отредактируем файл конфигурации pam_ldap: /usr/local/etc/ldap.conf
host small.server
base dc=small,dc=server
binddn uid=proxy,dc=small,dc=server
# Пароль не надо хешировать!
bindpw proxy-password
scope one
bind_timelimit 3
bind_policy soft
pam_filter objectclass=posixAccount
pam_login_attribute uid
pam_password exop
nss_base_passwd ou=People,dc=small,dc=server?one
nss_base_shadow ou=People,dc=small,dc=server?one
nss_base_group ou=Group,dc=small,dc=server?one
Установка самого сервера FTP
# cd /usr/ports/ftp/vsftpd
make config
В появившемся диалоге ставим галочку около опции RC_NG и далее
# make install
Ниже приведен файл конфигурации vsftpd: /usr/local/etc/vsftpd.conf
#Запрещаем анонимусов
anonymous_enable=NO
listen=YES
background=YES
# Указываем какую именно конфигурацию PAM использовать
pam_service_name=vsftpd
check_shell=YES
local_enable=YES
write_enable=YES
anon_upload_enable=YES
anon_mkdir_write_enable=YES
dirmessage_enable=YES
xferlog_enable=YES
connect_from_port_20=YES
# Скрываем какой именно сервер FTP у нас стоит
ftpd_banner=Welcome to FTP service.
# Помещаем пользователей в изолированное окружение
chroot_local_user=YES
pasv_min_port=49152
# Скрываем uid и gid файлов при просмотре директорий.
hide_ids=YES
local_umask=022
anon_umask=022
secure_chroot_dir=/usr/local/share/vsftpd/empty
Создаем файл конфигурации PAM: /usr/local/etc/pam.d/vsftpd
auth required /usr/local/lib/pam_ldap.so
account required /usr/local/lib/pam_ldap.so
# Если вы хотите разграничить доступ к ftp по группам
# можете дополнительно установить модуль pam_require
# и добавить приведенную ниже строку. Подробности тут
account required /usr/local/lib/pam_require.so no_case @Ftp:Users
# Строка для модуля pam_mkhomedir,
# избавляющего от необходимости ручного
# создания домашней директории для нового пользователя
session required /usr/local/lib/pam_mkhomedir.so mode=0700
Добавим следующую строку в /etc/rc.conf
vsftpd_enable="YES"
Запускаем сервер FTP и проверяем его работу
# /usr/local/etc/rc.d/vsftpd start