Điều chỉnh hiệu năng FreeBSD: Tham số Sysctl, loader.conf, kernel


127

Tôi muốn chia sẻ kiến ​​thức về điều chỉnh FreeBSD thông qua sysctl.conf/ loader.conf / KENCONF/ v.v. Ban đầu, nó dựa trên bài thuyết trình của tác giả Igor Sysoev (tác giả của nginx) về điều chỉnh FreeBSD lên tới 100.000-200.000 kết nối hoạt động. Các phiên bản mới hơn của FreeBSD có thể xử lý nhiều hơn nữa.

Điều chỉnh dành cho FreeBSD7 - FreeBSD-HIỆN TẠI. Kể từ 7.2 amd64, một số trong số chúng được điều chỉnh tốt theo mặc định. Trước 7.0, một số trong số chúng chỉ khởi động (đặt qua /boot/loader.conf) hoặc hoàn toàn không tồn tại.

sysctl.conf:

# No zero mapping feature
# May break wine
# (There are also reports about broken samba3)
#security.bsd.map_at_zero=0

# Servers with threading software apache2 / Pound may want to rise following sysctl
#kern.threads.max_threads_per_proc=4096

# Max backlog size
# Note Application can still limit it by passing second argument to listen(2) syscall
# Note: Listen queue be monitored via `netstat -Lan`
kern.ipc.somaxconn=4096

# Shared memory
# Note: Only FreeBSD 7.2+ can use shared memory > 2Gb
#kern.ipc.shmmax=2147483648

# Sockets
kern.ipc.maxsockets=204800

# Mbuf 2k clusters (on amd64 7.2+ 25600 is default)
# Note: defaults for other variables depend on this variable, for example `tcpreass`
# Note: FreeBSD-7 and older: For such high value vm.kmem_size must be increased to 3G
kern.ipc.nmbclusters=262144

# Jumbo pagesize(_SC_PAGESIZE)/9k/16k clusters
# Used as general packet storage for jumbo frames on some network cards
# Can be monitored via `netstat -m`
#kern.ipc.nmbjumbop=262144
#kern.ipc.nmbjumbo9=65536
#kern.ipc.nmbjumbo16=32768

# For lower latency you can decrease schedulers maximum time slice
# default: stathz/10 (~ 13)
kern.sched.slice=1

# Increase max command-line length showed in `ps` (e.g for Tomcat/Java)
# Default is PAGE_SIZE / 16 or 256 on x86
# This avoids commands to be presented as [executable] in `ps`
# For more info see: http://www.freebsd.org/cgi/query-pr.cgi?pr=120749
kern.ps_arg_cache_limit=4096

# Every socket is a file, so increase them
kern.maxfiles=204800
kern.maxfilesperproc=200000
kern.maxvnodes=200000

# On some systems HPET is almost 2 times faster than default ACPI-fast
# Useful on systems with lots of clock_gettime / gettimeofday calls
# See http://old.nabble.com/ACPI-fast-default-timecounter,-but-HPET-83--faster-td23248172.html
# After revision 222222 HPET became default: http://svnweb.freebsd.org/base?view=revision&revision=222222
#kern.timecounter.hardware=HPET


# Small receive space, only usable on http-server
# Note: fileservers should increase it to 65535 or even more
#net.inet.tcp.recvspace=8192

# This is useful on Fat-Long-Pipes
#kern.ipc.maxsockbuf=10485760
#net.inet.tcp.recvbuf_max=10485760
#net.inet.tcp.recvbuf_inc=65535

# Small send space is useful for http servers that serve small files 
# Note: Autotuned since 7.x
#net.inet.tcp.sendspace=16384

# This is useful on Fat-Long-Pipes
#net.inet.tcp.sendbuf_max=10485760
#net.inet.tcp.sendbuf_inc=65535

# Turn off send/receive autotuning if think you know better.
#net.inet.tcp.recvbuf_auto=0
#net.inet.tcp.sendbuf_auto=0

# This should be enabled if you going to use big spaces (>64k)
# Also timestamp field is useful when using syncookies
net.inet.tcp.rfc1323=1
# Turn this off on high-speed, lossless connections (LAN 1Gbit+)
#net.inet.tcp.delayed_ack=0

