Sysctl - Настройка сетевых параметров ядра Linux

Данными настройками можно увеличить проиводительность системы, а также снизить последствия DDoS-атак и их эффективность.

Вывести все доступные опции ядра из раздела net:

# cat /proc/sys/net/ipv4/

Как внести изменения в ядро на лету:

# echo "0"> /proc/sys/net/ipv4/ip_forward
# sysctl -w net.ipv4.ip_forward=0
 - Из файла,
# sysctl -p /etc/sysctl.conf

Отобразить текущее значение:

# cat /proc/sys/net/ipv4/ip_forward
# sysctl net.ipv4.ip_forward

rp_filter:

Подробное описание:

По умолчанию он отключен:

# cat /proc/sys/net/ipv4/conf/all/rp_filter
0

Рекомендуется включить в «строгий режим» проверки (значение 2 включает «свободный режим» проверки), причем включить его можно на всех интерфейсах:

# sysctl -w net.ipv4.conf.all.rp_filter=1

Так проверку можно включить на определенном интерфейсе:

# sysctl -w net.ipv4.conf.eth0.rp_filter=1

accept_source_route:

Подробное описание:

По умолчанию эта опция отключена:

# cat /proc/sys/net/ipv4/conf/all/accept_source_route
0

Но если она у вас почему-то включена - отключите, желательно на всех интерфейсах:

# sysctl -w net.ipv4.conf.all.accept_source_route=0
# sysctl -w net.ipv4.conf.lo.accept_source_route=0
# sysctl -w net.ipv4.conf.eth0.accept_source_route=0
# sysctl -w net.ipv4.conf.default.accept_source_route=0

accept_redirects, secure_redirects, send_redirects:

Подробное описание:

По умолчанию все эти параметры включены:

# cat /proc/sys/net/ipv4/conf/all/accept_redirects
1
# cat /proc/sys/net/ipv4/conf/all/secure_redirects
1
# cat /proc/sys/net/ipv4/conf/all/send_redirects
1

Но, так как наш сервер не маршрутизатор, в них нет необходимости:

# sysctl -w net.ipv4.conf.all.accept_redirects=0
# sysctl -w net.ipv4.conf.all.secure_redirects=0
# sysctl -w net.ipv4.conf.all.send_redirects=0

icmp_echo_ignore_broadcasts:

По умолчанию включено, т.е. broadcast icmp запросы приходить не будут:

# cat /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts
1

Так и рекомендуется отставить:

# sysctl -w net.ipv4.icmp_echo_ignore_broadcasts=1

icmp_ignore_bogus_error_responses:

По умолчанию:

# cat /proc/sys/net/ipv4/icmp_ignore_bogus_error_responses
1

Так и рекомендуется отставить:

# sysctl -w net.ipv4.icmp_ignore_bogus_error_responses=1

icmp_echo_ignore_all:

По умолчанию:

# cat /proc/sys/net/ipv4/icmp_echo_ignore_all
0

На ваше усмотрение, можно отключить:

# sysctl -w net.ipv4.icmp_echo_ignore_all=1

tcp_syncookies:

Как проверить, включен ли он у нас:

# cat /proc/sys/net/ipv4/tcp_syncookies
1

Если выдает 1, то включен, 0 - значит отключен. Для отключения «на лету» достаточно воспользоваться следующей командой:

# sysctl -w net.ipv4.tcp_syncookies=0

Естественно поставив в конце «1» - механизм будет снова включен.

Подробное описание:

Таким образом, как описано выше, мы получаем неплохую защиту от syn флуда и терпим небольшую нагрузку на ЦП.

Но согласно описанию, включать генерацию syncookies на высоконагруженных серверах, для которых этот механизм срабатывает, при большом количестве легальных соединений, не следует. Если в логах есть предупреждения о SYN-флуде, при этом это вполне нормальные соединения, нужно настраивать другие параметры: tcp_max_syn_backlog, tcp_synack_retries, tcp_abort_on_overflow.

