Nigbati 'a' ko ba dọgba si 'a'. Ni ji ti gige kan

Itan ti ko dun julọ ṣẹlẹ si ọkan ninu awọn ọrẹ mi. Ṣugbọn bi ko ṣe wuyi bi o ṣe jade lati jẹ fun Mikhail, o kan jẹ idanilaraya fun mi.

Mo gbọdọ sọ pe ọrẹ mi jẹ ohun UNIX-olumulo: le fi eto sori ẹrọ funrararẹ MySQL, PHP ki o si ṣe awọn eto ti o rọrun nginx.
Ati pe o ni mejila tabi ọkan ati idaji awọn oju opo wẹẹbu igbẹhin si awọn irinṣẹ ikole.

Ọkan ninu awọn aaye wọnyi ti a ṣe igbẹhin si chainsaws joko ni iduroṣinṣin ni TOP ti awọn ẹrọ wiwa. Aaye yii jẹ oluyẹwo ti kii ṣe ti owo, ṣugbọn ẹnikan ni ihuwasi ti ikọlu rẹ. Iyẹn DDoS, lẹhinna agbara iro, lẹhinna wọn kọ awọn asọye ti ko tọ ati firanṣẹ awọn ilokulo si alejo gbigba ati si RKN.
Lojiji, ohun gbogbo balẹ ati idakẹjẹ yii ko dara, ati pe aaye naa bẹrẹ si maa lọ kuro ni awọn laini oke ti awọn abajade wiwa.

Nigbati 'a' ko ba dọgba si 'a'. Ni ji ti gige kan

Iyẹn jẹ ọrọ kan, lẹhinna itan abojuto funrararẹ.

O ti sunmọ akoko sisun nigbati foonu naa dun: “San, ṣe iwọ ko ni wo olupin mi? O dabi si mi pe a ti gepa mi, Emi ko le fi idi rẹ mulẹ, ṣugbọn rilara naa ko fi mi silẹ fun ọsẹ kẹta. Boya o to akoko fun mi lati gba itọju fun paranoia? ”

Ohun ti o tẹle jẹ ijiroro idaji wakati eyiti a le ṣe akopọ bi atẹle:

  • ile fun sakasaka wà oyimbo olora;
  • ikọlu le jèrè awọn ẹtọ superuser;
  • ikọlu naa (ti o ba waye) ni ifọkansi pataki ni aaye yii;
  • Awọn agbegbe iṣoro ti ni atunṣe ati pe o kan nilo lati ni oye boya eyikeyi ilaluja wa;
  • gige naa ko le ni ipa lori koodu aaye ati awọn apoti isura data.

Nipa awọn ti o kẹhin ojuami.

Nigbati 'a' ko ba dọgba si 'a'. Ni ji ti gige kan

Nikan ni funfun frontend IP wulẹ jade sinu aye. Ko si paṣipaarọ laarin awọn ẹhin ati iwaju ayafi http (s), awọn olumulo / awọn ọrọ igbaniwọle yatọ, ko si awọn bọtini paarọ. Lori awọn adirẹsi grẹy, gbogbo awọn ebute oko oju omi ayafi 80/443 ti wa ni pipade. Awọn IPs ẹhin funfun ni a mọ si awọn olumulo meji nikan, ẹniti Mikhail gbẹkẹle patapata.

Ti fi sori ẹrọ ni iwaju iwaju Debian 9 ati nipa awọn akoko ti ipe ti wa ni ṣe, awọn eto ti wa ni ti ya sọtọ lati aye nipa ohun ita ogiriina ati ki o duro.

“Ok, fun mi ni iwọle si,” Mo pinnu lati fi oorun sun fun wakati kan. "Emi yoo ri pẹlu oju ara mi."

Nibi ati siwaju sii:

$ 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

Nwa fun a ṣee ṣe gige

Mo bẹrẹ olupin, akọkọ ni ipo igbala. Mo gbe awọn disiki naa ki o yipada nipasẹ wọn afọwọsi-awọn akọọlẹ, itan, Awọn igbasilẹ eto, ati bẹbẹ lọ, ti o ba ṣeeṣe, Mo ṣayẹwo awọn ọjọ ti ẹda faili, biotilejepe Mo loye pe cracker deede yoo ti "gba soke" lẹhin ti ara rẹ, ati pe Misha ti "tẹ mọlẹ" pupọ nigba ti o n wa ara rẹ. .

Mo bẹrẹ ni ipo deede, ko sibẹsibẹ ni oye kini lati wa, Mo kọ awọn atunto naa. Ni akọkọ, Mo nifẹ si nginx niwon, ni apapọ, ko si ohun miiran lori frontend ayafi ti o.
Awọn atunto jẹ kekere, ti eleto daradara sinu awọn faili mejila, Mo kan wo nipasẹ wọn ologbo'oh ọkan nipa ọkan. Ohun gbogbo dabi pe o mọ, ṣugbọn iwọ ko mọ boya Mo padanu nkankan ni, jẹ ki n ṣe atokọ ni kikun:

$ 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

Emi ko loye: “Nibo ni atokọ naa wa?”

$ 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

Ibeere keji ni a ṣafikun si ibeere atokọ naa: “Kini idi ti ẹya atijọ ti nginx?”

