четверг, 10 мая 2012 г.

Установка FreeBSD 9.0 на сервер Hetzner

Введение


Когда вышла FreeBSD 9.0, я задался целью установить данную систему на только что оформленный у «Hetzner» сервер. И хотя в открытую они не предлагают и не дают установить FreeBSD, однако, это вполне возможно сделать через Rescue System. Но, как выяснилось, так можно установить только FreeBSD 7.4 и FreeBSD 8.2.

После связи с службой поддержки «Hetzner» они ответили, что за дополнительную плату готовы вставить диск с данным программным обеспечением. Конечно это ни в бюджет ни в планы не входило.

В сети Интернет много советов по обновлению FreeBSD с версии 8 до версии 9, но они либо не полностью отражают суть проблемы, либо вообще ничего не позволяют обновить так как это нужно. Я потратил много времени, прежде чем мне удалось это сделать, поэтому я и решил написать данную статью, которая поможет сэкономить время.

Итак, приступим.
1. Установка версии FreeBSD от «Henzner»
Старт Rescue системы

Для начала нужно активировать Rescue System и зайти по ssh на сервер, как написано в инструкции у «Hetzner».

Для начала установки выполним следующую команду

# installimage
 
Затем укажем параметры и запустим установку. Вся установка занимает всего несколько минут в результате чего мы получаем следующее

Hetzner Online AG - installimage Your server will be installed now, this will take some time You can abort at any time with CTRL+C … Deleting selected harddrive(s)… DONE Creating a file system and extracting the image… DONE Copying kernel… DONE Configuring rc.conf… DONE Configuring loader.conf… DONE Enabling SSH login for root… DONE Configuring resolv.conf… DONE Congratulations! The configuration has been completed successfully. You can now use 'reboot' to boot your newly installed FreeBSD system.

После установки перезагружаемся

# reboot

2 Настройка данных для обновления

Обновлять систему будем через sup. На мой взгляд, самый простой и правильный способ обновления системы.
sup входит в штатные средства операционной системы FreeBSD.

Переходим в каталог


# cd /usr/share/examples/cvsup/


Проверяем


# ls
 README           gnats-supfile    refuse.README    www-supfile
 cvs-supfile      ports-supfile    stable-supfile
 doc-supfile      refuse           standard-supfile


Теперь нужно указать новую версию операционной системы.
По умолчанию стоит текущая версия.

Выполняем копирование файла конфигурации


# cp standard-supfile standard-supfile-UPDATE_9


Отредактируем его


# ee standard-supfile-UPDATE_9

*default host=CHANGE_THIS.FreeBSD.org
*default base=/var/db
*default prefix=/usr
*default release=cvs tag=RELENG_9_0
*default delete use-rel-suffix
*default compress

src-all


Выполняем синхронизацию исходных кодов src, новой операционной системы


# /usr/bin/csup -h cvsup4.ru.freebsd.org -g -L 2 \


#? /usr/share/examples/cvsup/standard-supfile-UPDATE_9


После того как все файлы скопированы, нужно прочитать файл /usr/src/UPDATING (Чтобы небыло проблем)

Теперь нужно включить генерацию профилирующего кода (прописать NO_PROFILE=true в файле /etc/make.conf).

И там же нужно установить значение CFLAGS во -O2 -pipe.

-pipe позволяет компилятору использовать для связи вместо временных файлов программные каналы,
что уменьшает обращение к диску (за счет оперативной памяти).


# ee /etc/make.conf
NO_PROFILE=true
CFLAGS= -O2 -pipe


Также нужно добавить в make.conf строчку: KERNCONF=MYKERNEL, чтобы не писать при сборке и установке ядра


# make build kernel KERNCONF=MYKERNEL


а просто


# make build kernel


Отредактируем файл /etc/src.conf


# ee /etc/src.conf
WITHOUT_BLUETOOTH=TRUE
WITHOUT_GAMES=TRUE




Вообще конфиг make.conf можно дополнить многими параметрами, это зависит от того какие параметры компиляции Вам нужны.



Мой конфиг make.conf