# This feature is useful if you are serving data over modems, Gigabit Ethernet, 
# or even high speed WAN links (or any other link with a high bandwidth delay product), 
# especially if you are also using window scaling or have configured a large send window.
# Automatically disables on small RTT ( http://www.freebsd.org/cgi/cvsweb.cgi/src/sys/netinet/tcp_subr.c?#rev1.237 )
# This sysctl was removed in 10-CURRENT:
# See: http://www.mail-archive.com/svn-src-head@freebsd.org/msg06178.html
#net.inet.tcp.inflight.enable=0

# TCP slowstart algorithm tunings
# Here we are assuming VERY uncongested network
# Note: Only takes effect if net.inet.tcp.rfc3390 is set to 0,
#       otherwise formula taken from http://tools.ietf.org/html/rfc3390
#net.inet.tcp.slowstart_flightsize=10
#net.inet.tcp.local_slowstart_flightsize=100

# Disable randomizing of ports to avoid false RST
# Before use check SA here www.bsdcan.org/2006/papers/ImprovingTCPIP.pdf
# Note: Port randomization autodisables at high connection rates
#net.inet.ip.portrange.randomized=0

# Increase portrange
# For outgoing connections only. Good for seed-boxes and ftp servers.
net.inet.ip.portrange.first=1024
net.inet.ip.portrange.last=65535

# Dtops route cache degradation during a DDoS.
# http://www.freebsd.org/doc/en/books/handbook/securing-freebsd.html
#net.inet.ip.rtexpire=2
net.inet.ip.rtminexpire=2
net.inet.ip.rtmaxcache=1024

# Security
net.inet.ip.redirect=0
net.inet.ip.sourceroute=0
net.inet.ip.accept_sourceroute=0
net.inet.icmp.maskrepl=0
net.inet.icmp.log_redirect=0
net.inet.icmp.drop_redirect=1
net.inet.tcp.drop_synfin=1
# 
# There is also good example of sysctl.conf with comments:
# http://www.thern.org/projects/sysctl.conf
#
# icmp may NOT rst, helpful for those pesky spoofed 
# icmp/udp floods that end up taking up your outgoing
# bandwidth/ifqueue due to all that outgoing RST traffic.
#
#net.inet.tcp.icmp_may_rst=0

# Security
# Do not send responses on attempts to connect to the closed ports
#net.inet.udp.blackhole=1
#net.inet.tcp.blackhole=2

# IPv6 Security
# For more info see http://www.fosslc.org/drupal/content/security-implications-ipv6
# Disable Node info replies
# To see this vulnerability in action run `ping6 -a sglAac ::1` or `ping6 -w ::1` on unprotected node
net.inet6.icmp6.nodeinfo=0
# Turn on IPv6 privacy extensions
# For more info see proposal http://unix.derkeiler.com/Mailing-Lists/FreeBSD/net/2008-06/msg00103.html
net.inet6.ip6.use_tempaddr=1
net.inet6.ip6.prefer_tempaddr=1
# Disable ICMP redirect
net.inet6.icmp6.rediraccept=0
# Disable acceptation of RA and auto link-local generation if you don't use them
#net.inet6.ip6.accept_rtadv=0
#net.inet6.ip6.auto_linklocal=0

# Increases default TTL
# Default is 64
#net.inet.ip.ttl=128

# Lessen max segment life to conserve resources
# ACK waiting time in milliseconds
# (default: 30000. RFC from 1979 recommends 120000)
net.inet.tcp.msl=5000

# Max number of time-wait sockets
net.inet.tcp.maxtcptw=200000
# Don't use tw on local connections
# As of 15 Apr 2009. Igor Sysoev says that nolocaltimewait has some buggy implementaion.
# So disable it or now till get fixed
#net.inet.tcp.nolocaltimewait=1

# FIN_WAIT_2 state fast recycle
net.inet.tcp.fast_finwait2_recycle=1

# Time before tcp keepalive probe is sent
# default is 2 hours (7200000)
#net.inet.tcp.keepidle=60000