Ni afikun, eto naa gbagbọ pe ẹya tuntun ti fi sii:

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

Mo n pe:
- Misha, kilode ti o tun ṣajọpọ nginx?
- Duro, Emi ko paapaa mọ bi a ṣe le ṣe eyi!
- Dara, daradara, lọ sun...

Nginx o ti wa ni kedere tun ati awọn ti o wu kikojọ lilo "-T" ti wa ni pamọ fun idi kan. Ko si awọn iyemeji eyikeyi nipa gige sakasaka ati pe o le gba nirọrun ati (niwon Misha rọpo olupin pẹlu ọkan tuntun lonakona) ronu iṣoro naa ti yanju.

Ati nitootọ, niwon ẹnikan ni awọn ẹtọ root'ah, lẹhinna o jẹ oye nikan lati ṣe tun fi sori ẹrọ eto, kò sì wúlò láti wá ohun tí kò tọ́ níbẹ̀, ṣùgbọ́n lọ́tẹ̀ yìí ìfẹ́-ọkàn ti borí oorun. Báwo la ṣe lè mọ ohun tí wọ́n fẹ́ fi pa mọ́ fún wa?

Jẹ ki a gbiyanju lati wa kakiri:

$ strace nginx -T

A wo ni o, nibẹ ni o wa kedere ko ti to ila ni kakiri a la

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

Nikan fun igbadun, jẹ ki a ṣe afiwe awọn awari.

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

Mo ro pe apakan ti koodu naa /src/mojuto/nginx.c

            case 't':
                ngx_test_config = 1;
                break;

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

ti mu wá si fọọmu:

            case 't':
                ngx_test_config = 1;
                break;

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

tabi

            case 't':
                ngx_test_config = 1;
                break;

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

nitorina akojọ nipasẹ "-T" ko han.

Ṣugbọn bawo ni a ṣe le wo atunto wa?

Ti ero mi ba tọ ati pe iṣoro naa wa ni oniyipada nikan ngx_dump_config jẹ ki a gbiyanju lati fi sori ẹrọ ni lilo gdb, da nibẹ ni a bọtini --pẹlu-cc-opt -g bayi ati ireti pe iṣapeye -O2 ko ni pa wa lara. Ni akoko kanna, niwon Emi ko mọ bi ngx_dump_config le ṣe ilana ni irú 'T':, a kii yoo pe bulọọki yii, ṣugbọn fi sii pẹlu lilo irú 't':

Kini idi ti o le lo '-t' bakannaa '-T'Ṣiṣẹ Àkọsílẹ ti o ba jẹ (ngx_dump_config) ṣẹlẹ inu ti (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;
    }

Nitoribẹẹ, ti koodu ba yipada ni apakan yii kii ṣe sinu irú 'T':, lẹhinna ọna mi kii yoo ṣiṣẹ.

Idanwo nginx.confLehin ti o ti yanju iṣoro naa ni idanwo, o ti fi idi rẹ mulẹ pe iṣeto ti o kere julọ nilo fun malware lati ṣiṣẹ nginx iru:

events {
}

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

A yoo lo fun kukuru ninu nkan naa.

Lọlẹ yokokoro

$ 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

Igbese nipa igbese:

  • ṣeto a breakpoint ninu awọn iṣẹ akọkọ ()
  • lọlẹ awọn eto
  • yi awọn iye ti awọn oniyipada ti o ipinnu awọn ti o wu konfigi ngx_dump_config=1
  • tẹsiwaju / pari eto naa

Gẹgẹbi a ti le rii, atunto gidi yatọ si tiwa, a yan nkan parasitic lati inu rẹ:

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;

Jẹ ki a wo ohun ti n ṣẹlẹ nibi ni ibere.

Ti pinnu Olumulo-Aṣojuyandex/google:

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

Awọn oju-iwe iṣẹ ti yọkuro wordpress:

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

Ati fun awọn ti o ṣubu labẹ awọn ipo mejeeji ti o wa loke

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

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

ninu ọrọ naa html- awọn oju-iwe yipada 'O' on 'o' и 'A' on 'kan':

sub_filter_once off;
sub_filter 'о' $sign_o;
sub_filter 'а' $sign_a;

Iyẹn tọ, arekereke nikan ni iyẹn 'a'! = 'a' gege bi 'o'!= 'o':

Nigbati 'a' ko ba dọgba si 'a'. Ni ji ti gige kan

Nitorinaa, awọn botilẹti ẹrọ wiwa gba, dipo deede 100% ọrọ Cyrillic, idoti ti a ti fomi po pẹlu Latin. 'kan' и 'o'. Emi ko ni igboya lati jiroro bi eyi ṣe ni ipa lori SEO, ṣugbọn ko ṣeeṣe pe iru jumble ti awọn lẹta yoo ni ipa rere lori awọn ipo ni awọn abajade wiwa.

Kini MO le sọ, awọn eniyan pẹlu oju inu.

jo

N ṣatunṣe aṣiṣe pẹlu GDB
gdb (1) - oju-iwe eniyan Linux
strace (1) - Linux eniyan iwe
Nginx - Module ngx_http_sub_module
Nipa ayùn, chainsaws ati ina ayùn

orisun: www.habr.com

Fi ọrọìwòye kun