9 พ.ย. 2552

Transparent squid proxy server with 1 Nic.

Transparent proxy with 1 Nic.

เนื่องจากผมมีแลนการ์ด 1 ใบ ผมจำเป้นต้องสร้าง virtual ethernet เพราะจะได้มี ip 2 ชุด

ผมใช้ Ubuntu 8.0.4
squid 2.6
eth0 ต่อ internet
แก้ไข


#pico /etc/network/interfaces

# The primary network interface
auto eth0
#iface eth0 inet dhcp
iface eth0 inet static
name Ethernet internet
address 192.168.0.18
netmask 255.255.255.0
broadcast 192.168.0.255
gateway 192.168.0.1

auto eth0:0
iface eth0:0 inet static
name Ethernet alias LAN card
address 192.168.1.1
netmask 255.255.255.0
broadcast 192.168.1.255
network 192.168.1.0

------ตัวอย่าง ifconfig -------------

eth0 Link encap:Ethernet HWaddr XX:XX:XX:XX:XX:XX
inet addr:192.168.0.18 Bcast:192.168.0.255 Mask:255.255.255.0
inet6 addr: XX:XX:XX:XX:XX:XX/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:196645 errors:0 dropped:0 overruns:0 frame:0
TX packets:172811 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:50390423 (48.0 MB) TX bytes:49882326 (47.5 MB)

eth0:0 Link encap:Ethernet HWaddr XX:XX:XX:XX:XX:XX
inet addr:192.168.1.1 Bcast:192.168.1.255 Mask:255.255.255.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1

-----------------------------------

เริ่มติดตั้ง squid
apt-get install squid

แก้ไข config
pico /etc/squid/squid.conf

add # http_port 3128
add acl our_networks src 192.168.1.0/24

add http_port 3128 transparent
add icp_port 3130

add http_access allow our_networks


สร้างไพล์ pico /etc/fw.proxy แล้วเพิ่มข้อความตามข้างล่างนี้
---------------------

#!/bin/sh

# Squid server IP
SQUID_SERVER="192.168.1.1"

# Interface connected to Internet
INTERNET="eth0"

# Address connected to LAN
LOCAL="192.168.1.0/24"

# Squid port
SQUID_PORT="3128"

# Clean old firewall
iptables -F
iptables -X
iptables -t nat -F
iptables -t nat -X
iptables -t mangle -F
iptables -t mangle -X

# Enable Forwarding
echo 1 > /proc/sys/net/ipv4/ip_forward

# Setting default filter policy
iptables -P INPUT DROP
iptables -P OUTPUT ACCEPT

# Unlimited access to loop back
iptables -A INPUT -i lo -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT

# Allow UDP, DNS and Passive FTP
iptables -A INPUT -i $INTERNET -m state --state ESTABLISHED,RELATED -j ACCEPT

# set this system as a router for Rest of LAN
iptables -t nat -A POSTROUTING -o $INTERNET -j MASQUERADE
iptables -A FORWARD -s $LOCAL -j ACCEPT

# unlimited access to LAN
iptables -A INPUT -s $LOCAL -j ACCEPT
iptables -A OUTPUT -s $LOCAL -j ACCEPT

# DNAT port 80 request comming from LAN systems to squid 3128 ($SQUID_PORT) aka transparent proxy
# DNAT port 80 request comming from LAN systems to squid 3128 ($SQUID_PORT) aka transparent proxy
iptables -t nat -A PREROUTING -s $LOCAL -p tcp --dport 80 -j DNAT --to $SQUID_SERVER:$SQUID_PORT

# if it is same system
iptables -t nat -A PREROUTING -i $INTERNET -p tcp --dport 80 -j REDIRECT --to-port $SQUID_PORT

# DROP everything and Log it
iptables -A INPUT -j LOG
iptables -A INPUT -j DROP

--------------------------
ตามด้วยคำสั่ง
# chmod +x /etc/fw.proxy
# /etc/fw.proxy
# /etc/init.d/squid restart

ถึงตรงนี้ สามารถใช้ proxy แบบ transparent ได้ แต่ไม่สามารถ ถอด ip ได้ เพราะ DNS ยังไม่ได้ทำงาน ต้องติดตั้ง bind ต่อไป...




อ้างอิงจาก http://teladan98.wordpress.com/2007/12/05/transparent-proxy-server-with-one-nic/
http://www.cyberciti.biz/tips/linux-setup-transparent-proxy-squid-howto.html
http://www.kawanchai.net/2008/doc/thai_manual_Ubuntu_server.rar

ไม่มีความคิดเห็น:

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