Титла: IPTables четене на блокирани от mysql Публикувано от: djpatzo в Mar 23, 2010, 13:57 Интересува ме дали IPTables може да чете данни за блокиране от база данни. Примерно имам си web based администрация php на сървъра и има място за слагане на отметка дали е спрян потребителя или не. Искам като избера да е спрян самия IPTables който е на друг сървър да прочита от MySQL и да блокира всичко на този потребител.
Благодаря предварително. С уважение: Пламен Николов Титла: Re: IPTables четене на блокирани от mysql Публикувано от: tolostoi в Mar 23, 2010, 14:11 iptables може да блокира адреси, портове и т.н. не може да блокира потребители.
Титла: Re: IPTables четене на блокирани от mysql Публикувано от: djpatzo в Mar 23, 2010, 14:15 Добре ясно. Аз говоря даден потребител въведен в базата данни с IP адрес. Става въпрос за мрежа. Искам реалното IP да блокирам. За интернет доставчик става въпрос. Имам си администрация на PPPoE потребителите и имам място с отметка дали е спрян потребителя или не. И искам iptables да чете IP-то от базата данни аз заявката я знам за MySQL ама проблема е че не знам IPtables как да направи връзката и да блокира тези потребители, които са с такъв статус.
Титла: Re: IPTables четене на блокирани от mysql Публикувано от: neter в Mar 23, 2010, 14:28 Няма такава възможност в iptables. Но съвсем лесно можеш да си напишеш скрипт (на какъвто език предпочиташ), който да чете базата данни, да генерира списък с правила за iptables, спрямо прочетеното от базата, и да изпълнява генерирания списък. Слагаш въпросния скрипт да се върти от crontab през някакъв интервал от време, какъвто ти е угоден, и си готов. За да не се получава постоянно премахване и добавяне на едни и същи правила при всяко изпълнение на скрипта, можеш да си напишеш една проверка в скрипта за текущите правила и разлики между правилата в iptables и базата, и според резултатите, списъкът с правила да се изпълнява само когато има разлики, а в допълнение и да се изпълняват само разликите.
Ако не можеш да пишеш скриптове, време е постепенно да започнеш, щом ще администрираш тази мрежа. Ако нещо много се спъваш с написването, ще помагаме. Но ти препоръчвам първо да опиташ сам. Bash е за препоръчване при такива неща, но ако знаеш някой друг език, ползвай това, което знаеш. А ето тук ($2) има някакъв готов скрипт по въпроса, но не съм го пробвал и не знам читав ли е, и дали би отговорил на нуждите ти. Пробвай ;) Титла: Re: IPTables четене на блокирани от mysql Публикувано от: djpatzo в Mar 24, 2010, 21:54 А има ли друг вариант с друг пакет да става блокирането на определено IP но да се четат данните от MySQL примерно от таблицата да се четата IP-тата които са спрени.
Титла: Re: IPTables четене на блокирани от mysql Публикувано от: djpatzo в Mar 24, 2010, 22:41 Или следното. Аз успях с php да си изведа от базата данни IP-тата които са блокирани(отбелязани за спиране) но проблема е че нямам /usr/bin/php изпълнимия файл на сървъра. Искам да инсталирам само този пакет, който изпълнява php файлове през конзолата, а не web базирано.
Благодаря предварително. С уважение: Пламен Николов Титла: Re: IPTables четене на блокирани от mysql Публикувано от: neter в Mar 24, 2010, 22:57 Ето ти нещо набързо. Ако ти трябва допълнителна функционалност, ще го доразвием
Код Скриптът се свързва към MySQL сървъра със зададените потребител и парола (потребителят трябва да може да чете от нужната база данни), извлича всички IP-та от колоната КОЛОНА, и ги подрежда в масива $blocked_ips. След това, за всеки елемент от масива (в случая, всяко IP), изпълняваме drop-ващо правило в iptables. За да не се добавят вече добавени IP-та в iptables, съм сложил една проверка дали IP-то присъства сред правилата в iptables, и, ако не присъства, се изпълнява правилото. Сложи този скрипт в един файл, замени думите на кирилица със съответните данни при теб, замени и пътищата до програмите, ако се налага (предполагам, че няма да се наложи), и направи файла изпълним със следната команда Код След това можеш да изпълниш скрипта (просто въведи пълния път до файла в конзолата), и правилата ще се попълнят в iptables. Ако искаш добавянето на IP-та да става автоматично през определен период от време, вместо да изпълняваш скрипта ръчно, изпълни следната команда като root: Код и впиши следния ред в отворилия се редактор Цитат */5 * * * * /пълен/път/до/файла/file.shи запази промените. Така, скриптът ще се изпълнява на всеки 5 минути, добавяйки правила в iptables за IP-тата, които присъстват в базата, но все още не присъстват в iptables ;) Титла: Re: IPTables четене на блокирани от mysql Публикувано от: neter в Mar 24, 2010, 22:59 Искам да инсталирам само този пакет, който изпълнява php файлове през конзолата, а не web базирано.Не си казал коя ти е дистрибуцията, но търси за пакет php5-cli или нещо подобно. Титла: Re: IPTables четене на блокирани от mysql Публикувано от: djpatzo в Mar 24, 2010, 23:06 Дистрибуцията е Gentoo, но примерно имам съществуващ файл за правилата за iptables който се изпълнява пак автоматично на 1 минута кода ако го въведа долу на файла при положение, че трия старите правила и на ново от този файл се правят новите.
Благодаря. Сега ще пробвам и ще пиша. Титла: Re: IPTables четене на блокирани от mysql Публикувано от: neter в Mar 24, 2010, 23:24 Не съм сигурен какво точно каза в последния си пост (структурирай малко изреченията си, не изливай директно потока си от мисли), но от това, което ми се струва, че разбрах, имаш скрипт, който на всяка минута трие всички правила в iptables и добавя пресен списък с правила. Това не е добра стратегия, тъй като на всяка минута ще имаш няколко милисекунди (а може и секунди, не знам колко дълъг ти е списъкът), в които няма да има правила. Да не говорим за безсмислието на всяка минута да се премахват и добавят едни и същи правила. Препоръчително е от iptables да се премахват само правила, които вече не са нужни, и да се добавят само такива, които започват да действат от този момент. Затова винаги използвай проверки за текущо съдържание в iptables при такива скриптове. Иначе става каша ;)
Титла: Re: IPTables четене на блокирани от mysql Публикувано от: gat3way в Mar 24, 2010, 23:31 Това е интересно - за няколкото милисекунди между flush-ването на правилата и добавянето на нови такива, дали ще има време да протече един TCP handshake и една HTTP заявка след това. Някой да time-не операцията и да разсъждаваме на тема латентност :) Без заяждане де, наистина ми е интересно като упражнение. А иначе, flush-ването на правилата всяка минута е наистина простотия.
Титла: Re: IPTables четене на блокирани от mysql Публикувано от: djpatzo в Mar 24, 2010, 23:33 До сега сме нямали проблем. Около 800 потребителя ги флушваме ама сървъра е извънземен.
Всичко работи благодаря ви много. Титла: Re: IPTables четене на блокирани от mysql Публикувано от: gat3way в Mar 24, 2010, 23:41 800 потребителя или 800 баннати такива?
Моето вътрешно усещане е че ако се прави с iptables-restore, 800 правила ще бъдат наблъскани за по-малко от секунда, докато ако се форк-ва iptables за всяко ново правило вероятно ще отнеме няколко секунди. Ама ми е трудно да гадая, само предполагам :) Титла: Re: IPTables четене на блокирани от mysql Публикувано от: djpatzo в Mar 24, 2010, 23:43 Обяснете вариантите ако не Ви затруднявам как да стане да изчиствам старите и пресни да излизат новите направо от завода :D :D :D
Титла: Re: IPTables четене на блокирани от mysql Публикувано от: neter в Mar 24, 2010, 23:48 Това е интересно - за няколкото милисекунди между flush-ването на правилата и добавянето на нови такива, дали ще има време да протече един TCP handshake и една HTTP заявка след това.Тъкмо същото се замислих, докато го пишех, и се чудех каква опитна постановка да си направя ;D Зависи колко дълъг му е списъкът - по сметки наум (приблизителната точност при което е плод на въображение) няколко IP-та няма дадат достатъчно време, но попълването на голяма част от IP-тата от /8 маска (да приемем, че IP-тата са разхвърляни, и не става да се въвеждат директно мрежи), би дало достатъчно време. А и да не забравяме най-голямата пробойна при текущата постановка - междувременно падане на MySQL сървъра - затрива правилата, MySQL сървър няма, и нищо не се попълва, докато не се вдигне. А бе не си е работа човек да оставя осъзнати пробойни, дори в случаи, когато не се сеща как точно биха могли да се използват, че не се знае откъде ще изскочи заек, който gat3way да хване :P [_]3 Титла: Re: IPTables четене на блокирани от mysql Публикувано от: gat3way в Mar 24, 2010, 23:50 Ми правила освен да се добавят, може и да се изтриват :) Имаш си база, остана само да си направиш някакъв custom chain, да си го парсваш (iptables -L) и да си го сравняваш с това в базата. Повече PHP код е, но е по-ефективно.
Титла: Re: IPTables четене на блокирани от mysql Публикувано от: gat3way в Mar 24, 2010, 23:52 Цитат А и да не забравяме най-голямата пробойна при текущата постановка - междувременно падане на MySQL сървъра - затрива правилата, MySQL сървър няма, и нищо не се попълва, докато не се вдигне. А бе не си е работа човек да оставя осъзнати пробойни, дори в случаи, когато не се сеща как точно биха могли да се използват, че не се знае откъде ще изскочи заек, който gat3way да хване :P [_]3 Ня, падането на SQL сървъра би било много трагично стечение на обстоятелствата :) Обаче лесно предотвратимо ако проверява какво му се връща от mysql_connect() :) Титла: Re: IPTables четене на блокирани от mysql Публикувано от: neter в Mar 25, 2010, 00:07 Обаче лесно предотвратимо ако проверява какво му се връща от mysql_connect() :)Всъщност, използването на mysql_connect() може да се избегне, първото действие в скрипта да е попълването на масива, и, ако масивът не е празен, тогава да се изпълнява flush-ване и нататък действията в скрипта. Но пък съвсем спокойно MySQL сървърът може да си падне и по време на изпълнението на заявката и тогава... Всъщност, би ли се попълнило нещо в масива (то може да не е масив де, каквото там се използва, биха ли се получили някакви недовършени данни), ако MySQL сървърът падне по време на изпълнението на заявката, и така да се изпълни flush-ване, след което в iptables да се попълни половинчат списък? Все ми се струва, че ще се върне нещо достатъчно, за да сбъгяса историята, но не съм сигурен в момента. Това ми е последното предположение за пробойна. Няма да мисля за други, че голям песимист излязох в тази тема ;D Титла: Re: IPTables четене на блокирани от mysql Публикувано от: edmon в Mar 25, 2010, 00:11 абе общо взети синтаксиса на командите и на iptables и на tc са с толкова объркана "лексика", че е много гадно да трябва да промениш едно вече зададено правило!
по лесно е да ги затриеш всичките и да ги пльосниш наново! А съм сигурен, че можеха да измислят нещо по-структурирано! PF изглежда доста по добре! Титла: Re: IPTables четене на блокирани от mysql Публикувано от: djpatzo в Mar 25, 2010, 00:26 Мисля, че темата стана доста интересна. Сега въпросът е да се работи по план и да видим какво ще се получи. Не вярвам сървъра да падне.
Титла: Re: IPTables четене на блокирани от mysql Публикувано от: neter в Mar 25, 2010, 00:30 Да си довърша bash скрипта и с премахване на ненужните правила:
Код
edit: Добавих някои украшения и поправих някои първоначални недомислия. Титла: Re: IPTables четене на блокирани от mysql Публикувано от: neter в Mar 25, 2010, 00:37 Не вярвам сървъра да падне.Има доста басни по този въпрос. Обикновено в тях вярващият се оказва изяден ;D |