نقوم بجمع سجلات جدار الحماية Mikrotik في قاعدة بيانات

مساء الخير

أريد أن أخبرك مدى سهولة وطبيعية تكوين خادم جمع بيانات تعريف حركة مرور الشبكة لأجهزة توجيه Mikrotik.

الغرض: سيكون الهدف تخزين سجلات جدار الحماية "المضغ" في قاعدة بيانات لمزيد من التحليل.

الوسائل: أي توزيع جديد لـ Linux مع rsyslogd v8 والإصدارات الأحدث مناسب للتنفيذ ، ربما ستعمل الصيغة المقترحة على الإصدار 7 أيضًا. نحن بحاجة أيضًا إلى نظام إدارة قواعد البيانات ، اخترت mariadb. سيختلف نمو قاعدة البيانات اعتمادًا على عدد القواعد المسجلة ، لأن حجم محرك الأقراص حسب تقديرك ، في حالتي ، يتم تسجيل 30-40 قاعدة ، وهو ما يقرب من 1200 ألف سطر في اليوم. خلال شهر استخدام قاعدة البيانات ، بما في ذلك الفهارس ، نمت إلى 3.8 غيغابايت.

الميكانيكا: يرسل جهاز التوجيه سجلًا إلى الخادم البعيد عبر UDP. باستخدام التعبيرات العادية ، يقوم خادم rsyslog بتنظيف سلاسل المعلومات غير الضرورية ، ويقوم بإنشاء إدراج SQL وإرساله إلى نظام إدارة قواعد البيانات. يقوم DBMS ، باستخدام مشغل قبل الإدراج ، بإجراء تنظيف إضافي وفصل للحقول التي لا يمكن تحليلها في rsyslog.

تكوين RSYSLOG


تحرير الملف /etc/rsyslog.conf
أضف الأسطر التالية هناك:

module(load="ommysql") module(load="imudp") input(type="imudp" port="514") 

وبالتالي ، نقوم بتحميل الوحدات اللازمة ونفتح منفذ 514 UDP.

يبدو خط السجل من Mikrotik كما يلي:

 20180927155341 BLOCKSMKNETS forward: in:ether6 - LocalTORF out:VLAN55 - RT_INET, src-mac 00:15:17:31:b8:d7, proto TCP (SYN), 192.168.0.234:2457->192.168.6.14:65535, len 60 

كما ترون ، سيكون من الصعب تخزين الكثير من الإضافات في قاعدة البيانات واختيار واضح.
من الناحية النظرية ، أحتاج إلى إضافة هذه البيانات:

 20180927155341 ether6 VLAN5 192.168.0.234 2457 192.168.6.14 65535 00:15:17:31:b8:d7 TCP SYN forward BLOCKSMKNETS 60 

لم أستطع الحصول على مثل هذا الخط باستخدام rsyslog واحد فقط. يستخدم نظام Rsyslog النظامي POSIX ERE / BRE ، لذلك لا توجد طريقة لتطبيق ميزات مثل lookahead أو lookbehind.

هناك أداة تسمح لك بتصحيح النظامي ، جربه ، ربما يمكنك فصل المنفذ عن العنوان ، وكذلك اسم الواجهة من الداخل: والخروج:. فقط ضع في اعتبارك أن بعض بروتوكولات الرياضة والموانئ مفقودة.

بشكل عام ، كان الناتج كما يلي:

 20180927155341 in:ether6 out:VLAN5 192.168.0.234:2457 192.168.6.14:65535 00:15:17:31:b8:d7 TCP (SYN) forward BLOCKSMKNETS 60 

هناك وثائق حول كيفية طهي النظام الأساسي rsyslog.