# Use HTCP congestion control (don't forget to load cc_htcp kernel module)
net.inet.tcp.cc.algorithm=htcp

# Should be increased until net.inet.ip.intr_queue_drops is zero
net.inet.ip.intr_queue_maxlen=4096

# Protocol decoding in interrupt thread.
# If you have NIC that automatically sets flow_id then it's better to not
# use direct_force, and use advantages of multithreaded netisr(9)
# If you have Yandex drives you better off with `net.isr.direct_force=1` and
# `net.inet.tcp.read_locking=0` otherwise you may run into some TCP related
# problems.
# Note: If you have old NIC that don't set flow_ids you may need to
# patch `ip_input` to manually set FLOW_ID via `nh_m2flow`.
#
# FreeBSD 8+
#net.isr.direct=1
#net.isr.direct_force=1
# In FreeBSD 9+ it was renamed to
#net.isr.dispatch=direct

# This is for routers only
#net.inet.ip.forwarding=1
#net.inet.ip.fastforwarding=1

# This speed ups dummynet when channel isn't saturated
net.inet.ip.dummynet.io_fast=1
# Increase dummynet(4) hash
#net.inet.ip.dummynet.hash_size=65535
#net.inet.ip.dummynet.max_chain_len=8

# Should be increased when you have A LOT of files on server 
# (Increase until vfs.ufs.dirhash_mem becomes lower)
vfs.ufs.dirhash_maxmem=67108864

# Note from commit http://svn.freebsd.org/base/head@211031 :
# For systems with RAID volumes and/or virtualization environments, where
# read performance is very important, increasing this sysctl tunable to 32
# or even more will demonstratively yield additional performance benefits.
vfs.read_max=32

# Explicit Congestion Notification
# (See http://en.wikipedia.org/wiki/Explicit_Congestion_Notification)
net.inet.tcp.ecn.enable=1

# Flowtable - flow caching mechanism
# Useful for routers
#net.inet.flowtable.enable=1
#net.inet.flowtable.nmbflows=65535

# IPFW dynamic rules and timeouts tuning
# Increase dyn_buckets till net.inet.ip.fw.curr_dyn_buckets is lower
net.inet.ip.fw.dyn_buckets=65536
net.inet.ip.fw.dyn_max=65536
net.inet.ip.fw.dyn_ack_lifetime=120
net.inet.ip.fw.dyn_syn_lifetime=10
net.inet.ip.fw.dyn_fin_lifetime=2
net.inet.ip.fw.dyn_short_lifetime=10
# Make packets pass firewall only once when using dummynet
# i.e. packets going thru pipe are passing out from firewall with accept
#net.inet.ip.fw.one_pass=1

# shm_use_phys Wires all shared pages, making them unswappable
# Use this to lessen Virtual Memory Manager's work when using Shared Mem.
# Useful for databases
#kern.ipc.shm_use_phys=1

# ZFS
# Enable prefetch. Useful for sequential load type i.e fileserver.
# FreeBSD sets vfs.zfs.prefetch_disable to 1 on any i386 systems and 
# on any amd64 systems with less than 4GB of available memory
# See: http://old.nabble.com/Samba-read-speed-performance-tuning-td27964534.html
#vfs.zfs.prefetch_disable=0

# On highload servers you may notice following message in dmesg:
# "Approaching the limit on PV entries, consider increasing either the
# vm.pmap.shpgperproc or the vm.pmap.pv_entry_max tunable"   
vm.pmap.shpgperproc=2048

loader.conf:

# Accept filters for data, http and DNS requests
# Useful when your software creates process/thread on each request (i.e. apache)
# Note: DNS accf available on 8.0+
# Note: In case of badly written software this can increase performance, 
# but I still would recommend against using accept filters in production because of
# their opacity - they really break abstractions. Also it's not trivial to debug/monitor
# their state.
#accf_data_load="YES" 
#accf_http_load="YES"
#accf_dns_load="YES"

# Async IO system calls
aio_load="YES"

# Linux specific devices in /dev
# As for 8.1 it only /dev/full 
#lindev_load="YES"

