Автор Тема: IPTables четене на блокирани от mysql  (Прочетена 2710 пъти)

djpatzo

  • Напреднали
  • *****
  • Публикации: 46
    • Профил
Интересува ме дали IPTables може да чете данни за блокиране от база данни. Примерно имам си web based администрация php на сървъра и има място за слагане на отметка дали е спрян потребителя или не. Искам като избера да е спрян самия IPTables който е на друг сървър да прочита от MySQL и да блокира всичко на този потребител.

Благодаря предварително.

С уважение: Пламен Николов
« Последна редакция: Mar 23, 2010, 14:00 от djpatzo »
Активен

tolostoi

  • Напреднали
  • *****
  • Публикации: 1337
  • Distribution: Ubuntu
  • Window Manager: Unity
  • левел: авераж :)
    • Профил
Re: IPTables четене на блокирани от mysql
« Отговор #1 -: Mar 23, 2010, 14:11 »
iptables може да блокира адреси, портове и т.н. не може да блокира потребители.
Активен


... в Столичен инспекторат една година след миграцията, продължават да работят под Linux. Което, май прави "експеримента" успешен
by entusiast

djpatzo

  • Напреднали
  • *****
  • Публикации: 46
    • Профил
Re: IPTables четене на блокирани от mysql
« Отговор #2 -: Mar 23, 2010, 14:15 »
Добре ясно. Аз говоря даден потребител въведен в базата данни с IP адрес. Става въпрос за мрежа. Искам реалното IP да блокирам. За интернет доставчик става въпрос. Имам си администрация на PPPoE потребителите и имам място с отметка дали е спрян потребителя или не. И искам iptables да чете IP-то от базата данни аз заявката я знам за MySQL ама проблема е че не знам IPtables как да направи връзката и да блокира тези потребители, които са с такъв статус.
Активен

neter

  • Global Moderator
  • Напреднали
  • *****
  • Публикации: 3408
  • Distribution: Debian, SailfishOS, CentOS
  • Window Manager: LXDE, Lipstick
    • Профил
    • WWW
Re: IPTables четене на блокирани от mysql
« Отговор #3 -: Mar 23, 2010, 14:28 »
Няма такава възможност в iptables. Но съвсем лесно можеш да си напишеш скрипт (на какъвто език предпочиташ), който да чете базата данни, да генерира списък с правила за iptables, спрямо прочетеното от базата, и да изпълнява генерирания списък. Слагаш въпросния скрипт да се върти от crontab през някакъв интервал от време, какъвто ти е угоден, и си готов. За да не се получава постоянно премахване и добавяне на едни и същи правила при всяко изпълнение на скрипта, можеш да си напишеш една проверка в скрипта за текущите правила и разлики между правилата в iptables и базата, и според резултатите, списъкът с правила да се изпълнява само когато има разлики, а в допълнение и да се изпълняват само разликите.
Ако не можеш да пишеш скриптове, време е постепенно да започнеш, щом ще администрираш тази мрежа. Ако нещо много се спъваш с написването, ще помагаме. Но ти препоръчвам първо да опиташ сам. Bash е за препоръчване при такива неща, но ако знаеш някой друг език, ползвай това, което знаеш. А ето тук има някакъв готов скрипт по въпроса, но не съм го пробвал и не знам читав ли е, и дали би отговорил на нуждите ти. Пробвай ;)
Активен

"Да си добре приспособен към болно общество не е признак за добро здраве" - Джиду Кришнамурти

djpatzo

  • Напреднали
  • *****
  • Публикации: 46
    • Профил
Re: IPTables четене на блокирани от mysql
« Отговор #4 -: Mar 24, 2010, 21:54 »
А има ли друг вариант с друг пакет да става блокирането на определено IP но да се четат данните от MySQL примерно от таблицата да се четата IP-тата които са спрени.
Активен

djpatzo

  • Напреднали
  • *****
  • Публикации: 46
    • Профил
Re: IPTables четене на блокирани от mysql
« Отговор #5 -: Mar 24, 2010, 22:41 »
Или следното. Аз успях с php да си изведа от базата данни IP-тата които са блокирани(отбелязани за спиране) но проблема е че нямам /usr/bin/php изпълнимия файл на сървъра. Искам да инсталирам само този пакет, който изпълнява php файлове през конзолата, а не web базирано.

Благодаря предварително.

С уважение: Пламен Николов
Активен

neter

  • Global Moderator
  • Напреднали
  • *****
  • Публикации: 3408
  • Distribution: Debian, SailfishOS, CentOS
  • Window Manager: LXDE, Lipstick
    • Профил
    • WWW