tcp_max_syn_backlog:

По умолчанию:

# cat /proc/sys/net/ipv4/tcp_max_syn_backlog
512

Если на сервере возникают перегрузки, можно попытаться увеличить это значение, например до 4096:

# sysctl -w net.ipv4.tcp_max_syn_backlog=4096

tcp_synack_retries:

Подробное описание:

По умолчанию:

# cat /proc/sys/net/ipv4/tcp_synack_retries
5

Это значение имеет смысл уменьшить, например до 1 (это будет 9 секунд):

# sysctl -w net.ipv4.tcp_synack_retries=1

tcp_max_orphans:

Подробное описание:

По умолчанию:

# cat /proc/sys/net/ipv4/tcp_max_orphans
262144

Рекомендуется установить 65536, а далее увеличивать, по мере необходимости:

# sysctl -w net.ipv4.tcp_max_orphans=65536

tcp_fin_timeout:

Подробное описание:

По умолчанию:

# cat /proc/sys/net/ipv4/tcp_fin_timeout
60

Рекомендуется поменять на 10 секунд:

# sysctl -w net.ipv4.tcp_fin_timeout=10

tcp_keepalive_time:

Подробное описание:

По умолчанию 2 часа:

# cat /proc/sys/net/ipv4/tcp_keepalive_time
7200

Рекомендуется каждую минуту:

# sysctl -w net.ipv4.tcp_keepalive_time=60

tcp_keepalive_intvl:

Подробное описание:

По умолчанию:

# cat /proc/sys/net/ipv4/tcp_keepalive_intvl
75

Рекомендуется поставить:

# sysctl -w net.ipv4.tcp_keepalive_intvl=15

tcp_keepalive_probes:

Подробное описание:

# cat /proc/sys/net/ipv4/tcp_keepalive_probes
9

Рекомендуется поставить:

# sysctrl -w net.ipv4.tcp_keepalive_probes=5

netdev_max_backlog:

По умолчанию:

# cat /proc/sys/net/core/netdev_max_backlog
1000

Рекомендуется так и оставить:

# sysctl -w net.core.netdev_max_backlog=1000

somaxconn:

По у молчанию:

# cat /proc/sys/net/core/somaxconn
1024

Рекомендуется установить значения в районе 15000-20000:

# sysctl -w net.core.somaxconn=15000

tcp_mem:

Подробное описание:

Подробное описание: еще одно

По умолчанию:

# cat /proc/sys/net/ipv4/tcp_mem
96552 128739 193104

Можно поставить эти же значения.увеличивать имеет смысл в случае увеличения нагрузки.

tcp_rmem:

Подробное описание:

По умолчанию:

# cat /proc/sys/net/ipv4/tcp_rmem
4096 87380 4119648

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

# sysctl -w net.ipv4.tcp_rmem="4096 87380 16777216"

tcp_wmem:

Подробное описание:

По умолчанию:

# cat /proc/sys/net/ipv4/tcp_wmem
4096 16384 4119648

Можно оставить эти же значения. Увеличивать их имеет смысл в случае увеличения нагрузки. В одном из источнике рекомендовали следующие значения:

# sysctl -w net.ipv4.tcp_wmem="4096 65536 16777216"

rmem_default, wmem_default:

Их значения по умолчанию:

# cat /proc/sys/net/core/rmem_default
229376
# cat /proc/sys/net/core/wmem_default
229376

Можно оставить эти же значения. Увеличивать их имеет смысл в случае увеличения нагрузки. Например, в одном из источнике рекомендовали следующие значения:

# sysctl -w net.core.rmem_default=65536
# sysctl -w net.core.wmem_default=65536

rmem_max, wmem_max:

Их значения по умолчанию:

# cat /proc/sys/net/core/rmem_max
131071
# cat /proc/sys/net/core/wmem_max
131071

