[Sysadmins] ALTLinux - заворачивание http-трафика iptables->squid

Хихин Руслан =?iso-8859-1?q?hihin_=CE=C1_rambler=2Eru?=
Сб Дек 29 10:58:29 MSK 2007


Здравствуйте !

Получил на форуме 
http://forum.oszone.net/post-706093.html#post706093
такой вопрос :

Затрудняюсь с ходу ответить, может у кого будут какие сооброжения ?

----------  Пересланное сообщение  ----------

Subject: [Общий по Linux] ALTLinux - заворачивание http-трафика 
iptables->squid
Date: 29 декабря 2007
From: Компьютерный форум OSzone.net <techadmin на oszone.net>


Форум: Общий по Linux
Тема: ALTLinux - заворачивание http-трафика iptables->squid 
(http://forum.oszone.net/newpostinthread-97007.html)
Автор: morok
Текст сообщения:
===>>>-----------------------------------------------

Добрый день...
поставили передо мной такую банальную задачу организации интернета:
1. любые приложения не ходящие по http должны коннектица прозрачно(без 
маппинга портов и соксификации через прокси)
2. рулить доступом пользователей http, и считать трафик по каждому

В распоряжении имелось:
1. ADLS-интернет
2. локальная сеть
3. интернет-маршрутизатор на базе AltLinux 4 Desctop с 2мя сетевыми 
интерфейсами
eth0 - в ADSL, и eth1 - в сеть

Решил сделать так:
для прозрачного доступа пользователей в интернет NATить адреса в 
IPTables, и поднять PPPoE для коннекта пользователей. Для 
контролирования HTTP - заворачивать в IPTables запросы с 80 порта на 
прозрачный прокси-сервер Squid.

Поднял NAT+PPPoE, поднял squid...по отдельности все работает, но как 
только я делаю squid прозрачным и заворачиваю запросы с 80 порта на 
squid - http работать отказывается...

скрипт для Iptables
-------------------------------------
#!/bin/sh 
function get_addr() 
{ 
   IFCONFIG='/sbin/ifconfig'; 
   HEAD='head -2'; 
   TAIL='tail -1'; 
   CUT='cut -d: -f2'; 
   IP=`$IFCONFIG $1 | $HEAD | $TAIL | awk '{print $2}' | $CUT`; 
   echo $IP;

} 
### Внешний интерфейс
EXTDEV="eth0" 
### внутренний интерфейс
PPPOEDEV="eth1" 
### сеть для PPPOE клиентов. 
INETWORKIP="192.168.100.0/255.255.255.0" 

EXTERNALIP=`get_addr $EXTDEV`
ENETWORKIP=$EXTERNALIP+"/255.255.255.255" 
INTERNALIP=`get_addr $INTDEV` 
LOOPBACK="127.0.0.1" 
ANYWHERE="0.0.0.0/0" 
PORTS="1024:65535" 
INTDEV="ppp+"
/sbin/depmod -a
/sbin/modprobe ip_conntrack
/sbin/modprobe ip_tables
/sbin/modprobe iptable_filter 
/sbin/modprobe iptable_mangle 
/sbin/modprobe iptable_nat 
/sbin/modprobe ipt_LOG 
/sbin/modprobe ipt_limit 
/sbin/modprobe ipt_MASQUERADE 
/sbin/modprobe ipt_owner 
/sbin/modprobe ipt_REJECT 
/sbin/modprobe ip_conntrack_ftp 
/sbin/modprobe ip_conntrack_irc 
/sbin/modprobe ip_nat_ftp 
/sbin/modprobe ip_nat_irc 
echo 1 > /proc/sys/net/ipv4/ip_forward 
echo 1 > /proc/sys/net/ipv4/tcp_syncookies 
for file in /proc/sys/net/ipv4/conf/*/rp_filter; do 
  echo 1 > $file 
done 
     
for file in /proc/sys/net/ipv4/conf/*/accept_redirects; do 
  echo 0 > $file 
done 
   
for file in /proc/sys/net/ipv4/conf/*/accept_source_route; do 
  echo 0 > $file 
done 
                     
/sbin/iptables -F 
/sbin/iptables -F -t nat 
/sbin/iptables -N ALLOW_ICMP 
/sbin/iptables -N ALLOW_PORTS 
/sbin/iptables -N CHECK_FLAGS 
/sbin/iptables -N DENY_PORTS 
/sbin/iptables -N DST_EGRESS 
/sbin/iptables -N KEEP_STATE 
/sbin/iptables -N SRC_EGRESS 

# По умолчанию все входящие пакеты сбрасываем 
/sbin/iptables -P INPUT DROP
/sbin/iptables -A INPUT -p tcp ! --syn -m state --state NEW -j DROP 
/sbin/iptables -A INPUT -j ACCEPT -s $EXTERNALIP -d $ANYWHERE 
/sbin/iptables -A INPUT -j ACCEPT -s $ANYWHERE -d $ANYWHERE -i $INTDEV 
/sbin/iptables -A INPUT -j ACCEPT -s $ANYWHERE -d $ANYWHERE -i lo 
/sbin/iptables -A INPUT -j ACCEPT -s $ANYWHERE -d $ANYWHERE -i 
$EXTDEV -m state --state RELATED,ESTABLISHED 
/sbin/iptables -A INPUT -j ACCEPT -p icmp -s $ANYWHERE -d $ANYWHERE 
/sbin/iptables -A INPUT -j ACCEPT -p udp -s $INETWORKIP --sport 53 -d 
$ANYWHERE 

# По умолчанию все исходящие пакеты сбрасываем 
/sbin/iptables -P OUTPUT DROP 
/sbin/iptables -A OUTPUT -j ACCEPT -s $ANYWHERE -d $ANYWHERE -o $INTDEV 
/sbin/iptables -A OUTPUT -j ACCEPT -s $ANYWHERE -d $EXTERNALIP 
/sbin/iptables -A OUTPUT -j ACCEPT -s $ANYWHERE -d $ANYWHERE -o lo 
/sbin/iptables -A OUTPUT -j ACCEPT -s $ANYWHERE -d $ANYWHERE -o 
$EXTDEV -m state --state RELATED,ESTABLISHED 
/sbin/iptables -A OUTPUT -j ACCEPT -p udp -s $EXTERNALIP -d 
$ANYWHERE --dport 53 
/sbin/iptables -A OUTPUT -j ACCEPT -p icmp -s $ANYWHERE -d $ANYWHERE 
/sbin/iptables -A OUTPUT -j ACCEPT -s $ANYWHERE -d $ANYWHERE -o 
$EXTDEV -m state --state RELATED,ESTABLISHED 

/sbin/iptables -P FORWARD ACCEPT
/sbin/iptables -A FORWARD -j ACCEPT -s $ANYWHERE -d $ANYWHERE -i $INTDEV 
/sbin/iptables -A FORWARD -j ACCEPT -p icmp -s $ANYWHERE -d $ANYWHERE -i 
$INTDEV 

### редирект HTTP запросов на прокси сервер Squid. 
/sbin/iptables -t nat -A PREROUTING -i $INTDEV -p tcp --dport 80 -j 
REDIRECT --to-port 3128
## Маскарадинг клиентов 
/sbin/iptables -t nat -A POSTROUTING -j SNAT -s $INETWORKIP -d 
$ANYWHERE -o $EXTDEV --to $EXTERNALIP 
/sbin/iptables -t nat -A POSTROUTING -j MASQUERADE -s $INETWORKIP -d 
$ANYWHERE -o $EXTDEV 
## Запуск PPPOE-SERVER 
killall -w -9 pppoe-server 
/usr/sbin/pppoe-server -I $PPPOEDEV -L $INTERNALIP
-----------------------------------------

squid.conf
---------------------------
http_port 3128 transparent 
hierarchy_stoplist cgi-bin ?
acl QUERY urlpath_regex cgi-bin \?
no_cache deny QUERY

cache_mem 20 MB
maximum_object_size 16192 KB
cache_dir ufs /home/slaven/squid/cache 1000 16 256
emulate_httpd_log on
access_log /home/slaven/squid/logs/access.log squid
cache_log /dev/null
cache_store_log none

acl office src 192.168.100.0/255.255.255.0
acl all src 0.0.0.0/0.0.0.0
acl localhost src 127.0.0.1/255.255.255.255
acl CONNECT method CONNECT

http_access deny all !office
icp_access allow all
---------------------------
Браузер по таймауту говорит, что невозможно отобразить страницу.
а access.log сквидовский ловит подобное:
-----------------------------------------
1198840773.503 179912 192.168.100.1 TCP_MISS/504 1461 GET 
http://www.google.ru/complete/search? - DIRECT/216.239.59.104 text/html
------------------------------------------

Если делаю squid непрозрачным, то он валит в браузер сообщение о 
неправильно переданном запросе, и аналогичную запись делает в 
access.log.

На момент написания поста перерыл просторы инета в поисках решения, но 
поа безрезультатно. Буду признателен за любую помощь

===>>>-----------------------------------------------
Перейти в тему: http://forum.oszone.net/newpostinthread-97007.html

-- 
  А ещё говорят так  (fortune):
 
I want to kill everyone here with a cute colorful Hydrogen Bomb!! 
________________________________________________________________________
С уважением Хихин Руслан
----------- следующая часть -----------
Было удалено вложение не в текстовом формате...
Имя     : =?iso-8859-1?q?=CF=D4=D3=D5=D4=D3=D4=D7=D5=C5=D4?=
Тип     : application/pgp-signature
Размер  : 197 байтов
Описание: This is a digitally signed message part.
Url     : <http://lists.altlinux.org/pipermail/sysadmins/attachments/20071229/790845fa/attachment-0002.bin>


Подробная информация о списке рассылки Sysadmins