CPUTYPE?=nocona CFLAGS= -O2 -fno-strict-aliasing -pipe # CXXFLAGS= -O2 -pipe # Осторожнее многие приложения могут не компилироваться если это прописать. COPTFLAGS= -O2 -pipe -funroll-loops -ffast-math -fno-strict-aliasing OPTIMIZED_CFLAGS=YES KERNCONF=GARPIX BUILD_OPTIMIZED=YES WITH_CPUFLAGS=YES WITHOUT_DEBUG=YES WITH_OPTIMIZED_CFLAGS=YES NO_PROFILE=YES BUILD_STATIC=YES WITHOUT_X11=YES DWITH_SLANG=YES DLLVM_HOSTTRIPLE="x86_64-garpix-freebsd9.0" STRIP= CFLAGS+=-fno-omit-frame-pointer WITH_CTF=1 # added by use.perl 2012-02-07 19:02:35 PERL_VERSION=5.12.4


Получаем исходники ядра

# svn checkout svn://svn.freebsd.org/base/releng/9.0 /usr/src

Переходим в каталог с ядром

# cd /usr/src/sys/amd64/conf

Копируем конфиг с ядром в созданный за ранее каталог

# mkdir /root/kernels # cp GENERIC /root/kernels/MYKERNEL # ln -s /root/kernels/MYKERNEL

Теперь нужно провести конфигурацию ядра под Ваш компьютер
Подробнее об этом можно почитать на официальном сайте FreeBSD

Мой конфиг ядра


cpu   HAMMER
ident   MYKERNEL

makeoptions  DEBUG=-g     # Build kernel with gdb(1) debug symbols
makeoptions  WITH_CTF=1
makeoptions  MODULES_OVERRIDE="zfs opensolaris dtrace cyclic nfsclient krpc nfs_common nfslock"

options   SCHED_ULE     # ULE scheduler
options   PREEMPTION     # Enable kernel thread preemption
options   INET       # InterNETworking
options   INET6      # IPv6 communications protocols
options   IPFIREWALL     # Firewall IPFw
#options  IPFIREWALL_DEFAULT_TO_ACCEPT  # Accept to Firewall
options   IPFIREWALL_VERBOSE   # Enable Logs from Firewall
#options  IPFIREWALL_VERBOSE_LIMIT=10  # Limit logs from Firewall
options   DUMMYNET     # Speed Traffic to Firewall
options   SCTP       # Stream Control Transmission Protocol
options   FFS       # Berkeley Fast Filesystem
options   SOFTUPDATES     # Enable FFS soft updates support
options   UFS_ACL      # Support for access control lists
options   UFS_DIRHASH     # Improve performance on big directories
options   UFS_GJOURNAL    # Enable gjournal-based UFS journaling
options   MD_ROOT      # MD is a potential root device
options   NFSCL      # New Network Filesystem Client
options   NFSD      # New Network Filesystem Server
options   NFSLOCKD     # Network Lock Manager
options   NFS_ROOT     # NFS usable as /, requires NFSCL
options   CD9660      # ISO 9660 Filesystem
options   PROCFS      # Process filesystem (requires PSEUDOFS)
options   PSEUDOFS     # Pseudo-filesystem framework
options   GEOM_PART_GPT    # GUID Partition Tables.
options   GEOM_LABEL     # Provides labelization
options   SCSI_DELAY=5000    # Delay (in ms) before probing SCSI
options   KTRACE      # ktrace(1) support
options   STACK      # stack(9) support
options   SYSVSHM      # SYSV-style shared memory
options   SYSVMSG      # SYSV-style message queues
options   SYSVSEM      # SYSV-style semaphores
options   _KPOSIX_PRIORITY_SCHEDULING # POSIX P1003_1B real-time extensions
options   PRINTF_BUFR_SIZE=128   # Prevent printf output being interspersed.
options   KBD_INSTALL_CDEV    # install a CDEV entry in /dev
options   HWPMC_HOOKS    # Necessary kernel hooks for hwpmc
options   AUDIT      # Security event auditing
options   MAC       # TrustedBSD MAC Framework
options   KDTRACE_FRAME    # Ensure frames are compiled in
options   KDTRACE_HOOKS    # Kernel DTrace hooks
options   DDB_CTF      # all architectures - kernel ELF linker loads CTF data
options   INCLUDE_CONFIG_FILE   # Include this file in kernel
options   KDB       # Kernel debugger related code
options   KDB_TRACE     # Print a stack trace for a panic
options   COMPAT_FREEBSD8    # Compatible with FreeBSD8
options   P1003_1B_SEMAPHORES   # POSIX-style semaphores
options   DEVICE_POLLING    # Polling Network Enabled

