QQ登录

只需一步,快速开始

 找回密码
 注册

QQ登录

只需一步,快速开始

楼主: gugong

透明代理 (Iptables 与 Squid)

  [复制链接]
发表于 2003-3-7 06:29:46 | 显示全部楼层
谢谢你的指点,不过没成功。你所说的清理iptables规则是怎么清理的?我的nat.sh里头没有清理的语句吗?万请指点。
另,我在台湾网上超了个script,执行后就可以运行了,我贴在下面,(有兴趣做linux局域网的可以抄过去,保证你的局域网能上网)
#!/bin/bash
#
# Script name: ipt_masq
# A simple script for masquerading, used in Linux (kernel 2.4.x).
#
# Copyleft 2002 by netman ([email protected]).
#
# Redistribution of this file is permitted under the terms of
# the GNU General Public License (GPL).
#
# Date: 2002/02/04
# Version: 1.2

PATH=/sbin:/usr/sbin:/bin:/usr/bin
RC_SQUID=/etc/rc.d/init.d/squid
EXT_IF=ppp0//注,这里是接外网的接口,如果是adsl拨号的,就用这个,如果不是,就用eth0/1.我在局域网内再建一网,用这个script也实现了可以上网。//
INT_IF=eth0//注,这里是连内网的接口,有两块网卡的话,一定要确定你用那块网卡连网的。
ALLOWED_ICMP="0 3 3/4 4 11 12 14 16 18"
DENIED_ICMP="8"

#
# ------------- ensure iptables ----------
which iptables &>/dev/null || {
        echo
        echo "$(basename $0): iptables program is not found."
        echo "        Please install the program first."
        echo
        exit 1
}
# ------------- disable ipchains ----------
lsmod | grep ipchains &>/dev/null && {
        echo "Disabling ipchains..."
        rmmod ipchains &>/dev/null
}

# ------------- modules -----------
echo "Loading modules..."
modprobe ip_tables &>/dev/null || {
    echo -n "$(basename $0): loading ip_tables module failure."
    echo " Please Fix it!"
    exit 3
}
for file in /lib/modules/`uname -r`/kernel/net/ipv4/netfilter/ip_conntrack_*.o
do
        module=$(basename $file)
        modprobe ${module%.*} &>/dev/null
done
for file in /lib/modules/`uname -r`/kernel/net/ipv4/netfilter/ip_nat_*.o
do
        module=$(basename $file)
        modprobe ${module%.*} &>/dev/null
done

# ------------- ipforwarding -----------
echo "Turning on IP forwarding..."
echo "1" > /proc/sys/net/ipv4/ip_forward

# ------------- anti spoofing -----------
echo "Turning on anti-spoofing..."
for file in /proc/sys/net/ipv4/conf/*/rp_filter; do
        echo "1" > $file
done

# ------------- flushing ----------
echo "Cleaning up..."
iptables -F -t filter
iptables -X -t filter
iptables -Z -t filter
iptables -F -t nat
iptables -X -t nat
iptables -Z -t nat

# ------------- policies -------------
echo "Setting up policies to ACCEPT..."
iptables -P INPUT ACCEPT
iptables -P OUTPUT ACCEPT
iptables -P FORWARD ACCEPT
iptables -t nat -P PREROUTING ACCEPT
iptables -t nat -P POSTROUTING ACCEPT
iptables -t nat -P OUTPUT ACCEPT

# ------------- ICMP -------------
echo "Creating icmpfilter chain..."
iptables -N icmpfilter
for TYPE in $DENIED_ICMP; do
    iptables -A icmpfilter -i $EXT_IF -p icmp \
        --icmp-type $TYPE -j DROP
done
for TYPE in $ALLOWED_ICMP; do
    iptables -A icmpfilter -i $EXT_IF -p icmp \
        --icmp-type $TYPE -j ACCEPT
done

# ------------- block -------------
echo "Creating block chain..."
iptables -N block
iptables -A block -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A block -m state --state NEW,INVALID -i $EXT_IF -j DROP
iptables -A block -m state --state NEW -i ! $EXT_IF -j ACCEPT
iptables -A block -j DROP

# ------------- filter -------------
echo "Filtering packets..."
iptables -A INPUT -j icmpfilter
iptables -A INPUT -j block
iptables -A FORWARD -j icmpfilter
iptables -A FORWARD -j block

# ------------- masq -------------
echo "Masquerading internel network..."
iptables -t nat -A POSTROUTING -o $EXT_IF -j MASQUERADE

# ------------- tproxy -------------
$RC_SQUID status | grep pid &>/dev/null && {
    echo "Enabling transparent proxy..."
    INT_IP=$(ifconfig | grep "$INT_IF " -A 1 \
        | awk '/inet/ {print $2}' | sed -e s/addr\://)
    if [ -z "$INT_IP" ]; then
        echo
        echo "$(basename $0): there is no IP found on $INT_IF."
        echo "  Please make sure $INT_IF is setup properly."
        echo
        exit 3
    fi
    iptables -t nat -A PREROUTING -d $INT_IP -i $INT_IF \
        -p tcp -m tcp --dport 80 -j ACCEPT
    iptables -t nat -A PREROUTING -i $INT_IF -p tcp -m tcp \
        --dport 80 -j REDIRECT --to-ports 3128
}
exit 0
## EOS

但这里的
# ------------- anti spoofing -----------
echo "Turning on anti-spoofing..."
for file in /proc/sys/net/ipv4/conf/*/rp_filter; do
        echo "1" > $file