Можно оставить эти же значения. Увеличивать их имеет смысл в случае увеличения нагрузки. Например, в одном из источнике рекомендовали следующие значения:

# sysctl -w net.core.rmem_max=16777216
# sysctl -w net.core.wmem_max=16777216

tcp_orphan_retries:

Подробное описание:

По умолчанию:

# cat /proc/sys/net/ipv4/tcp_orphan_retries
0

Рекомендуется уменьшить значение этого параметра, поскольку закрытые соединения могут поглощать достаточно много ресурсов (т.е. оставляем 0):

# sysctl -w net.ipv4.tcp_orphan_retries=0

ip_conntrack_max:

По умолчанию:

# cat /proc/sys/net/ipv4/netfilter/ip_conntrack_max
65536

При слишком маленьких значениях ядро начинает отвергать входящие подключения с соответствующей записью в системном логе:

# sysctl -w net.ipv4.netfilter.ip_conntrack_max=16777216

tcp_timestamps:

Подробное описание:

По умолчанию метки включены:

# cat /proc/sys/net/ipv4/tcp_timestamps
1

Кстати, лучше отставить его включенным, иначе не будет работать опция tcp_tw_reuse.

# sysctl -w net.ipv4.tcp_timestamps=1

tcp_sack:

Подробное описание:

По умолчанию опция включена:

# cat /proc/sys/net/ipv4/tcp_sack
1

Рекомендуется включать эту опцию, если вы имеете неустойчивые соединения. Однако, если вы соединены 1.5-метровым кабелем с другой машиной, то в таком случае, для достижения наивысшей скорости обмена, следует эту опцию отключить:

# sysctl -w net.ipv4.tcp_sack=1

tcp_congestion_control:

Подробное описание:

По умолчанию:

# cat /proc/sys/net/ipv4/tcp_congestion_control
cubic

Для сервера рекомендуется использовать htcp:

# sysctl -w net.ipv4.tcp_congestion_control=htcp

tcp_no_metrics_save:

По умолчанию опция ничего не запрещает:

# cat /proc/sys/net/ipv4/tcp_no_metrics_save
0

Так как это помогает повысить производительность, рекомендуется включить:

# sysctl -w net.ipv4.tcp_no_metrics_save=1

net.ipv4.route.flush:

Так как в ядре 3.2 она даже не читается, менять ничего не стал.

ip_local_port_range:

Подробное описание:

По умолчанию там такой диапазон:

# cat /proc/sys/net/ipv4/ip_local_port_range
32768 61000

Для тяжелых проектов диапазон рекомендуется увеличить:

# sysctl -w net.ipv4.ip_local_port_range="1024 65535"

tcp_tw_reuse:

Подробное описание:

По умолчанию отключена:

# cat /proc/sys/net/ipv4/tcp_tw_reuse
0

Лучше включить:

# sysctl -w net.ipv4.tcp_tw_reuse=1

tcp_window_scaling:

Подробное описание:

По умолчанию она включена:

# cat /proc/sys/net/ipv4/tcp_window_scaling
1

Лучше так и оставить:

# sysctl -w net.ipv4.tcp_window_scaling=1

tcp_rfc1337:

Подробное описание:

По умолчанию опция отключена:

# cat /proc/sys/net/ipv4/tcp_rfc1337
0

На сервере она точно не помешает:

# sysctl -w net.ipv4.tcp_rfc1337=1

ip_forward:

По умолчанию переадресация включена:

# cat /proc/sys/net/ipv4/ip_forward
0

Если сервер не является маршрутизатором, то включать эту опцию нет необходимости:

# sysctl -w net.ipv4.ip_forward=0

tcp_abort_on_overflow:

По умолчанию она отключена:

# cat /proc/sys/net/ipv4/tcp_abort_on_overflow
0

Если ситуация требует, то ее можно включить:

# sysctl -w net.ipv4.tcp_abort_on_overflow=1