Содержание
для настройки имени компьютера в сети (FQDN) добавить в /etc/rc.conf
строку (имя_компьютера
- имя компьютера, например, mic
)
hostname=имя_компьютера
.dummy.ru
для настройки сетевого интерфейса со статическим или динамическим ip-адресом добавить в /etc/rc.conf
строку (имя_устройства
- имя устройства для подключения к сети, например, igb0
)
ifconfig_имя_устройства
="inet 192.168.1.2 netmask 255.255.255.0"
или
ifconfig_имя_устройства
="SYNCDHCP"
при использовании динамического ip-адреса добавить в /etc/dhclient.conf
строки (отключение получения dhcp-клиентом адресов DNS-серверов)
interface "igb0" { send host-name "server"; # this set the expiration time, the renewal (T1) and rebind (T2) times are # calculated by the client (1/2 and 7/8 of the lease time) supersede dhcp-lease-time 300; # don't request option domain-name-servers request subnet-mask; }
если в компьютере несколько сетевых интерфейсов, то каждый из них должен быть настроен и диапазон IP-адресов не пересекался (с учётом маски подсети). Если необходимо пересылать пакеты с одного интерфейса на другой, добавить в /etc/rc.conf
строку
gateway_enable="YES"
добавить соответствие IP-адреса имени компьютера в файл /etc/hosts
::1 localhostимя_компьютера
.dummy.ru 127.0.0.1 localhostимя_компьютера
.dummy.ru 192.168.1.2 localhostимя_компьютера
.dummy.ru
в файл /etc/resolv.conf
добавить строки (адреса DNS-серверов)
search "" nameserver 8.8.8.8 #PRIDNS GOOGLE nameserver 8.8.4.4 #SECDNS GOOGLE
если на сервере используется динамический реальный IP-адрес, для сопоставления текущего IP-адреса сервера заданному DNS-имени создать и настроить на сайте, предоставляющем услугу Dynamic DNS (например, https://www.noip.com), учётную запись, установить порт dns/inadyn
, добавить в /etc/rc.conf
строку
inadyn_enable="YES"
добавить в /usr/local/etc/inadyn.conf
строки (имя_пользователя
- имя пользователя при регистрации на сайте, пароль
- пароль, имя_хоста
- имя хоста)
iface = ng0 provider no-ip.com { username =имя_пользователя
password =пароль
hostname =имя_хоста
}
Добавить в /etc/rc.conf
для очистки /tmp при запуске
clear_tmp_enable="YES"
для автоматической проверки файловых систем при запуске
fsck_y_enable="YES" background_fsck="NO"
для отключения sendmail
sendmail_enable="NO" sendmail_submit_enable="NO" sendmail_outbound_enable="NO" sendmail_msp_queue_enable="NO"
для включения безопасного режима syslogd
syslogd_flags="-ss"
Для автоматического обновления микрокода процессора при загрузке ПК, установить порты sysutils/x86info
и sysutils/devcpu-data
(для их работы нужен модуль ядра cpuctl), добавить в файл /boot/loader.conf
строки
cpuctl_load="YES" cpu_microcode_load="YES" cpu_microcode_name="/boot/firmware/intel-ucode.bin"
Текущую версию микрокода процессора можно определить с помощью команды x86info -a | grep Microcode\ version
Для работы виртуальных терминалов в текстовом режиме вместо графического добавить в файл /boot/loader.conf
строку
hw.vga.textmode=1
Для перемещения core-файлов в нужное место, добавить в /etc/sysctl.conf
kern.corefile="/var/tmp/%U.%N.core"
Для экономии энергопотребления выполнить
включить автозапуск утилиты powerd. Добавить в /etc/rc.conf
powerd_enable="YES"
уменьшить частоту переключения процессов в ядре с 1000 Гц до 100 Гц (если не используется поллинг для сетевых карт). Добавить в /boot/loader.conf
kern.hz=100
Для мониторинга температуры процессора Intel Core добавить в /boot/loader.conf
(нужен модуль ядра coretemp)
coretemp_load="YES"
Температуры всех ядер можно просмотреть командой sysctl -a | grep dev\.cpu\..\.temperature
включить в файл /etc/login.conf
описание класса пользователей с поддержкой русского языка
russian|Russian Users Accounts:\ :hushlogin:\ :charset=UTF-8:\ :lang=ru_RU.UTF-8:\ :tc=default:
выполнить команду cap_mkdb /etc/login.conf
с помощью команды vipw присвоить пользователям описанный класс. Или можно воспользоваться командой pw user mod имя пользователя
-L russian. Или можно воспользоваться командой chsh имя пользователя
в файл /etc/rc.conf
добавить строки
keymap="ru.win"
Теперь нужно выполнить перезагрузку и войти под пользователем, которому присвоен класс russian. Русский язык должен поддерживаться. Переключение языков осуществляется комбинацией клавиш Ctrl+Shift
Для того, чтобы перед запросом имени пользователя и пароля экран очищался, необходимо переопределить класс терминала в файле /etc/gettytab
(добавить последовательность очистки экрана)
P|Pc|Pc console:\ :ht:np:sp#115200:cl=\ec:
Для того, чтобы после входа пользователя не появлялся текст "А знаете ли Вы...", нужно закомментировать строку
[ -x /usr/games/fortune ] && /usr/games/fortune freebsd-tips
в файлах ~/.login
и ~/.profile
если пользоваться USB-модемом GPRS, добавить в файл /boot/loader.conf
строку (нужен модуль ядра usb/umodem и необходимый для него usb/ucom)
umodem_load="YES"
Если пользоваться USB-модемом CDMA, добавить в файл /boot/loader.conf
строку (нужен модуль ядра usb/u3g и необходимый для него usb/ucom)
u3g_load="YES"
Тогда после подключения USB-модема будет появляться устройство /dev/cuaU0.0
Для соединения с USB-модемом сотового телефона (например, для выполнения AT-команд) использовать команду
cu -l /dev/cuaU0.0
создать в каталоге /etc/ppp
файлы
ppp.conf
(имя_устройства
- имя устройства, используемого для подключения, например, xl0
, имя_пользователя
- имя пользователя, пароль
- пароль)
default: set log Async CBCP CCP Chat Command Connect Debug DNS Filter HDLC ID0 IPCP LCP LQM Phase Physical Radius Sync TCP/IP Timer TUN Warning Error Alert ident user-ppp VERSION (build COMPILATIONDATE) pppoe_client: enable lqr echo set lqrperiod 10 set echoperiod 10 set device PPPoE:имя_устройства
:* set authnameимя_пользователя
set authkeyпароль
set dial set login set ifaddr 0 0 gprs_mts: set device /dev/cuaU0.0 set phone *99***1\# set authname mts set authkey mts set dial "ABORT BUSY ABORT NO\\sCARRIER TIMEOUT 5 \ \"\" AT OK-AT-OK ATE1Q0 OK \ AT+CGDCONT=1,\\\"IP\\\",\\\"internet.mts.ru\\\" OK \ \\dATDT\\T TIMEOUT 60 CONNECT" set login set ifaddr 0 10.10.10.10 add! default HISADDR gprs_bwc: set device /dev/cuaU0.0 set phone *99***1\# set authname bwc set authkey bwc set dial "ABORT BUSY ABORT NO\\sCARRIER TIMEOUT 5 \ \"\" AT OK-AT-OK ATE1Q0 OK \ AT+CGDCONT=1,\\\"IP\\\",\\\"inet.bwc.ru\\\" OK \ \\dATDT\\T TIMEOUT 60 CONNECT" set login set ifaddr 0 10.6.6.6 add! default HISADDR cdma_bwc: set device /dev/cuaU0.0 set phone \#777 set cd off set authname mobile set authkey mobile set dial "ABORT BUSY ABORT NO\\sCARRIER TIMEOUT 5 \ \"\" AT OK-AT-OK ATZ OK ATE1Q0 OK ATX1 OK \ \\dATDT\\T TIMEOUT 40 CONNECT" set login set ifaddr 0 0 add! default HISADDR
ppp.linkup
pppoe_client: add! default HISADDR !bg /etc/ppp/kommandSoed.sh
kommandSoed.sh
#!/bin/sh
ppp.linkdown
pppoe_client: !bg /etc/ppp/kommandOtsoed.sh
kommandOtsoed.sh
#!/bin/sh
Выполнить для созданных файлов команды
chmod 600 ppp.conf ppp.linkup ppp.linkdown
chmod 700 kommandOtsoed.sh kommandSoed.sh
добавить строки в файл /etc/rc.conf
для автоматического подключения компьютера к интернет при загрузке
ppp_enable="YES" ppp_mode="ddial" ppp_profile="pppoe_client" ppp_nat="NO"
если подключение к интернет должен выполнять сам пользователь, включить его в группу network
проверить, чтобы файл конфигурации ядра содержал следующие строки
options NETGRAPH options NETGRAPH_ETHER options NETGRAPH_PPPOE options NETGRAPH_SOCKET
настроить межсетевой экран с учётом того, что ppp создаёт сетевой интерфейс tun
установить mpd из порта net/mpd5
создать в каталоге /usr/local/etc/syslog.d
файл mpd.conf
!mpd *.* /var/log/mpd.log
выполнить команды
touch /var/log/mpd.log
chmod 644 /var/log/mpd.log
перезапустить syslog одной из команд (в зависимости от используемой оболочки)
kill -HUP $(cat /var/run/syslog.pid)
kill -HUP `cat /var/run/syslog.pid`
создать в каталоге /usr/local/etc/newsyslog.conf.d
файл mpd.conf
/var/log/mpd.log 644 7 100 * JC
создать в каталоге /usr/local/etc/mpd5
файлы
mpd.conf
startup: set console close set web close set global disable one-shot tcp-wrapper log +auth +bund +ccp +chat +console +echo +ecp +frame +fsm +iface +ipcp +ipv6cp +lcp +link +phys +radius +rep default: load pppoe_client pppoe_client: create bundle static B1 set iface up-script "/usr/local/etc/mpd5/pppoe_out_linkup" set iface down-script "/usr/local/etc/mpd5/pppoe_out_linkdown" set iface enable tcpmssfix set ipcp ranges 0.0.0.0/0 0.0.0.0/0 create link static L1 pppoe set link action bundle B1 set auth authnameимя_пользователя
set auth passwordпароль
set link max-redial 0 set link mtu 1460 set link keep-alive 10 60 set pppoe ifaceимя_устройства
set pppoe service "" open gprs_bwc: create bundle static B1 set iface route default set iface enable tcpmssfix set ipcp ranges 0.0.0.0/0 10.6.6.6 create link static L1 modem set link action bundle B1 set auth authname bwc set auth password bwc set modem device /dev/cuaU0.0 set modem watch -cd set modem script WirelessModemDial set modem var $PHN *99***1# set modem var $APN inet.bwc.ru open cdma_bwc: create bundle static B1 set iface route default set iface enable tcpmssfix set ipcp ranges 0.0.0.0/0 0.0.0.0/0 create link static L1 modem set link action bundle B1 set auth authname mobile set auth password mobile set modem device /dev/cuaU0.0 set modem watch -cd set modem script WirelessModemDial set modem var $PHN #777 set modem var $APN "" open
mpd.script
WirelessModemDial: set $ConnectionSpeed "" if $ConnectTimeout == "" set $ConnectTimeout 45 if $APN == "" goto InitNOAPN print "AT+CGDCONT=1,\"IP\",\"" print $APN print "\"\r\n" match "ERR" InitERR match "OK" InitOK wait 5 log "Timeout setting for the APN." failure InitERR: log "APN could not be set." failure InitNOAPN: log "No APN." InitOK: print "ATDT" print $PHN print "\r\n" match "NO CARRIER" DialAbortNoCar match "NO DIAL" DialAbortNoDial match "BUSY" DialAbortBusy match "ERR" DialErrorInit regex "CONNECT *([0-9]*).*$" DialConnect wait $ConnectTimeout log "No response from the modem after dialing." failure DialAbortNoCar: log "The remote modem did not answer." failure DialAbortNoDial: log "No dialtone." failure DialAbortBusy: log "The line was busy." failure DialErrorInit: log "Invalid dial init string." failure DialConnect: log "Connect." success
pppoe_out_linkup
#!/bin/sh # $0 - script name # $1 - if name (ng0...) # $2 - proto # $3 - local-ip # $4 - remote-ip # $5 - authname # $6 - [ dns1 server-ip ] # $7 - [ dns2 server-ip ] # $8 - peer-address # сохранить шлюз по умолчанию в файл def_gw=`netstat -rn | awk '$1=="default"{print $2}'` echo $def_gw > /tmp/mpd_def_gw /sbin/route -q delete $4 /sbin/route -q delete default /sbin/route -q add default $4 # для вызова inadyn (смотреть о ppp) /etc/ppp/kommandSoed.sh & exit 0
pppoe_out_linkdown
#!/bin/sh # $0 - script name # $1 - if name (ng0...) # $2 - proto # $3 - local-ip # $4 - remote-ip # $5 - authname # $6 - peer-address /sbin/route -q delete $4 /sbin/route -q delete default # восстановить маршруты по умолчанию и шлюз # из rc.conf[.local] /etc/rc.d/routing static inet start # из файла def_gw=`cat /tmp/mpd_def_gw` rm -f /tmp/mpd_def_gw /sbin/route -q add default $def_gw /etc/ppp/kommandOtsoed.sh & exit 0
Выполнить для созданных файлов команды
chmod 600 mpd.conf mpd.script
chmod 700 pppoe_out_linkdown pppoe_out_linkup
добавить в файл /etc/rc.conf
mpd_enable="YES"
проверить, чтобы файл конфигурации ядра содержал следующие строки
options NETGRAPH options NETGRAPH_ETHER options NETGRAPH_IFACE options NETGRAPH_MPPC_ENCRYPTION options NETGRAPH_PPP options NETGRAPH_PPPOE options NETGRAPH_SOCKET options NETGRAPH_TCPMSS options NETGRAPH_TEE # для USB-модемов GPRS и CDMA options NETGRAPH_ASYNC options NETGRAPH_TTY options NETGRAPH_VJC
или были скомпилированы модули ядра netgraph/netgraph, netgraph/ether, netgraph/iface, rc4, netgraph/mppc, netgraph/ppp, netgraph/pppoe, netgraph/socket, netgraph/tcpmss, netgraph/tee
настроить межсетевой экран с учётом того, что mpd создаёт сетевой интерфейс ng (а не tun как ppp)
Предположим, что сервер и клиент используют FreeBSD. Пользователь клиента cuser подключается к серверу под именем suser. Подключение к серверу разрешено только под именем suser и только со всех IP-адресов вида xxx.xxx.xxx.xx[0-9] и yyy.yyy.yyy.yyy
На клиенте зайти под пользователем cuser и выполнить (нужно ввести парольную фразу для защиты закрытого ключа)
ssh-keygen -t rsa -b 2048
В каталоге ~/.ssh
появятся 2 файла - id_rsa
(закрытый ключ) и id_rsa.pub
(открытый ключ). Файл с открытым ключом id_rsa.pub
переместить на сервер в домашний каталог пользователя suser
На сервере выполнить
добавить в файл /etc/rc.conf
строки
sshd_enable="YES"
установить следующие параметры в /etc/ssh/sshd_config
Port 443 AllowUsers suser@xxx.xxx.xxx.xx? suser@yyy.yyy.yyy.yyy
Для отключения неиспользуемых сессий SSH через 45 секунд (если, по умолчанию, ClientAliveCountMax равен 3) задать
ClientAliveInterval 15
Для авторизации по ключам должны присутствовать строки
PubkeyAuthentication yes AuthorizedKeysFile .ssh/authorized_keys
Остальные типы аутентификации (host-based, password, challenge-response) нужно отключить
HostbasedAuthentication no PasswordAuthentication no ChallengeResponseAuthentication no
Для включения возможности привязки к заданному сетевому интерфейсу при обратном перенаправлении TCP-порта (при вызове putty с параметром -R) задать
GatewayPorts clientspecified
зайти под пользователем suser и выполнить (в файле ~/.ssh/authorized_keys
каждый открытый ключ обязательно должен быть размещён в отдельной строке)
cat ~/id_rsa.pub >> ~/.ssh/authorized_keys
rm ~/id_rsa.pub
chmod 600 ~/.ssh/authorized_keys
Теперь на клиенте в домашнем каталоге пользователя cuser в файле ~/.ssh/id_rsa
хранится закрытый ключ, а на сервере в домашнем каталоге пользователя suser в файле ~/.ssh/authorized_keys
- открытый ключ. Для подключения к серверу нужно на клиенте зайти под пользователем cuser и выполнить команду (имя_сервера
- имя или IP-адрес сервера)
ssh -p 443 suser@имя_сервера
Когда клиент использует для подключения приложение putty, нужно сконвертировать закрытый ключ id_rsa
для использования совместно с putty (запустить утилиту puttygen, выбрать команду "Import key", выбрать файл id_rsa
, затем выбрать команду "Save private key" для сохранения файла закрытого ключа). ssh-keygen генерирует закрытый ключ, который не совместим с putty
Для того, чтобы изменения конфигурации SSH-сервера вступили в силу без перезагрузки компьютера, выполнить
/etc/rc.d/sshd reload
Для прерывания ssh-сессий без остановки выполнения команд можно использовать порт sysutils/screen
(для отключения от сессии использовать Ctrl+a, затем d, для подключения к существующей сессии использовать команду screen -r, для просмотра списка сессий - команду screen -list, для закрытия сессии нужно подключиться к ней, затем нажать Ctrl+d)
команда для подключения по SSH с помощью putty
putty.exe -ssh -2 -P 443 -C -i файл_ключа
-l имя_пользователя
имя_сервера
команда для перенаправления соединений к TCP-порту 3340 на локальном хосте на TCP-порт 3389 удалённого хоста с адресом 192.168.2.2 (хост должен быть доступен с сервера). После выполнения команды возможно подключение по RDP с локального хоста на удалённый хост. При подключении с локального хоста нужно указать адрес localhost:3340
putty.exe -ssh -2 -P 443 -N -C -T -i файл_ключа
-l имя_пользователя
-L 0.0.0.0:3340:192.168.2.2:3389 имя_сервера
команда для перенаправления соединений к TCP-порту 3340 на удалённом хосте (адрес 192.168.2.1 является адресом второго, смотрящего в локальную сеть, интерфейса на сервере) на TCP-порт 3389 локального хоста. После выполнения команды возможно подключение по RDP с удалённого хоста на локальный хост. При подключении с удалённого хоста нужно указать адрес 192.168.2.1:3340
putty.exe -ssh -2 -P 443 -N -C -T -i файл_ключа
-l имя_пользователя
-R 192.168.2.1:3340:localhost:3389 имя_сервера
команда для копирования файла по SSH с локального хоста на удалённый хост
pscp.exe -P 443 -i файл_ключа
полный_путь_к_файлу_на_локальном_хосте
имя_пользователя
@имя_сервера
:полный_путь_ к_ файлу_на_удалённом_хосте
Если "рабочий ПК" сервер, "удалённый ПК" клиент, клиент и сервер связаны через сервер-посредник SSH, то для установки удалённого подключения сервера (рабочий ПК с ОС Windows) к серверу SSH с помощью планировщика заданий нужно
настроить на клиентском ПК задание в планировщике заданий, запускающее командный файл remoteconn.cmd
rem выполнение задания с правами пользователя "система" (идентификатор "S-1-5-18"), триггер "при запуске" rem в свойствах задания нужно отключить: rem флаг "запускать только при питании от электросети" на вкладке "условия" rem флаг "останавливать задачу, выполняемую дольше" на вкладке "параметры" rem rem для импорта ветки реестра с настройками соединения putty с именем "RemoteConn" выполнить под пользователем "система" команду regedit /s "файл с расширением reg" rem в настройках соединения putty указать: rem Session - Host Name rem Session - Port ("443") rem Connection - Data - Auto-login username (указать имя пользователя) rem Connection - Proxy - Proxy type ("HTTP") rem Connection - Proxy - Proxy hostname ("localhost") rem Connection - Proxy - Port ("3129") rem Connection - Proxy - Port - Do DNS name lookup at proxy end ("No") rem Connection - SSH - Don't start a shell or command at all rem Connection - SSH - Enable compression rem Connection - SSH - Auth - Private key file for authentication (указать путь к файлу с закрытым ключом) rem Connection - SSH - TTY - Don't allocate a pseudo-terminal rem Connection - SSH - Tunnels (добавить тоннель с нужными параметрами) rem пример: "L0.0.0.0:3340 192.168.2.2:3389", "R192.168.2.1:3340 localhost:3389" rem пример: "Llocalhost:3345 0.0.0.0:3344", "R0.0.0.0:3343 localhost:3389" rem rem внимание! при первом запуске plink нужно получить hostkey удалённого сервера. rem для чего нужно вызвать plink.exe с флагом -v и в выводе команды найти значение параметра "Host key fingerprint is:" rem @echo off set log_fajl=%~dp0remoteconn.log echo %date% %time% > %log_fajl% rem ждём 5 минут, запускается winfoom ping localhost -n 301 > nul rem запускаем цикл подключения к ssh-серверу :BEG echo %date% %time% Starting plink >> %log_fajl% rem "c:\program files (x86)\putty\plink.exe" -v -batch -hostkey "52:95:7c:aa:1a:b5:84:d1:9c:df:a4:95:ee:b2:d1:e2" RemoteConn "c:\program files (x86)\putty\plink.exe" -v -batch -hostkey "32:e7:d1:67:22:39:22:94:33:9c:af:7f:ba:62:e2:65" RemoteConnVDS echo %date% %time% Ended with %errorlevel% errorlevel >> %log_fajl% ping localhost -n 301 > nul goto BEG
если выход в Интернет с клиентского ПК осуществляется через прокси-сервер типа HTTP и прокси-сервер не поддерживает метод аутентификации basic (а поддерживает методы аутентификации ntlm или kerberos), настроить на клиентском ПК задание в планировщике заданий, запускающее командный файл LaunchWinFoom_user.cmd
rem выполнение задания с правами пользователя, триггер "при входе в систему" rem задание запускает winfoom, программно нажимает кнопку "Start" в окне winfoom, блокирует рабочую станцию rem дополнительно необходимо настроить автоматический вход на ПК при включении ПК по статье rem https://support.microsoft.com/en-us/help/324737/how-to-turn-on-automatic-logon-in-windows rem rem putty поддерживает на прокси-сервере типа HTTP метод аутентификации basic rem если прокси-сервер использует методы аутентификации ntlm или kerberos, необходимо использовать инструмент winfoom rem https://github.com/ecovaci/winfoom rem скачать дистрибутив, запустить launchGui.bat, указать: rem proxy type (HTTP) rem proxy host (DNS-имя прокси-сервера) rem proxy port (номер порта для соединения с прокси-сервером) rem local proxy port (оставить значение "3129") rem use system credentials (установить checkbox) rem в меню settings выбрать autostart rem затем нажать кнопку "Start", параметры winfoom будут сохранены, при следующем запуске winfoom их не нужно будет указывать rem rem в настройках соединения putty указать: rem Connection - Proxy - Proxy type ("HTTP") rem Connection - Proxy - Proxy hostname ("localhost") rem Connection - Proxy - Port ("3129") rem Connection - Proxy - Port - Do DNS name lookup at proxy end ("No") rem @echo off setlocal enableextensions set log_fajl=%~dp0launchwinfoom.log echo %date% %time%>%log_fajl% set _ScriptDir=%~dp0 set _ScriptDir=%_ScriptDir:~0,-1% echo Starting launch>>%log_fajl% start "" /D "%_ScriptDir%\winfoom" "launchGui.bat" echo Ended with %errorlevel% errorlevel>>%log_fajl% rem ожидаем завершения запуска ПО перед блокировкой экрана ping localhost -n 21 > nul rundll32.exe user32.dll,LockWorkStation
настроить на клиентском ПК задание в планировщике заданий, запускающее командный файл monitortunnel.cmd
rem выполнение задания с правами пользователя "система" (идентификатор "S-1-5-18"), триггер "при запуске" rem в свойствах задания нужно отключить: rem флаг "запускать только при питании от электросети" на вкладке "условия" rem флаг "останавливать задачу, выполняемую дольше" на вкладке "параметры" rem rem для импорта ветки реестра с настройками соединения putty с именем "MonitorTunnel" выполнить под пользователем "система" команду regedit /s "файл с расширением reg" rem в настройках соединения putty указать: rem Session - Host Name rem Session - Port ("443") rem Connection - Data - Auto-login username (указать имя пользователя) rem Connection - Proxy - Proxy type ("HTTP") rem Connection - Proxy - Proxy hostname ("localhost") rem Connection - Proxy - Port ("3129") rem Connection - Proxy - Port - Do DNS name lookup at proxy end ("No") rem Connection - SSH - Enable compression rem Connection - SSH - Auth - Private key file for authentication (указать путь к файлу с закрытым ключом) rem Connection - SSH - TTY - Don't allocate a pseudo-terminal rem @echo off set log_fajl=%~dp0monitortunnel.log set stat_fajl=%~dp0monitortunnel.stat echo %date% %time% > %log_fajl% rem запускаем цикл проверки существования тоннеля на ssh-сервере :LABEL_BEG echo %date% %time% Starting plink >> %log_fajl% "c:\program files (x86)\putty\plink.exe" -batch -hostkey "32:e7:d1:67:22:39:22:94:33:9c:af:7f:ba:62:e2:65" MonitorTunnel "ss -ltn | grep ""0\.0\.0\.0:3343"" | wc -l" > %stat_fajl% echo %date% %time% Ended with %errorlevel% errorlevel >> %log_fajl% if %errorlevel%==0 ( goto LABEL_SUCCESS ) else ( goto LABEL_FAILURE ) :LABEL_SUCCESS echo success >> %log_fajl% set /p count=<%stat_fajl% echo tunnel count: %count% >> %log_fajl% if %count% gtr 0 ( goto LABEL_TUNNEL_FOUND ) else ( goto LABEL_TUNNEL_NOTFOUND ) :LABEL_TUNNEL_FOUND echo tunnel found, no action >> %log_fajl% goto LABEL_SUCCESS_END :LABEL_TUNNEL_NOTFOUND echo tunnel not found, do action >> %log_fajl% powershell.exe -executionpolicy bypass -noprofile -command "(get-wmiobject win32_process -filter \"name='plink.exe' and commandline like '%%RemoteConnVDS%%'\").Terminate()" goto LABEL_SUCCESS_END :LABEL_SUCCESS_END goto LABEL_END :LABEL_FAILURE echo failure >> %log_fajl% goto LABEL_END :LABEL_END ping localhost -n 1801 > nul goto LABEL_BEG
Если "рабочий ПК" сервер, "удалённый ПК" клиент, клиент и сервер связаны через сервер-посредник SSH, то для установки удалённого подключения сервера или клиента к серверу SSH вручную (то есть, не с помощью планировщика заданий) нужно использовать командный файл remoteMANUALconn.cmd
rem для подключения с клиента к серверу указываем в клиенте RDP localhost:3342 rem для подключения с сервера к клиенту указываем в клиенте RDP localhost:3345 rem на стороне клиента выполняем start "" "c:\program files (x86)\putty\putty.exe" -ssh -2 -P 443 -N -C -T -iфайл_с_закрытым_ключом
-lимя_пользователя
-L localhost:3342:0.0.0.0:3343 -R 0.0.0.0:3344:localhost:3389адрес_сервера_ssh
rem на стороне сервера выполняем rem start "" "c:\program files (x86)\putty\putty.exe" -ssh -2 -P 443 -N -C -T -iфайл_с_закрытым_ключом
-lимя_пользователя
-L localhost:3345:0.0.0.0:3344 -R 0.0.0.0:3343:localhost:3389адрес_сервера_ssh
создать в каталоге /etc/syslog.d
файл ntpd.conf
!ntpd *.* /var/log/ntp.log
выполнить команды и перезапустить syslog
touch /var/log/ntp.log
chmod 644 /var/log/ntp.log
создать в каталоге /etc/newsyslog.conf.d
файл ntpd.conf
/var/log/ntp.log 644 7 100 * JC
использовать файл конфигурации /etc/ntp.conf
по умолчанию, необходимо наличие модуля ядра mac_ntpd, пользователя:группы ntpd:ntpd (123:123)
добавить в /etc/rc.conf
строки
ntpd_enable="YES" ntpd_sync_on_start="YES"
Для диагностики состояния NTP-сервера использовать команду ntpq -p. Она выводит таблицу, например, следующего вида
remote refid st t when poll reach delay offset jitter ============================================================================== +93.185.187.89 62.149.0.30 2 u 645 1024 337 44.937 -3.099 3.926
Строки в таблице соответствуют NTP-серверам, указанным в файле /etc/ntp.log
. Описания столбцов
remote
содержит маркер и FQDN или IP-адрес NTP-сервера. Некоторые полезные значения маркера
'*' - сервер, с которым выполняется синхронизация
'+' - сервер добавлен в список серверов, отобранных для синхронизации
'-' - сервер отвергнут группирующим алгоритмом
' ' - сервер не годится для синхронизации
refid
- IP-адрес сервера, с которым в настоящий момент выполняется синхронизация сервера из столбца remote
st
- stratum сервера
t
- режим работы сервера (local, unicast, multicast, broadcast)
when
- время, прошедшее с момента последнего ответа сервера в секундах ('-' - если сервер ещё ни разу не ответил)
poll
- интервал опроса сервера в секундах (с течением времени увеличивается)
reach
- состояние восьми последних попыток запроса времени у сервера в восьмеричном представлении (в случае успешной попытки устанавливается соответствующий бит)
delay
- задержка ответа сервера в миллисекундах
offset
- различие локального времени и времени на сервере в миллисекундах (с течением времени уменьшается)
jitter
- дисперсия, дрожанием фазы в миллисекундах (меньшее значение даёт более точную синхронизацию)
Рассмотрим пример организации анонимного FTP-сервера. В каталоге /usr/gamma/ftp/pub
хранятся файлы для чтения, в каталог /usr/gamma/ftp/upload
- записываются
На сервере выполнить
создать группу и пользователя ftp (без пароля)
pw group add -n ftp
pw user add -n ftp -c "FTP anonimnij pol'zovatel" -d /usr/gamma/ftp -g ftp -s /sbin/nologin
выполнить
cd /usr/gamma/ftp
mkdir etc
mkdir pub
mkdir upload
в каталог pub
скопировать каталоги и файлы, к которым будет открыт доступ по ftp. Имена файлов должны быть в кодировке UTF-8
выполнить
cd /usr/gamma
chown root ftp
chmod 555 ftp
chown root ftp/etc
chmod 555 ftp/etc
chown -R root ftp/pub
chmod -R 444 ftp/pub
chmod -R +X ftp/pub
chown ftp ftp/upload
chmod 755 ftp/upload
файлы в каталоге etc
и pub
должны иметь режим доступа 444
создать файл /var/log/ftpd
touch /var/log/ftpd
добавить в файл /etc/rc.conf
строки (анонимный ftp, поддерживает режим кодировки UTF-8, протоколирует все ftp-сессии в /var/log/xferlog
и анонимные загрузки файлов в /var/log/ftpd
)
ftpd_enable="YES" # не путать с lukemftpd ftpd_program="/usr/libexec/ftpd" ftpd_flags="-A -8 -l -S"
для работы FTP-сервера в пассивном режиме на сервере требуется открыть входящий tcp-порт 21 и диапазон входящих tcp-портов от 49152 до 65535 включительно
Для анонимного FTP-сервера с возможностью записи есть опасность переполнения диска
На сервере 192.168.2.1 организовать доступ из локальной Windows-сети 192.168.2.x (маска подсети 255.255.255.0) к каталогу obmen
(чтение и запись), каталогу distr
(чтение и запись), а также stuff
(только чтение). Каталог obmen
находится в домашнем каталоге пользователя имя_пользователя
(то есть его владельцем является пользователь имя_пользователя
), каталог distr
- в каталоге /usr/gamma/smb_rw
, каталог stuff
- в каталоге /usr/gamma/smb_ro
(пользователь имя_пользователя
имеет право на чтение содержимого каталога). Имена файлов представлены в кодировке utf-8
На компьютере-сервере выполнить
установить порт net/samba413
создать файл конфигурации /usr/local/etc/smb4.conf
[global] security = user map to guest = bad user guest account =имя_пользователя
interfaces = em0 lo bind interfaces only = yes hosts allow = 192.168.2. log file = /var/log/samba4/log.%m max log size = 50 unix charset = utf8 dos charset = cp866 create mask = 0644 directory mask = 0755 printcap name = /dev/null printing = bsd load printers = no # disable NetBIOS disable netbios = yes smb ports = 445 # disable SMBv1 server min protocol = SMB2 [obmen] comment = Read And Write path = /usr/home/имя_пользователя
/obmen guest ok = yes only guest = yes writable = yes printable = no [stuff] comment = Read Only path = /usr/gamma/smb_ro guest ok = yes only guest = yes writable = no printable = no [distr] comment = Read And Write path = /usr/gamma/smb_rw guest ok = yes only guest = yes writable = yes printable = no
для проверки конфигурационного файла smb.conf
выполнить команду
testparm
добавить в /etc/rc.conf
строку
samba_server_enable="YES" nmbd_enable="NO" winbindd_enable="NO"
на компьютере-сервере разрешить входящие соединения из локальной сети по порту 445/tcp. При использовании "NetBIOS over TCP/IP" необходимо разрешить входящие соединения по портам 139/tcp (session services), 137/udp (name services) и 138/udp (datagram services), а также входящие широковещательные соединения по портам 137/udp и 138/udp
Для работы межсетевого экрана pf проверить наличие следующих опций в файле конфигурации ядра
device pf device pflog device pfsync
Для работы altq проверить наличие следующих опций в файле конфигурации ядра
options ALTQ options ALTQ_CBQ # Class Bases Queuing (CBQ) options ALTQ_RED # Random Early Detection (RED) options ALTQ_RIO # RED In/Out options ALTQ_HFSC # Hierarchical Packet Scheduler (HFSC) options ALTQ_PRIQ # Priority Queuing (PRIQ) options ALTQ_NOPCC # Required for SMP build
Нужно помнить, что pf
использует последнее подходящее правило, если не указано слово quick
преобразование сетевых адресов всегда выполняется до фильтрации (анализа правил). Для всех сетевых интерфейсов и для любого пакета (как входящего, так и исходящего)
использует сетевой интерфейс pflog0
для ведения логов
не использует преимущества многопроцессорных систем
Рассмотрим пример простой сети, где шлюз имеет сетевые интерфейсы
em0
- adsl-модем в режиме моста
em1
(IP-адрес 192.168.56.2, маска подсети 255.255.255.0) - компьютеры локальной сети
Задача
обеспечить доступ в Интернет с компьютеров локальной сети по следующим портам tcp/udp
tcp 80, 443 - просмотр Web-содержимого
tcp 81 - проверка настройки портов в eMule
tcp 4242, 1176, 3883, 7111, 4184, 9939, 1887 - соединение eMule с серверами ed2k
tcp 194, 6667 - IRC-клиент в eMule
udp 123 - синхронизация времени по протоколу NTP
udp 5060, 7078, 9078 - Linphone
tcp/udp диапазон портов от 10000 до 65000 включительно, а также tcp 2710 - uTorrent
tcp 2802 - WebMoney
Также с компьютеров локальной сети должен быть доступен порт udp 53, причём при поступлении запроса из локальной сети к шлюзу на порт udp 53, запрос должен перенаправляться на DNS-сервер
"пробросить" порты tcp/udp 10474 (uTorrent), tcp 63274 и udp 31637 (eMule), а также tcp 42096 (Skype) из Интернет в локальную сеть для компьютера 192.168.56.1
обеспечить доступ в Интернет по прикладному протоколу ftp (пассивный) со всех компьютеров локальной сети
обеспечить доступ из Интернет к ssh-серверу (порт 443), установленному на шлюзе
если текущая дата 1 декабря 2009 года или более поздняя, записать в файл /var/log/sessions
дату и время установки Интернет-соединения, а после разъединения - дату и время окончания, количество переданных и принятых байт
Настройки на шлюзе
в файл /etc/rc.conf
добавить опцию gateway_enable="YES"
, правильно настроить сетевые интерфейсы, программу mpd
создать файл конфигурации /etc/pf.conf
table <rfc1918> const { 192.168.0.0/16, 172.16.0.0/12, 10.0.0.0/8 } persist table <bogons> persist file "/etc/bogons" table <server_dns> {8.8.8.8, 8.8.4.4} persist vnutr_if="em1" tcp_ports_vnutr2vnesh="{80,443, 2710, 81,4242,1176,3883,7111,4184,9939,1887, 194,6667, 10000:65000, 2802 }" udp_ports_vnutr2vnesh="{123, 5060,7078,9078, 10000:65000 }" tcp_ports_vnesh2vnutr="{10474, 63274, 42096 }" udp_ports_vnesh2vnutr="{10474, 31637 }" set block-policy return set loginterface none set skip on lo0 scrub in all rdr on $vnutr_if inet proto udp from $vnutr_if:network to $vnutr_if port 53 -> <server_dns> round-robin # ftp nat-anchor "ftp-proxy/*" rdr-anchor "ftp-proxy/*" rdr pass on $vnutr_if inet proto tcp from $vnutr_if:network to any port 21 -> 127.0.0.1 port 8021 # rdr-anchor "vnesh_if_filter/*" nat-anchor "vnesh_if_filter/*" antispoof quick for $vnutr_if inet block return log on $vnutr_if all pass on $vnutr_if inet proto icmp all keep state pass in on $vnutr_if inet proto udp to <server_dns> port 53 keep state pass in on $vnutr_if inet proto tcp to any port 443 keep state pass in on $vnutr_if inet proto tcp to any port $tcp_ports_vnutr2vnesh keep state pass in on $vnutr_if inet proto udp to any port $udp_ports_vnutr2vnesh keep state pass out on $vnutr_if inet proto tcp to 192.168.56.1 port $tcp_ports_vnesh2vnutr keep state pass out on $vnutr_if inet proto udp to 192.168.56.1 port $udp_ports_vnesh2vnutr keep state anchor "ftp-proxy/*" anchor "vnesh_if_filter_tmp/*" anchor "vnesh_if_filter/*"
в файл /etc/rc.conf
добавить строки (межсетевой экран включается сразу после загрузки ПК)
pf_enable="YES" pf_rules="/etc/pf.conf" pflog_enable="YES" ftpproxy_enable="YES"
изменить файлы
/etc/ppp/kommandSoed.sh
(изменение правил после установки соединения и появлении сетевого интерфейса)
#!/bin/sh if test "`date +%y%m%d`" -ge 091201 then echo "Nachalo: "`date "+DATA: %d-%m-%Y VREM: %H:%M:%S"` >> /var/log/sessions; fi; echo "set loginterface $1" | pfctl -mOf -; echo " block drop on $1 all pass out on $1 inet proto udp from $1 to <server_dns> port 53 keep state pass out on $1 inet proto tcp from $1 to any port 80 keep state " | pfctl -a vnesh_if_filter_tmp/$1 -f -; /usr/local/bin/inadyn --background -u имя_пользователя -p пароль -a имя_хоста --syslog; sleep 300; killall -HUP inadyn; pfctl -a vnesh_if_filter_tmp/$1 -F all; echo " rdr on $1 inet proto tcp from any to $1 port {10474, 63274, 42096 } -> 192.168.56.1 rdr on $1 inet proto udp from any to $1 port {10474, 31637} -> 192.168.56.1 nat on $1 inet proto udp from em1:network to <server_dns> port 53 -> $1 nat on $1 inet proto tcp from em1:network to any port {80,443, 2710, 81,4242,1176,3883,7111,4184,9939,1887, 194,6667, 10000:65000, 2802 } -> $1 nat on $1 inet proto udp from em1:network to any port {123, 5060,7078,9078, 10000:65000 } -> $1 nat on $1 inet proto icmp from em1:network to any -> $1 antispoof quick for $1 inet block drop in log quick on $1 from { <bogons>, <rfc1918> } to any block drop out log quick on $1 from any to { <bogons>, <rfc1918> } block drop log on $1 all pass on $1 inet proto icmp all icmp-type 8 code 0 keep state pass out on $1 inet proto udp to <server_dns> port 53 keep state pass in on $1 inet proto tcp to any port 443 keep state pass in on $1 inet proto tcp to any port {10474, 63274, 42096 } keep state pass in on $1 inet proto udp to any port {10474, 31637} keep state pass out on $1 inet proto tcp to any port {80,443, 2710, 81,4242,1176,3883,7111,4184,9939,1887, 194,6667, 10000:65000, 2802 } keep state pass out on $1 inet proto udp to any port {123, 5060,7078,9078, 10000:65000 } keep state pass out inet proto tcp from $1 to any port 21 " | pfctl -a vnesh_if_filter/$1 -f -;
/etc/ppp/kommandOtsoed.sh
(сброс правил после разрыва соединения и удаления сетевого интерфейса)
#!/bin/sh if test "`date +%y%m%d`" -ge 091201 then echo "Okonchan: "`date "+DATA: %d-%m-%Y VREM: %H:%M:%S"` >> /var/log/sessions; echo "Prinyato: "`pfctl -s info | awk '/Bytes In/ { print $3 }'` >> /var/log/sessions; echo "Otpravle: "`pfctl -s info | awk '/Bytes Out/ { print $3 }'` >> /var/log/sessions; fi; pfctl -F info; echo "set loginterface none" | pfctl -mOf -; pfctl -a vnesh_if_filter/$1 -F all;
Правила межсетевого экрана имеют особенности
все приходящие и исходящие пакеты для каждого интерфейса по умолчанию блокируются. Если для пакета нет разрешающего правила, блокировка протоколируется (записывается в лог)
при блокировке пакета на интерфейсе, который смотрит в локальную сеть, выполняется уведомление отправителя о блокировке (block return). Для интерфейса сети Интернет уведомление не выполняется (block drop), чтобы не загружать канал
в правилах используется якорь vnesh_if_filter, в котором содержатся правила NAT и правила фильтрации для подключенного Интернет-соединения. Так как наименование сетевого интерфейса, к которому подключен Интернет, заранее неизвестно, с помощь якоря vnesh_if_filter правила подгружаются и удаляются при подключении (создании сетевого интерфейса) и отключении (удалении сетевого интерфейса) Интернет
В файле /etc/bogons
содержатся IP-адреса, доступ к которым запрещён. Для обновления списка адресов используется скрипт rc.update_bogons.sh. Файл скрипта находится в каталоге /etc
, его владелец - пользователь root, права 700. Для выполнение скрипта в файл /etc/crontab
добавлена строка
1 3 1 * * root /usr/bin/nice -n20 /etc/rc.update_bogons.sh
Полезные команды для управления pf
включение
pfctl -e
выключение
pfctl -d
показать список правил
pfctl -s rules
показать список правил и число пакетов, к которым применено каждое правило
pfctl -v -s rules
показать конфигурацию NAT
pfctl -s nat
Для работы межсетевого экрана ipfw нужно
добавить в файл конфигурации ядра
options IPFIREWALL options IPFIREWALL_VERBOSE options IPFIREWALL_VERBOSE_LIMIT=5 #options IPFIREWALL_DEFAULT_TO_ACCEPT options IPFIREWALL_NAT options DUMMYNET options LIBALIAS
или добавить в файл /boot/loader.conf
строки (нужны модули ядра ipfw, ipfw_nat, dummynet, libalias)
ipfw_load="YES" ipfw_nat_load="YES" dummynet_load="YES"
добавить в файл /etc/sysctl.conf
строки
net.inet.ip.fw.verbose=1 net.inet.ip.fw.verbose_limit=5
Нужно помнить, что ipfw
использует первое подходящее правило
использует действие nat
для прямого и обратного преобразования сетевых адресов
использует для ведения логов syslogd, по умолчанию журнал /var/log/security
использует преимущества многопроцессорных систем
Рассмотрим пример простой сети, где шлюз имеет сетевые интерфейсы
igb0
(IP-адрес 192.168.0.2, маска подсети 255.255.255.0, адрес присваивается DHCP-сервером 192.168.0.1) - роутер
igb1
(IP-адрес 192.168.2.1, маска подсети 255.255.255.0) - компьютеры локальной сети
Задача
обеспечить доступ в Интернет со шлюза и компьютеров локальной сети по портам tcp 21, 22, 25, 80, 443, 2802 (WebMoney Keeper WinPro), 4477 (Сбербанк Онлайн для Android), 5061 (сигнальная информация протокола SIP поверх TLS), 10000-65535, портам udp 53, 123, 1024-65535 (речевая информация протокола RTP). Исходящий трафик по протоколу icmp должен быть разрешён на внешнем сетевом интерфейсе
обеспечить доступ в Интернет со шлюза по портам tcp 465, 995
"пробросить" порты tcp/udp 10474, tcp 63274, udp 31637 из Интернет в локальную сеть для компьютера 192.168.2.2
обеспечить доступ из Интернет к ssh-серверу (порт tcp 443), установленном на шлюзе
ограничить общую скорость (отдельно для входящего и исходящего трафика) для некоторых хостов в локальной сети
Настройки на шлюзе
в /etc/rc.conf
добавить опцию gateway_enable="YES"
, правильно настроить сетевые интерфейсы, программу mpd
создать файл /etc/ipfw.rules
#!/bin/sh ########################## nachalo pravil ####################### ipfw -q -f flush ipfw disable one_pass cmd="ipfw -q add" skip="skipto 800" # interfeis vneshnej seti pif="igb0" # nat config ipfw -q nat 1 config if igb0 log \ redirect_port tcp 192.168.2.2:10474 10474 \ redirect_port udp 192.168.2.2:10474 10474 \ redirect_port tcp 192.168.2.2:63274 63274 \ redirect_port udp 192.168.2.2:31637 31637; # pipe config # download speed ipfw -q pipe 1 config bw 10000Kbit/s; # upload speed ipfw -q pipe 2 config bw 10000Kbit/s; # interfeis local'noj seti lif="igb1" # lokal'naja set' lan="192.168.2.0/24" # razr. porti iz vnutr. seti tcp_ports_vnutr2vnesh="21, 22, 25, 80, 443, 2802, 4477, 5061, 10000-65535" udp_ports_vnutr2vnesh="123, 1024-65535" # host v lokal. seti dlia portov vnesh2vnutr lan_host1="192.168.2.2" # razr. porti dlya lan_host1 tcp_ports_vnesh2vnutr_lh1="10474, 63274" udp_ports_vnesh2vnutr_lh1="10474, 31637" # hosti v lokal. seti dlya ogranicheniya skorosti lan_host_bw="192.168.2.3,192.168.2.4,192.168.2.5,192.168.2.6" # DNS ipfw table 1 create type addr ipfw table 1 add 8.8.8.8 ipfw table 1 add 8.8.4.4 # zapr. podseti ipfw table 2 create type addr ipfw table 2 add 192.168.0.0/16 ipfw table 2 add 172.16.0.0/12 ipfw table 2 add 10.0.0.0/8 ipfw table 2 add 127.0.0.0/8 ipfw table 2 add 0.0.0.0/8 ipfw table 2 add 169.254.0.0/16 ipfw table 2 add 192.0.2.0/24 ipfw table 2 add 204.152.64.0/23 ipfw table 2 add 224.0.0.0/3 ################################################################# $cmd 005 allow proto ip src-ip any dst-ip any via lo0 $cmd 010 allow proto ip src-ip any dst-ip any via $lif $cmd 014 nat 1 proto ip src-ip any dst-ip me in via $pif # download speed dlya hostov $cmd 015 pipe 1 proto ip src-ip any dst-ip $lan_host_bw in via $pif $cmd 016 check-state ################################################################# $cmd 100 $skip proto icmp src-ip any dst-ip any out via $pif icmptypes 8 keep-state $cmd 106 $skip proto udp src-ip any dst-ip table\(1\) dst-port 53 out via $pif keep-state $cmd 107 $skip proto tcp src-ip any dst-ip any dst-port $tcp_ports_vnutr2vnesh out via $pif setup keep-state $cmd 108 $skip proto udp src-ip any dst-ip any dst-port $udp_ports_vnutr2vnesh out via $pif keep-state # POCHTA $cmd 120 $skip proto tcp src-ip me dst-ip any dst-port 465, 995 out via $pif setup keep-state # DHCP $cmd 121 $skip proto udp src-ip me dst-ip 192.168.0.1 dst-port 67 out via $pif keep-state $cmd 199 deny log proto ip src-ip any dst-ip any out via $pif ################################################################# $cmd 300 deny proto ip src-ip table\(2\) dst-ip any in via $pif $cmd 305 deny proto icmp src-ip any dst-ip any in via $pif $cmd 306 deny proto ip src-ip any dst-ip any not verrevpath in via $pif $cmd 315 deny proto tcp src-ip any dst-ip any dst-port 113 in via $pif $cmd 320 deny proto tcp src-ip any dst-ip any dst-port 81, 137, 138, 139 in via $pif $cmd 330 deny proto ip src-ip any dst-ip any frag in via $pif $cmd 332 deny proto tcp src-ip any dst-ip any established in via $pif # TORRENT, eMule lan_host1 $cmd 340 $skip proto tcp src-ip any dst-ip $lan_host1 dst-port $tcp_ports_vnesh2vnutr_lh1 in via $pif keep-state $cmd 341 $skip proto udp src-ip any dst-ip $lan_host1 dst-port $udp_ports_vnesh2vnutr_lh1 in via $pif keep-state # SSH $cmd 380 allow proto tcp src-ip any dst-ip me dst-port 443 in via $pif setup limit src-addr 2 $cmd 399 deny log proto ip src-ip any dst-ip any in via $pif ################################################################# # upload speed dlya hostov $cmd 800 pipe 2 proto ip src-ip $lan_host_bw dst-ip any out via $pif $cmd 801 nat 1 proto ip { src-ip $lan or src-ip me } dst-ip any out via $pif $cmd 802 allow proto ip src-ip any dst-ip any # zapretit' vse paketi $cmd 999 deny log proto ip src-ip any dst-ip any ######################## konez pravil ###########################
добавить в файл /etc/rc.conf
firewall_enable="YES" firewall_script="/etc/ipfw.rules"
если интерфейс igb0 подключен к модему и устанавливается pppoe-соединение (создаётся интерфейс с именем ng0), выполняем действия
изменить файл /etc/ipfw.rules
изменить строку
pif="igb0"
на
pif="ng0"
удалить настройку для nat и pipe
удалить правило с номером 121 для доступа к серверу DHCP
изменить файлы
/etc/ppp/kommandSoed.sh
(настройка NAT после установки соединения и появлении сетевого интерфейса, если интерфейс ng0 не существует, команда выдаст ошибку)
#!/bin/sh # probros portov dlya torrent i emule (ipfw razreshen) ipfw -q nat 1 config if ng0 log \ redirect_port tcp 192.168.2.2:10474 10474 \ redirect_port udp 192.168.2.2:10474 10474 \ redirect_port tcp 192.168.2.2:63274 63274 \ redirect_port udp 192.168.2.2:31637 31637; # download speed ipfw -q pipe 1 config bw 10000Kbit/s; # upload speed ipfw -q pipe 2 config bw 10000Kbit/s;
/etc/ppp/kommandOtsoed.sh
(удаление NAT после разрыва соединения и удаления сетевого интерфейса)
#!/bin/sh ipfw -q nat 1 delete
Полезные команды для управления ipfw
включение
ipfw enable firewall
выключение
ipfw disable firewall
показать список правил
ipfw list
показать список правил (в том числе динамических) и число пакетов, к которым применено каждое правило
ipfw -d show
показать конфигурацию NAT
ipfw nat show config
показать параметры sysctl
относящиеся к ipfw
sysctl -a | grep net.inet.ip.fw
установить порт net/isc-dhcp44-server
создать в каталоге /usr/local/etc/syslog.d
файл dhcpd.conf
!dhcpd local7.debug /var/log/dhcpd.log
выполнить команды и перезапустить syslog
touch /var/log/dhcpd.log
chmod 644 /var/log/dhcpd.log
создать в каталоге /usr/local/etc/newsyslog.conf.d
файл dhcpd.conf
/var/log/dhcpd.log 644 7 100 * JC
скопировать файл конфигурации /usr/local/etc/dhcpd.conf.sample
в /usr/local/etc/dhcpd.conf
. Отредактировать файл конфигурации
# dhcpd.conf # dhcpd.conf # # Sample configuration file for ISC dhcpd # # option definitions common to all supported networks... option domain-name "example.org"; default-lease-time 86400; max-lease-time 172800; # Use this to enble / disable dynamic dns updates globally. ddns-update-style none; # If this DHCP server is the official DHCP server for the local # network, the authoritative directive should be uncommented. #authoritative; # Use this to send dhcp log messages to a different log file (you also # have to hack syslog.conf to complete the redirection). log-facility local7; # shlyuz po umolchaniyu odinakovij dlya hostov domena i rabochej gruppi subnet 192.168.2.0 netmask 255.255.255.0 { option routers 192.168.2.1; } # hosti rabochej gruppi group { option domain-name-servers 192.168.2.1; host homework { hardware ethernet c4:6d:04:2e:e5:95; fixed-address 192.168.2.2; } host winxp { hardware ethernet 08:00:27:ad:9c:2f; fixed-address 192.168.2.9; } host linuxoracle { hardware ethernet 08:00:27:c9:81:bb; fixed-address 192.168.2.11;} host sles { hardware ethernet 08:00:27:94:4f:3a; fixed-address 192.168.2.12;} host notebook { hardware ethernet f4:6d:04:2e:e5:95; fixed-address 192.168.2.10;} } # hosti domena group { option domain-name-servers 192.168.2.3; host contoso-dc { hardware ethernet 08:00:27:A9:BE:08; fixed-address 192.168.2.3; } host contoso-sql { hardware ethernet 08:00:27:87:74:30; fixed-address 192.168.2.4; } host contoso-sccm { hardware ethernet 08:00:27:D3:9D:46; fixed-address 192.168.2.5; } host contoso-scom { hardware ethernet 08:00:27:ED:16:6A; fixed-address 192.168.2.6; } host refpc-virt { hardware ethernet 08:00:27:B6:B3:7A; fixed-address 192.168.2.7; } host tstpc-phys { hardware ethernet 68:05:CA:27:83:E9; fixed-address 192.168.2.8; } }
добавить в файл /etc/rc.conf
(имена_сетевых_интерфейсов
- имена сетевых интерфейсов, разделённые пробелами, на которых сервер DHCP должен принимать запросы от клиентов)
dhcpd_enable="YES"
dhcpd_flags="-q"
dhcpd_ifaces="имена_сетевых_интерфейсов
"
установить порт www/apache22
и lang/php5
проверить, чтобы в файле конфигурации /usr/local/etc/apache22/httpd.conf
(далее - файл конфигурации вэб-сервера) были строки
ServerName 192.168.1.2:80 DocumentRoot "/usr/local/www/apache22/data" <Directory /> AllowOverride None Order deny,allow Deny from all </Directory> <Directory "/usr/local/www/apache22/data"> AllowOverride None Order allow,deny Allow from all </Directory> <Directory "/usr/local/www/apache22/cgi-bin"> AllowOverride None Options None Order allow,deny Allow from all </Directory> <IfModule dir_module> DirectoryIndex index.html index.shtml index.php </IfModule>
для включения поддержки php существует 2 способа
загрузка библиотеки php при старте вэб-сервера. При изменении параметров интерпретатора php необходим перезапуск вэб-сервера. В файле конфигурации вэб-сервера должны присутствовать строки
LoadModule php5_module libexec/apache22/libphp5.so <IfModule php5_module> AddType application/x-httpd-php .php </IfModule>
запуск интерпретатора php при обработке файлов со скриптами php. При изменении параметров интерпретатора php перезапуск вэб-сервера не нужен. В файле конфигурации вэб-сервера должны присутствовать строки
AddType application/x-httpd-php .php <Directory "/usr/local/bin"> Options ExecCGI Order allow,deny allow from all </Directory> ScriptAlias "/php_dir/" "/usr/local/bin/" Action application/x-httpd-php "/php_dir/php-cgi"
в каталоге /usr/local/etc
есть файлы-примеры php.ini-dist
и php.ini-recommended
. Для конфигурирования интерпретатора php (любым из 2-х способов) создать каталог /usr/local/etc/php
, а в ней файл php.ini
. В файл php.ini
добавить строки
error_reporting = E_ALL & ~E_NOTICE display_errors = On variables_order = "EGPCS"
При работе php-скриптов будут отображаться все ошибки, а "замечания" будут игнорироваться
register_globals = On
Переменные, передаваемые метором GET
, POST
, через cookies
и сессии можно использовать в php-скрипте, обращаясь к ним просто как к обычным переменным $someone
. Если директива register_globals = Off
, то к таким переменным можно будет обращаться только при помощи суперглобальных массивов ($_POST
, $_GET
и т.п.)
register_long_arrays = On
Позволяет использовать суперглобальные массивы в старом формате ("длинном" - $HTTP_GET_VARS
, $HTTP_POST_VARS
и т.д.)
создать файл /usr/local/www/apache22/data/index.php
<html> <body> <h1>It works!</h1> <?php phpinfo(); ?> </body> </html>
Если после перезапуска apache22 открыть браузер и ввести адрес 192.168.1.2, должна появиться конфигурация php
в файл конфигурации вэб-сервера для включения SSI в директиве <Directory> Options
добавить значение IncludesNOEXEC
, в разделе <IfModule mime_module>
добавить строки
AddType text/html .shtml AddOutputFilter INCLUDES .shtml
для того, чтобы можно было заходить на сайт в виде http://192.168.1.2/~имя_пользователя/имя_сайта, добавить в файл конфигурации вэб-сервера строки
UserDir disabled root UserDir www/data
Лучше, однако, отредактировать файл /usr/local/etc/apache22/extra/httpd-userdir.conf
(см. директивы UserDir
и Directory
) и раскоментировать строку Include etc/apache22/extra/httpd-userdir.conf
в файле конфигурации вэб-сервера. Все сайты пользователя нужно поместить в каталог ~/www/data
для настройки виртуального хостинга в файле конфигурации вэб-сервера (обычно в конце) используется конструкция вида (в ней всегда использовать IP-адреса)
NameVirtualHost 127.0.0.1:80 <VirtualHost 127.0.0.1:80> # host 1 </VirtualHost> <VirtualHost 127.0.0.1:80> # host 2 </VirtualHost> <VirtualHost 127.0.0.1:80> # host 3 </VirtualHost>
например
<VirtualHost 127.0.0.1:80> ServerAdmin webmaster@may_domain.ru DocumentRoot c:/www/mysite ServerName www.mysite.ru ServerAlias www.site.ru www.host2.ru ErrorLog logs/mysite-error.log CustomLog logs/mysite-access.log common </VirtualHost>
для запуска apache22 при загрузке компьютера, добавить в /etc/rc.conf
строку
apache22_enable="YES"
для загрузки модуля accf_http
(см. опцию AcceptFilter
настроек веб-сервера) добавить строку
apache22_http_accept_enable="YES"
установить порт databases/mysql50-server
. После установки запустить сервер командой /usr/local/etc/rc.d/mysql-server start
установить порт lang/php5-extensions
(выбрать опцию MySQL). После установки будет создан файл /usr/local/etc/php/extensions.ini
, в нём будет строка
extension=mysql.so
Для проверки конфигурации, ввести в адресную строку браузера адрес 192.168.1.2, в конфигурации php должна присутствовать таблица MySQL
установить пароль администратора баз данных командой
mysqladmin -u root password пароль
для удобства администрирования баз данных MySQL установить порт databases/phpmyadmin
. После установки внести в файл конфигурации вэб-сервера строки
Alias /phpmyadmin/ "/usr/local/www/phpMyAdmin/" <Directory "/usr/local/www/phpMyAdmin/"> Options none AllowOverride Limit Order Deny,Allow Deny from all Allow from 192.168.1.2 </Directory>
Теперь можно войти по адресу http://192.168.1.2/phpmyadmin/, ввести имя пользователя root
и пароль, внесённый на предыдущем шаге
для запуска mysql при старте компьютера, добавить в /etc/rc.conf
строку
mysql_enable="YES"
если запущен devd, то, в зависимости от настроек в файле /etc/devd.conf
, монтирование может быть выполнено автоматически. Для отключения devd нужно добавить в файл /etc/rc.conf
строку
devd_enable="NO"
в файл /etc/sysctl.conf
добавить строку
vfs.usermount=1
Проверить, чтобы пользователь, который будет монтировать устройства, состоял в группе operator
зайти под пользователем и создать каталог ~/mnt
(будет являться точкой монтирования)
определить права на устройства
для устройств с динамическими именами (например, флэшка) создать файл /etc/devfs.rules
[localrules=5] add path 'da[0-9]*' mode 0660 group operator
В файл /etc/rc.conf
добавить строки
devfs_enable="YES" devfs_system_ruleset="localrules"
для устройств со статическими именами (например, CD/DVD-ROM) в файл /etc/devfs.conf
добавить строки
own acd0 root:operator perm acd0 0660 # для записи дисков пользователем own cd0 root:operator perm cd0 0660 own xpt0 root:operator perm xpt0 0660 own pass0 root:operator perm pass0 0660
для монтирования устройств с именами, содержащими русские символы, необходимо написать скрипт /usr/local/etc/rc.d/kiconvtool
#!/bin/sh # PROVIDE: kiconvtool # REQUIRE: . /etc/rc.subr name="kiconvtool" rcvar=`set_rcvar` stop_cmd="kiconvtool_stop" start_cmd="kiconvtool_start" kiconvtool_start() { mount -t msdosfs -o -L=ru_RU.UTF-8 -o -D=CP866 -o -l /dev/zero /mnt 2>/dev/null echo "Hello, world!" } kiconvtool_stop() { echo "Ne nuzhno" } load_rc_config $name run_rc_command "$1"
Сделать скрипт исполняемым, определить владельца и группу командами
chmod 555 kiconvtool
chown root:wheel kiconvtool
В файл /etc/rc.conf
добавить строку
kiconvtool_enable="YES"
в файл /boot/loader.conf
добавить строки (нужны модули ядра libiconv, cd9660_iconv, msdosfs_iconv)
cd9660_iconv_load="YES" msdosfs_iconv_load="YES"
после перезагрузки и входа в систему под пользователем монтирование устройств в точку монтирования ~/mnt
должно работать
Примеры
монтирование флэшки с файловой системой FAT32
mount -t msdosfs -o -L="ru_RU.UTF-8" -o -D="CP866" -o -l -o -m=644,-M=755 -o sync /dev/da0s1 ~/mnt
монтирование CD/DVD-диска
mount -t cd9660 -o -CUTF-8 /dev/acd0 ~/mnt
для записи на DVD-приводе (не USB-устройстве) необходимо наличие устройства /dev/cd0 (драйвер для работы с ATAPI-устройствами через подсистему SCSI). Если его нет, нужно добавить в файл /boot/loader.conf
строки (нужен модуль ядра ata/atapicam)
atapicam_load="YES"
После перезагрузки устройство /dev/cd0 должно появиться
создадим файл-образ содержимого каталога ~/temp/dannie_dlya_zapisi
с помощью команды (имена файлов не должны содержать более 64 символов)
mkisofs -jcharset koi8-r -o ~/temp/imagefile.iso ~/temp/dannie_dlya_zapisi
(иерархия будет начинаться со следующего уровня, т.е. не со слова "dannie_dlya_zapisi")
Имена файлов в каталоге ~/temp/dannie_dlya_zapisi
должны быть в кодировке koi8-r. Если имена файлов записаны в кодировке UTF-8, выполнить
convmv -f utf-8 -t koi8-r -r ~/temp/dannie_dlya_zapisi --notest
(если имя каталога "dannie_dlya_zapisi" будет написано кириллицей, оно также будет конвертировано, имя каталога "temp" - нет)
для проверки результата работы команды mkisofs после создания файла образа (если текущая локаль UTF-8), использовать команды
mdconfig -a -t vnode -f ~/temp/imagefile.iso
mount -t cd9660 -o -CUTF-8 /dev/md0 ~/mnt
запись CD-R-диска (для однократной записи) файла образа с закрытием сессии на устройстве, соответствующем стандарту ATAPI
burncd -f /dev/acd0 data ~/temp/imagefile.iso fixate
запись DVD-R-диска (для однократной записи) файла образа
growisofs -dvd-compat -speed=1 -Z /dev/cd0=/home/user/temp/imagefile.iso
growisofs устанавливается из порта sysutils/dvd+rw-tools
. На обычный диск DVD-R записывается не более 4706074624 байт (2297888 блоков по 2048 байт)
Рассмотрим пример передачи файлов с компьютера на сотовый телефон по Bluetooth
добавить в /boot/loader.conf
(нужен модуль ядра netgraph/bluetooth)
ng_ubt_load="YES"
подключить адаптер Bluetooth (появится устройство /dev/ubt0)
если не запущен devd, выполнить
/etc/rc.d/bluetooth start ubt0
Если devd запущен, команда должна быть выполнена автоматически. Для того, чтобы проверить, что команда отработала, в выводе команды ngctl list должны присутствовать имена ubt0hci
, ubt0l2cap
, ubt0
включить Bluetooth на сотовом телефоне, затем выполнить
hccontrol -n ubt0hci inquiry
появится список доступных устройств, в /etc/bluetooth/hosts
добавить MAC-адрес
xx:xx:xx:xx:xx:xx TEL
Узнать, какие профили поддерживает устройство TEL, можно с помощью команды
sdpcontrol -a TEL browse
в /etc/bluetooth/hcsecd.conf
добавить строки
device { bdaddr xx:xx:xx:xx:xx:xx; name "MOJ TELEFON"; key nokey; # 16 bytes key (hex string) pin "1112"; }
в /etc/rc.conf
добавить
hcsecd_enable="YES"
для приёма/передачи файлов установить obexapp из порта comms/obexapp
. Для запуска obexapp использовать команду
obexapp -a TEL -C FTRN
MTA sendmail на локальном компьютере не используется. В качестве MDA используется procmail (если нужен MDA, предоставляющий доступ к почтовым сообщениям по протоколу POP3, следует использовать dovecot), в качестве MUA - fetchmail (возможно использовать getmail) и mutt. В качестве SMTP-клиента используется msmtp (возможно использовать nbsmtp).
Установить порты mail/procmail
, mail/fetchmail
, mail/msmtp
, mail/mutt
, textproc/urlview
, www/lynx
зайти под пользователем, для которого настраивается почта, создать каталог ~/MuttMail
, в котором будут храниться все почтовые сообщения (входящие и исходящие письма) в формате mbox
создать файл настроек MDA ~/.procmailrc
PATH=/bin:/usr/bin:/usr/local/bin MAILDIR=$HOME/MuttMail DEFAULT=$MAILDIR/inbox LOGFILE=$MAILDIR/from :0 * .* $DEFAULT
создать файл настроек MUA ~/.fetchmailrc
(сервер
- имя POP3-сервера, имя_пользователя
- имя пользователя, пароль
- пароль для входа на POP3-сервер). При записи пароля в файл ~/.fetchmailrc
символ "\" должен быть записан как два символа "\\"
pollсервер
protocol pop3 user "имя_пользователя
" password "пароль
"
создать файл настроек SMTP-клиента ~/.msmtprc
(сервер
- имя SMTP-сервера, адрес_электронной_почты
- адрес электронной почты, имя_пользователя
- имя пользователя, пароль
- пароль для входа на SMTP-сервер)
account default auth plain hostсервер
fromадрес_электронной_почты
userимя_пользователя
passwordпароль
создать файл настроек MUA ~/.muttrc
(адрес_электронной_почты
- адрес электронной почты, реальное_имя_пользователя
- настоящее имя пользователя)
# генерация случайной подписи при создании письма set signature="./.podpis.sh|" # файл .podpis.sh исполняемый в домашнем каталоге, его содержимое # #!/bin/sh # printf "С уважением, \nИван Иванович" # курсор слева вместо строки выделения set arrow_cursor = yes # нет выделения thread'ов set ascii_chars = yes set pager_index_lines = 5 # не переходить к следующему сообщению set pager_stop=yes set sort = date-received set from =адрес_электронной почты
set realname = "реальное_имя_пользователя
" set charset = "koi8-r" set send_charset = "koi8-r" set record = "$HOME/MuttMail/sent" set include = yes set to_chars = " +TCF" set folder = $HOME/MuttMail set tmpdir = /tmp set postponed = $HOME/MuttMail/postponed mailboxes = $HOME/MuttMail/inbox $HOME/MuttMail/sent auto_view text/html macro index G "!fetchmail -a -m 'procmail -d %T'\r" macro pager G "!fetchmail -a -m 'procmail -d %T'\r" set sendmail = "/usr/local/bin/msmtp" ignore * unignore Date To From: Subject X-Mailer Organization User-Agent hdr_order Date From To Subject X-Mailer User-Agent Organization
Создать файл ~/.mailcap
text/html; lynx -assume_charset=%{charset} -dump '%s'; copiousoutput; description = HTML Text; nametemplate=%s.html
для того, чтобы файлы, содержащие имя пользователя и пароль, мог просмотреть и изменить только сам пользователь, выполнить команду
chmod 600 ~/.fetchmailrc ~/.msmtprc
для того, чтобы доступ к письмам имел только сам пользователь, выполнить команду
chmod 600 ~/MuttMail/from ~/MuttMail/inbox ~/MuttMail/postponed ~/MuttMail/sent
проверить настройки межсетевого экрана. Для приёма почты должен использоваться tcp-порт 110, для отправки tcp-порт 25
установить порт security/ca_root_nss
. После установки должен появиться файл с корневыми сертификатами /usr/local/share/certs/ca-root-nss.crt
работаем под пользователем, для которого настраиваем почту.
В конфигурационный файл ~/.fetchmailrc
добавить строки
ssl sslcertck sslcertfile /usr/local/share/certs/ca-root-nss.crt
В конфигурационный файл ~/.msmtprc
добавить строки
tls on tls_starttls off tls_trust_file /usr/local/share/certs/ca-root-nss.crt
mail/msmtp
должен быть собран с поддержкой OpenSSL
изменить настройки межсетевого экрана. Для приёма почты должен использоваться tcp-порт 995, для отправки tcp-порт 465
установить порты devel/icu
, x11/xorg
(не выбирать установку драйверов видеокарт, которые не будут использоваться)
установить нужный драйвер видеокарты. Для NVIDIA 7600GT использовать порт x11/nvidia-driver-304
(также может пригодиться порт x11/nvidia-settings
), после установки добавить в /boot/loader.conf
(нужен модуль ядра linux)
nvidia_load="YES" linux_load="YES"
включить devd, тогда при подключении usb-мыши devd автоматически запустит moused, который создаст устройство /dev/sysmouse
перезагрузить ПК
выполнить команду
Xorg -configure
Будет создан конфигурационный файл /root/xorg.conf.new
для тестирования конфигурационного файла выполнить
Xorg -config /root/xorg.conf.new
Если тестирование успешно (лог /var/log/Xorg.0.log
не содержит ошибок), переместить файл конфигурации в /etc/X11/xorg.conf
mv /root/xorg.conf.new /etc/X11/xorg.conf
в случае необходимости отредактировать файл /etc/X11/xorg.conf
Section "ServerLayout" Identifier "X.org Configured" Screen 0 "Screen0" 0 0 InputDevice "Mouse0" "CorePointer" InputDevice "Keyboard0" "CoreKeyboard" EndSection Section "Files" ModulePath "/usr/local/lib/xorg/modules" FontPath "/usr/local/share/fonts/misc/" FontPath "/usr/local/share/fonts/TTF/" FontPath "/usr/local/share/fonts/OTF/" FontPath "/usr/local/share/fonts/Type1/" FontPath "/usr/local/share/fonts/100dpi/" FontPath "/usr/local/share/fonts/75dpi/" EndSection Section "ServerFlags" Option "AutoAddDevices" "false" Option "DontVTSwitch" Option "BlankTime" "20" Option "StandbyTime" "30" Option "SuspendTime" "40" Option "Offtime" "45" EndSection Section "Module" Load "glx" EndSection Section "Extensions" EndSection Section "InputDevice" Identifier "Keyboard0" Driver "kbd" Option "CoreKeyboard" Option "XkbLayout" "us,ru" Option "XkbVariant" "winkeys" Option "XkbOptions" "grp:ctrl_shift_toggle" EndSection Section "InputDevice" Identifier "Mouse0" Driver "mouse" Option "Protocol" "auto" Option "Device" "/dev/sysmouse" Option "ZAxisMapping" "4 5" EndSection Section "Monitor" Identifier "Monitor0" VendorName "Samsung" ModelName "SyncMaster 710N" HorizSync 30.0-81.0 VertRefresh 56.0-75.0 Option "DPMS" EndSection Section "Device" Identifier "Card0" #Driver "ast" Driver "vesa" BusID "PCI:4:0:0" EndSection Section "Screen" Identifier "Screen0" Device "Card0" Monitor "Monitor0" SubSection "Display" Depth 24 #Modes "1280x1024" Modes "1920x1080" EndSubSection EndSection
для более привлекательного отображения шрифтов TrueType установить порты x11-fonts/webfonts
, x11-fonts/dejavu
, указать путь к шрифтам в секции Files
файла конфигурации X-сервера, выполнить команды mkfontdir и mkfontscale в каждом каталоге установленного шрифта
Сведения о работе X можно получить с помощью порта x11/xdpyinfo
Если размер ОЗУ равен 4Гб или более, используется версия FreeBSD для платформы i386 и видеокарта на чипе NVIDIA, то при запуске сессии X может произойти "зависание". Для того, чтобы избежать "зависания", добавить в файл /boot/loader.conf
строку
machdep.disable_mtrrs="1"
установить порт x11-wm/icewm
. В каталоге ~/.icewm
нужно
изменить файл preferences
создать файл startup
, который будет выполняться при старте ICEWM
touch ~/.icewm/startup
chmod 755 ~/.icewm/startup
Файл должен начинаться со строки
#!/bin/sh
изменить файл programs
menu "emulators" { # dopolnenija v kataloge # /usr/local/lib/virtualbox/additions/ prog "virtualbox-ose" - VirtualBox } menu "graphics" { prog "qiv" - qiv --help } menu "mail" { prog "mutt" - xterm -e "setenv LC_ALL ru_RU.KOI8-R && setenv VISUAL ee && luit mutt -y" } menu "misc" { prog "mc" - xterm -maximized +sb -e "mc" }
настройку входа в графический менеджер можно сделать двумя способами
вход в графический менеджер после ввода имени пользователя и пароля в текстовом режиме
создать файл ~/.xinitrc
#!/bin/sh LANG=ru_RU.UTF-8 LC_ALL=ru_RU.UTF-8 exec icewm-session
добавить в файл ~/.login
строку
startx -- -nolisten tcp
вход в графический менеджер после ввода имени пользователя и пароля в графическом окне приложения xdm, доступного из порта x11/xdm
создать файл ~/.xsession
(содержимое такое же как и ~/.xinitrc
в 1-м способе, использовать команду ln -s ~/.xsession ~/.xinitrc)
в /etc/ttys
включить терминальное устройство ttyv8
ttyv8 "/usr/local/bin/xdm -nodaemon" xterm on secure
в /usr/local/etc/X11/xdm/Xservers
изменить строку
:0 local /usr/local/bin/X :0 -nolisten tcp
в /usr/local/etc/X11/xdm/xdm-config
следующие строки должны быть закомментированы (режим вывода консоли отключен)
! DisplayManager._0.setup: /usr/local/etc/X11/xdm/Xsetup_0 ! DisplayManager._0.startup: /usr/local/etc/X11/xdm/GiveConsole ! DisplayManager._0.reset: /usr/local/etc/X11/xdm/TakeConsole
для отображения рабочего стола установить порт x11/idesk
, создать каталог ~/.idesktop
(описание ярлыков), каталог ~/.idesktop/icons
(иконки ярлыков), каталог ~/.idesktop/backgrounds
(фоновые рисунки).
В файл ~/.icewm/startup
добавить
/usr/local/bin/idesk &
Файл настроек ~/.ideskrc
(имя_пользователя
- имя пользователя, для которого настраивается рабочий стол)
table Config FontName: helvetica FontSize: 13 FontColor: #37CFA6 ToolTip.FontSize: 13 ToolTip.FontName: helvetica ToolTip.ForeColor: #0000FF ToolTip.BackColor: #FFFFFF ToolTip.CaptionOnHover: true ToolTip.CaptionPlacement: Right Locked: true Transparency: 100 Shadow: true ShadowColor: #000000 ShadowX: 1 ShadowY: 1 Bold: true ClickDelay: 300 IconSnap: true SnapWidth: 10 SnapHeight: 10 SnapOrigin: BottomRight SnapShadow: false SnapShadowTrans: 200 CaptionOnHover: false CaptionPlacement: bottom FillStyle: fillinvert Background.Delay: 0 Background.Source: /home/имя_пользователя
/.idesktop/backgrounds Background.File: /home/имя_пользователя
/.idesktop/backgrounds/Storm.jpg Background.Mode: Center Background.Color: #C2CCFF end table Actions Lock: control right doubleClk Reload: middle doubleClk Drag: left hold EndDrag: left singleClk Execute[0]: left doubleClk end
Файл описания ярлыка ~/.idesktop/mutt.lnk
table Icon
Caption: pochta
Icon: /home/имя_пользователя
/.idesktop/icons/gnome-talk.png
X: 99
Y: 73
Command[0]: xterm -e "setenv LC_ALL ru_RU.KOI8-R && setenv VISUAL ee && luit mutt -y"
end
Файл описания ярлыка ~/.idesktop/virtualbox-ose.lnk
table Icon Caption: HOMEWORK Icon: /usr/local/share/pixmaps/VBox.png X: 919 Y: 59 Command[0]: VBoxManage startvm "homework" end
настройка выключения и перезагрузки компьютера
установить порт security/sudo
в /usr/local/etc/sudoers
добавить строку (имя_пользователя
- имя пользователя, которому разрешено выключать и перезагружать компьютер)
имя_пользователя
ALL = (ALL) NOPASSWD:/sbin/shutdown
в файл ~/.icewm/preferences
добавить строки
ShutdownCommand="sudo /sbin/shutdown -p now" RebootCommand="sudo /sbin/shutdown -r now"
настройки хранителя экрана
установить порт x11/xscreensaver
в файл ~/.icewm/startup
добавить
/usr/local/bin/xscreensaver -no-splash &
в файл ~/.icewm/preferences
добавить
LockCommand="/usr/local/bin/xscreensaver-command -lock"
изменить настройки xterm
скопировать /usr/local/lib/X11/app-defaults/XTerm
в файл ~/XTerm
. В ~/XTerm
добавить
XTerm*foreground: gray XTerm*background: black XTerm*cursorColor: darkgreen XTerm*saveLines: 100 XTerm*scrollBar: true XTerm*font: -*-fixed-medium-r-*-*-18-*-*-*-*-*-iso10646-* XTerm*geometry: 80x24+0+10
Список доступных шрифтов можно вывести с помощью порта x11-fonts/xlsfonts
. Для выбора шрифта в графическом режиме использовать порт x11-fonts/xfontsel
. Для xterm выбирать моноширинные шрифты (например, Courier или Lucida) с кодировкой iso10646
(для консоли UTF-8
)
в файл ресурсов ~/.Xresources
добавить для работы буфера обмена в xterm
XTerm*VT100.translations: #override <Btn1Up>: select-end(PRIMARY, CLIPBOARD, CUT_BUFFER0)
В ~/.xinitrc
или ~/.xsession
перед строкой запуска ICEWM добавить
xrdb -load $HOME/.Xresources
установить git из порта devel/git
с помощью команд
cd /usr/ports/devel/git
env FLAVOR=tiny make install clean
если каталоги /usr/ports
и /usr/src
уже существуют и не были созданы с помощью git, необходимо их удалить или переименовать. Затем выполнить
git clone https://git.FreeBSD.org/ports.git -b 2022Q4 /usr/ports
git clone --branch releng/12.3 https://git.FreeBSD.org/src.git /usr/src
обновить порты командой
git -C /usr/ports pull
обновить исходные тексты системы (ядра и мира)
git pull /usr/src
Для проверки, находится ли каталог /usr/dummy
под управлением системы управления версиями git, выполнить команды
cd /usr/dummy
git remote --v
Перед проведением обновления лучше удалить опции установки из портов (которые использовались ранее) с помощью команды
rm -rf /var/db/ports/*
Если необходимо удалить неиспользуемое ПО, можно воспользоваться портом ports-mgmt/pkg_cutleaves
Обновление можно проводить с помощью утилиты portmaster или portupgrade
Для обновления с помощью утилиты portmaster установить ports-mgmt/portmaster
Последовательность обновления с помощью утилиты portmaster
portmaster --list-origins > /root/portmaster/installed-port-list
обновить порты
удалить файлы дистрибутивов, на которые нет ссылки из текущей версии дерева портов
portmaster -ty --clean-distfiles
portmaster -Faf
pkg delete -afy
rm -rf /usr/local/lib/compat/pkg
выполнить резервную копию нужных файлов в каталоге /usr/local
вручную проверить каталоги /usr/local
и /var/db/pkg
, чтобы убедиться, что они пустые
установить ports-mgmt/pkg
и затем ports-mgmt/portmaster
, удалить соответствующие строки из файла /root/portmaster/installed-port-list
portmaster --no-confirm `cat ~/installed-port-list`
Для обновления с помощью утилиты portupgrade установить ports-mgmt/portupgrade
Файлы скриптов для обновления с помощью утилиты portupgrade (файлы нужно поместить в каталог /root/portupgrade
и дать разрешение на запуск только пользователю root)
kommand0_pered.sh
, выполняется обновление портов, сохранение списка портов, подлежащих обновлению в файле spisok.log
, загрузка файлов дистрибутивов в каталог /usr/ports/distfiles
#!/bin/sh svn update /usr/ports && portsdb -Fu && (pkg version -vPl '<' > spisok.log) && portupgrade -Fa
После выполнения скрипта нужно прочесть файл /usr/ports/UPDATING
с замечаниями по проведению обновления. Действовать в соответствие с замечаниями
kommand0.sh
, выполняется обновление, результат сохраняется в файле result0.log
#!/bin/sh portupgrade -l /root/portupgrade/result0.log \ -ca
Прервать обновление можно командой (идентификатор_процесса
- идентификатор процесса ruby, который выполняет текст программы portupgrade)
kill -TERM идентификатор_процесса
После прерывания или после завершения обновления будет создан файл отчёта /root/portupgrade/result0.log
, содержащий строки с именами портов. Если порт успешно обновлён, в начале строки будет стоять символ '+'. При повторном выполнении обновления, успешно обновлённые порты можно исключить из обновления с помощью опции утилиты portupgrade -x
kommand1.sh
, обновление, результат сохраняется в файле result1.log
, имя_порта1, имя_порта2, имя_порта3
- имена портов, успешно установленных при запуске предыдущего командного файла
#!/bin/sh portupgrade -l /root/portupgrade/result1.log \ -ca \ -x имя_порта1 \ -x имя_порта2 \ -x имя_порта3
Получить имена портов имя_порта1, имя_порта2, имя_порта3
можно с помощью команды
awk '$1~/\+/{print "-x "$2}' result0.log
kommand0_posle.sh
, удаление файлов из каталога /usr/ports/distfiles
, на которые не ссылается ни один установленный порт, и файлов неиспользуемых библиотек
#!/bin/sh portsclean -DD && rm -R /usr/local/lib/compat/pkg
Предварительные действия
скопировать оригинальный файл конфигурации ядра в каталог /root/kernels
cd /usr/src/sys/amd64/conf
mkdir /root/kernels
cp GENERIC /root/kernels/MICKERNEL123
В каталоге /usr/src/sys/amd64/conf
создать символьную ссылку на копию
cd /usr/src/sys/amd64/conf
ln -s /root/kernels/MICKERNEL123
отредактировать файл конфигурации ядра /root/kernels/MICKERNEL123
отредактировать файл /etc/make.conf
на основе файла /usr/share/examples/etc/make.conf
, добавить опции
CPUTYPE?=native # NETGRAPH MODULES_OVERRIDE=netgraph/netgraph netgraph/ether netgraph/iface rc4 netgraph/mppc netgraph/ppp netgraph/pppoe netgraph/socket netgraph/tcpmss netgraph/tee # IPFW MODULES_OVERRIDE+=ipfw ipfw_nat dummynet libalias # OTHER MODULES_OVERRIDE+=mac_ntpd cpuctl coretemp usb/ums linux_common linux64 linux linprocfs libiconv cd9660_iconv msdosfs_iconv
отредактировать файл /etc/src.conf
(задать переменные для компиляции /usr/src
, при компиляции портов они работать не будут)
WITHOUT_AMD= WITHOUT_FLOPPY= WITHOUT_FREEBSD_UPDATE= WITHOUT_IPFILTER= WITHOUT_IPX= WITHOUT_LPR= WITHOUT_PORTSNAP= WITHOUT_PROFILE= WITHOUT_SYSINSTALL= WITHOUT_TELNET= WITHOUT_WIRELESS= WITHOUT_WPA_SUPPLICANT_EAPOL= WITHOUT_ZFS= WITHOUT_ZONEINFO=
Основные действия
выполнить команды (компиляция из исходных текстов)
cd /usr/src
make -j4 buildworld
make buildkernel KERNCONF=MICKERNEL123
выполнить команды (установка ядра и мира)
cd /usr/src
make installkernel KERNCONF=MICKERNEL123
shutdown -r now
cd /usr/src
make installworld
shutdown -r now
выполнить команды (завершение установки)
mergemaster -Ui
cd /usr/src
make -DBATCH_DELETE_OLD_FILES delete-old
make -DBATCH_DELETE_OLD_FILES delete-old-libs
shutdown -r now
Перед обновлением можно удалить временный каталог /usr/obj
cd /usr/src
make cleanworld
Рассмотрим пример установки ОС на жёсткий диск (устройство /dev/ad2)
разбить диск
создать единственный слайс
fdisk -BI /dev/ad2
создать раздел для /
bsdlabel -Bw /dev/ad2s1
создать разделы для swap
(ad2s1b
), var
(ad2s1d
), tmp
(ad2s1e
), usr
(ad2s1f
)
bsdlabel -e /dev/ad2s1
создать файловые системы для /, /var, /tmp, /usr
newfs /dev/ad2s1a
newfs -U /dev/ad2s1d
newfs -U /dev/ad2s1e
newfs -U /dev/ad2s1f
отредактировать файл конфигурации ядра /root/kernels/MICKERNEL72_starijPK
, файлы /etc/make.conf
и /etc/src.conf
смонтировать файловую систему
mount /dev/ad2s1a /mnt
mkdir /mnt/var
mount /dev/ad2s1d /mnt/var
mkdir /mnt/tmp
mount /dev/ad2s1e /mnt/tmp
mkdir /mnt/usr
mount /dev/ad2s1f /mnt/usr
выполнить команды
cd /usr/src
make buildworld buildkernel KERNCONF=MICKERNEL72_starijPK
setenv DESTDIR /mnt
make installworld installkernel KERNCONF=MICKERNEL72_starijPK
cd /usr/src/etc
make distribution
создать файл /mnt/etc/fstab
# Device Mountpoint FStype Options Dump Pass# /dev/ad2s1b none swap sw 0 0 /dev/ad2s1a / ufs rw 1 1 /dev/ad2s1e /tmp ufs rw 2 2 /dev/ad2s1f /usr ufs rw 2 2 /dev/ad2s1d /var ufs rw 2 2 #/dev/acd0 /cdrom cd9660 ro,noauto 0 0 proc /proc procfs rw 0 0
выполнить команды
umount /mnt/usr
umount /mnt/var
umount /mnt/tmp
umount /mnt
удалить временные файлы и каталоги после создания мира и ядра
пример форматирования диска с размером сектора 4 Кбайт (устройство /dev/ada1) с использованием таблицы разделов GUID. На диске создаётся один раздел (метка раздела gpdata, файловая система UFS2, soft updates включен), который выравнен по границе в 4 Кбайт
gpart create -s gpt ada1
gpart add -t freebsd-ufs -l gpdata -a 4k ada1
newfs -U -f 4096 ada1p1
Для проверки, выравнен раздел или нет, выполнить команду diskinfo -v ada1p1. Если остаток от деления между stripeoffset и 4096 не ноль, значит раздел не выравнен.
В /etc/fstab
добавить для автоматического монтирования созданного раздела к точке монтирования /usr/gamma
/dev/gpt/gpdata /usr/gamma ufs rw 2 2
пример форматирования USB флеш-накопителя (устройство /dev/da0) в файловую систему FAT16
dd if=/dev/zero of=/dev/da0 bs=512 count=32
fdisk -I da0
dd if=/dev/zero of=/dev/da0s1 bs=512 count=32
newfs_msdos /dev/da0s1
пример загрузки файла http://site.ru/file.zip
wget -c --output-document=file1.zip -T 120 "http://site.ru/file.zip"
Если загрузка прекратится, она будет возобновлена с последнего места. Файл сохраняется в текущем каталоге с именем file1.zip
пример сихронизации каталога /mnt/ФОТО
(источник) с каталогом /usr/ФОТО
(назначение)
rsync -avzci --delete --log-file="/root/rsync/FOTO.log" /mnt/ФОТО/ /usr/ФОТО
Если файл не существует в первом каталоге, но есть во втором, то файл удаляется из второго каталога. Лог сохраняется в файле /root/rsync/FOTO.log
. Для сравнения файлов используется контрольная сумма. Чтобы показать изменения, произведённые rsync, использовать команду
awk '$4~/>|\+|\*deleting/{print}' /root/rsync/FOTO.log
пример определения списка подключённых устройств PCI
pciconf -l
пример копирования содержимого каталога /usr
в каталог /mnt
cd /usr
tar --create --file=- * | ( cd /mnt/ ; tar --extract --file=- )
пример установки часового пояса г. Иркутск на локальном компьютере
ln -s /usr/share/zoneinfo/Asia/Irkutsk /etc/localtime
пример обновления определений часовых поясов (порт misc/zoneinfo
следует удалить перед установкой мира, если в файле /etc/src.conf
не определена переменная WITHOUT_ZONEINFO)
make -C /usr/ports/misc/zoneinfo install clean
пример поиска файлов, созданных или изменённых 10 декабря 2009 года с 10:00 до конца дня. Результат отображается в "длинном" формате
find / -type f \( -newermt "10 Dec 2009 10:00" -and -not -newermt "11 Dec 2009" \) -exec ls -al {} \;
два примера сохранения текста помощника в файл
man write | colcrt > write.txt
man write | perl -ne 's/.\010//g; print' > write.txt
для проверки модулей оперативной памяти установить порт sysutils/memtest86+
. Загрузить операционную систему в режиме "loader prompt" и выполнить команды
unload
load /boot/opt/memtest86+
boot
для преобразования кодировок есть 2 полезных порта: converters/iconv
(для преобразования кодировки содержимого файла) и converters/convmv
(для преобразования кодировки имени файла)
пример отправки почты с вложением и архивированием на адрес you@domain.ru
gzip -c text | uuencode text.gz | mail -s TEST you@domain.ru
для проверки диска установить порт sysutils/smartmontools
и выполнить команду (например, для диска /dev/ada0)
smartctl -a /dev/ada0 | grep -i reallocated
Если в последнем столбце цифры больше 0, можно подумать о замене диска
man 7 build
man 7 ports
man 7 hier
man 7 security
man 7 tuning
Peter N.M. Hansteen - Firewalling with OpenBSD's PF packet filter
Немет Эви, Снайдер Гарт, Хейн Трент - Руководство администратора Linux, 2-е издание.: Пер. с англ. - М.: ООО "И.Д. Вильямс", 2007. - 1072 с.
Соловьёв А. - Программирование на Shell (UNIX)
определение количества файлов и подкаталогов в заданном каталоге, а также занимаемого объёма
Параметры: имя каталога
Содержимое файла papki.sh
#!/bin/sh usage() { echo "$0 <dirname>" } if [ -z "$1" ];then usage exit 0 fi if [ -d "$1" ];then echo "В каталоге $1:" echo " файлов `find "$1" -type f | wc -l`" echo " каталогов `find "$1" -type d -mindepth 1 | wc -l`" echo "общий размер файлов `find "$1" -type f -exec stat -f %z {} \; | awk '{s+=$1}END{print s}'` байт" else echo "$1 не является каталогом" exit 0 fi
генерация случайного пароля заданной длины
Параметры: длина пароля (целое число). Если не задана, по умолчанию равна 20
Содержимое файла genparol.sh
#!/bin/sh usage() { echo "$0 dlina(>0)" } t=$1 if [ -z "$t" ];then t=20 fi if [ $t -le 0 ];then usage exit 0 fi LC_CTYPE=C tr -dc A-Za-z0-9_ < /dev/urandom | head -c $t | xargs