done
我看不懂,为什么要anti spoofing?for...do..这句拆回来的原句是什么?gugong兄能指点吗?
回复

使用道具 举报

发表于 2003-3-12 16:46:37 | 显示全部楼层
有谁能帮我配置一下我的机械:本人机器P233/196RAM/4。3G硬盘/双网卡1。RL8139   2。DL530接CABLE/装了LUNIX8。0,现不能连上网络,也不能做代理,我想把RH8。0作为路由代理服务器,谁能帮我配置一下。我自己弄得都头大了,实在没办法了,请教一下!
回复

使用道具 举报

发表于 2003-3-13 08:43:54 | 显示全部楼层
gugong:
我再提一次,再详细一点:
其中的一段:
# 让人家 ping 不通我 !
[0] -A INPUT -i eth1 -s 192.168.30/24 -p icmp -m icmp --icmp-type 8 -j ACCEPT
[0] -A INPUT -i eth1 -s 211.148.130.128/28 -p icmp -m icmp --icmp-type 8 -j ACCEPT
[0] -A INPUT -i eth1 -p icmp -m icmp --icmp-type 8 -j DROP
#

中的第一句中的"..... -s 192.168.30/24 -p ......"似乎缺一节数?因为IP地址一般是x.x.x.x,即应该是"..... -s 192.168.30.x/24 -p ......"。不知这个遗漏的"x"应该是什么?

这种情况在另一个帖子中也有。
回复

使用道具 举报

发表于 2003-3-26 00:45:04 | 显示全部楼层
#
# mangle 段
*mangle
REROUTING ACCEPT [0]
:OUTPUT ACCEPT [0]
COMMIT
#

#
# nat 段
*nat
REROUTING ACCEPT [0]
OSTROUTING ACCEPT [0]
:OUTPUT ACCEPT [0]
#
这几段写的是什么意思呀?
还有,就是以后的[0] 是不是代表iptables呢?
希望高手回答!
我很菜!
回复

使用道具 举报

发表于 2003-3-27 15:41:13 | 显示全部楼层
to:Huda
------------------
[0] -A INPUT -i eth1 -s 192.168.30/24 -p icmp -m icmp --icmp-type 8 -j ACCEPT
不知道你是否了解掩码,找本TCP/IP书看一下老兄!
192.168.30.0和192.168.30/24一样的,"/24"吗!人家写得很清楚了!
回复

使用道具 举报

 楼主| 发表于 2003-3-27 15:50:57 | 显示全部楼层
[quote:79ebf8afcb="viento"]# ------------- anti spoofing -----------
echo "Turning on anti-spoofing..."
for file in /proc/sys/net/ipv4/conf/*/rp_filter; do
        echo "1" > $file
done
我看不懂,为什么要anti spoofing?for...do..这句拆回来的原句是什么?gugong兄能指点吗?[/quote]


意思是:

对这个目录下面的 /proc/sys/net/ipv4/conf/*/ 的 rp_filter 文件的内容都更改为 “1”。


至于目的,从字面理解是 “防止欺骗”,具体我就不知道了。
回复