في الشكل النهائي ، سيبدو ملف التكوين لاستلام السجل من Mikrotik /etc/rsyslog.d/20-remote.conf كما يلي:

 $template tpl_traflog,"insert into traflog.traffic (datetime, inif, outif, src, dst, smac, proto, flags, chain, logpref, len) values ('%timereported:::date-mysql%', '%msg:R,ERE,0,DFLT,0:in:[a-zA-Z]+[0-9]+|in:<[a-zA-Z]+-[a-zA-Z]+>--end%', '%msg:R,ERE,0,BLANK,0:out:[a-zA-Z]+[0-9]+|out:<[a-zA-Z]+-[a-zA-Z]+>--end%', '%msg:R,ERE,0,DFLT,0:([0-9]+\.){3}[0-9]+[:]?([0-9]+)?--end%', '%msg:R,ERE,0,DFLT,1:([0-9]+\.){3}[0-9]+[:]?([0-9]+)?--end%', '%msg:R,ERE,0,BLANK:([0-f]+:){5}[0-f]+--end%', '%msg:R,ERE,0,BLANK:\b[AX]{3,4}\b--end%', '%msg:R,ERE,0,BLANK:\([AZ]+\)|\(([AZ]+\,){1,3}[AZ]+\)--end%', '%msg:R,ERE,0,DFLT:[ax]+--end%', '%msg:F,32:2%', '%msg:R,ERE,0,DFLT:[0-9]+$--end%' )",SQL if ($fromhost-ip == '192.168.0.230') and ($syslogtag contains "firewall") then {action(type="ommysql" server="localhost" serverport="3306" db="traflog" uid="rsyslogger" pwd="rsyslogger" template="tpl_traflog") stop} 

في السطر الأول ، وصف القالب (القالب) هو سطر من كود SQL لنقله إلى DBMS.
السطر الثاني هو الشرط الذي سيحدث فيه الإجراء ، أي السجل في DBMS.
تبدو الحالة كما يلي: إذا كان مصدر السجل = 192.168.0.230 ( if ($fromhost-ip == '192.168.0.230') ) وإذا كان سطر msg يحتوي على "جدار حماية" (و (يحتوي $ syslogtag على "جدار حماية")) ، فاستخدم الوحدة النمطية ommysql مع معلمات الاتصال ( then {action(type="ommysql" server="localhost" serverport="3306" db="traflog" uid="rsyslogger" pwd="..." ) نسمي النموذج tpl_traflog ( template="tpl_traflog") ) ، وبعد ذلك نتوقف عن معالجة الخط ( stop} ).

من الممكن أن يكون هناك خطأ في حالتك ، قد يكون ذلك بسبب أسماء الواجهات أو بادئات السجل ، ربما شيء آخر. للتصحيح ، سنقوم بما يلي ، والتعليق على السطر الثاني ، وإضافة نموذج جديد وشرطين جديدين:

 $template tpl_traflog_test,"%timereported:::date-mysql% %msg:R,ERE,0,DFLT,0:in:[a-zA-Z]+[0-9]+|in:<[a-zA-Z]+-[a-zA-Z]+>--end% %msg:R,ERE,0,BLANK,0:out:[a-zA-Z]+[0-9]+|out:<[a-zA-Z]+-[a-zA-Z]+>--end% %msg:R,ERE,0,DFLT,0:([0-9]+\.){3}[0-9]+[:]?([0-9]+)?--end% %msg:R,ERE,0,DFLT,1:([0-9]+\.){3}[0-9]+[:]?([0-9]+)?--end% %msg:R,ERE,0,BLANK:([0-f]+:){5}[0-f]+--end% %msg:R,ERE,0,BLANK:\b[AX]{3,4}\b--end% %msg:R,ERE,0,BLANK:\([AZ]+\)|\(([AZ]+\,){1,3}[AZ]+\)--end% %msg:R,ERE,0,DFLT:[ax]+--end% %msg:F,32:2% %msg:R,ERE,0,DFLT:[0-9]+$--end%\n" if ($fromhost-ip == '192.168.0.230') then {action(type="omfile" file="/var/log/remote/192.168.0.230.log" )} if ($fromhost-ip == '192.168.0.230') then {action(type="omfile" file="/var/log/remote/192.168.0.230.log" template="tpl_traflog_test" ) stop} 

أعد تشغيل المسجل.

يشبه القالب tpl_traflog_test tpl_traflog ، ولكن بدون SQL INSERT.

يضيف الشرط الأول السطر غير المعالج٪ msg٪ إلى الملف /var/log/remote/192.168.0.230.log ، لأن القالب غير محدد.

الشرط الثاني يضيف السطر الذي تمت معالجته إلى نفس الملف.
لذلك سيكون أكثر ملاءمة للمقارنة.
بعد ذلك ، قم بإعداد قاعدة البيانات.

نستعد DB


سنخفض إعداد DBMS ، كل شيء قياسي هنا.

