LINUX.ORG.RU

Сообщения cheerfulboy

 

Python/Twisted, фильтрующий http-прокси

На самом деле это продолжение уже отдной из моих тем, которая находится вот тут: http://www.linux.org.ru/view-message.jsp?msgid=4180540

Вкратце: я хотел проксировать и фильтровать http (подменять контент и заголовки, и только потом отдавать клиенту/серверу). Сначала пытался сделать icap-сервер для squid, но ничего не получилось (точней понял, что затраченное на это время совсем бесполезно).

Сейчас я пытаюсь написать обработчик на python, используя twisted. Изучив http.py и proxy.py, подготовил небольшую заготовку:

from twisted.web import proxy, http
from twisted.internet import reactor
from twisted.python import log


class ProxyClientFactory(proxy.ProxyClientFactory):
    pass

class ProxyRequest(proxy.Request):
    protocols = {'http': ProxyClientFactory}

class Proxy(proxy.Proxy):
    requestFactory = ProxyRequest

class ProxyFactory(http.HTTPFactory):
    protocol = Proxy

Запускаю вот так:

#!/usr/bin/python

import sys
import filter

from twisted.python import log
from twisted.internet import reactor


log.startLogging(sys.stdout)

reactor.listenTCP(8080, filter.ProxyFactory())
reactor.run()

И мне кажется, что наследуя парочку классов, я ничего не изменил в логике работы сервера. Но оно не работает. Я долблю 8080 порт браузером, телнетом (GET / HTTP/1.0\r\nHost: linux.org.ru\r\n\r\n), а оно не отвечает. И в логах ничего интересного не пишет. Я в тупике. Вот логи:

$ ./proxy.py
/usr/lib64/python2.6/site-packages/twisted/internet/_sslverify.py:4: DeprecationWarning: the md5 module is deprecated; use hashlib instead
  import itertools, md5
/usr/lib64/python2.6/site-packages/twisted/web/microdom.py:157: SyntaxWarning: assertion is always true, perhaps remove parentheses?
  assert (oldChild.parentNode is self,
2009-11-05 22:21:55+0700 [-] Log opened.
2009-11-05 22:21:55+0700 [-] filter.ProxyFactory starting on 8080
2009-11-05 22:21:55+0700 [-] Starting factory <filter.ProxyFactory instance at 0x7d4560>

Причем если не наследовать ничего из twisted, то все прекрасно работает. Признаюсь, я новичок в python, а тем более в twisted, вдруг что-то упустил из виду? Спасибо за внимание. Надежда только на вашу помощь.

cheerfulboy
()

Прозрачное проксирование и парсер для http

В общем, хочется странного.

Есть сервер, через который должны ходить пользователи (прозрачный http-proxy). И эти самые пользователи, конечно, любят отправлять всякие разные post и get данные. А серверы, на которые они ходят, отвечают им всяческими http-заголовками и собственно отдают html.

А хотелось бы контроллировать весь http-трафик. То есть берем какой-нибудь python+re+BeautifulSoup, пишем скрипт, и заставляем этот скрипт выполняться на любой чих (любой запрос) на наш прозрачный прокси. И каким-нибудь образом передаем нашему скрипту url и все данные (headers+html), чтобы он смог их потом обрабатывать. Ну, и так же хотелось бы, чтобы скрипт умел опознавать заголовок Content-Type, и запускался только для text/html, text/plain, text/xml, text/json, к примеру.

Понимаю, что нужно копать в сторону squid+squidguard, читал документацию, но так не представил, как это можно реализовать. Есть идеи?

cheerfulboy
()

squid, iptables, destination

В общем, проблема вот такая. Имеется локальная сеть.В ее центре сервер (192.168.0.1), все запросы ходят через этот сервер. На сервере маскарадинг (правила iptables приведу ниже). Так же на сервере есть squid, висящий на 3128 порту. Вот сетевые интерфейсы:

[code]ppp0 (someaddr) — pppoe в интернет eth0 (anotheraddr) — путь в локалку прова br0 (192.168.0.0/24) — моя домашняя локалка[/code]

В iptables есть правило, заворачивающее все запросы, проходящие через сервер для 80 порта на порт 3128 (прозрачный прокси). Вот оно:

[code]B="iptables" A="ACCEPT"

LAN="br0" LAN_ADDR="192.168.0.1" WAN_ADDR="myserveraddr"

SQUID_EXCLUDE=( "$LAN_ADDR" "$WAN_ADDR" "127.0.0.1" )

for ADDR in ${SQUID_EXCLUDE[@]}; do $B -t nat -A PREROUTING -p tcp -i $LAN --dport http ! -d $ADDR -j REDIRECT --to-ports squid_proxy; done $B -A INPUT -i $LAN -p tcp --dport squid_proxy -j $A[/code]

Проблема в том, что этом же сервере на 80-ом порту крутится apache. Когда заходишь на него, то трафик, несмотря на "! -d $ADDR", все равно заворачивается на 3128 порт. Что я делаю не так, ребята?

Вот все правила iptables: http://dpaste.com/94194/

cheerfulboy
()

Не могу написать правило для udev

В /dev/mapper/vga-part находится образ виртуальной машины kvm. Сам kvm запускается от пользователя user. Сейчас делаю chown user /dev/mapper/vga-part при загрузке системы. Но по-хорошему, все это надо оформить в правиле для udev. Пробовал примерно следующее:

# cat 99-permissions.rules
KERNEL=="device-mapper", NAME="mapper/vga-part", OWNER="user", GROUP="kvm"
KERNEL=="vga-part", OWNER="user", GROUP="kvm"

Ничего у меня не получилось.. Сам сижу на стабильной ветке. Подскажите, кто-нибудь..

cheerfulboy
()

RSS подписка на новые темы