# Adds NCQ support in FreeBSD
# WARNING! all ad[0-9]+ devices will be renamed to ada[0-9]+
# 8.0+ only
#ahci_load="YES"
#siis_load="YES"

# FreeBSD 9+
# New Congestion Control for FreeBSD
cc_htcp_load="YES"
#cc_cubic_load="YES"

# Increase kernel memory size to 3G. 
#
# Use ONLY if you have KVA_PAGES in kernel configuration, and you have more than 3G RAM 
# Otherwise panic will happen on next reboot!
#
# It's required for high buffer sizes: kern.ipc.nmbjumbop, kern.ipc.nmbclusters, etc
# Useful on highload stateful firewalls, proxies or ZFS fileservers
# (FreeBSD 7.2+ amd64 users: Check that current value is lower!)
#vm.kmem_size="3G"

# If you have really busy forking webserver (i.e. apache13) you may run out of processes
#kern.maxproc=10000

# If your server has lots of swap (>4Gb) you should increase following value
# according to http://lists.freebsd.org/pipermail/freebsd-hackers/2009-October/029616.html
# Otherwise you'll be getting errors
# "kernel: swap zone exhausted, increase kern.maxswzone"
#kern.maxswzone="256M" 

# Older versions of FreeBSD can't tune maxfiles on the fly
#kern.maxfiles="200000"

# Useful for databases 
# Sets maximum data size to 1G
# (FreeBSD 7.2+ amd64 users: Check that current value is lower!)
#kern.maxdsiz="1G"

# Maximum buffer size(vfs.maxbufspace)
# You can check current one via vfs.bufspace
# Should be lowered/upped depending on server's load-type
# Usually decreased to preserve kmem
# (default is 10% of mem)
#kern.maxbcache="512M"

# Sendfile buffers
# Note: i386 only
#kern.ipc.nsfbufs=10240

# syncache tuning
net.inet.tcp.syncache.hashsize=32768
net.inet.tcp.syncache.bucketlimit=32
net.inet.tcp.syncache.cachelimit=1048576

# Send RST on listen queue overflow / memory shortage. 
# Hosts behind Load-Balancer should set it to 1 to fail fast.
# Hosts facing clients should set it to 0 for client to retry connection.
#net.inet.tcp.syncache.rst_on_sock_fail=0

# Increased hostcache
# Later host cache can be viewed via net.inet.tcp.hostcache.list hidden sysctl
# Very useful for it's RTT RTTVAR
# Must be power of two
net.inet.tcp.hostcache.hashsize=65536
# hashsize * bucketlimit (which is 30 by default)
# It allocates 255Mb (1966080*136) of RAM
net.inet.tcp.hostcache.cachelimit=1966080

# TCP control-block Hash table tuning
# See: http://serverfault.com/questions/372512/why-change-net-inet-tcp-tcbhashsize-in-freebsd
net.inet.tcp.tcbhashsize=524288

# Disable ipfw deny all
# Should be uncommented when there is a chance that
# kernel and ipfw binary may be out-of sync on next reboot
#net.inet.ip.fw.default_to_accept=1

#
# SIFTR (Statistical Information For TCP Research) is a kernel module that
# logs a range of statistics on active TCP connections to a log file.
# See prerelease notes:
# http://groups.google.com/group/mailing.freebsd.current/browse_thread/thread/b4c18be6cdce76e4
# and man 4 sitfr
#siftr_load="YES"

# Enable superpages, for 7.2+ only
# See: http://lists.freebsd.org/pipermail/freebsd-hackers/2009-November/030094.html
vm.pmap.pg_ps_enabled=1

# Useful if you are using Intel-Gigabit NIC
#hw.em.rxd=4096
#hw.em.txd=4096
#hw.em.rx_process_limit=-1
# Also if you have A LOT interrupts on NIC - play with following parameters
# NOTE: You should set them for every NIC
#dev.em.0.rx_int_delay: 250
#dev.em.0.tx_int_delay: 250
#dev.em.0.rx_abs_int_delay: 250
#dev.em.0.tx_abs_int_delay: 250
# There is also multithreaded version of em/igb drivers that can be found here:
# http://people.yandex-team.ru/~wawa/
#
# for additional em monitoring and statistics use 
# sysctl dev.em.0.stats=1 ; dmesg
# sysctl dev.em.0.debug=1 ; dmesg
# Also after r209242 (-CURRENT) there is a separate sysctl for each stat variable;   
# Same tunings for igb
#hw.igb.rxd=4096
#hw.igb.txd=4096
#hw.igb.rx_process_limit=-1

