3/08/2554

การทำ Transparent Proxy

การทำ Transparent Proxy ในกรณีที่ Gateway กับ Squid อยู่คนละเครื่องกัน
พอดีนั่งทำ Server ให้อยู่ที่หนึ่ง ไอ้เจ้าเครื่องจะให้ทำ Gateway เนี่ยมี Harddisk อยู่แค่ 1.2 GB เอาละสิ ถ้าลง Squid ไปด้วยนี่ Harddisk คงเต็มภายใน 1 อาทิตย์แหงๆ
พวกอยากให้ทำ transparent proxy ด้วย เลยตัดสินใจติดตั้ง squid ที่เครื่องที่เป็น File Server,Web Server ซึ่งเป็น Intranet Server
สั่ง apt-get install squid เสร็จก็แก้ /etc/squid/squid.conf ดังนี้ครับ

http_port 3128
# icp_port 3130
acl QUERY urlpath_regex cgi-bin \?
no_cache deny QUERY
cache_mem 128 MB
cache_dir ufs /var/spool/squid 1500 16 256
refresh_pattern ^ftp: 1440 20% 10080
refresh_pattern ^gopher: 1440 0% 1440
refresh_pattern . 0 20% 4320
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 # https, snews
acl SSL_ports port 873 # rsync
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 Safe_ports port 631 # cups
acl Safe_ports port 873 # rsync
acl Safe_ports port 901 # SWAT
acl purge method PURGE
acl CONNECT method CONNECT
acl allowall src "/etc/squid/allow.ip"
acl sex_domain dstdomain "/etc/squid/sex.domain"
acl sex_url dstdom_regex "/etc/squid/sex.url"
acl sex_word dstdom_regex "/etc/squid/sex.word"
acl sex_ip dst "/etc/squid/sex.ip"
acl sex_w url_regex "/etc/squid/sex.urly"
acl daytime time 08:00-16:30 MTWHFAS
acl mynetwork src 192.168.16.0/255.255.252.0
acl download urlpath_regex \.exe$ \.EXE$ \.zip$ \.ZIP$ \.rar$ \.RAR$ \.mp3$ \.MP3$ \.mov$ \.MOV$ \.mpg$ \.MPG$ \.mpeg$ \.MPEG$ \.avi$ \.iso$ \.AVI$ \.wma$ \.WMA$
http_access allow manager localhost
http_access deny manager
http_access allow purge localhost
http_access deny purge
http_access deny !Safe_ports
http_access deny CONNECT !SSL_ports
http_access allow allowall
http_access deny download daytime
http_access deny sex_word
http_access deny sex_domain
http_access deny sex_ip
http_access deny sex_url
http_access deny sex_w
http_access allow mynetwork
http_access deny all
http_reply_access allow all
icp_access allow all
cache_effective_user proxy
cache_effective_group proxyhttpd_accel_host virtual
httpd_accel_port 80
httpd_accel_with_proxy on
httpd_accel_uses_host_header oncoredump_dir /var/spool/squid
ทำการบล็อกดาวน์โหลด เว็บโป๊ ตามความต้องการ รวมทั้งอนุญาติสำหรับพวกอภิสิทธิ์ชนยูสเซอร์บางท่าน ตามความประสงค์ อุๆ
ไอ้ ตัว Gateway นั้นการ์ด eth0 เป็น Public IP ส่วน eth1 เป็น Private IP มี ip เป็น 192.168.16.1 ส่วนเจ้า Squid Box ก็ 192.168.17.1

ก็ทำการสร้าง rules iptables ตามนี้ครับ
#!/bin/sh
/sbin/modprobe ip_conntrack_ftp
/sbin/modprobe ip_nat_ftp
echo 1 >/proc/sys/net/ipv4/ip_forward
iptables -F
iptables -t nat -F
.....
iptables -t nat -A POSTROUTING -s 192.168.16.0/22 -o eth0 -j MASQUERADE
# Transparent Proxy
iptables -t nat -A PREROUTING -i eth1 -s ! 192.168.17.1 -p tcp --dport 80 -j DNAT --to 192.168.17.1:3128
iptables -t nat -A POSTROUTING -o eth1 -s 192.168.16.0/22 -d 192.168.17.1 -j SNAT --to 192.168.16.1
iptables -A FORWARD -s 192.168.16.0/22 -d 192.168.17.1 -i eth1 -o eth1 -p tcp --dport 3128 -j ACCEPT
# Drop SSH Brute Force Attack
iptables -I INPUT -p tcp --dport 22 -i eth0 -m state --state NEW -m recent --set
iptables -I INPUT -p tcp --dport 22 -i eth0 -m state --state NEW -m recent --update --seconds 600 --hitcount 2 -j DROP
*** หมายเหตุ rules บางส่วนตัดออกไปละไว้ในฐานที่เข้าใจ เพื่อความปลอดภัยครับ :)
===================================================


การทำ Transparent Proxy

เป็นการบังคับให้เครื่องลูกต้องผ่าน Proxy Server โดยที่ไม่ต้องไป set proxy ที่ตัว Browser ทำโดยเพิ่มเข้าเข้าไปใน squid.conf ดังนี้
http_port 8080
httpd_accel_host virtual
httpd_accel_port 80
httpd_accel_with_proxy on
httpd_accel_uses_host_header on
ตอนที่เรา vi /etc/squid/squid.conf ให้พิมพ์ดังข้างล่างนี้ดังต่อไปนี้
http_port 8080
icp_port 3130
hierarchy_stoplist cgi-bin ?
acl QUERY urlpath_regex cgi-bin \?
no_cache deny QUERY
cache_mem 128 MB ;<==== แนะนำว่า เอา Ram/3
cache_replacement_policy heap GDSF
memory_replacement_policy heap GDSF
cache_dir diskd /cache 1000 16 256 ;<==== ที่เก็บ Cache
cache_store_log none
acl localnet src 192.168.1.0/255.255.255.0
acl localhost src 127.0.0.1/255.255.255.255
acl Safe_ports port 80 443 210 70 21 1025-65535
acl CONNECT method CONNECT
acl all src 0.0.0.0/0.0.0.0
http_access allow localnet
http_access allow localhost
http_access deny !Safe_ports
http_access deny CONNECT
http_access deny all
cache_mgr root
cache_effective_user squid
cache_effective_group squid
logfile_rotate 0
log_icp_queries off
cachemgr_passwd my-secret-pass all
buffered_logs on
httpd_accel_host virtual ;<=== สี่บรรทัดที่เพิ่มเข้ามาข้างล่างนี้
httpd_accel_port 80
httpd_accel_with_proxy on
httpd_accel_uses_host_header on
จากนั้นเพิ่ม iptables อีกบรรทัด ดังนี้
iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 8080

[root@one root]# /etc/init.d/iptables save
[root@one root]# /etc/init.d/iptables restart
Flushing all current rules and user defined chains: [ OK ]
Clearing all current rules and user defined chains: [ OK ]
Applying iptables firewall rules: [ OK ]
[ OK ]
[root@one root]#
สั่งให้ squid ทำงานโดย /etc/inet.d/squid restart
[root@one root]# /etc/init.d/squid restart
Stopping squid: . [ OK ]
Starting squid: [ OK ]
[root@one root]
เป็นการเสร็จสิ้นการทำ Transparent Proxy

0 ความคิดเห็น:

แสดงความคิดเห็น