# Settings for max connections = 256options SEMMNI=512
options SEMMNS=1024
options SEMUME=64
options SEMMNU=512

# Make an SMP-capable kernel by default
options   SMP       # Symmetric MultiProcessor Kernel

# CPU frequency control
device   cpufreq

# Bus support.device   acpi
device   pci

# ATA controllers
device   ahci       # AHCI-compatible SATA controllers
device   ata       # Legacy ATA/SATA controllers
options   ATA_CAM      # Handle legacy controllers with CAM
options   ATA_STATIC_ID    # Static device numbering
device   mvs       # Marvell 88SX50XX/88SX60XX/88SX70XX/SoC SATA
device   siis       # SiliconImage SiI3124/SiI3132/SiI3531 SATA

# ATA/SCSI peripherals
device   scbus      # SCSI bus (required for ATA/SCSI)
device   ch       # SCSI media changers
device   da       # Direct Access (disks)
device   sa       # Sequential Access (tape etc)
device   cd       # CD
device   pass       # Passthrough device (direct ATA/SCSI access)
device   ses       # SCSI Environmental Services (and SAF-TE)

# RAID controllers interfaced to the SCSI subsystem
device   hptrr       # Highpoint RocketRAID 17xx, 22xx, 23xx, 25xx

# atkbdc0 controls both the keyboard and the PS/2 mouse
device   atkbdc      # AT keyboard controller
device   atkbd      # AT keyboard
device   psm       # PS/2 mouse

device   via       # VGA video card driver

# sys cons is the default console driver, resembling an SCO console
device   sc
options   SC_PIXEL_MODE      # add support for the raster text mode

# Serial (COM) ports
device   uart       # Generic UART driver

device   put       # Multi I/O cards and multi-channel UARTs

# PCI Ethernet NICs.
device   bxe       # Broadcom BCM57710/BCM57711/BCM57711E 10Gb Ethernet>
device   de       # DEC/Intel DC21x4x (``Tulip)>
device   em       # Intel PRO/1000 Gigabit Ethernet Family>
device   igb       # Intel PRO/1000 PCIE Server Gigabit Family>
device   ixgbe       # Intel PRO/10GbE PCIE Ethernet Family>
device   le       # AMD Am7900 LANCE and Am79C9xx PCnet>
device   ti       # Alteon Networks Tigon I/II gigabit Ethernet>
device   txp       # 3Com 3cR990 (``Typhoon)>
device   vx       # 3Com 3c590, 3c595 (``Vortex)>