使用道具 举报

发表于 2003-6-4 07:50:11 | 显示全部楼层
我squid.conf完全照抄了,为什么SQUID服务不能启动?大侠帮我看看
squid failed. The error was: init_cache_dir /var/spool/squid... /etc/init.d/squid: line 162:  3329 Aborted                 $SQUID -z -F -D 2>/dev/null
Starting squid: /etc/init.d/squid: line 162:  3330 Aborted                 $SQUID $SQUID_OPTS 2>/dev/null
[FAILED]
回复

使用道具 举报

 楼主| 发表于 2003-6-4 08:52:57 | 显示全部楼层
2003年06月04日上午08时28分28秒[root@gugong logs]# ll /var/spool/squid/ -d
drwxr-x---    2 squid    squid        4096  1月 25 15:19 /var/spool/squid//
2003年06月04日上午08时52分45秒[root@gugong logs]#
回复

使用道具 举报

发表于 2003-6-18 19:54:26 | 显示全部楼层

按照此方法做了,但是还是不行,请各位帮忙!

我的网络配置

eth0:192.168.0.1/255.255.255.0为内部网网卡,网关为空
eth1:210.20.96.2/255.255.255.252为外部网网卡,网关为210.20.96.1

已经将/etc/sysctl.conf 文件里面修改成 net.ipv4.ip_forward = 1

测试的客户端网卡配为:192.168.0.15/255.255.255.0网关为192.168.0.1

这样的配置折腾我两天了,还是没有能够找问题到底出在哪里?请帮忙!thanks(初学者)

/etc/sysconfig/iptables的文件内容如下:

# /etc/sysconfig/iptables 文件
#
#======================= 古公 =======================

#
# mangle 段
*mangle
REROUTING ACCEPT [0]
:OUTPUT ACCEPT [0]
COMMIT
#

#
# nat 段
*nat
REROUTING ACCEPT [0]
OSTROUTING ACCEPT [0]
:OUTPUT ACCEPT [0]
#
# 为使用 SQUID 作“透明代理”而设定!
#
# 没有指定 网卡、地址:
#[0] -A PREROUTING -p tcp -m tcp --dport 80 -j REDIRECT --to-ports 8080
#
# 指定 网卡、地址:
[0] -A PREROUTING -s 192.168.0.0/255.255.255.0 -i eth0 -p tcp -m tcp --dport 80 -j REDIRECT --to-ports 8080
[0] -A PREROUTING -s 192.168.0.0/255.255.255.0 -i eth0 -p tcp -m tcp --dport 443 -j REDIRECT --to-ports 8080
# 将 对于 80、443 端口的访问 重定向到 8080 端口。
#
#
# 这些机器可以走这个机器做网关上 Internet 网。
# 需要在 /etc/sysctl.conf 文件里面修改成 net.ipv4.ip_forward = 1
# 或者 echo 1 > /proc/sys/net/ipv4/ip_forward
# 由于利用 SQUID 实现了“透明代理”,Masq 取消相应的客户地址。
# 这里,只剩下几个需要利用“IP伪装”来上网的机器(可以上 QQ、雅虎通、msn 之类的):
#
#[0] -A POSTROUTING -s 192.168.0.1 -j MASQUERADE
#[0] -A POSTROUTING -s 192.168.0.2 -j MASQUERADE
#[0] -A POSTROUTING -s 192.168.0.3/255.255.255.240 -j MASQUERADE
# 若你的 公网的 IP 地址是固定的,使用这个语句似乎更好些:
[0] -A POSTROUTING -s 192.168.0.0/255.255.255.0 -j SNAT --to 210.20.96.2
#iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -o eth1 -j SNAT --to 210.20.96.2
COMMIT
#

#
# filter 段
*filter
:INPUT ACCEPT [0]
:FORWARD ACCEPT [0]
:OUTPUT ACCEPT [0]

#
# 屏蔽 来自 microsoft 的站点:
[0] -A INPUT -s 207.46.0.0/255.255.0.0 -j DROP
[0] -A INPUT -d 207.46.0.0/255.255.0.0 -j DROP
#

