配置squid+iptables透明代理+上网管控的公司网关

下载源代码并解压



Squid Cache: Version 3.0.STABLE26


cd /usr/src

wget -c http://www.squid-cache.org/Versi ... 3.0.STABLE26.tar.gz

tar -zxvf squid-3.0.STABLE26.tar.gz



3.安装Squid Proxy Server


cd /usr/src/


./configure --prefix=/usr/local/squid/ --sysconfdir=/etc/squid/ --bindir=/usr/bin/ --sbindir=/usr/sbin/ --enable-gnuregex --enable-async-io=240 --enable-icmp --enable-snmp --enable-err-languages="Simplify_Chinese" --enable-underscore --enable-linux-netfilter --enable-arp-acl --enable-default-err-language="Simplify_Chinese"  --enable-linux-tproxy --enable-delay-pools   --with-maxfd=65535


make && make install


4.设置squid.conf


cd


先备份  cp /etc/squid/squid.conf /etc/squid/squid.conf.bak


vi /etc/squid/squid.conf  


http_port IP:端口设置squid监听的IP地址和端口

http_port 192.168.1.120:3128


cache_mem    64MB  

指定使用多少物理内存作为高速缓存.如果这台服务器仅用于共享上网,没有其他服务,

则可加大物理内存的1/2,但如果还有其他服务则cache_mem的大小不应超过物理内存

的1/3,否则会影响服务器的总体性能.


cache_dir ufs /var/spool/squid 4096 16 256

指定硬盘缓冲区的大小,其中ufs指的是缓冲的存储类型,一般为ufs,/var/spool/squid指硬盘缓冲存放的目录,4096代表缓存空间最大为4096M,16代表squid可以在硬盘缓冲存放的目录下建立的第一级子目录的数目,缺省值为16.

最后的256是可以建立第二级子目录的数目,缺省值256.


maximum_object_size   最大/最小单文件大小


maximum_object_size_in_memory


内存中最大/最小单文件大小


error_directory        错误文档目录


dns_nameservers IP     为了使Squid能解析域名,必须告诉squid有效DNS服务器..


cache_access_log    定义了访问记录日志文件的路径,该日志记录了用户访问Internet的详细信息,

通过日志文件可以查看每台客户机上网的记录...所以大家不要干坏事的...


cache_log    设置记录缓存的相关信息日志文件的路径...


cache_store_log         定义了记录网页在缓存中调用情况日志文件的路径...


visible_hostname    定义了运行squid的主机名称,当访问发生错误时,该选项的值会显示在错误提示网页

中.建议输入主机的IP地址.


cache_mgr定义设置squid管理员的d E-mail地址,当访问发生错误时,该选项会显示在页面上.


reply_body_max_size缓存目录大小


cache_effective_user squid         设定使用缓存的有效用户.(系统默认)


cache_effective_group squid       设定使用缓存的有效用户组(系统默认)




acl访问控制:

列表类型:

src IP                源IP地址(客户机的IP地址).

dst IP                目标地址(服务的器IP地址).

scrdomain             源名称  (客户机所属的域).

dstdomain             目标名称(服务器所属的域).

url_regex             URL规则的表达式

urlpath_regex:        URL-path  略去协议和主机名的URL规则表达式匹配.

proxy_auth            通过外部程序进行用户认证.

maxconn               单一IP最大连接数.

time                  语法:[星期][时间段]

                     Monday-M;Tuesday-T ... Sunday-S

例子:

# 禁止地址或者网段(修改掩码可以设置网段,修改dst或src实现目的或源)

acl dropip src 192.168.5.110/32

http_access deny dropip

# 禁止源地址 /etc/squid/clist 列表

acl clist src "/etc/squid/clist"

http_access deny clist

# 禁止用户访问新浪域名

acl dropurl dstdomain www.sina.com.cn

http_access deny dropurl

# 禁止访问域名包含sina.com的网站(-i 忽略大小写)

acl dropurl1 url_regex -i sina.com

http_access deny dropurl1

# 限制IP地址为192.168.5.200客户机并发最大连接数为5

acl clientip src 192.168.5.200

acl conn5 maxconn 5

http_access deny clientip1 conn5

# 禁止192.168.5.0这个网段在周一至周五的9:00至15:00上网

acl clientnet src 192.168.5.0/24

acl worktime tiem MTWHF 9:00-15:00

http_access deny clientnet worktime

# 禁止下载MP3 exe rar为后辍名的文件

acl download urlpath_regex -i \.MP3$ \.exe$ \.rar$

http_access deny download






博主所用的生产环境下的squid.conf


cache_mem 2048 MB

dns_nameservers DNS1-name DNS2-name

visible_hostname  proxy ##主机名

maximum_object_size  2048 KB

