Здравствуйте.
Debian 5.3.3-7+squeeze3
В роботе с sysctl.conf я слаб. Хочу задать пару вопросов. Сидел вводил по SSH различное следующим образом:
sysctl net.ipv4.tcp_tw_reuse=1
До этого в sysctl.conf уже была информация вбитая в файл в ручную.
Вводил, вводил потом чтобы применить изменения без перезагрузки сервера ввёл sysctl -p. В результате в файл не то что новые данные не записались, а ещё и старые сбросились и в файле всё стало по дефолту, то есть по сути чисто комментарии.
Почему так произошло, как правильно заносить данные?
А также если просто в командной строке писать различные значения с помощью sysctl они будут действительно до перезагрузки?
Вопрос по sysctl.conf
CyberGod, я просто открываю файл /etc/sysctl.conf в редакторе, делаю необходимые изменения, затем, чтобы проверить без перезагрузки, ввожу команду sysctl -p. До сих пор ни разу не подводило. Возможно, вы где-либо ошиблись при вводе команд?
CyberGod, man sysctl говорит:
-p[FILE], --load[=FILE]
Load in sysctl settings from the file specified or /etc/sysctl.conf if
none given. Specifying - as filename means reading data from standard
input.так что то что писал в консоли можешь нати только в ~/.bash_histoy
В sysctl.conf я разбираюсь достаточно плохо. Хочу спросить совета.
Есть очень нагруженный сервер на debian squeeze который подвергается DOS/DDOS атакам по 5 раз в день и т.д.
Начал настраивать sysctl.conf чтобы уменьшить нагрузку и отбиться от вредителей, за пример взял http://hghltd.yandex.net/yandbtm?fmode=inject&url=http%3A%2F%2Fdebian.telenet.ru%2Fdoc%2Fsysctl.conf&text=%D0%BD%D0%B0%D1%81%D1%82%D1%80%D0%BE%D0%B9%D0%BA%D0%B0%20sysctl.conf%20%D0%B2%20Debian&l10n=ru&mime=html&sign=4d735e7e91908e4a973d278b2e0ce013&keyno=0 эту документацию.
Документация достаточно популярная, стоит ли брать её за пример? Или может вообще стоить переписать почти всё как там написано?
Переписывать всё не стал, некоторое всё равно надо адаптировать под себя. А кое каких пунктов в там и вовсе нет. Вот что получилось, я понимаю, что посмотреть всё это уйдёт время, но всё же прошу помощи.
А также есть ли разница писать в файл только нужные параметры или писать все даже те у которых значение по дефолту подходящее? Повлияет ли это как-то на скорость? Спрашиваю потому, что если на скорость никак не влияет, я бы предпочёл для наглядности писать все и потом уже править.
Задав что-либо не правильно в sysctl.conf может ли сервер не перезагрузиться?
Если да, то как перед перезагрузкой проверить валидность введённых параметров? Даже если применять с помощью sysctl -p рано или поздно всё равно сервак ребутить прийдётся...
Показать
net.ipv4.conf.all.accept_redirects=0
net.ipv4.conf.lo.accept_redirects=0
net.ipv4.conf.eth0.accept_redirects=0
net.ipv4.conf.default.accept_redirects=0
# This will increase the amount of memory available for socket input/output queues | Увеличиваем объем доступной памяти для сокета ввода / вывода #очереди
net.ipv4.tcp_wmem=4096 16384 4194304
net.ipv4.tcp_rmem=4096 87380 4194304
net.ipv4.tcp_mem=196608 262144 393216
net.ipv4.tcp_max_orphans=65536
#Размер буферов по умолчанию для приема и отправки данных через сокеты
net.core.wmem_default=65536
net.core.rmem_default=25165824
#Увеличиваем максимальный размер памяти отводимой для TCP буферов
net.core.wmem_max=25165824
net.core.rmem_max=25165824
net.core.optmem_max=25165824
# макс количество пакетов в очередь на обработку
net.core.netdev_max_backlog=10000 чем отличается от net.ipv4.tcp_max_syn_backlog = 1024?
#Отключаем перенаправление пакетов с одного сетевого интерфейса на другой.
net.ipv4.ip_forward=0
#Controls the maximum size of a message, in bytes | Контролирует максимальный размер сообщения в байтах
kernel.msgmnb=65536
#Controls the default maximum size of a message queue | Контролирует максимальный размер очереди сообщений.
kernel.msgmax=65536
#Controls the maximum shared segment size, in bytes | Контролирует максимальный общим размер сегмента в байтах.
kernel.shmmax=494967295
#Controls the maximum number of shared memory segments, in pages | Контролирует максимальное количество сегментов разделяемой памяти, в #страницах.
kernel.shmall=268435456
# Controls whether core dumps will append the PID to the core filename
# Useful for debugging multi-threaded applications
kernel.core_uses_pid=1
#число входящих соединений, которые могут стоять в очереди, прежде чем будут отброшены. Стоит ли делать больше?
net.core.somaxconn=16096
#####Защита от SYN-флуда#####
#Максимальное число сокетов, находящихся в состоянии TIME-WAIT одновременно.
net.ipv4.tcp_max_tw_buckets=180000
#Включает быструю “переработку” TIME-WAIT сокетов. По умолчанию равняется 0. Включение приводит к малому количеству сокетов в состоянии TIME_WAIT, однако, может
#приводить к ошибкам на системах, которые используют NAT либо участвую в лоадбэлэнсинге.
net.ipv4.tcp_tw_recycle=1
#Параметр ососбенно полезен в системах, в которых большое количестов коротких соединений, которые открываются и практически мгновенно #переходят в состояние TIME_WAIT.
#Примером может служить web-сервер. В данных случаях этот параметр сильно уменьшает нагрузку на сервер за счёт повторного использования сокетов. Что нам и необходимо.
net.ipv4.tcp_tw_reuse=1
net.ipv4.tcp_window_scaling=0
net.ipv4.tcp_sack=1
net.ipv4.tcp_timestamps=1
net.ipv4.netfilter.ip_conntrack_tcp_timeout_close=30
#Переменная задает максимальное время пребывания сокета в состоянии FIN-WAIT-2.
net.ipv4.tcp_fin_timeout=10
# Проверять TCP-соединение каждую минуту. Если на другой стороне - легальная машина, она сразу ответит. Дефолтовое значение - 2 часа.
net.ipv4.tcp_keepalive_time=15 или net.ipv4.tcp_keepalive_time=1800 ? Везде пишут по разному, почему такая разница?
# Повторить пробу через десять секунд
net.ipv4.tcp_keepalive_intvl=10
# Количество проверок перед закрытием соединения
net.ipv4.tcp_keepalive_probes=5
#Переменная определяет макс время хранения SYN-запросов в памяти до момента получения третьего, завершающего установление соединения, #пакета.
#Увеличение очереди «полуоткрытых» TCP-соединений:
net.ipv4.tcp_max_syn_backlog=2048
#Уменьшение времени удержания «полуоткрытых» соединений:
net.ipv4.tcp_synack_retries=1
#Включение механизма TCP syncookies:
net.ipv4.tcp_syncookies=1
##### Защита от спуфинга #####
#IP-спуфинг – атака, при которой злоумышленник, манипулируя исходящими адресами, посылает пакеты от имени другого хоста. IP-спуфинг часто #используется для проведения
#DoS-атак. Защититься можно с помощью механизма Source Address Verification.
#Включаем защиту от IP спуфинга, и проверку маршрута от источника
#сообщает ядру о необходимости фильтрации пакетов по их исходящему адресу.
net.ipv4.conf.all.rp_filter=1
#Фильтр обратного пути, защита от спуфинга (подмен адресов)
net.ipv4.conf.default.rp_filter=1
net.ipv4.conf.lo.rp_filter=1
net.ipv4.conf.eth0.rp_filter=1
#Отключаем маршрутизацию TCP пакетов от источника
net.ipv4.conf.all.accept_source_route=0
net.ipv4.conf.default.accept_source_route=0
net.ipv4.conf.lo.accept_source_route=0
net.ipv4.conf.eth0.accept_source_route=0
##### Защита от спуфинга End #####
##### ICMP-флуд #####
#Игнорируем пинги
net.ipv4.icmp_echo_ignore_all=1
#Игнорируем широковещательные запросы
net.ipv4.icmp_echo_ignore_broadcasts=1
##### ICMP-флуд End #####[/console]
С нетерпением жду ответа, заранее спасибо.
CyberGod, я рад за то что ты разбираешься с sysctl.conf. Но почему для сообщений не используешь теги code, spoiler, console? Читать внавал скинутую информацию сложно мильон раз говорил...
Исправился... А теперь уважаемые форумчане жду ваших ответов по вопросам написанным выше.
CyberGod, ddos'ят - iptables в руки, политики в drop, ограничиваешь кол-во подключение с одного ip, отсеиваешь плохие пакеты и тп.
Это разумеется. Но сейчас тема не о iptables, решил по порядку, сначала настроить sysctl.conf, а потом уже за iptables браться.
Ответьте хотя бы на это:
А также есть ли разница писать в файл только нужные параметры или писать все даже те у которых значение по дефолту подходящее? Повлияет ли это как-то на скорость? Спрашиваю потому, что если на скорость никак не влияет, я бы предпочёл для наглядности писать все и потом уже править.
Чтобы я смог рассеять сомнения.
А также есть ли разница писать в файл только нужные параметры или писать все даже те у которых значение по дефолту подходящее? Повлияет ли это как-то на скорость? Спрашиваю потому, что если на скорость никак не влияет, я бы предпочёл для наглядности писать все и потом уже править.
Пишите как вам удобнее. Доли секунды, которые понадобятся на их применение при загрузке, погоды не сделают.
net.ipv4.tcp_keepalive_time=15 или net.ipv4.tcp_keepalive_time=1800 ? Везде пишут по разному, почему такая разница и как правильно?
CyberGod, я уже как-то говорил про дефолт, он не просто так разработчиками устанавливается, мой совет - не знаешь - use default settings.
То бишь пиши в sysctl.conf _только_ то что хочешь изменить.
Лучше вот над этим поразмысли:
iptables -A bad_packets -m state --state INVALID -j LOG --log-prefix "Invalid packet: "
iptables -A bad_packets -m state --state INVALID -j DROP
iptables -A bad_packets -p tcp -j bad_tcp_packets
iptables -A bad_packets -j RETURN
iptables -A bad_tcp_packets -p tcp -m tcp ! --tcp-flags FIN,SYN,RST,ACK SYN -m state --state NEW -j LOG --log-prefix "New not syn: "
iptables -A bad_tcp_packets -p tcp -m tcp ! --tcp-flags FIN,SYN,RST,ACK SYN -m state --state NEW -j DROP
iptables -A bad_tcp_packets -p tcp -m tcp --tcp-flags FIN,SYN,RST,PSH,ACK,URG NONE -j LOG --log-prefix "Stealth scan: "
iptables -A bad_tcp_packets -p tcp -m tcp --tcp-flags FIN,SYN,RST,PSH,ACK,URG NONE -j DROP
iptables -A bad_tcp_packets -p tcp -m tcp --tcp-flags FIN,SYN,RST,PSH,ACK,URG FIN,SYN,RST,PSH,ACK,URG -j LOG --log-prefix "Stealth scan: "
iptables -A bad_tcp_packets -p tcp -m tcp --tcp-flags FIN,SYN,RST,PSH,ACK,URG FIN,SYN,RST,PSH,ACK,URG -j DROP
iptables -A bad_tcp_packets -p tcp -m tcp --tcp-flags FIN,SYN,RST,PSH,ACK,URG FIN,PSH,URG -j LOG --log-prefix "Stealth scan: "
iptables -A bad_tcp_packets -p tcp -m tcp --tcp-flags FIN,SYN,RST,PSH,ACK,URG FIN,PSH,URG -j DROP
iptables -A bad_tcp_packets -p tcp -m tcp --tcp-flags FIN,SYN,RST,PSH,ACK,URG FIN,SYN,RST,ACK,URG -j LOG --log-prefix "Stealth scan: "
iptables -A bad_tcp_packets -p tcp -m tcp --tcp-flags FIN,SYN,RST,PSH,ACK,URG FIN,SYN,RST,ACK,URG -j DROP
iptables -A bad_tcp_packets -p tcp -m tcp --tcp-flags SYN,RST SYN,RST -j LOG --log-prefix "Stealth scan: "
iptables -A bad_tcp_packets -p tcp -m tcp --tcp-flags SYN,RST SYN,RST -j DROP
iptables -A bad_tcp_packets -p tcp -m tcp --tcp-flags FIN,SYN FIN,SYN -j LOG --log-prefix "Stealth scan: "
iptables -A bad_tcp_packets -p tcp -m tcp --tcp-flags FIN,SYN FIN,SYN -j DROP
iptables -A bad_tcp_packets -p tcp -j RETURN net.ipv4.tcp_keepalive_time=15 или net.ipv4.tcp_keepalive_time=1800 ? Везде пишут по разному, почему такая разница и как правильно?
Ну и как ты понимаешь этот параметр?
newzenon, спасибо за правила Iptables. Добавлю к своим и поразмыслю.
Ну и как ты понимаешь этот параметр?
Определяет как часто следует проверять соединение. Значение в секундах. Смысла в проверки разв 30 минут не вижу. Значит в данном случаи больше подходит 15 секунд.
Перечитал все попавшиеся на глаза документации. да действительно лучше вносить только то, что требуется изменить и когда это действительно требуется. Получилось примерно следующее:
Показать
[console]
net.ipv4.tcp_max_orphans=65536
# макс количество пакетов в очередь на обработку
net.core.netdev_max_backlog=10000
#число входящих соединений, которые могут стоять в очереди, прежде чем будут отброшены.
net.core.somaxconn=16096
#####Защита от SYN-флуда#####
net.ipv4.tcp_tw_reuse=1
net.ipv4.tcp_rfc1337=1
net.ipv4.netfilter.ip_conntrack_tcp_timeout_close=30
net.ipv4.tcp_fin_timeout=10
net.ipv4.tcp_keepalive_time=60
net.ipv4.tcp_keepalive_intvl=10
net.ipv4.tcp_keepalive_probes=5
net.ipv4.tcp_max_syn_backlog=2048
#Уменьшение времени удержания «полуоткрытых» соединений:
net.ipv4.tcp_synack_retries=1
net.ipv4.tcp_syncookies=1
##### Защита от спуфинга #####
net.ipv4.conf.all.rp_filter=1
net.ipv4.conf.default.rp_filter=1
net.ipv4.conf.lo.rp_filter=1
net.ipv4.conf.eth0.rp_filter=1
net.ipv4.conf.all.accept_source_route=0
net.ipv4.conf.default.accept_source_route=0
net.ipv4.conf.lo.accept_source_route=0
net.ipv4.conf.eth0.accept_source_route=0
##### Защита от спуфинга End #####
##### ICMP-флуд #####
net.ipv4.icmp_echo_ignore_all=1
net.ipv4.icmp_echo_ignore_broadcasts=1
net.ipv4.icmp_ignore_bogus_error_responses=1
##### ICMP-флуд End #####
# Disable ICMP Redirect Acceptance | Отключаем ICMP перенаправление
net.ipv4.conf.all.accept_redirects=0
net.ipv4.conf.lo.accept_redirects=0
net.ipv4.conf.eth0.accept_redirects=0
net.ipv4.conf.default.accept_redirects=0
[/console]
Буду рад если прокомментируете и укажите на ошибки если они есть. Вношу в sysctl.conf...
Перехожу к следующему этапу, буду читать документации по iptables и собирать нужные правила.
Всем спасибо.
Какой тайный смысл каждый интерфейс прописывать?
net.ipv4.conf.all.rp_filter=1
net.ipv4.conf.default.rp_filter=1
net.ipv4.conf.lo.rp_filter=1
net.ipv4.conf.eth0.rp_filter=1если все равно
net.ipv4.conf.all.rp_filter=1А вот это нафига?
net.ipv4.icmp_echo_ignore_all=1
так пинга вообще не будет никакого, это с iptables делают, тут надо разрешить.
Типы ICMP-сообщений.
0 — echo reply (echo-ответ, пинг)
3 — destination unreachable (адресат недосягаем)
4 — source quench (подавление источника, просьба посылать пакеты медленнее)
5 — redirect (редирект)
8 — echo request (echo-запрос, пинг)
9 — router advertisement (объявление маршрутизатора)
10 — router solicitation (ходатайство маршрутизатора)
11 — time-to-live exceeded (истечение срока жизни пакета)
12 — IP header bad (неправильный IPзаголовок пакета)
13 — timestamp request (запрос значения счетчика времени)
14 — timestamp reply (ответ на запрос значения счетчика времени)
15 — information request (запрос информации)
16 — information reply (ответ на запрос информации)
17 — address mask request (запрос маски сети)
18 — address mask reply (ответ на запрос маски сети) Запрет опасных ICMP-сообщений.
iptables -A INPUT -p icmp -icmp-type 3,8,12 -j ACCEPT
iptables -A OUTPUT -p icmp -icmp-type 0,3,4,11,12 -j ACCEPT
[console]Какой тайный смысл каждый интерфейс прописывать?
net.ipv4.conf.all.rp_filter=1
net.ipv4.conf.default.rp_filter=1
net.ipv4.conf.lo.rp_filter=1
net.ipv4.conf.eth0.rp_filter=1
если все равно
net.ipv4.conf.all.rp_filter=1
[/console]
Действительно не разумно, спасибо исправлю.
А вот это нафига?
net.ipv4.icmp_echo_ignore_all=1
На это и был расчёт, кому пинг нужен?
Тем более, что некоторые "вредители" ищут жертв проверяю именно способность пинговаться.
А так пинг не нужен и команда блокирует любой пинг, не нужны правила по icmp в iptables.
В любом случаи спасибо за то, что прокоментил данную переменную. Пока оставлю.
Правила iptabes возму на заметку. Но пока на тему iptables я ещё не могу говорить сначало надо прочитать хотя бы несколько статей и документаций, собрать правила на свой взгляд. А потом уже создам отдельную тему про iptables где выставлю правила на обсуждение и попрошу коментов.
iptables -A bad_packets -m state --state INVALID -j LOG --log-prefix "Invalid packet: "
iptables -A bad_packets -m state --state INVALID -j DROP
iptables -A bad_packets -p tcp -j bad_tcp_packets
iptables -A bad_packets -j RETURN
iptables -A bad_tcp_packets -p tcp -m tcp ! --tcp-flags FIN,SYN,RST,ACK SYN -m state --state NEW -j LOG --log-prefix "New not syn: "
iptables -A bad_tcp_packets -p tcp -m tcp ! --tcp-flags FIN,SYN,RST,ACK SYN -m state --state NEW -j DROP
iptables -A bad_tcp_packets -p tcp -m tcp --tcp-flags FIN,SYN,RST,PSH,ACK,URG NONE -j LOG --log-prefix "Stealth scan: "
iptables -A bad_tcp_packets -p tcp -m tcp --tcp-flags FIN,SYN,RST,PSH,ACK,URG NONE -j DROP
iptables -A bad_tcp_packets -p tcp -m tcp --tcp-flags FIN,SYN,RST,PSH,ACK,URG FIN,SYN,RST,PSH,ACK,URG -j LOG --log-prefix "Stealth scan: "
iptables -A bad_tcp_packets -p tcp -m tcp --tcp-flags FIN,SYN,RST,PSH,ACK,URG FIN,SYN,RST,PSH,ACK,URG -j DROP
iptables -A bad_tcp_packets -p tcp -m tcp --tcp-flags FIN,SYN,RST,PSH,ACK,URG FIN,PSH,URG -j LOG --log-prefix "Stealth scan: "
iptables -A bad_tcp_packets -p tcp -m tcp --tcp-flags FIN,SYN,RST,PSH,ACK,URG FIN,PSH,URG -j DROP
iptables -A bad_tcp_packets -p tcp -m tcp --tcp-flags FIN,SYN,RST,PSH,ACK,URG FIN,SYN,RST,ACK,URG -j LOG --log-prefix "Stealth scan: "
iptables -A bad_tcp_packets -p tcp -m tcp --tcp-flags FIN,SYN,RST,PSH,ACK,URG FIN,SYN,RST,ACK,URG -j DROP
iptables -A bad_tcp_packets -p tcp -m tcp --tcp-flags SYN,RST SYN,RST -j LOG --log-prefix "Stealth scan: "
iptables -A bad_tcp_packets -p tcp -m tcp --tcp-flags SYN,RST SYN,RST -j DROP
iptables -A bad_tcp_packets -p tcp -m tcp --tcp-flags FIN,SYN FIN,SYN -j LOG --log-prefix "Stealth scan: "
iptables -A bad_tcp_packets -p tcp -m tcp --tcp-flags FIN,SYN FIN,SYN -j DROP
iptables -A bad_tcp_packets -p tcp -j RETURN
Ни одна из этих команд не сработала, пишет: iptables: No chain/target/match by that name. Я так понимаю дело в bad_tcp_packets ?
CyberGod, сначала цепочку bad_tcp_packets надо создать:
iptables - N bad_tcp_packetsМожно вопрос? Какой вы обслуживаете хостинг?
Спрашиваю зад тем чтоб на нём не размещать сайты.