 | 30-05-2010, 21:03, прочитали: 469 раз, раздел: --- |
Тут было бы описание моего сайта во всех красках, с массой эпитетов — НО Я ЛЕНТЯЙ!
Как-то проснувшись утром наблюдаю на почте такую картину: login failures: Jun 2 07:07:55 4dle sshd[45556]: Failed password for invalid user webadmin from 163.21.230.20 port 35758 ssh2 Jun 2 07:07:58 4dle sshd[45560]: Failed password for invalid user ftp from 163.21.230.20 port 35844 ssh2 Jun 2 07:08:01 4dle sshd[45569]: Failed password for invalid user test from 163.21.230.20 port 35933 ssh2 Jun 2 07:08:07 4dle sshd[45620]: Failed password for invalid user admin from 163.21.230.20 port 36102 ssh2 Jun 2 07:08:10 4dle sshd[45625]: Failed password for invalid user guest from 163.21.230.20 port 36183 ssh2 Jun 2 07:08:13 4dle sshd[45630]: Failed password for invalid user master from 163.21.230.20 port 36273 ssh2 Jun 2 07:08:16 4dle sshd[45652]: Failed password for invalid user apache from 163.21.230.20 port 36360 ssh2 Явно подбирают логин\пароль к ssh. Бороться с данным видом атак вручную, явно бесполезное занятие, наличие IP адреса атакующего ничего не дает, так как, в подавляющем большинстве случаев, являются "левыми" и периодически меняются. Было решено поставить програмку sshguard. Принцип работы программы программы следующий: sshguard парсит лог файл регистраций в системе, если обнаруживает аномальное количество неудачных подключений с определенного IP, помечает адрес как нарушителя и добавляет в IPFW блокирующее правило на определенный промежуток времени, по умолчанию, время блокировки, 7 минут. Если в дальнейшем, данный IP вновь обратит на себя внимание sshguard своим неадекватным поведением, снова будет создано блокирующее правило в IPFW, но срок будет 2*7. Схема расчета времени блокировки следующая: 7 минут, 2*7 минут, 2*2*7 минут ..... 2^(n-1)*7 минут. В дальнейшем, после определенного количества рецидивов, указанного в опции -b, IP может будет помещен с черный список на постоянной основе.
От чего будем защищатся? От подобных запросов: 78.24.217.120 - - [02/Jun/2010:08:06:00 +0400] "GET / HTTP/1.1" 200 1036 "-" "-" 78.24.217.120 - - [02/Jun/2010:08:06:00 +0400] "GET /index.php HTTP/1.1" 200 1036 "-" "-" Продолжение под катом...
 | 29-05-2010, 09:51, прочитали: 215 раз, раздел: JavaScript |
Очень акуратный, лёгкий и симпатичный визивиг редактор на JQuery, правда не лишён багов, но буду следить за ним.
 | 29-05-2010, 08:37, прочитали: 119 раз, раздел: JavaScript |
Неплохое решение для crop\resiz'а изображений на javascript! Задача была сделать универсальный, по-возможности, скрипт, который мог бы заниматься ресайзом (изменением размеров) и кропом (обрезанием) любых изображений. Это иногда бывает нужно: * для "умного" вырезания превью из большого изображения, * для подготовки аватара из любой загруженной фотки, * ну и мало ли еще зачем нужен кроп и ресайз :-)
 | 3-05-2010, 13:28, прочитали: 270 раз, раздел: Разработка |
В который раз задаюсь вопросом каким же должен быть шаблонизатор? При разработке последнего проекта на enigm'e делал свой шаблонизатор - некий гибрид DLE'шного... получилось очень сыро, но уже тогда задумался о необходимости использовать условия и switch'и... От концепции блочных тегов я ушёл сразу - крайне неудобная штука имхо... конструкция $tpl->set также не прижилась... Обработка регулярными выражениями тегов (+ блоков) также крайне неправильна... ТеорияВот список требований которым он как Я считаю должен удовлетворять: Замена простых тегов в пределах одного шаблона.
Замена глобальных тегов для всех шаблонов. (например языковых констант)
Использование условий и switch'ей. Обязательно необходимо поддерживать вложенность операторов друг в друга.
Использование определённого набора ф-ций (например translit) и возможность вставки php кода. Набор функций должен расширяться динамически.
Шаблоны необходимо кэшировать, но при этом соблюдая актуальность данных.
Шаблонизатор должен обеспечивать обработку иерархических данных т.е. если из модуля пришёл результат в определённом формате (в моём случае это массив), то шаблонизатор должен автоматически подгрузить необходимые шаблоны и подставить нужные данные.
Дополнительно... при компиляции можно реализовать следующее: * Автоматически вырезать весь js код и стили из тела шаблона, сжимать всё (в gzip) и сохранять в отдельные файлы. * Автоматически валидировать html, пробывать "причесать" код. Основная задача — максимально разграничить труд программера и дизайнера, при этом сохранив чоткую, простую и понятную структуру шаблонов и тегов, в которой смог бы разобраться любой.
После пожара на hosting.ua мы потеряли 2 больших проекта, на которые было потрачено более полугода работы и уйму денег.
Так уж получилось что работали в команде. Команда небольшая и бекапы естественно никто не хранил (ктож знал...), не было такой необходимости, работали прямо на сервере из разных мест. Знаю, что глупо было всё держать на одном сервере, но вот как то так =)
Вобщем пришлось восстанавливать всё с нуля! Особую ценность представляли написанные ранее модули. Частично они сохранились на компах у разработчиков, но это были старые версии без баг-фиксов ... и я волей неволей задумался о контроле версий всех проектов ...
Настройка nginxИтак приступим! Открываем /usr/local/etc/nginx/nginx.conf http {
include mime.typs; default_type application/octet-stream;
log_format main '$remote_addr - $remote_user [$time_local] $request ' '"$status" $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for"';
sendfile on; keepalive_timeout 65; gzip on; gzip_min_length 1100; gzip_buffers 64 8k; gzip_comp_level 3; gzip_http_version 1.1; gzip_proxied any; gzip_types text/plain application/xml application/x-javascript text/css;
server_tokens off; reset_timedout_connection on; limit_req_zone $binary_remote_addr zone=one:10m rate=2r/s;
server { listen 80; server_name site.ru www.site.ru;
rewrite ^(/manager/.*)$ https://$host$1 permanent; location ~* ^/(webstat/|awstats|webmail/|myadmin/|manimg/) { proxy_pass http://127.0.0.1:8080; proxy_redirect http://127.0.0.1:8080/ /; proxy_set_header Host $host; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Real-IP $remote_addr; }
location / { proxy_pass http://127.0.0.1:8080; proxy_redirect http://127.0.0.1:8080; proxy_set_header Host $host; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Real-IP $remote_addr; limit_req zone=one burst=4; } location ~* ^.+\.(jpg|jpeg|gif|png|svg|js|css|mp3|ogg|mpe?g|avi|zip|gz|bz2?|rar|cur)$ { root /home/nickon/data/www/site.ru; expires 1y; access_log /home/httpd-logs/site.ru.access.log; error_page 404 = @fallback; } location @fallback { proxy_pass http://127.0.0.1:8080; proxy_set_header Host $host; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Real-IP $remote_addr; }
} }
|
|