# PCI Ethernet NICs that use the common MII bus controller code.>
# NOTE: Be sure to keep the 'device minibus' line in order to use these NICs!>
device   minibus      # MII bus support>
device   ae       # Attansic/Atheros L2 FastEthernet>
device   age       # Attansic/Atheros L1 Gigabit Ethernet>
device   alc       # Atheros AR8131/AR8132 Ethernet>
device   ale       # Atheros AR8121/AR8113/AR8114 Ethernet>
device   bce       # Broadcom BCM5706/BCM5708 Gigabit Ethernet>
device   bfe       # Broadcom BCM440x 10/100 Ethernet>
device   bge       # Broadcom BCM570xx Gigabit Ethernet>
device   dc       # DEC/Intel 21143 and various workalikes>
device   et       # Agere ET1310 10/100/Gigabit Ethernet>
device   fxp       # Intel EtherExpress PRO/100B (82557, 82558)>
device   jme       # JMicron JMC250 Gigabit/JMC260 Fast Ethernet>
device   leg       # Level 1 LXT1001 gigabit Ethernet>
device   msk       # Marvell/SysKonnect Yukon II Gigabit Ethernet>
device   nfe       # nVidia nForce MCP on-board Ethernet>
device   nge       # NatSemi DP83820 gigabit Ethernet>
device   pcn       # AMD Am79C97x PCI 10/100 (precedence over 'le')>
device   re       # RealTek 8139C+/8169/8169S/8110S>
device   rl       # RealTek 8129/8139>
device   sf       # Adaptec AIC-6915 (``Starfire)>
device   sge       # Silicon Integrated Systems SiS190/191>
device   sis       # Silicon Integrated Systems SiS 900/SiS 7016>
device   sk       # SysKonnect SK-984x & SK-982x gigabit Ethernet>
device   ste       # Sundance ST201 (D-Link DFE-550TX)>
device   stge       # Sundance/Tamarack TC9021 gigabit Ethernet>
device   tl       # Texas Instruments ThunderLAN>
device   tx       # SMC EtherPower II (83c170 ``EPIC)>
device   vge       # VIA VT612x gigabit Ethernet>
device   vr       # VIA Rhine, Rhine II>
device   wb       # Winbond W89C840F>
device   xl       # 3Com 3c90x (``Boomerang, ``Cyclone)>

# Pseudo devices.
device   loop       # Network loopback
device   random      # Entropy device
device   ether      # Ethernet support
device   vlan       # 802.1Q VLAN support
device   tun       # Packet tunnel.
device   pty       # BSD-style compatibility pseudo ttys
device   md       # Memory "disks"
device   gif       # IPv6 and IPv4 tunneling
device   faith       # IPv6-to-IPv4 relaying (translation)
device   firmware      # firmware assist module

# The `bpf' device enables the Berkeley Packet Filter.
# Be aware of the administrative consequences of enabling this!
# Note that 'bpf' is required for DHCP.
device   bpf       # Berkeley packet filter

# USB support
options   USB_DEBUG     # enable debug msgs
device   uhci       # UHCI PCI->USB interface
device   ohci       # OHCI PCI->USB interface
device   ehci       # EHCI PCI->USB interface (USB 2.0)
device   xhci       # XHCI PCI->USB interface (USB 3.0)
device   usb       # USB Bus (required)
device   uhid       # "Human Interface Devices"
device   ukbd       # Keyboard
device   ulpt       # Printer
device   umass      # Disks/Mass storage - Requires scbus and da
device   ums       # Mouse



После того как ядро сконфигурировано, переходим в каталог с исходниками /usr/src


# cd /usr/src

Чуть не забыл, нужно добавить в свой конфиг ядра следующую опцию


options COMPAT_FREEBSD8 # Compatible with FreeBSD8


Теперь редактируем следующие файлы добавляя строки


# ee /usr/src/sys/conf/NOTES
# Enable FreeBSD8 compatibility syscalls
options   COMPAT_FREEBSD8
# ee /usr/src/sys/conf/options
COMPAT_FREEBSD8  opt_compat.h


Переходим к компиляции мира и ядра системы


# cd /usr/src
# make kernel-toolchain


ждем пока процесс не закончится

Теперь компилируем ядро


# make build kernel


Когда ядро скомпилировано, устанавливаем его


# make install kernel


Теперь нужно скомпилировать мир


# make build world


Мир компилируется очень долго, придется подождать

Смотрим вывод date и если вывод некорректный, то нужно обязательно прочитать статью

Теперь выполняем следующее


# adjkerntz -i
# cd /usr/src


Устанавливаем конфигурационные файлы


# mergemaster -a -p


Если появляются вопросы то всегда нужно нажимать i


i и [Enter]


Иногда нужно нажать d если других вариантов нет


d и [Enter]


i — Установить новые конфигурационные файлы
d — Удалить временные конфигурационные файлы

Теперь удаляем каталог rc.d


# rm -rf /etc/rc.d


Продолжаем устанавливать конфиги


# mergemaster -i -p
# mergemaster -p


Устанавливаем мир


# make install world


После того как мир установлен, копируем конфиги мира


# mergemaster -a
# mergemaster -i
# mergemaster