Re: IPTables четене на блокирани от mysql
« Отговор #6 -: Mar 24, 2010, 22:57 »
Ето ти нещо набързо. Ако ти трябва допълнителна функционалност, ще го доразвием
Код
GeSHi (Bash):
  1. #!/bin/bash
  2.  
  3. blocked_ips=( `/usr/bin/mysql -s -N -u ПОТРЕБИТЕЛ --password=ПАРОЛА -e "select КОЛОНА from БАЗА.ТАБЛИЦА"` )
  4. for i in "${blocked_ips[@]}"
  5. do
  6.    /sbin/iptables -L -n | grep $i >/dev/null
  7.    if [ $? -ne 0 ] ; then
  8.        /sbin/iptables -A INPUT -s $i -j DROP
  9.    fi
  10. done
Скриптът се свързва към MySQL сървъра със зададените потребител и парола (потребителят трябва да може да чете от нужната база данни), извлича всички IP-та от колоната КОЛОНА, и ги подрежда в масива $blocked_ips. След това, за всеки елемент от масива (в случая, всяко IP), изпълняваме drop-ващо правило в iptables. За да не се добавят вече добавени IP-та в iptables, съм сложил една проверка дали IP-то присъства сред правилата в iptables, и, ако не присъства, се изпълнява правилото.
Сложи този скрипт в един файл, замени думите на кирилица със съответните данни при теб, замени и пътищата до програмите, ако се налага (предполагам, че няма да се наложи), и направи файла изпълним със следната команда
Код
GeSHi (Bash):
  1. chmod +x /път/до/файла/file.sh
След това можеш да изпълниш скрипта (просто въведи пълния път до файла в конзолата), и правилата ще се попълнят в iptables. Ако искаш добавянето на IP-та да става автоматично през определен период от време, вместо да изпълняваш скрипта ръчно, изпълни следната команда като root:
Код
GeSHi (Bash):
  1. crontab -e
и впиши следния ред в отворилия се редактор
Цитат
*/5 * * * *     /пълен/път/до/файла/file.sh
и запази промените. Така, скриптът ще се изпълнява на всеки 5 минути, добавяйки правила в iptables за IP-тата, които присъстват в базата, но все още не присъстват в iptables ;)
« Последна редакция: Mar 24, 2010, 23:00 от neter »
Активен

"Да си добре приспособен към болно общество не е признак за добро здраве" - Джиду Кришнамурти

neter

  • Global Moderator
  • Напреднали
  • *****
  • Публикации: 3408
  • Distribution: Debian, SailfishOS, CentOS
  • Window Manager: LXDE, Lipstick
    • Профил
    • WWW
Re: IPTables четене на блокирани от mysql
« Отговор #7 -: Mar 24, 2010, 22:59 »
Искам да инсталирам само този пакет, който изпълнява php файлове през конзолата, а не web базирано.
Не си казал коя ти е дистрибуцията, но търси за пакет php5-cli или нещо подобно.
Активен

"Да си добре приспособен към болно общество не е признак за добро здраве" - Джиду Кришнамурти

djpatzo

  • Напреднали
  • *****
  • Публикации: 46
    • Профил
Re: IPTables четене на блокирани от mysql
« Отговор #8 -: Mar 24, 2010, 23:06 »
Дистрибуцията е Gentoo, но примерно имам съществуващ файл за правилата за iptables който се изпълнява пак автоматично на 1 минута кода ако го въведа долу на файла при положение, че трия старите правила и на ново от този файл се правят новите.

Благодаря. Сега ще пробвам и ще пиша.
Активен

neter

  • Global Moderator
  • Напреднали
  • *****
  • Публикации: 3408
  • Distribution: Debian, SailfishOS, CentOS
  • Window Manager: LXDE, Lipstick
    • Профил
    • WWW
Re: IPTables четене на блокирани от mysql
« Отговор #9 -: Mar 24, 2010, 23:24 »
Не съм сигурен какво точно каза в последния си пост (структурирай малко изреченията си, не изливай директно потока си от мисли), но от това, което ми се струва, че разбрах, имаш скрипт, който на всяка минута трие всички правила в iptables и добавя пресен списък с правила. Това не е добра стратегия, тъй като на всяка минута ще имаш няколко милисекунди (а може и секунди, не знам колко дълъг ти е списъкът), в които няма да има правила. Да не говорим за безсмислието на всяка минута да се премахват и добавят едни и същи правила. Препоръчително е от iptables да се премахват само правила, които вече не са нужни, и да се добавят само такива, които започват да действат от този момент. Затова винаги използвай проверки за текущо съдържание в iptables при такива скриптове. Иначе става каша ;)
Активен

