linux+squid+iptables企業方案

fudaliang1999發表於2014-01-09
linux+squid+iptables企業方案 2008-08-18 17:18:15
01、允許部分人可以訪問Internet,但是不能下載;
02、允許部分人可以下載;
03、允許部分人完全沒有限制;
04、允許全體人員在固定時間,有部分限制,不在此時間之內,撤除限制;
05、不允許下載的特定url字元:exe/zip等等;
06、不允許訪問特定的站點;
07、透明代理與使用者認證共存;
08、允許部分人員只能瀏覽指定網站;
09、只允許收發郵件(所有域名郵件(smtp,pop3))和只能收某域名收發某域名郵件;
10、IP/MAC繫結使用者名稱認證上網;
11、三種認證方式(mysql,samba,ncsa);
  首先本人認為01 是不可能實現的,而11我又不會SQL和SAMBA認證只會基本認證,除此之外其餘均能實現
假設子網192.168.1.0/24,某個域名為

透過PING 的其IP為202.108.36.196,透過其IP限制收發該域名郵件(可在iptables中實現)
外網網路卡為eth0內網網路卡為eht1,為eth1繫結192.168.1.201和192.168.0.201
cp eth1 eth1:1
修改eht1:1
沒有限制的使用者為192.168.0.201以後的IP用MAC標誌
由於AS3沒有安裝GCC而本身的SQUID裡又沒有NCSA檔案,固重新安裝GCC和SQUID,
tar zxvf squid-2.5.STABLE7.tar.gz
cd squid-2.5.STABLE7
./configure --prefix=/usr/local/squid
--sysconfdir=/etc/squid #配置檔案位置
--enable-arp-acl #客戶端的MAC地址進行管理
--enable-linux-netfilter #允許使用Linux的透明功能
--enable-pthreads
--enable-err-language="Simplify_Chinese"
--enable-default-err-language="Simplify_Chinese"
#上面兩個選項告訴Squid編入並使用簡體中文錯誤資訊
--enable-storeio=ufs,null #可以不用緩衝
--enable-auth="basic" #認證方式
--enable-baisc-auth-helpers="NCSA" #認證程式為
--enable-underscore #允許解析的URL中出現下劃線
make
make install
開始配置squid.conf
######################################################################
# 伺服器配置
icp_port 0
cache_store_log none
cache_access_log /dev/null
cache_log /dev/null
http_port 3128
cache_mem 128 MB
cache_dir null /tmp
pid_filename none
client_netmask 255.255.255.255
half_closed_clients on
#使用者分類
auth_param basic program /usr/bin/ncsa_auth /usr/etc/passwd
auth_param basic children 5
auth_param basic realm Tianfuming proxy-caching server
auth_param basic credentialsttl 2 hours
acl normal proxy_auth REQUIDE #使用者認證
acl advance arp 00:01:02:1f:2c:3e 00:01:02:3c:1a:8b ... #10 IP/MAC繫結使用者名稱認證上網;
acl lana src 192.168.1.0/24
acl lanb src 192.168.0.1-192.168.0.200/32
#行為分類
acl download urlpath_regex -i \.mp3$ \.exe$ \.avi$ \.rar$ \.rvmb$ \.jpg #禁止下載
#acl conncount maxconn 5 #最大連線數
acl worktime MTWHF 8:00-18:00 # 04、允許全體人員在固定時間,有部分限制,
#不在此時間之內,撤除限制(在http_access中限制)
acl qq dstdomain .snnu.edu.cn
acl badwords url_regex sex
acl localhost src 127.0.0.1/32
acl all src 0.0.0.0/0.0.0.0
http_access allow advance # 03 允許部分人完全沒有限制;
http_access allow localhost
#http_access deny conncount normal
http_access deny !
http_access deny badwords worktime # 不允許訪問特定url字元網站
http_access deny qq worktime # 06 不允許訪問特定的站點
http_access allow lana # 02 允許部分人可以下載
http_access deny download worktime # 05 不允許下載的特定url字元:exe/zip等等;
http_access allowd lanb homepage #08、允許部分人員只能瀏覽指定網站;
http_access allow normal
http_access deny all #除這些,禁止所有
#結合透明代理 07、透明代理與使用者認證共存
httpd_accel_host virtual
httpd_accel_port 80
httpd_accel_with_proxy on
httpd_accel_uses_host_header on
#####################################################################
iptables指令碼
#####################################################################
#! /bin/sh
UPLINK="eth0"
UPIP="a.b.c.d"
LANLINK="eth1"
ROUTER="yes"
#NAT="UPIP/dynamic"
NAT="UPIP"
INTERFACES="lo eth0 eth1"
SERVICES="80 22 25 110 "
deny=""
case "$@" in
start)
echo -n "Starting firewall..."
modprobe ip_nat_ftp
modprobe ip_conntrack_ftp
iptables -P INPUT DROP
iptables -A INPUT -i ! ${UPLINK} -j ACCEPT
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD DROP
iptables -A FORWARD -p tcp -m multiport --dport 25 80 110 -j ACCEPT
iptables -A FORWARD -d !202.108.36.196 -p tcp -m multiport --dprot 25 110 -j DROP ##09、只允許收發郵件(所有域名郵件
iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT #(smtp,pop3))和只能收某域名收發某域名郵件
#iptables -P OUTPUT DROP
#enable public access to certain services
for x in ${SERVICES}
do
iptables -A INPUT -p tcp --dport ${x} -m state --state NEW -j ACCEPT
done
for y in ${deny}
do
iptables -A OUTPUT -p tcp --dport ${y} -j DROP
iptables -A OUTPUT -p udp --dport ${y} -j DROP
done
#enable system-log
#iptables -A INPUT -j LOG --log-prefix "bad input:"
iptables -A INPUT -p tcp -i ${UPLINK} -j REJECT --reject-with tcp-reset
#iptables -A INPUT -p udp -i ${UPLINK} -j REJECT --reject-with icmp-port-unreachable
#explicitly disable ECN
if [ -e /proc/sys/net/ipv4/tcp_ecn ]
then
echo 0 > /proc/sys/net/ipv4/tcp_ecn
fi
#disable spoofing on all interfaces
for x in ${INTERFACES}
do
echo 1 > /proc/sys/net/ipv4/conf/${x}/rp_filter
done
if [ "$ROUTER" = "yes" ]
then
#we're a router of some kind, enable IP forwarding
echo 1 > /proc/sys/net/ipv4/ip_forward
if [ "$NAT" = "dynamic" ]
then
#dynamic IP address, use masquerading
iptables -t nat -A POSTROUTING -o ${UPLINK} -j MASQUERADE
elif [ "$NAT" != "" ]
then
#static IP, use SNAT
iptables -t nat -A PREROUTING -i ${LANLINK} -d ! ${UPIP} -j DNAT --to-ports 3128
iptables -t nat -A POSTROUTING -o ${UPLINK} -j SNAT --to ${UPIP}
fi
fi
echo "OK!"
exit 0
;;
stop)
echo -n "Stopping firewall..."
iptables -F INPUT
iptables -P INPUT ACCEPT
iptables -F OUTPUT
iptables -P OUTPUT ACCEPT
#turn off NAT/masquerading, if any
#iptables -t nat -F POSTROUTING
echo "OK!"
exit 0
;;
restart)
$0 stop
$0 start
;;
show)
clear
echo ">------------------------------------------------------"
iptables -L
echo ">------------------------------------------------------"
iptables -t nat -L POSTROUTING
exit 0
;;
*)
echo "Usage: $0 {start|stop|restart|show}"
exit 1
esac

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/15711267/viewspace-1068865/,如需轉載,請註明出處,否則將追究法律責任。

相關文章