nixp.ru v3.0

28 мая 2017,
воскресенье,
13:29:56 MSK

DevOps с компанией «Флант»
slaveb написал 29 декабря 2007 года в 10:25 (2642 просмотра) Ведет себя неопределенно; открыл 1 тему в форуме.

Добрый день…

поставили передо мной такую банальную задачу организации интернета:

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.

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