"Да си добре приспособен към болно общество не е признак за добро здраве" - Джиду Кришнамурти

gat3way

  • Напреднали
  • *****
  • Публикации: 6050
  • Relentless troll
    • Профил
    • WWW
Re: IPTables четене на блокирани от mysql
« Отговор #10 -: Mar 24, 2010, 23:31 »
Това е интересно - за няколкото милисекунди между flush-ването на правилата и добавянето на нови такива, дали ще има време да протече един TCP handshake и една HTTP заявка след това. Някой да time-не операцията и да разсъждаваме на тема латентност :) Без заяждане де, наистина ми е интересно като упражнение. А иначе, flush-ването на правилата всяка минута е наистина простотия.
Активен

"Knowledge is power" - France is Bacon

djpatzo

  • Напреднали
  • *****
  • Публикации: 46
    • Профил
Re: IPTables четене на блокирани от mysql
« Отговор #11 -: Mar 24, 2010, 23:33 »
До сега сме нямали проблем. Около 800 потребителя ги флушваме ама сървъра е извънземен.

Всичко работи благодаря ви много.
Активен

gat3way

  • Напреднали
  • *****
  • Публикации: 6050
  • Relentless troll
    • Профил
    • WWW
Re: IPTables четене на блокирани от mysql
« Отговор #12 -: Mar 24, 2010, 23:41 »
800 потребителя или 800 баннати такива?

Моето вътрешно усещане е че ако се прави с iptables-restore, 800 правила ще бъдат наблъскани за по-малко от секунда, докато ако се форк-ва iptables за всяко ново правило вероятно ще отнеме няколко секунди. Ама ми е трудно да гадая, само предполагам :)
Активен

"Knowledge is power" - France is Bacon

djpatzo

  • Напреднали
  • *****
  • Публикации: 46
    • Профил
Re: IPTables четене на блокирани от mysql
« Отговор #13 -: Mar 24, 2010, 23:43 »
Обяснете вариантите ако не Ви затруднявам как да стане да изчиствам старите и пресни да излизат новите направо от завода  :D :D :D
Активен

neter

  • Global Moderator
  • Напреднали
  • *****
  • Публикации: 3408
  • Distribution: Debian, SailfishOS, CentOS
  • Window Manager: LXDE, Lipstick
    • Профил
    • WWW
Re: IPTables четене на блокирани от mysql
« Отговор #14 -: Mar 24, 2010, 23:48 »
Това е интересно - за няколкото милисекунди между flush-ването на правилата и добавянето на нови такива, дали ще има време да протече един TCP handshake и една HTTP заявка след това.
Тъкмо същото се замислих, докато го пишех, и се чудех каква опитна постановка да си направя ;D Зависи колко дълъг му е списъкът - по сметки наум (приблизителната точност при което е плод на въображение) няколко IP-та няма дадат достатъчно време, но попълването на голяма част от IP-тата от /8 маска (да приемем, че IP-тата са разхвърляни, и не става да се въвеждат директно мрежи), би дало достатъчно време. А и да не забравяме най-голямата пробойна при текущата постановка - междувременно падане на MySQL сървъра - затрива правилата, MySQL сървър няма, и нищо не се попълва, докато не се вдигне. А бе не си е работа човек да оставя осъзнати пробойни, дори в случаи, когато не се сеща как точно биха могли да се използват, че не се знае откъде ще изскочи заек, който gat3way да хване :P [_]3
Активен

"Да си добре приспособен към болно общество не е признак за добро здраве" - Джиду Кришнамурти

Подобни теми
Заглавие Започната от Отговора Прегледи Последна публикация
iptables
Настройка на програми
dumdum 2 7697 Последна публикация May 03, 2003, 17:00
от
Perl + CGI,DBI + Mysql ili PHP + Mysql
Общ форум
jica 3 9019 Последна публикация Sep 07, 2004, 17:02
от jica
Iptables+php+mysql
Настройка на програми
DHCP 1 708 Последна публикация Dec 20, 2006, 19:41
от empty
Mysql проблем със стартирането(mysql.sock missing)
Настройка на програми
coveka 6 11275 Последна публикация Mar 01, 2008, 22:02
от coveka
Mysql: can't connect to local mysql server
Настройка на програми
wonder 1 9929 Последна публикация Mar 16, 2008, 01:17
от neter