Выполнять нужно по очереди, не забывая про параметры i и d, вопросов будет много.

На этом все, новая система установлена но пока перезагружать компьютер нельзя

Меняем пароль у root пользователя


# passwd


Теперь нужно настроить SSH а то в систему будет не зайти

# ee /etc/ssh/sshd_config



PermitRootLogin yes


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


Всмысле какие демоны запущены? Читаем /etc/rc.conf, есть ли службы, которые запускаются альтернативными способами, можно узнать, посмотрев


# sockstat -l


Так же там же, в /etc/rc.conf, сетевые настройки


# less, tail, cat - чем нравится, тем и смотрите.


Содержимое /var/run/dmesg.boot расскажет всё об используемом железе


# pciconf -lv


Покажет всё железо, как используемое, так и не используемое


# atacontrol list


Выдаст список ATA устройств


# camcontrol devlist


Выдаст список USB устройств


# usbconfig list


Теперь устанавливаем временную зону


# cp /usr/share/zoneinfo/Europe/Moscow /etc/localtime
# date


или


# setenv TZ Europe/Moscow-04:00
# date


Установка локали


По умолчанию в FreeBSD установлена кодировка koi8-r (на мой взгляд это прошлый век, меняем на utf-8)


#ee /etc/login.conf



russian|Russian Users Accounts:\
:charset=UTF-8:\
:lang=ru_RU.UTF-8:\
:tc=default:



# cap_mkdb /etc/login.conf
# pw usermod -n $username -L russian


Дополнительно к вышеприведенному способу, можно прописать переменные в используемом shell


#ee /etc/csh.cshrc



setenv LANG ru_RU.UTF-8
setenv LC_CTYPE ru_RU.UTF-8
setenv LC_COLLATE POSIX
setenv LC_ALL ru_RU.UTF-8


Опционально, для тех кто любит bash


# ee /etc/profile



LANG="ru_RU.UTF-8"; export LANG
LC_CTYPE="ru_RU.UTF-8"; export LC_CTYPE
LC_COLLATE="POSIX"; export LC_COLLATE
LC_ALL="ru_RU.UTF-8"; export LC_ALL



# ee /root/.cshrc



setenv LANG ru_RU.UTF-8
setenv LC_CTYPE ru_RU.UTF-8
setenv LC_COLLATE POSIX
setenv LC_ALL ru_RU.UTF-8


Далее просто набираем в консоли


# setenv LANG ru_RU.UTF-8
# setenv LC_CTYPE ru_RU.UTF-8
# setenv LC_COLLATE POSIX
# setenv LC_ALL ru_RU.UTF-8


Прописываем параметры настроек в sysctl


# ee /etc/sysctl.conf


Внимание данные настройки для моего сервера, они зависят от многих параметров, железа компьютера, количества оперативной памяти, типа процессора, нагрузки на сервер и других тд и тп.



# $FreeBSD: src/etc/sysctl.conf,v 1.8.40.1.2.1 2011/11/11 04:20:22 kensmith Exp $
#
#  This file is read when going to multi-user and its contents piped thru
#  ``sysctl to adjust kernel values.  ``man 5 sysctl.conf for details.
#

# Uncomment this to prevent users from seeing information about processes that
# are being run under another UID.
#security.bsd.see_other_uids=0

kern.ipc.shmall=2048000
kern.ipc.shmmax=4461780992
kern.ipc.semmap=16000

net.inet.tcp.blackhole=2
net.inet.udp.blackhole=1
# kern.ipc.nmbclusters=65536
kern.ipc.somaxconn=32768
kern.ipc.maxsockets=204800
kern.ipc.maxsockbuf=262144
kern.ipc.shm_use_phys=1
kern.maxfiles=256000
kern.maxfilesperproc=230400
net.inet.ip.portrange.first=1024
net.inet.ip.portrange.last=65535
net.inet.ip.portrange.randomized=0
net.inet.tcp.maxtcptw=40960
net.inet.ip.intr_queue_maxlen=4096

net.inet.tcp.msl=40000
net.inet.tcp.finwait2_timeout=40000
net.inet.tcp.syncookies=1

