Настройка серверов
Google Mail для собственных доменов и ограничения на отправку писем
Вчера Google преподнес небольшой сюрприз вечером. На одном из серверов у меня настроена отправка ошибок на определенный почтовый ящик, так что в день их иногда приходит несколько сотен (да я знаю это мало, на работе у нас было по несколько десятков тысяч писем в день иногда :). На этом же серваке поднят Redmine, где я создал тикет, но как ни странно уведомление на почту мне не свалилось... Посмотрев лог Exim заметил такую запись:
R=smarthost T=remote_smtp_smarthost: SMTP error from remote mail server after pipelined DATA: host gmail-smtp-msa.l.google.com [74.125.79.109]: 550 5.4.5 Daily sending quota exceeded. 7sm5127445eyb.8
Наивно конечно было ожидать что нахаляву Google будет давать сервис такой же как и для платных пользователей, но хотя бы писали о том что есть ограничение на число отправленных сообщений через их SMTP сервер. Хотя последнее время найти бесплатную версию Google Apps все труднее , скоро наверно совсем эту лавочку прикроют.
Nginx - конфиг для Zoneminder
Сегодня решил настроить таки Zoneminder - open source систему для создания видеонаблюдения на базе обычного компа, пока что успехи не значительны, настроил только nginx, решил выложить конфиг, может кому пригодится и сэкономит время.
srv01:/etc/nginx/sites-enabled# cat zoneminder.host.com server { listen 80; server_name zoneminder.host.com; root /usr/share/zoneminder; location / { root /usr/share/zoneminder; index index.php; if (!-e $request_filename) { rewrite ^/(.*)$ /index.php?q=$1 last; } } location ~* ^.+.(jpg|jpeg|gif|css|png|js|ico)$ { access_log off; expires 30d; } error_page 404 /index.php; # redirect server error pages to the static page /50x.html # error_page 500 502 503 504 /50x.html; location = /50x.html { root /var/www/nginx-default; } # proxy the PHP scripts to Apache listening on 127.0.0.1:80 # #location ~ \.php$ { #proxy_pass http://127.0.0.1; #} # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000 # location ~ \.php$ { fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME /usr/share/zoneminder/$fastcgi_script_name; fastcgi_param QUERY_STRING $query_string; fastcgi_param REQUEST_METHOD $request_method; fastcgi_param CONTENT_TYPE $content_type; fastcgi_param CONTENT_LENGTH $content_length; include /etc/nginx/fastcgi_params; } # deny access to .htaccess files, if Apache's document root # concurs with nginx's one # location ~ /\.ht { deny all; } }
Как забанить ботов по юзерагенту с помощью Apache
По мере появления некоторых проектов в поисковиках, их находят разные товарищи которые очень хотят контент с этих проектов выдрать, скорей всего на дорвеи/сплоги итд. Лично для меня никакой пользы от них нету, кроме того некоторые начинают борзеть и дергают по несколько страниц в секунду. Как то я хотел скачать один сайт, но после того как грабилка сайтов выкачивала страниц 10-20, скорость сайта резко понижалась до модемной, и качать становилось просто невозможно. Подозреваю что в том случае скорость резалась на файрволе. Сделать такое на виртуальном хостинге нереально, но хоть как то уменьшить нагрузку на сервер можно и нужно, т.к. большинство хостеров ставят ограничение на потребляемые ресурсы и рано или поздно из-за этих ботов аккаунт могут просто заморозить или отключить, в зависимости от хостера.
Вот пример нескольких ботов которые любят лазить по сайту:
WinHTTP Robot/1.0
команда, приведенная в самом начале сначала читает все файлы в текущей директории (в моем случае все лог файлы для одного сайта за три месяца), потом выбирает оттуда только те строки в которых содержится WinHTTP, потом вырезает первую колонку (в случае логов apache это ip-адрес), после чего выбираются только уникальные и показывается число встретившихся совпадений. Таким образом в результате видно число хитов с каждого айпишника.
$ cat * |grep WinHTTP | cut -f 1 -d " " | uniq -c 252 74.86.162.58 798 208.101.63.178 798 74.86.244.130 $ host 74.86.162.58 58.162.86.74.in-addr.arpa domain name pointer tracerootan.dk. $ host 208.101.63.178 178.63.101.208.in-addr.arpa domain name pointer royalexelsiore.br.
HTMLParser/1.6
$ cat * |grep HTMLP | cut -f 1 -d " " |uniq -c |head 1829 81.88.208.187 $ host 81.88.208.187 187.208.88.81.in-addr.arpa domain name pointer ws208-187.maryno.net.
Второй бот судя по всему одно из двух, либо библиотека Python или Java программа. Подозреваю, что второе, но пока ничего из этого не ставил и не пробовал.
Вот простой способ забанить их по user-agent:
в файл .htaccess добавляем
RewriteEngine On RewriteCond %{HTTP_USER_AGENT} "^WinHTTP\ Robot/1.0$" RewriteCond %{HTTP_USER_AGENT} "^HTMLParser/1\.6$" RewriteRule ^.+$ robot_nah.html [L]
в корне сайта создаем файл robot_nah.html в котором пишем какую нибудь херню. Сначала я хотел просто выдавать ошибку, это можно сделать заменив последнюю строчку на
RewriteRule ^.+$ - [G]потом таки решил что лучше выдавать всякий мусор, пусть потом разгребают кучу дерьма. :)
ssh: connect to host 192.168.1.10 port 22: No route to host
Настроил сервак дома, пока нет свича поставил в свой комп две сетевухи, запустил оба компа, стал пинговать
ping 192.168.1.10 PING 192.168.1.10 (192.168.1.10) 56(84) bytes of data. From 192.168.1.3 icmp_seq=2 Destination Host Unreachable From 192.168.1.3 icmp_seq=3 Destination Host Unreachable --- 192.168.1.10 ping statistics --- 5 packets transmitted, 0 received, +3 errors, 100% packet loss, time 4018ms , pipe 3
хрен там был в общем, пришлось в ручную указывать интерфейс через который пинговать
ping -I eth1 192.168.1.10 PING 192.168.1.10 (192.168.1.4) eth1: 56(84) bytes of data. 64 bytes from 192.168.1.10: icmp_seq=1 ttl=64 time=5.14 ms 64 bytes from 192.168.1.10: icmp_seq=2 ttl=64 time=1.31 ms 64 bytes from 192.168.1.10: icmp_seq=3 ttl=64 time=0.132 ms --- 192.168.1.10 ping statistics --- 3 packets transmitted, 3 received, 0% packet loss, time 1999ms rtt min/avg/max/mdev = 0.132/2.195/5.140/2.137 ms
на этом проблемы не кончились
$ ssh: connect to host 192.168.1.10 port 22: No route to host $ netstat -rn Kernel IP routing table Destination Gateway Genmask Flags MSS Window irtt Iface 85.141.232.1 0.0.0.0 255.255.255.255 UH 0 0 0 ppp0 172.16.134.0 0.0.0.0 255.255.255.0 U 0 0 0 vmnet1 192.168.1.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0 192.168.1.0 0.0.0.0 255.255.255.0 U 0 0 0 eth1 172.16.28.0 0.0.0.0 255.255.255.0 U 0 0 0 vmnet8 169.254.0.0 0.0.0.0 255.255.0.0 U 0 0 0 eth0 0.0.0.0 0.0.0.0 0.0.0.0 U 0 0 0 ppp0 0.0.0.0 192.168.1.1 0.0.0.0 UG 0 0 0 eth0 # ip route 85.141.232.1 dev ppp0 proto kernel scope link src 85.141.234.224 172.16.134.0/24 dev vmnet1 proto kernel scope link src 172.16.134.1 192.168.1.0/24 dev eth0 proto kernel scope link src 192.168.1.3 192.168.1.0/24 dev eth1 proto kernel scope link src 192.168.1.4 172.16.28.0/24 dev vmnet8 proto kernel scope link src 172.16.28.1 169.254.0.0/16 dev eth0 scope link metric 1000 default dev ppp0 scope link default via 192.168.1.1 dev eth0 metric 100
в общем пока временно решил проблему ручным добавлением маршрута
# route add -host 192.168.1.10 85.141.232.1 dev ppp0 proto kernel scope link src 85.141.234.224 192.168.1.10 dev eth1 scope link 172.16.134.0/24 dev vmnet1 proto kernel scope link src 172.16.134.1 192.168.1.0/24 dev eth0 proto kernel scope link src 192.168.1.3 192.168.1.0/24 dev eth1 proto kernel scope link src 192.168.1.4 172.16.28.0/24 dev vmnet8 proto kernel scope link src 172.16.28.1 169.254.0.0/16 dev eth0 scope link metric 1000 default dev ppp0 scope link default via 192.168.1.1 dev eth0 metric 100 # ping 192.168.1.10 PING 192.168.1.10 (192.168.1.10) 56(84) bytes of data. 64 bytes from 192.168.1.10: icmp_seq=1 ttl=64 time=3.81 ms --- 192.168.1.10 ping statistics --- 1 packets transmitted, 1 received, 0% packet loss, time 0ms rtt min/avg/max/mdev = 3.819/3.819/3.819/0.000 ms
Вообще есть планы сделать все по человечески: купить самую дешевую мать, самый дешевый проц, по минимуму памяти, флешку гига на два. Поставить какой нибудь дистрибутив линукса специально заточенный под использование как файрвол, например Devil Linux или IPCop Firewall. Второй мне нравится больше, т.к. к нему уже приделаны creenshots">разные графики и веб-интерфейс, можно самому конечно это сделать/написать, но зачем изобретать колесо.
Последние комментарии
2 weeks 5 days ago
2 weeks 5 days ago
2 weeks 5 days ago
2 weeks 5 days ago
4 weeks 10 hours ago
4 weeks 4 days ago
5 weeks 23 hours ago
5 weeks 4 days ago
6 weeks 3 days ago
6 weeks 6 days ago