# Some useful netisr tunables. See sysctl net.isr
#net.isr.maxthreads=4
#net.isr.defaultqlimit=10240
#net.isr.maxqlimit=10240
# Bind netisr threads to CPUs
#net.isr.bindthreads=1

#
# FreeBSD 9.x+
# Increase interface send queue length
# See commit message http://svn.freebsd.org/viewvc/base?view=revision&revision=207554
#net.link.ifqmaxlen=1024

# Nicer boot logo =)
loader_logo="beastie"

Và cuối cùng ở đây là KERNCONF:

# Just some of them, see also
# cat /sys/{i386,amd64,}/conf/NOTES

# This one useful only on i386
#options         KVA_PAGES=512
# From UPDATING 20121223:
#    After switching to Clang as the default compiler some users of ZFS
#    on i386 systems started to experience stack overflow kernel panics.
#    Please consider using 'options KSTACK_PAGES=4' in such configurations.
#options         KSTACK_PAGES=4

# You can play with HZ in environments with high interrupt rate (default is 1000) 
# 100 is for my notebook to prolong it's battery life
#options         HZ=100

# Eliminate datacopy on socket read-write
# To take advantage with zero copy sockets you should have an MTU >= 4k
# This req. is only for receiving data.
# Read more in man zero_copy_sockets
# Also this epic thread on kernel trap:
#    http://kerneltrap.org/node/6506
# In conclusion Linus says:
#    "anybody that does it that way (FreeBSD) is totally incompetent"
#
# Also see /usr/src/UPDATING 20121023 for notes about
# SOCKET_SEND_COW and SOCKET_RECV_PFLIP
#options         ZERO_COPY_SOCKETS

# Support TCP sign. Used for IPSec
options         TCP_SIGNATURE
# There was stackoverflow found in KAME IPSec stack:
# See http://secunia.com/advisories/43995/
# For quick workaround you can use `ipfw add deny proto ipcomp`
options         IPSEC

# This ones can be loaded as modules. They described in loader.conf section     
#options         ACCEPT_FILTER_DATA
#options         ACCEPT_FILTER_HTTP

# Adding ipfw, also can be loaded as modules
options         IPFIREWALL
# On 8.1+ you can disable verbose to see blocked packets on ipfw0 interface.
# Also there is no point in compiling verbose into the kernel, because
# now there is net.inet.ip.fw.verbose tunable.
#options         IPFIREWALL_VERBOSE
#options         IPFIREWALL_VERBOSE_LIMIT=10
# The IPFIREWALL_FORWARD kernel option has been removed. Its
# functionality now turned on by default.
#options         IPFIREWALL_FORWARD
# Adding kernel NAT
options         IPFIREWALL_NAT
options         LIBALIAS
# Traffic shaping
options         DUMMYNET          
# Divert, i.e. for userspace NAT
options         IPDIVERT

# This is for OpenBSD's pf firewall
device          pf
device          pflog
# pf's QoS - 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

# Pretty console 
# Manual can be found here http://forums.freebsd.org/showthread.php?t=6134
#options         VESA
#options         SC_PIXEL_MODE

# Disable reboot on Ctrl Alt Del
#options         SC_DISABLE_REBOOT
# Change normal|kernel messages color
options         SC_NORM_ATTR=(FG_GREEN|BG_BLACK)
options         SC_KERNEL_CONS_ATTR=(FG_YELLOW|BG_BLACK)
# More scroll space
options         SC_HISTORY_SIZE=8192

# Adding hardware crypto device
device          crypto
device          cryptodev