نبدأ وحدة التحكم الخلية وتنفيذ التعليمات البرمجية التالية:

 --   create database traflog character set utf8 collate utf8_bin; use traflog; --  create table traffic (id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, datetime DATETIME, inif VARCHAR(20), outif VARCHAR(20), src VARCHAR(21), sport INT(5), dst VARCHAR(21), dport INT(5), smac VARCHAR(17), proto VARCHAR(4), flags VARCHAR(11), chain VARCHAR(8), logpref VARCHAR(24), len INT(5)) ENGINE=MYISAM; --  create user rsyslogger@localhost identified by '...'; grant all privileges on traflog.* to rsyslogger@localhost; 

الجدول جاهز ، المستخدم.

الآن قم بإضافة مشغل ، وسوف يفعل ما فشل المسجل في فصل العنوان عن المنفذ ، وتنظيف أسماء الواجهات ، وإزالة الأقواس من العلم:

 --   traffic DELIMITER // create TRIGGER delim_ip_port_flags BEFORE insert ON traffic FOR EACH ROW begin set NEW.inif = REGEXP_REPLACE ((NEW.inif), 'in:', '' ); set NEW.outif = REGEXP_REPLACE ((NEW.outif), 'out:', '' ); set NEW.sport = REGEXP_REPLACE ((NEW.src), '([0-9]+\.){3}[0-9]+:|([0-9]+\.){3}[0-9]+', '' ); set NEW.src = REGEXP_REPLACE ((NEW.src), ':[0-9]+', '' ); set NEW.dport = REGEXP_REPLACE ((NEW.dst), '([0-9]+\.){3}[0-9]+:|([0-9]+\.){3}[0-9]+', '' ); set NEW.dst = REGEXP_REPLACE ((NEW.dst), ':[0-9]+', '' ); set NEW.flags = REGEXP_REPLACE ((NEW.flags), '\\(|\\)', '' ); end // delimiter ; 

يبحث REGEXP_REPLACE عن المعلمة الثانية بعد العلامة العشرية (الموسم العادي) ويستبدلها بالمعامل الثالث ، وفي حالتنا لا يوجد شيء بين علامتي الاقتباس ، وبالتالي فإنه ببساطة يزيل ما يعثر عليه.

فلنقم بإدراج اختبار ، على غرار الطريقة التي سيقوم بها المسجل:

 --   insert into traffic (datetime, inif, outif, src, dst, smac, proto, chain, logpref) values (20180730075437, 'in:ether6', 'out:VLAN55', '192.168.0.234:4997', '192.168.6.18:65535', '00:15:17:31:b8:d7', 'TCP', '(SYN)', 'forward', 'BLOCKSMKNETS'); 

دعنا نرى ما حدث:

 select * from tarffic; 

إذا كان كل شيء صحيحًا ، فانتقل. إذا لم يكن كذلك ، ابحث عن الخطأ.

أضف فهرس واحد على الأقل. أنا لست خبيرًا في إنشاء الفهارس ، ولكن كما أفهمها ، في mysql ، من الأصح استخدام الفهارس ذات حقول الربط المختلفة للاستعلامات المختلفة ، حيث يمكن أن يستخدم استعلام واحد فهرس واحد فقط (أو هل أنا على خطأ؟). إذا فهمت ، افعل ذلك حسب تقديرك.
غالبًا ما يتعين علي تقديم طلبات ببادئة معينة ، لذلك أضفت هذا الفهرس:
 --  create index traffic_index on traffic (datetime,logpref,src); 

تم.

تحتاج الآن إلى البدء في الإرسال على جهاز التوجيه ، وإضافة إعدادات خادم السجل عن بُعد والإجراء إليه ، وإضافة خيار السجل إلى إحدى قواعد جدار الحماية ، وإضافة بادئة لا تزيد عن 24 حرفًا.

في وحدة تحكم Mikrotik ، يبدو الأمر مثل هذا:

 /system logging action set 3 remote=192.168.0.94 src-address=192.168.0.230 add name=remote2 remote=192.168.0.19 syslog-facility=local6 target=remote /system logging add action=remote topics=error,account,critical,event,info add action=remote2 topics=firewall /ip firewall filter ... add action=drop chain=input comment="drop ssh brute forcers" dst-port=22,8291 log=yes log-prefix=DROP_SSH_BRUTE protocol=tcp src-address-list=ssh_blacklist ... 

حيث 192.168.0.230 هو عنوان جهاز التوجيه ، 192.168.0.19 هو عنوان خادم السجل لسجلات جدار الحماية ، و 192.168.0.94 هو خادم سجل آخر ، لدي سجلات نظام Mikrotik هناك ، نحن لسنا بحاجة إليه الآن. إعدادنا بعيد 2.

