การทำ 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
ทำการบล็อกดาวน์โหลด เว็บโป๊ ตามความต้องการ รวมทั้งอนุญาติสำหรับพวกอภิสิทธิ์ชนยูสเซอร์บางท่าน ตามความประสงค์ อุๆ# 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
/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# 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
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 ความคิดเห็น:
แสดงความคิดเห็น