maximum_object_size_in_memory 256 KB

cache_mgr [email protected]        ##管理员

logfile_rotate 10

cache_swap_high 90

cache_swap_low 88

acl manager proto cache_object

acl localhost src 10.2.16.1/32 10.2.17.1/32 10.2.18.1/32 10.2.19.1/32 公网ip/32

acl localnet src 10.2.16.0/24

acl localnet src 10.2.17.0/24

acl localnet src 10.2.18.0/24

acl localnet src 10.2.19.0/24

acl worktime time MTWHF 9:30-11:30 13:30-17:30

acl gouwu dstdomain -i "/etc/squid/gouwu.txt"     #所禁止的域名列表,竖排排列,一个域名一行的格式

http_access deny  gouwu worktime

http_access allow manager localhost

http_access allow localnet

acl SSL_ports port 443

acl Safe_ports port 80# http

acl Safe_ports port 21# ftp

acl Safe_ports port 443# https

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

http_access deny !Safe_ports

acl CONNECT method CONNECT

http_access deny CONNECT !SSL_ports

http_access deny all

http_port 10.2.16.1:3128 transparent#设置网关及透明代理

http_port 10.2.17.1:3128 transparent

http_port 10.2.18.1:3128 transparent

http_port 10.2.19.1:3128 transparent

hierarchy_stoplist cgi-bin ?

access_log /usr/local/squid/var/logs/access.log 

cache_log /usr/local/squid/var/logs/cache.log

cache_store_log /usr/local/squid/var/logs/store.log

cache_dir ufs  /var/squid/cache/  2048 16 256

coredump_dir /usr/local/squid/var/cache

refresh_pattern ^ftp:144020%10080

refresh_pattern ^gopher:14400%1440

refresh_pattern -i (/cgi-bin/|\?)00%0

refresh_pattern .020%4320




配置完成后


创建子目录

squid -z

赋权

chown  -R nobody.nobody /usr/local/squid/var


检查语法

squid -k parse 不提示任何信息则为成功


squid -DNdl

2014/03/29 15:34:16| Starting Squid Cache version 3.0.STABLE26 for x86_64-unknown-linux-gnu...

最后停留在一行不动,则表示可以启动

用Ctrl+c终止


现在可以启动Squid了

squid -s



二.设置iptables脚本


INSIDENET=10.2.16.0/24,10.2.17.0/24,10.2.18.0/24,10.2.19.0/24     

OUTSIDENET=公网ip/255.255.255.240

INSIDE=10.2.16.1,10.2.17.1,10.2.18.1,10.2.19.1

OUTSIDE=公网Ip

INCARD=eth1

OUTCARD=eth0

iptables -t nat -F;

iptables -t filter -F;

echo 1 > /proc/sys/net/ipv4/ip_forward;

iptables -t filter -P INPUT DROP;

iptables -t filter -P OUTPUT ACCEPT;

iptables -t filter -P FORWARD DROP;

iptables -t filter -A FORWARD -s $INSIDENET -j ACCEPT;

iptables -t filter -A FORWARD -s $INSIDENET -d $OUTSIDENET -p all -j ACCEPT;

iptables -t filter -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT;

iptables -t nat -A PREROUTING -m state --state ESTABLISHED,RELATED -j ACCEPT;

iptables -t filter -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT;

iptables -t filter -A INPUT  -m state --state ESTABLISHED,RELATED -j ACCEPT;


#开放控制策略

iptables -t nat -A PREROUTING -m mac --mac-source D0:67:E5:1D:6D:B7 -p tcp --dport 80 -j ACCEPT;


iptables -t filter -A INPUT  -p tcp --dport 22 -j ACCEPT;


iptables -t filter -A INPUT -s $INSIDENET -p tcp -m multiport --dport 3128 -j ACCEPT;


iptables -t filter -A INPUT -p icmp --icmp-type echo-request  -m limit --limit 1/s --limit-burst 10 -j ACCEPT;

iptables -t filter -A INPUT -p tcp -m tcp --tcp-flags SYN,RST,ACK SYN -m limit --limit 20/sec --limit-burst 200 -j ACCEPT;


iptables -t filter -A INPUT -i lo -j ACCEPT;

iptables -t filter -A OUTPUT -o lo -j ACCEPT;


#配置SNAT转发给SQUID

iptables -t nat -A POSTROUTING -s $INSIDENET -o eth0 -j SNAT --to-source $OUTSIDE;

iptables -t nat -A PREROUTING -s $INSIDENET -p tcp --dport 80 -j REDIRECT --to-ports 3128;


执行Iptalbes之后,所有80端口都归squid管控,至此启动成功


#############################所有配置完成!!#########################


你可能感兴趣的:(源代码,local,iptables,share)