بعد ذلك ، انظر ما يندرج في الملف:

 tail -f /var/log/remote/192.168.0.230.log 

يجب أن تنتقل الخطوط من جهاز التوجيه إلى الملف ، ما لم يتم تشغيل القاعدة الخاصة بك في كثير من الأحيان.

إذا كانت بعض الحقول مفقودة ، أي أن وقت التسلسل و inif و outif و src و dst و smac و proto و flags و chain و logpref و len غير متبوع ، فيمكنك محاولة تغيير المعلمة في قوالب تصحيح الأخطاء في المسجل ، واستبدال BLANK بـ DLFT. ثم بدلاً من فراغ أي حقل ، ستظهر بعض الحروف ، ولا أتذكر أيًا منها بالفعل. إذا حدث ذلك ، فهذا يعني أن هناك خطأ ما في الجدول العادي وتحتاج إلى إصلاحه.

إذا سار كل شيء كما ينبغي ، فقم بإيقاف شروط الاختبار والقالب.

تحتاج أيضًا إلى تشغيل التهيئة الافتراضية في /etc/rsyslog.d/ أدناه ، وأعدت تسميته إلى 50-default.conf بحيث لا يتم سكب السجلات البعيدة في سجل النظام / var / log / message
أعد تشغيل المسجل.

دعنا ننتظر قليلاً حتى تمتلئ قاعدة بياناتنا. ثم يمكننا أن نبدأ التحديد.

بعض الاستفسارات كمثال:

لمعرفة حجم قاعدة البيانات وعدد الصفوف:
 MariaDB [traflog]> select table_schema as "database", round(sum(data_length + index_length)/1024/1024,2) as "size Mb", TABLE_ROWS as "count rows" from information_schema.tables group by table_schema; +--------------------+---------+------------+ | database | size Mb | count rows | +--------------------+---------+------------+ | information_schema | 0.17 | NULL | | traflog | 3793.39 | 21839553 | +--------------------+---------+------------+ 2 rows in set (0.48 sec) 

نما ما يقرب من 4 غيغابايت في الشهر ، لكنه يعتمد على عدد وخصائص قواعد جدار الحماية المسجلة

عدد البادئات المسجلة
عدد البادئات المسجلة لا يساوي عدد القواعد ، وبعض القواعد تعمل مع بادئة واحدة ، ولكن لا يزال عدد البادئات الإجمالية؟ وكم عدد القواعد التي تم وضعها لهم؟

 MariaDB [traflog]> select logpref,count(logpref) from traffic group by logpref order by count(logpref) desc; +----------------------+----------------+ | logpref | count(logpref) | +----------------------+----------------+ | ACCEPT_TORF_INET | 14582602 | | ACCEPT_SMK_PPP | 1085791 | | DROP_FORWARD_INVALID | 982374 | | REJECT_BNK01 | 961503 | | ACCEPT_MMAX_TORF | 802455 | | ACCEPT_TORF_PPP | 736803 | | SMTP_DNAT | 689533 | | ACCEPT_SMK_INET | 451411 | | ACCEPT_INET_TORF | 389857 | | BLOCK_SMKNETS | 335424 | | DROP_SMTP_BRUTE | 285850 | | ACCEPT_ROZN_TORF | 154811 | | ACCEPT_TORF_MMAX | 148393 | | DROP_ETHALL_ETHALL | 80679 | | ACCEPT_SMTP | 48921 | | DROP_SMTP_DDOS | 32190 | | RDP_DNAT | 28757 | | ACCEPT_TORF_ROZN | 18456 | | SIP_DNAT | 15494 | | 1CWEB_DNAT | 6406 | | BLOCKSMKNETS | 5789 | | DROP_SSH_BRUTE | 3162 | | POP_DNAT | 1997 | | DROP_RDP_BRUTE | 442 | | DROP_BNK01 | 291 | | DROPALL | 138 | | ACCEPT_RTP_FORWARD | 90 | | REJECT_SMTP_BRUTE | 72 | | L2TP_INPUT_ACCEPT | 33 | +----------------------+----------------+ 29 rows in set (2 min 51.03 sec) 