# In Large Load sent ansver selective
net.inet.tcp.delayed_ack=0
net.inet.tcp.sack.enable=0
net.inet.tcp.msl=30000
net.inet.tcp.nolocaltimewait=1
net.inet.tcp.fast_finwait2_recycle=1
net.inet.icmp.drop_redirect=1
net.inet.icmp.log_redirect=1
net.inet.ip.redirect=0
net.inet.ip.fw.enable=1
net.inet.flowtable.enable=0
net.inet6.ip6.fw.enable=1
net.inet6.ip6.redirect=0
net.inet6.ip6.accept_rtadv=1
net.inet.tcp.sendspace=16384
net.inet.tcp.recvspace=8192
net.inet.tcp.recvbuf_auto=0
net.inet.tcp.sendbuf_auto=1
net.inet.tcp.sendbuf_inc=8192
net.inet.tcp.sendbuf_max=131072
net.link.ether.inet.max_age=1200
net.inet.tcp.maxtcptw=102400
net.inet.tcp.nolocaltimewait=1
net.inet.tcp.syncookies=1
net.isr.direct=0
kern.polling.enable=1
kern.polling.burst_max=1000
kern.polling.each_burst=50
net.inet.icmp.icmplim=100
net.inet.tcp.rfc3465=0

# Security Jail
security.jail.sysvipc_allowed=1
security.jail.allow_raw_sockets=1
security.jail.chflags_allowed=1
security.jail.set_hostname_allowed=1


Настраиваем bootLoader (Привожу пример своего конфига, повторюсь это для моего сервера и привожу ради примера)


# ee /boot/loader.conf





zfs_load="YES"
vfs.root.mountfrom="zfs:garpix/root"
vfs.zfs.zio.use_uma="0"

ahci_load="YES"
aio_load="YES"
geom_mirror_load="YES"
geom_stripe_load="YES"
geom_cache_load="YES"
geom_label_load="YES"
accf_http_load="YES"
accf_data_load="YES"
accf_dns_load="YES"
coretemp_load="YES"
if_em_load="YES"
verbose_loading="YES"
boot_verbose="YES"

vm.kmem_size_max="4G"
vm.kmem_size="4G"

# HPET Enable
kern.timecounter.hardware=HPET

# Dtrace
dtraceall_load="YES"

# Semafores
kern.ipc.semmni=1024
kern.ipc.semmns=2048
kern.ipc.semmnu=1024

kern.maxfiles=204800
kern.maxfilesperproc=200000
kern.ipc.maxsockets=204800
kern.ipc.nmbclusters=204800
kern.ipc.nmbjumbop=192000
kern.ipc.somaxconn=8192
kern.ipc.shmmax=2147483648
kern.ipc.maxsockbuf=10485760
kern.ipc.nsfbufs=10240
kern.maxvnodes=200000
kern.ps_arg_cache_limit=4096

# TCP Steck
#net.inet.tcp.syncache.hashsize=1024
#net.inet.tcp.syncache.bucketlimit=100
#net.inet.tcp.syncache.cachelimit=65536
#net.inet.tcp.hostcache.cachelimit=1966080
#net.inet.tcp.tcbhashsize=32768

vm.pmap.shpgperproc=2048
vm.pmap.pg_ps_enabled=1

hw.bge.allow_asf=1

loader_logo="MYLOGO"



Настройки RC.CONF


# ee /etc/rc.conf


Привожу для примера свой конфиг rc.conf (media 100BaseTX mediaopt full-duplex,flag0 зависят от датацентра «Hetzner»), это нужно уточнить у службы поддержки так как на другом сервере в другом датацентре у меня было media autoselect Также привожу настройки IPv6 от Hetzner, не буду подробно описывать это тема для отдельной статьи но по примеру можно сделать и будет работать.



hostname="garpix"
sshd_enable="YES"
sendmail_enable="YES"
zfs_enable="YES"

# IPv4 inet config
ntpd_enable="YES"
ifconfig_re0="inet xxx.xxx.xxx.xxx netmask xxx.xxx.xxx.xxx media 100BaseTX mediaopt full-duplex,flag0"
defaultrouter="xxx.xxx.xxx.xxx"