# Useful network interfaces
device          vlan
device          tap                     #Virtual Ethernet driver
device          gre                     #IP over IP tunneling
device          if_bridge               #Bridge interface
device          pfsync                  #synchronization interface for PF
device          carp                    #Common Address Redundancy Protocol
device          enc                     #IPsec interface
device          lagg                    #Link aggregation interface
device          stf                     #IPv4-IPv6 port

# Also for my notebook, but may be used with Opteron
device         amdtemp
# Same for Intel processors
device         coretemp

# man 4 cpuctl
device         cpuctl                   # CPU control pseudo-device

# Support for ECMP. More than one route for destination
# Works even with default route so one can use it as LB for two ISP
# For now code is unstable and panics (panic: rtfree 2) on route deletions.
#options         RADIX_MPATH

# Multicast routing
#options         MROUTING
#options         PIM

# Debug & DTrace
options        KDB                     # Kernel debugger related code
options        KDB_TRACE               # Print a stack trace for a panic
options        KDTRACE_FRAME           # amd64-only(?)
options        KDTRACE_HOOKS           # all architectures - enable general DTrace hooks
#options        DDB
#options        DDB_CTF                 # all architectures - kernel ELF linker loads CTF data

# Adaptive spining in lockmgr (8.x+)
# See http://www.mail-archive.com/svn-src-all@freebsd.org/msg10782.html
options         ADAPTIVE_LOCKMGRS

# UTF-8 in console (8.x+) 
#options         TEKEN_UTF8

# FreeBSD 8.1+
# Deadlock resolver thread 
# For additional information see http://www.mail-archive.com/svn-src-all@freebsd.org/msg18124.html 
# (FYI: "resolution" is panic so use with caution)
#options         DEADLKRES

# Increase maximum size of Raw I/O and sendfile(2) readahead
#options MAXPHYS=(1024*1024)
#options MAXBSIZE=(1024*1024)

# For scheduler debug enable following option.
# Debug will be available via `kern.sched.stats` sysctl
# For more information see http://svnweb.freebsd.org/base/head/sys/conf/NOTES?view=markup
#options SCHED_STATS

# A framework for very efficient packet I/O from userspace, capable of 
# line rate at 10G (FreeBSD10+)
# See http://svnweb.freebsd.org/base?view=revision&revision=227614
#device netmap

Nếu bạn đang điều chỉnh mạng để có hiệu suất tối đa, bạn có thể muốn chơi với ifconfigcác tùy chọn như:

# You can list all capabilities via `ifconfig -m`
ifconfig [-]rxcsum [-]txcsum [-]tso [-]lro mtu

Trong trường hợp bạn đã kích hoạt DDB trong cấu hình kernel, bạn nên chỉnh sửa /etc/ddb.conf và thêm một cái gì đó như thế này để cho phép tự động khởi động lại (và văn bản dưới dạng phần thưởng):

script kdb.enter.panic=textdump set; capture on; show pcpu; bt; ps; alltrace; capture off; call doadump; reset
script kdb.enter.default=textdump set; capture on; bt; ps; capture off; call doadump; reset

Và đừng quên thêm ddb_enable="YES"vào/etc/rc.conf

Vì FreeBSD 9, bạn có thể chọn bật / tắt điều khiển luồng trên NIC của mình:

# See http://en.wikipedia.org/wiki/Ethernet_flow_control and
# http://www.mail-archive.com/svn-src-head@freebsd.org/msg07927.html for additional info
ifconfig bge0 media auto mediaopt flowcontrol

Hầu hết các giới hạn của FreeBSD có thể được theo dõi bởi:

# vmstat -z

# limits

Nhiều loại bộ đếm mạng có thể được theo dõi thông qua

# netstat -s

Trong tùy chọn -Q của FreeBSD-8 + netstat xuất hiện, hãy thử làm theo lệnh để hiển thị netisrsố liệu thống kê

# netstat -Q

Để giải quyết các vấn đề TCP không tầm thường người ta có thể sử dụng net.inet.tcp.log_debug, nó tạo ra đầu ra dmesg tương tự như:

host kernel: TCP: [0.0.0.0]:0 to [1.1.1.1]:1; syncache_socket: Socket create failed due to limits or memory shortage
host kernel: TCP: [0.0.0.0]:0 to [1.1.1.1]:1 tcpflags 0x10<ACK>; tcp_input: Listen socket: Socket allocation failed due to limits or memory shortage, sending RST