ACCEPT_TORF_INET هو الرائد ، من خلال هذه البادئة ، يمكنك العثور على كل شخص دخل إلى الإنترنت من شبكتنا المحلية ، وتم تسجيل البروتوكولات والمنافذ ، وسيأتي الوقت وسوف يتم إغلاق الوصول للبعض. هناك بيانات مرجعية للعمل المستقبلي على البق.

Smtp الرمح زعيم
دعونا نرى من حاول اليوم الوصول إلى خادم SMTP:

 MariaDB [traflog]> select src,count(dport) from traffic where logpref='SMTP_DNAT' and datetime > '2018101600000000' group by src order by count(dport) desc limit 10; +----------------+--------------+ | src | count(dport) | +----------------+--------------+ | 191.96.249.92 | 12440 | | 191.96.249.24 | 4556 | | 191.96.249.61 | 4537 | | 185.255.31.122 | 3119 | | 178.57.79.250 | 226 | | 185.36.81.174 | 216 | | 185.234.219.32 | 211 | | 89.248.162.145 | 40 | | 45.125.66.157 | 32 | | 188.165.124.31 | 21 | +----------------+--------------+ 10 rows in set, 1 warning (21.36 sec) 

من الواضح أن العقدة 191.96.249.92 هي الفائزة اليوم. دعونا نرى في القواعد المسجلة التي لا يزال يظهر فيها:

 MariaDB [traflog]> select src,dport,count(dport),logpref from traffic where src='191.96.249.92' group by logpref order by count(dport) desc; +---------------+-------+--------------+-----------------+ | src | dport | count(dport) | logpref | +---------------+-------+--------------+-----------------+ | 191.96.249.92 | 25 | 226989 | SMTP_DNAT | | 191.96.249.92 | 25 | 170714 | DROP_SMTP_BRUTE | | 191.96.249.92 | 25 | 2907 | DROP_SMTP_DDOS | | 191.96.249.92 | 25 | 2061 | ACCEPT_SMTP | +---------------+-------+--------------+-----------------+ 4 rows in set (10 min 44.21 sec) 

هذا متخصص فقط في smtp ، ~ 1 ٪ من الزيارات لمحاولة تخمين كلمة المرور أو محاولة إرسال بعض القمامة ، ذهب الباقي إلى الحمام.

استغرق الطلب 10 دقائق ، وهذا كثير ، الفهارس الحالية ليست مناسبة له ، أو يمكنك إعادة صياغة الطلب ، لكننا لن نتحدث عنه الآن.

في المستقبل ، من المخطط أن يتم ربط واجهة الويب بالاستعلامات والنماذج القياسية.
يتم إعطاء المتجه ، آمل أن تكون هذه المقالة مفيدة.

شكرا لكم جميعا!

المراجع:

وثائق Rsyslog
وثائق Mysql
وثائق تسجيل Mikrotik

بفضل مجتمع LOR للحصول على النصائح.

UPD.1
تمت إضافة حقل العلامات إلى قاعدة البيانات ، يمكنك الآن تتبع مدة الاتصال عن طريق التقاط SYN ، FIN.
تم إصلاح بعض الأخطاء في النظام الأساسي لـ rsyslog وكذلك مشغلات mysql.

الغريب أن القاعدة الافتراضية defconf: إسقاط غير صالح يسقط جميع الحزم النهائية لاتصالات TCP ، ونتيجة لذلك ، تفشل جميع العقد التي تحاول إغلاق الاتصال في العلم ، وإرسال العديد من FINs. هل هذا صحيح؟

أضفت قاعدة تسمح بمرور TCP عبر إشارات ACK و FIN.