# IPv6 inet6 config
ipv6_network_interfaces="re0"
ifconfig_re0_ipv6="inet6 2a01:4f8:141:54c3::2 prefixlen 64 accept_rtadv"
ipv6_default_interface="re0"
ipv6_static_routes="gw defgw"
ipv6_route_gw="2a01:4f8:141:54c0:: -prefixlen 59 -iface re0"
ipv6_route_defgw="default 2a01:4f8:141:54c0::1"

# Firewall
firewall_enable="YES"
firewall_script="/etc/rc.ipfw"



Ну и самое важное, теперь нужно настроить Firewall


# ee /etc/rc.ipfw


RC.IPFW


#!/bin/sh
ipfw -q -f flush

oif="re0"
cmd="ipfw -q add "
ks="keep-state"

tcp_out="20,21,22,25,80,110,137,138,139,143,443,445,2802,3306,5190,6667,8080,9000"
tcp_in="20,21,22,80,443,8080,5432"
tcp6_in="::80,::443"
ftp_high="21,1024-65535"
udp_out="53,999,1234"
udp_in="1234"

# allow all
#$cmd 00100 pass all from any to any

# deny all
$cmd 00100 pass all from any to any via lo0
$cmd 00101 deny all from any to 127.0.0.0/8
$cmd 00102 deny all from 127.0.0.0/8 to any

$cmd 00500 check-state

$cmd 00502 deny all from any to any frag
$cmd 00501 deny tcp from any to any established
$cmd 00600 allow tcp from any to any out via $oif setup $ks
$cmd 00601 allow udp from any to any out via $oif $ks
# IPv6
$cmd 00701 allow ip6 from any to any $tcp6_in via $oif setup $ks
# tcp Out
$cmd 00702 skip to 10000 tcp from any to any $tcp_out out via $oif setup $ks
# Ftp
$cmd 00703 allow tcp from any to any via $oif established
$cmd 00704 allow tcp from me to any via $oif setup $ks
$cmd 00705 allow tcp from any to me $ftp_high via $oif setup $ks
$cmd 00706 skip to 10000 tcp from any to any $ftp_high out via $oif setup $ks
# Udp out
$cmd 00707 skip to 10000 udp from any to any $udp_out out via $oif $ks
# Udp in
$cmd 00708 skip to 10000 udp from any to any $udp_in in via $oif $ks
# tcp In
$cmd 00709 allow tcp from any to me $tcp_in in via $oif setup $ks
# ping
$cmd 02000 allow icmp from any to any icmptype 8
$cmd 02001 allow icmp from any to any icmptype 0
# IPv6
$cmd 02004 allow ipv6-icmp from any to any


Делаем скрипт выполняемым


# chmod 0755 /etc/rc.ipfw


Теперь перезагружаемся


# reboot


Если все сделано правильно то все должно работать как «часы»

Насчет всяких make delete-old и make delete-old-libs каждый решает для себя сам.

В моем конфиге ядра я прописал DTrace, если Вы сделали также то проверяем все ли работает


# trace -l | head


Правим make.conf для поддержки Dtrace на уровне пользователя


STRIP=
CFLAGS+=-fno-omit-frame-pointer


Теперь нужно установить порты

Получаем список портов


# portsnap fetch


Извлекаем порты


# portsnap extract


Переходим в каталог с портами и устанавливаем индекс


# cd /usr/ports
# make fetch index


Все готово, теперь система полностью рабочая, с портами и всем, что требуется для нормальной работы. Можно ставить приложения, которые Вам нужны, mc, ftp, nginx и т.д. и т.п.

P.S. Если нашли неточности или замечания, пишите – исправлю, материал набирал из гугла и с хабра, описал все подробно, чтобы можно было использовать как инструкцию. Конечно, многое тут элементарно, но некоторым пользователям это, я надеюсь, поможет сэкономить время.
 Орнгинал http://habrahabr.ru/post/143546/ 
 Автор http://habrahabr.ru/users/frazer/

 
 

Комментариев нет:

Отправить комментарий