# 防止IP欺骗:
# 所谓的IP欺骗就是指在IP包中存在着不可能的IP源地址或目标地址。
# eth1是一个与外部Internet相连,而192.168.0.0则是内部网的网络号,
# 也就是说,如果有一个包从eth1进入主机,而说自己的源地址是属于
# 192.168.0.0网络,或者说它的目标地址是属于这个网络的,那么这显
# 然是一种IP欺骗,所以我们使用DROP将这个包丢弃。
[0] -A INPUT -d 192.168.0.0/255.255.255.0 -i eth1 -j DROP
[0] -A INPUT -s 192.168.0.0/255.255.255.0 -i eth1 -j DROP
#
# 同样的,如果有包要通过eth1向Internet,而且它的源地址或目标地址是属于
# 网络192.168.0.0,那么显然也是不可能的。我们仍然使用DROP将它丢弃。
[0] -A OUTPUT -d 192.168.0.0/255.255.255.0 -o eth1 -j DROP
[0] -A OUTPUT -s 192.168.0.0/255.255.255.0 -o eth1 -j DROP
#

# 防止广播包从IP代理服务器进入局域网:
[0] -A INPUT -s 255.255.255.255 -i eth0 -j DROP
[0] -A INPUT -s 224.0.0.0/224.0.0.0 -i eth0 -j DROP
[0] -A INPUT -d 0.0.0.0 -i eth0 -j DROP
# 当包的源地址是255.255.255.255或目标地址是0.0.0.0,则说明它是一个
# 广播包,当广播包想进入eth0时,我们就应该DENY,丢弃它。而240.0.0.0/3
# 则是国际标准的多目广播地址,当有一个源地址是属于多目广播地址的包,
# 我们将用DROP策略,丢弃它。

#
# 屏蔽 windows xp 的 5000 端口(这个端口是莫名其妙的 !)
[0] -A INPUT -p tcp -m tcp --sport 5000 -j DROP
[0] -A INPUT -p udp -m udp --sport 5000 -j DROP
[0] -A OUTPUT -p tcp -m tcp --dport 5000 -j DROP
[0] -A OUTPUT -p udp -m udp --dport 5000 -j DROP
# 原来是用来跑 vpn 的,呵呵,我误解了。
#

#
# 防止 Internet 网的用户访问 SAMBA 服务器:
[0] -A INPUT -s 210.20.96.2 -i eth1 -p tcp -m tcp --dport 137:139 -j DROP
[0] -A INPUT -s 192.168.0.0/255.255.255.0 -i eth0 -p tcp -m tcp --dport 137:139 -j ACCEPT
[0] -A INPUT -s 211.148.130.128/255.255.255.240 -i eth1 -p tcp -m tcp --dport 137:139 -j ACCEPT
[0] -A INPUT -p tcp -m tcp --dport 137:139 -j DROP
#

#
# 对于本局域网用户不拒绝访问:
[0] -A INPUT -s 192.168.0.0/255.255.255.0 -i eth0 -p tcp -j ACCEPT
[0] -A INPUT -s 192.168.0.0/255.255.255.0 -i eth0 -p udp -j ACCEPT
#

#
[0] -A INPUT -i eth1 -p udp -m udp --dport 3 -j DROP
[0] -A INPUT -i eth1 -p tcp -m tcp --dport 3 -j DROP
[0] -A INPUT -i eth1 -p tcp -m tcp --dport 111 -j DROP
[0] -A INPUT -i eth1 -p udp -m udp --dport 111 -j DROP
#

#
[0] -A INPUT -i eth1 -p udp -m udp --dport 587 -j DROP
[0] -A INPUT -i eth1 -p tcp -m tcp --dport 587 -j DROP
#

# 防止 Internet 用户访问 SQUID 的 8080 端口:
[0] -A INPUT -s 210.20.96.2 -i eth1 -p tcp -m tcp --dport 8080 -j DROP
[0] -A INPUT -s 192.168.0.0/255.255.255.0 -i eth0 -p tcp -m tcp --dport 8080 -j ACCEPT
[0] -A INPUT -s 210.20.96.1/255.255.255.252 -i eth1 -p tcp -m tcp --dport 8080 -j ACCEPT
[0] -A INPUT -p tcp -m tcp --dport 8080 -j DROP
#