تحت مفسد SQL ، إجراء يظهر وقت اتصالات TCP في الدقائق الخمس الأخيرة
links_list ()
 DROP PROCEDURE IF EXISTS connections_list; DELIMITER // CREATE PROCEDURE connections_list() BEGIN DECLARE logid BIGINT UNSIGNED; DECLARE done INT DEFAULT FALSE; DECLARE datefin DATETIME; DECLARE datesyn DATETIME; DECLARE conntime TIME; DECLARE connsport INT; DECLARE conndport INT; DECLARE connsrc VARCHAR(21); DECLARE conndst VARCHAR(21); DECLARE cur CURSOR FOR SELECT id,datetime,src,sport,dst,dport FROM conn_syn_fin WHERE flags='SYN'; DECLARE CONTINUE HANDLER FOR NOT FOUND SET done=TRUE; DROP TABLE IF EXISTS conn_syn_fin; DROP TABLE IF EXISTS connless; CREATE temporary TABLE connless(datestart DATETIME,dateend DATETIME,duration TIME,src VARCHAR(21),sport INT,dst VARCHAR(21),dport INT); CREATE temporary TABLE conn_syn_fin (SELECT * from traffic WHERE datetime > now() - interval 5 minute and src in (select src from traffic where datetime > now() - interval 5 minute and logpref='TCP_FIN' and flags like '%FIN%') and (flags like '%SYN%' or flags like '%FIN%') order by id); OPEN cur; read_loop: LOOP FETCH cur INTO logid,datesyn,connsrc,connsport,conndst,conndport; IF done THEN LEAVE read_loop; END IF; set datefin=(SELECT datetime FROM conn_syn_fin WHERE id>logid and src=connsrc and sport=connsport and flags like '%FIN%' and dst=conndst and dport=conndport limit 1); set conntime=(SELECT timediff(datefin,datesyn)); INSERT INTO connless (datestart,dateend,duration,src,sport,dst,dport) value (datesyn,datefin,conntime,connsrc,connsport,conndst,conndport); END LOOP; CLOSE cur; select * from connless; END; // DELIMITER ; 


نتيجة لهذا الإجراء ، سيتم إنشاء جدولين مؤقتين.
يحتوي الجدول conn_syn_fin على إدخالات السجل مع علامتي SYN و FIN ، ثم يتم إجراء البحث باستخدام المؤشر في هذا الجدول.
يحتوي الجدول غير المحدود على قائمة بالاتصالات ، المفتوحة والمكتملة ، المكتملة لها مدة مفتوحة ، على التوالي ، لا.
لاحظ وقت أخذ العينات ناقص خمس دقائق من الوقت الحالي. طلبي بطيء. ببطء يمر عبر البحث عن المؤشر ، يعالج حوالي 10 سجلات في الثانية ، حاول تسريعها في كل شيء ، ولكن وقت التنفيذ دائمًا هو نفسه تقريبًا.
لاحظ أيضًا أن هذا الإجراء هو لأغراض العرض التوضيحي فقط. إذا كنت بحاجة إلى إجراء تحديد لـ src / sport / dst / dport معين ، فمن الأفضل إجراء إجراء منفصل مشابه لهذا الإجراء. إذا كنت خبيرًا في sql ، فيمكنك كتابة استعلامك بشكل أفضل.

استدعاء links_list () ؛
 MariaDB [traflog]> call connections_list(); +---------------------+---------------------+----------+---------------+-------+-----------------+-------+ | datestart | dateend | duration | src | sport | dst | dport | +---------------------+---------------------+----------+---------------+-------+-----------------+-------+ | 2019-03-20 14:12:19 | 2019-03-20 14:13:14 | 00:00:55 | 192.168.0.81 | 41868 | 87.250.250.207 | 443 | | 2019-03-20 14:12:25 | NULL | NULL | 192.168.0.65 | 49311 | 52.5.23.125 | 443 | | 2019-03-20 14:12:31 | 2019-03-20 14:12:51 | 00:00:20 | 192.168.0.104 | 54433 | 217.69.139.42 | 443 | | 2019-03-20 14:12:31 | 2019-03-20 14:12:51 | 00:00:20 | 192.168.0.104 | 54434 | 217.69.139.42 | 443 | | 2019-03-20 14:12:32 | NULL | NULL | 192.168.0.119 | 37977 | 209.85.233.95 | 443 | ... | 2019-03-20 14:17:12 | NULL | NULL | 192.168.0.119 | 39331 | 91.213.158.131 | 443 | | 2019-03-20 14:17:13 | NULL | NULL | 192.168.0.90 | 63388 | 87.240.185.236 | 443 | +---------------------+---------------------+----------+---------------+-------+-----------------+-------+ 399 rows in set (33.17 sec) Query OK, 0 rows affected (33.18 sec) 



بعد اكتمال الإجراء ، تبقى الجداول المؤقتة conn_syn_fin و connless ، يمكنك النظر إليها بمزيد من التفاصيل إذا وجدت شيئًا مريبًا أو غير موثوق به. بعد بدء الإجراء ، يتم حذف الجداول القديمة وتظهر جداول جديدة. اكتب إذا وجدت خطأ.

Source: https://habr.com/ru/post/ar427159/


All Articles