Lưu ý!
Cuối cùng nhưng không kém phần quan trọng: nếu bạn đang điều chỉnh mạng - đó là cách tốt để mua card mạng tốt nhất bạn có thể mua. Cá nhân tôi thích Intel igb(4), danh sách các mô hình có thể được tìm thấy trong if_igb.c

Tái bút cũng thấy

# man 7 tuning

FreeBSD Wiki về điều chỉnh hiệu suất mạng được thực hiện bởi chính các nhà phát triển.

PPS. Calomel.org - Blog tham khảo và nghiên cứu mã nguồn mở có bài viết hay về hiệu suất mạng và bài viết gần đây về Điều chỉnh và tối ưu hóa FreeBSD .

Cảm ơn
tôi muốn cảm ơn cộng đồng FreeBSD, đặc biệt là tác giả của nginx - Igor Sysoev, nginx-ru @ và FreeBSD-Performance @ danh sách gửi thư để cung cấp thông tin hữu ích về điều chỉnh FreeBSD. Yandex BSD những người yêu thích từ noc@search-admin@, đặc biệt melifaro@zont@.

Tuyên bố từ chối trách nhiệm
Đây chắc chắn không phải là thứ mà bạn nên sao chép / dán vào cấu hình sản xuất của mình! Một số "điều chỉnh" được cung cấp thậm chí có thể có hại. Sử dụng dữ liệu được cung cấp làm tài liệu tham khảo để điều tra thêm hoặc thử nghiệm A / B. Tôi nói lại một lần nữa chỉ để được rõ ràng: KHÔNG BLINDLY ÁP DỤNG "TUNING" BẠN ĐÃ TÌM KIẾM TRÊN INTERNET! .
Trước khi áp dụng bất kỳ sysctlhệ thống sản xuất nào, bạn nên điều tra tác động của nó (điều cần thiết là tìm mã nguồn của hạt nhân) và đo lường lợi ích hiệu suất của nó (nếu có) trong môi trường thử nghiệm.
Sử dụng bài này có nguy cơ của riêng bạn.

WIP FreeBSD
* Nấu ăn gì cho FreeBSD 7?
* Nấu ăn gì cho FreeBSD 8?
* Nấu ăn gì cho FreeBSD 9?
* Có gì mới cho FreeBSD 10?
* Có gì mới cho FreeBSD 11?

Câu hỏi cho người xem
Bạn đang sử dụng điều chỉnh nào trên các máy chủ FreeBSD của mình?

Bạn cũng có thể đăng /etc/sysctl.conf, /boot/loader.conftùy chọn kernel, v.v. với mô tả về ý nghĩa của nó (không sao chép-dán từ sysctl -d). Đừng quên chỉ định loại máy chủ (frontend, backend, cache, db, Storage, gateway, v.v.)

Hãy chia sẻ kinh nghiệm!


5
Điều này đã thực sự trở thành một CW ấn tượng và hữu ích. Kudos để SaveTheRbtz.
Chris S

Đây là một trong những bài đăng yêu thích của tôi, nhưng tôi thực sự muốn xem thêm hướng dẫn về thời điểm điều chỉnh một số cài đặt khác nhau được đăng ở trên. Ví dụ: mục Bộ nhớ được chia sẻ hướng tới đầu phần sysctl.conf: làm thế nào để tôi biết nếu tôi muốn tăng nó? Tôi nên tăng bao xa? Có quá nhiều mục khác nhau ở đây chỉ đơn giản là làm thử và lỗi với từng mục. Cảm ơn!
Jed Daniels

Tôi đã tìm thấy các bài đăng trên blog và thậm chí các danh sách gửi thư quá sai lệch trên hầu hết các điều chỉnh. Nguồn thông tin chi tiết tốt nhất vẫn là mã nguồn. Từ giờ tôi sẽ cố gắng cung cấp thêm thông tin về các tham số. Ngoài ra đây là CW, vì vậy bất cứ ai cũng có thể tự do chỉnh sửa nó.
SaveTheRbtz

