Nie jesteś zalogowany.
Jeśli nie posiadasz konta, zarejestruj je już teraz! Pozwoli Ci ono w pełni korzystać z naszego serwisu. Spamerom dziękujemy!
Prosimy o pomoc dla małej Julki — przekaż 1% podatku na Fundacji Dzieciom zdazyć z Pomocą.
Więcej informacji na dug.net.pl/pomagamy/.
Strony: 1
Witam.
Po upgradzie PHP przestał mi działać mod_security2. Z tego, co znalazłem w googlu to przypadłość tej konfiguracji.
mod_security2 używam przede wszystkim do banowania robotów łażących po wp-logn.php - niestety, mam trochę tych wordpressów na serwerze i co prawda żaden bot mi się tam nigdy nie zalogował, ale load serwera wskutek ich działalności potrafi skoczyć do 10 i więcej.
Pytanie: czym zastąpić mod_security2? Mógłby wystarczyć fail2ban, ale każdy VS ma swoje logi i czytanie wszystkich to chyba nienajlepszy pomysł :(
Da się może w samym Apaczu utworzyć dodatkowy log dla samych wp-login.plp? To by załatwiało sprawę, ale wydaje mi się, że się nie da...
Ostatnio edytowany przez ethanak (2017-03-12 10:52:57)
Offline
Da sie stworzyć w Apache dodatkowy log w którym możesz sobie zapisywać takie logowania, i za pomocą wyrażń regularnych np blokować po 10 próbach logowania z 1 ip.
Jest też ficzer bezpośrednio od directadmin-a:
https://www.directadmin.com/features.php?id=1695
Offline
Ten ficzer od DA jakoś niespecjalnie mi się podoba - miałem włączony brute_force i poszedł w cholerę, bo co chwila dostawałem jakieś maile z false positives. A akurat na wp-login.php niespecjalnie dobrze toto działa.
Jak zrobi taki log w Apaczu??? Bo serio nie wiem z której strony to ugryźć..
[i]Edytka[/i]
OK już znalazłem - GlobalLog
Zobaczymy co mi z tego wyjdzie...
Ostatnio edytowany przez ethanak (2017-03-08 12:08:07)
Offline
Connlimity i hashlimity dla WP nie dają rady?
Co do Modseca, to jeśli masz tam np Nginxa na frontendzie, to on też ma różne limity i regexy.
Ja zawsze wp-login i wp-admin chowam albo za dodatkowym http-auth (da się zrobić praktycznie wszędzie), albo - moja ulubiona zabawa,
za certyfikatami PKCS#12 (na VPS albo dedyku, gdzie masz własny konfig serwera http).
PS.
Może wystarczy przebudować modseca ze źródełka? jak załapie nowe nagłówki, to może odżyć?
Zależy, czy to sam moduł się zjebał, czy reguły nie ogarniają sytuacji.
PS2.
Do Nginxa masz jeszcze nasxi
https://github.com/nbs-system/naxsi
Do Apacha możesz użyć mod_evasive, chociaż moim zdaniem się troszkę mija z celem, ale na load serwera, jako proteza, może starczyć.
Ostatnio edytowany przez Jacekalex (2017-03-08 18:16:33)
Offline
[quote=Jacekalex]Connlimity i hashlimity dla WP nie dają rady?[/quote]
A niby jak miałyby dać radę? Muszę analizować wyłącznie POST do wp-admin.php i zależnie od odpowiedzi albo uznać host za prawidłowy (odpowiedź 302) albo za podejrzany (odpowiedź 200) i dopiero kilka podejrzanych zachowań w ciągu jednostki czasu powoduje blokadę danego IP.
Co do Modseca, to jeśli masz tam np Nginxa na frontendzie, to on też ma różne limity i regexy.[/quote]
Niestety - mam tylko do SSL-a (nginx -> varnish -> apache)Ja zawsze wp-login i wp-admin chowam albo za dodatkowym http-auth (da się zrobić praktycznie wszędzie), albo - moja ulubiona zabawa,
za certyfikatami PKCS#12 (na VPS albo dedyku, gdzie masz własny konfig serwera http).[/quote]
To jest dobre jak mam własnego wordpressa sztuk jedna, a nie jak mam 150 wordpressów w tym chyba ze trzydzieści z woocommerce i otwartą rejestracją klientów.PS.
Może wystarczy przebudować modseca ze źródełka? jak załapie nowe nagłówki, to może odżyć?
Zależy, czy to sam moduł się zjebał, czy reguły nie ogarniają sytuacji.[/quote]
Nie wystarczyło. Z tego co wyczytałem to po prostu to wszystko się gryzie ze sobą.
Ale już mam pomysł jak to zrobić, powinno chodzić nawet lepiej niż oryginalny mod_security - taką przynajmniej mam nadzieję.
Jak się z tym uporam do końca to opiszę rozwiązanie - dlatego nie daję SOLVED.
Nim mechaniczne larum zagrasz mi, kanalio,
głosząc nadejście Javy - śmiertelnego wroga!
[i]Zespół Adwokacki Dyskrecja[/i]Offline
Niestety - mam tylko do SSL-a (nginx -> varnish -> apache)[/quote]
To masz w nim regexy, geoip i co tylko duszyczka zapragnie.
Przy okazji, Nginx też obsługiwał modseca:
https://github.com/SpiderLabs/ModSecurity-nginx
Może tą drogą pójdzie?
Co się tyczy tych 150 WP i 50 Woocommerce...
Ja bym im zrobił do tych admin.php/login.php http_auth po SSL, a przy http-auth chyba każdy serwer może limitować próby po IP pacjenta.
Najwyżej sobie w IE6 zapamiętają po dwa hasełka, korona nikomu od tego z głowy nie spadnie, chociaż jest z tym troszkę zabawy.
Nazwa czy Home od lat w ten sposób traktują phpmyadmina.
Pieprzenie się z analizą POST to trochę tak, jakby się prawą piętą w lewe ucho drapać. ;)Ostatnio edytowany przez Jacekalex (2017-03-09 18:54:34)
W demokracji każdy naród ma taką władzę, na jaką zasługuje ;)
Si vis pacem para bellum ;) | Pozdrawiam :)
Offline
Czy Ty w ogóle wiesz co to woocommerce?
Cenię Twoje zdanie (i nie chcąc kadzić naprawdę czekałem na Twoją opinię) - ale w tym momencie pieprzysz jak potłuczony.
Offline
Otwarta rejestracja klientów w Woocommerce? Czy kogoś pogięło?
Nawet w Prescie bym raczej nie próbował podobnego diabelstwa,
o Woocommerce nie wspominając w ogóle.
Także rzeczy można było w miarę łatwo robić z Oscommerce czy Virtuemarkt, które hasła adminów trzymały w osobnej tabeli.
Ale Woocommerce ma wszystkich userów w jednej tabeli, a produkty i zamówienia trzyma w tabeli wp_posts, to praktycznie dom wariatów a nie sklep internetowy.
Dlatego radziłbym ludziom wybijać z łba Woocommerce na rzecz Presty,
która mimo różnych wielkich wad ma o wiele lepszą architekturę, support i moduły.
Ostatnio edytowany przez Jacekalex (2017-03-09 19:00:56)
Offline
Zrobione.
W konfie Apacza mam:
LogFormat "%{c}a %v %{sec}t %>s \"%r\"" wplog SetEnvIf Request_URI "/wp-login\.php" wploginlog GlobalLog /var/log/httpd/wplogin_log wplog env=wploginlog
%{c}a wrzuciłem, bo część zapytań przychodzi z maszyny z varnishem i program po prostu ignoruje takie rekordy.
Na logu nasłuchuje sobie prosty programik w Pythonie, który zlicza prawidłowe i nieprawidłowe logowania i w przypadku trzech nieprawidłowych w ciągu 5 minut wrzuca IP do jednego z dwóch ipsetów: pół godziny bana dla IP z Polski, godzina dla ip zagranicznych razem z całą klasą /24.
Na maszynie z varnishem i nginxem mam prawie identyczny program.
Zalety:
- łatwa modyfikacja (jak nadmieniłem, jest to [b]prosty[/b] program w Pythonie)
- możliwość rozgraniczenia na IP polskie/zagraniczne i odpowiednia modyfikacja reakcji
- działa na etapie przyjęcia/odrzucenia pakietu czyli szybko i bez żarcia zasobów, a do tego współpracuje z varnishem.
Wady:
- jakie wady? :)
Jakby ktoś chciał kod to dajcie znać, bo w postaci takiej jaka jest nie nadaje się do publikacji, musiałbym parę linijek zmienić.
BTW. Kolego Jacekalex - Ty mnie chyba z kimś pomyliłeś. Ja pracuję jako admin/programista w firmie świadczącej usługi hostingowe dla klientów z wordpressami i w związku z tym nie do mnie należy przekonywanie klientów że inny soft jest lepszy (nawet jeśli - z czym się absolutnie zgadzam - czasami jest), a nie jako doradca do spraw wyboru softu przez klientów. Poza tym:
a) zamówienia nie są trzymane w wp_posts a w oddzielnej tabeli woocommerce'a;
b) gdyby tabela wp_posts nazywała się wp_objects, coś by to zmieniło oprócz historycznej nazwy?
Poza tym pisanie o Oscommerce w kontekście bezpieczeństwa to chyba lekka przesada ;)
Offline
Strony: 1
Time (s) | Query |
---|---|
0.00012 | SET CHARSET latin2 |
0.00004 | SET NAMES latin2 |
0.00127 | SELECT u.*, g.*, o.logged FROM punbb_users AS u INNER JOIN punbb_groups AS g ON u.group_id=g.g_id LEFT JOIN punbb_online AS o ON o.ident='18.116.14.12' WHERE u.id=1 |
0.00066 | REPLACE INTO punbb_online (user_id, ident, logged) VALUES(1, '18.116.14.12', 1732736857) |
0.00070 | SELECT * FROM punbb_online WHERE logged<1732736557 |
0.00090 | DELETE FROM punbb_online WHERE ident='18.224.31.82' |
0.00077 | SELECT topic_id FROM punbb_posts WHERE id=309203 |
0.00010 | SELECT id FROM punbb_posts WHERE topic_id=29418 ORDER BY posted |
0.00058 | SELECT t.subject, t.closed, t.num_replies, t.sticky, f.id AS forum_id, f.forum_name, f.moderators, fp.post_replies, 0 FROM punbb_topics AS t INNER JOIN punbb_forums AS f ON f.id=t.forum_id LEFT JOIN punbb_forum_perms AS fp ON (fp.forum_id=f.id AND fp.group_id=3) WHERE (fp.read_forum IS NULL OR fp.read_forum=1) AND t.id=29418 AND t.moved_to IS NULL |
0.00005 | SELECT search_for, replace_with FROM punbb_censoring |
0.00199 | SELECT u.email, u.title, u.url, u.location, u.use_avatar, u.signature, u.email_setting, u.num_posts, u.registered, u.admin_note, p.id, p.poster AS username, p.poster_id, p.poster_ip, p.poster_email, p.message, p.hide_smilies, p.posted, p.edited, p.edited_by, g.g_id, g.g_user_title, o.user_id AS is_online FROM punbb_posts AS p INNER JOIN punbb_users AS u ON u.id=p.poster_id INNER JOIN punbb_groups AS g ON g.g_id=u.group_id LEFT JOIN punbb_online AS o ON (o.user_id=u.id AND o.user_id!=1 AND o.idle=0) WHERE p.topic_id=29418 ORDER BY p.id LIMIT 0,25 |
0.00100 | UPDATE punbb_topics SET num_views=num_views+1 WHERE id=29418 |
Total query time: 0.00818 s |