# 让人家 ping 不通我 !
[0] -A INPUT -i eth1 -s 192.168.0/24 -p icmp -m icmp --icmp-type 8 -j ACCEPT
[0] -A INPUT -i eth1 -s 210.20.96.2/28 -p icmp -m icmp --icmp-type 8 -j ACCEPT
[0] -A INPUT -i eth1 -p icmp -m icmp --icmp-type 8 -j DROP
#

COMMIT
# ======================= 结束 =======================
# ======================= 古公 =======================


/etc/squid/squid.conf的文件内容:

#服务器配置
http_port 192.168.0.1 8080
hierarchy_stoplist cgi-bin ?
acl QUERY urlpath_regex cgi-bin \?
no_cache deny QUERY
cache_mem 48 MB
cache_access_log /var/log/squid/access.log
cache_log /var/log/squid/cache.log
cache_store_log /var/log/squid/store.log
visible_hostname No1.proxy
#client_mask 255.255.255.255
httpd_accel_host virtual
httpd_accel_port 80
httpd_accel_with_proxy on
httpd_accel_uses_host_header on
emulate_httpd_log on
redirect_rewrites_host_header off
connect_timeout 2 minutes


# 访问分类
acl all src 0.0.0.0/0.0.0.0
acl manager proto cache_object
acl localhost src 127.0.0.1/255.255.255.255
acl to_localhost dst 127.0.0.0/8
acl SSL_ports port 443 563
acl Safe_ports port 80                # http
acl Safe_ports port 21                # ftp
acl Safe_ports port 443 563        # https, snews
acl Safe_ports port 70                # gopher
acl Safe_ports port 210                # wais
acl Safe_ports port 1025-65535        # unregistered ports
acl Safe_ports port 280                # http-mgmt
acl Safe_ports port 488                # gss-http
acl Safe_ports port 591                # filemaker
acl Safe_ports port 777                # multiling http
acl CONNECT method CONNECT
acl mylan src 192.168.0.0/255.255.255.0

#访问控制
http_access allow mylan
http_access allow manager localhost
http_access deny manager
http_access deny !Safe_ports
http_access deny CONNECT !SSL_ports
http_access allow localhost
http_access deny all
http_reply_access allow all
icp_access allow all
回复

使用道具 举报

发表于 2003-6-20 08:54:16 | 显示全部楼层
古兄,我将你的两个文件完全cp到我的电脑,只是相应改一点IP地址就能用吗?
请问为何我的/etc/sysconfig下为何没有iptables文件?
回复

使用道具 举报

 楼主| 发表于 2003-6-20 09:15:33 | 显示全部楼层
To: Fanstone

http_port 192.168.0.1:8080
httpd_accel_with_proxy off
回复

使用道具 举报

发表于 2003-6-20 20:36:14 | 显示全部楼层
多谢!我明天到单位再试试!
回复

使用道具 举报

发表于 2003-6-21 12:11:51 | 显示全部楼层
感谢古兄提供的iptables&squid透明代理解决方法,按你提供的文件我已顺利实现。用户也能QQ了。
关于下列文件,是不是只要用文本编辑的方式,逐行添加IP地址,产生这些文件即可?

acl no_allow_web dst "/etc/squid/no_allow_web"
acl no_allow_domain dstdomain "/etc/squid/no_allow_domain"
acl no_allow_client src "/etc/squid/no_allow_client"
#acl allow_time time "/etc/squid/allow_time"
#
acl allow_client_inf src "/etc/squid/allow_client_inf"
acl allow_client_fore src "/etc/squid/allow_client_fore"
acl allow_client_8h src "/etc/squid/allow_client_8h"
acl allow_client_3h src "/etc/squid/allow_client_3h"
回复

使用道具 举报

 楼主| 发表于 2003-6-21 16:31:47 | 显示全部楼层
是的 。

但是文件的内容除了(去掉) “#”开头的注释和空行后,不得为空 !
回复

使用道具 举报

发表于 2003-7-4 18:17:51 | 显示全部楼层
请问斑竹:
  我用squid配置的透明服务器,只能通过在IE里设置代理才能上,而且除了
http,任何的服务都不能用,并且不能PING通外网的机器。
请帮我分析一下是什么问题,好吗?谢谢
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

GMT+8, 2024-11-5 22:39 , Processed in 0.058241 second(s), 12 queries .

© 2021 Powered by Discuz! X3.5.

快速回复 返回顶部 返回列表