Câu trả lời:


12

Tôi khuyên bạn nên chống lại options IPFIREWALL_DEFAULT_TO_ACCEPT. Mặc định là Mặc định để Từ chối. Tường lửa xuất hiện chỉ với một quy tắc deny ip from any to anyvà duy trì như vậy cho đến khi tập lệnh cấu hình chính xác lưu lượng truy cập sẽ đi qua.

Lưu ý tiếp theo: RSA (một trong những công ty công nghệ bảo mật hàng đầu thế giới) đã bị hack gần đây khi một phần tường lửa của họ bị vô hiệu hóa trong cửa sổ bảo trì. Điều này thực sự nhấn mạnh mức độ nhanh chóng của một hệ thống có thể bị xâm phạm với các điều kiện phù hợp.

Nếu bạn khăng khăng vô hiệu hóa tường lửa cho đến khi bạn chặn rõ ràng lưu lượng truy cập không mong muốn, vui lòng xem xét sử dụng sysctl có sẵn bằng cách thêm net.inet.ip.fw.default_to_accept=1vào loader.conf. Điều này có thêm lợi ích là dễ dàng sửa đổi (không biên dịch lại kernel) nếu bạn thay đổi quyết định tại một thời điểm nào đó trong tương lai.


Quản trị viên tốt phải luôn luôn có deny allở cuối quy tắc tường lửa. Tùy chọn này ở đây để ngăn ngừa bắn chân khi bạn vô tình sử dụng ipfw flushhoặc một cái gì đó tương tự
SaveTheRbtz

1
Vâng, nhưng nếu bạn sử dụng Mặc định để Chấp nhận thì máy chủ của bạn sẽ dễ bị tấn công khi khởi động. Đây có thể là một sự cố hiếm khi xảy ra, nhưng hãy hỏi bất kỳ quản trị viên doanh nghiệp nào nếu máy chủ của họ mở 100% trong vài phút mỗi giờ. Bạn có thể nhận được một cái nhìn bẩn và một câu trả lời ngắn. Sử dụng tùy chọn này để phát triển và thử nghiệm các quy tắc trong một môi trường được kiểm soát chặt chẽ là một điều; nhưng đề xuất rằng đó là một thực tiễn phổ biến cho mục đích thực hiện là vô trách nhiệm.
Chris S

Ok, quan điểm của bạn rất rõ ràng, tôi nên thêm một số nhận xét về IPFIREWALL_DEFAULT_TO_ACCEPT. Hãy cố gắng sửa nó. Đã xóa DEFAULT_TO_ACCEPT, nhưng đã thêm net.inet.ip.fw.default_to_accept với các nhận xét được nhận xét theo mặc định.
LưuTheRbtz

8

Từ sysctl.conf mặc định, nó cung cấp "bảo mật" chống lại các kiddies script, những người quản lý để xâm nhập vào tài khoản không root. Không kích hoạt nó (trong hầu hết các trường hợp, ngoại lệ là các trình tiện ích không có đặc quyền cần xem danh sách quy trình).

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

8

tôi cũng thường thêm các lượt theo dõi vào /etc/sysctl.conf của mình ...

net.inet.tcp.blackhole = 2
net.inet.udp.blackhole = 1

và cả hai

bảo mật.bsd.see_other_uids = 0
bảo mật.bsd.see_other_gids = 0

trong khi chúng tôi đang điều chỉnh chủ đề, tôi cũng khuyên bạn nên xem ở đây:

NGINX + PHP-FPM + APC = Tuyệt vời

, hướng dẫn này về FreeBSD + hướng dẫn về NGINX = Thật tuyệt vời! ;)


8

Đặc quyền bảo mật

security.bsd.see_other_uids=0
security.bsd.see_other_gids=0
security.bsd.conservative_signals=1
security.bsd.unprivileged_proc_debug=0
security.bsd.unprivileged_read_msgbuf=0
security.bsd.hardlink_check_uid=1
security.bsd.hardlink_check_gid=1
vfs.usermount=0
net.inet.tcp.log_in_vain=1
net.inet.udp.log_in_vain=1
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.