স্কুইড দিয়ে ট্রান্সপারেন্ট প্রক্সি তৈরী

আমরা বাসাবাড়ি বা অফিসে এখন প্রতিনিয়তই ইন্টারনেট ব্যবহার করে থাকি। এ ইন্টারনেট যখন একের অধিক মেশিনে ব্যবহার করতে চাই তখন কি একের অধিক কানেকশন নিতে হবে? নাকি একটি কানেকশনকেই আপনি একের অধিক মেশিনে নেটওয়ার্কের সাহায্যে ব্যবহার করতে পারবেন?

যদি আপনি একটি প্রক্সি সার্ভার তৈরী করে নিতে পারেন তবে আপনার ল্যানের আওতায় সকল মেশিনই এ প্রক্সি সার্ভার এর কানেকশনটিকে ব্যবহার করতে পারবে। অর্থাৎ একটি ইন্টারনেট কানেকশনই আপনার অফিস অথবা বাসার জন্য যথেষ্ট। কি চমৎকার সুবিধা তাই না? লিনাক্সে অনেক ধরনের প্রক্সি সার্ভার তৈরি করার প্রোগ্রাম আছে। স্কুইড তার মধ্যে অন্যতম।
যে মেশিন কে আপনি প্রক্সি সার্ভার হিসেবে সেটআপ করবেন তাতে কমপক্ষে দুটি ল্যান কার্ড লাগানো থাকতে হবে। আর যদি এজ/জিপিআরএস মডেম এর সাহায্যে সেট আপ করেন তবে একটি ল্যান কার্ড হলেই চলে। এ মডেম দিয়ে যখন ইন্টারনেট কানেকশন তৈরী হবে তখন এটি একটি নেটওয়ার্ক ইন্টারফেসের কাজ করবে। আপনার মেশিনে এ দুটি নেটওয়ার্ক ইন্টারফেসের মধ্যে একটি (eth0) নিশ্চয়ই আভ্যন্তরীন ব্যবহারের জন্য এবং আরেকটি (eth1) ইন্টারনেটের মাধ্যমে বহির্বিশ্বের সাথে যোগাযোগ করার জন্য।

এই গেটওয়ে মেশিনে অবশ্যই কিছু ফায়ারওয়্যাল নিয়ম দিতে হবে যেগুলি হচ্ছেঃ

• এ মেশিনের ব্যাক এন্ডে যত মেশিন আছে তাদেরকে আউটগোয়িং কানেকশন এর জন্য অনুমোদন দেওয়া থাকতে হবে
• ইন্টারনেট থেকে আগত কানেকশনগুলিকে অগ্রাহ্য করার অপশন দিতে হবে

আমরা এখন একটি প্রক্সি সার্ভার তৈরী করতে চাই যা ওয়েব পেজকে ক্যাশ করতে সাহায্য করবে। ক্যাশিং করা হচ্ছে এক ধরনের সাময়িকভাবে ওয়েব পেজকে সেভ করে রাখা। যদি প্রথমেই কেউ কোন ওয়েব সাইটে প্রবেশ করেন যেমন ধরুন প্রথম আলোর ওয়েব সাইট তাহলে প্রক্সি সার্ভার এটিকে তার ক্যাশ এ সংরক্ষন করবে ফলে পরবর্তীতে যিনি প্রথম আলোর ওয়েব সাইটে ব্রাউজ করবেন তিনি সরাসরি প্রক্সি সার্ভার থেকেই তার পেজটি পেতে পারবেন। তাই ওয়েব সাইট ব্রাউজিং স্পিড বহুগুনে বেড়ে যাবে। তাই আমরা দুটি কাজ করবঃ

• একটি ক্যাশিং প্রক্সি সার্ভার ইনস্টল করব
• কিছু নিয়ম স্থাপন করবো যাতে অন্যান্য মেশিন এটিকে গেটওয়ে হিসেবে কাজে লাগাতে পারে

প্রথমটি খুবই সোজা. রুট হিসেবে এজন্য কমান্ড দিনঃ

apt-get install squid

ফলে স্কুইড ক্যাশিং প্রক্সি সার্ভার ইনস্টল হবে।
/etc/squid/squid.conf ফাইলের মাধ্যমে এটিকে কনফিগার করা হয় এবং এখানে আমাদেরকে কিছু পরিবর্তন করতে হবে।

প্রথমেই আমরা এটিকে নির্দেশ দিব এটি যেন শুধু ইন্টারনাল ইন্টারফেসে অন্য মেশিনের রিকোয়েস্ট গ্রহন করে। আগেই বলা হয়েছে এই গেটওয়ে মেশিনে দুটি নেটওয়ার্কিং ইন্টারফেস কার্ড রয়েছে- একটি আভ্যন্তরীন ল্যান এর জন্য এবং আরেকটি ইন্টারনেট এর জন্য।

এখানে ইন্টারনাল ইন্টারফেস আমরা ব্যবহার করব এবং এটিকে নিচের মত করে কনফিগারেশন ফাইলে যোগ করবঃ

http_port 127.0.0.1:8080
http_port 192.168.1.1:8080


(আমার মেশিনের ক্ষেত্রে এর এ্যাড্রেস হচ্ছে 192.168.1.1, সার্ভার এর জন্য লুপব্যাক এ্যাড্রেস 127.0.0.1 কে ও অনুমতি দিয়ে রাখলে পরবর্তীতে বেশ কাজে লাগে। তাই আমরা এটিকেও এখানে অনুমতি দিয়ে রাখছি)

এখানে সার্ভারকে একইসাথে হোস্টনেম এবং ভুল প্রদর্শনের জন্য কোন ইমেইল এ্যাড্রেস ব্যবহৃত হবে তাও দিয়ে দেই।

visible_hostname gateway.my.flat
cache_mgr proxy@foo.com

নিচের কমান্ড/অপশনগুলি যোগ করলে এটি একটি ট্রান্সপারেন্ট প্রক্সি হিসেবে কাজ করতে পারবে যদিও এজন্য নিচে বর্নিত আরো কয়েকটি কমান্ড দিতে হবে। ট্রান্সপারেন্ট প্রক্সি হল যে প্রক্সি ব্রাউজারকে কোন কনফিগারেশন না করেই ব্যবহার করা যায়। যদি আপনি ট্রান্সপারেন্ট প্রক্সি না তৈরী করেন তাহলে আপনার প্রতিটি মেশিন এর ব্রাউজারের অপশনে প্রক্সি সার্ভার এর এড্রেস অর্থাৎ গেটওয়ে এবং তার পোর্ট নম্বর (৮০৮০ বা ৩১২৮ ইত্যাদি) উল্লেখ করে দিতে হবে।

httpd_accel_host virtual
httpd_accel_port 80
httpd_accel_with_proxy on
httpd_accel_uses_host_header on


সবশেষে, যে জিনিসটি বাকি তা হচ্ছে স্কুইড কোন কোন নেটওয়ার্কগুলিকে যুক্ত হওয়ার জন্য অনুমতি প্রদান করবে তার নির্দেশ প্রদান করা অন্যথায় সব ইনকামিং রিকোয়েস্টকে-ই সে প্রত্যাখান করবে।

192.168.1.x টাইপের এ্যাড্রেস সম্বলিত একটি নেটওয়ার্ক এর জন্য(যা আমার ক্ষেত্রে প্রযোজ্য) নিচের অপশনসমূহ সেট করিঃ

# INSERT YOUR OWN RULE(S) HERE TO ALLOW ACCESS FROM YOUR CLIENTS

# Example rule allowing access from your local networks. Adapt
# to list your (internal) IP networks from where browsing should
# be allowed

acl our_networks src 192.168.1.0/24
http_access allow our_networks
http_access allow localhost

# And finally deny all other access to this proxy
http_access deny all


যদি ভিন্ন ধরনের নেটওয়ার্ক ব্যবহার করে থাকেন তাহলে সেই এ্যাড্রেস মোতাবেক অপশনসমূহ সেট করতে হবে।
এ পর্যায়ে আমাদের স্কুইড প্রক্সি সার্ভার সেটআপ সম্পন্ন হল এবং রিস্টার্ট দিনঃ

/etc/init.d/squid restart

এটিই আমাদের ক্যাশিং প্রক্সি সার্ভার যার রিকোয়েস্ট রেসপন্স এর এ্যাড্রেস/সকেট হচ্ছে 192.168.1.1:8080. যদি ব্রাউজারে এ এ্যাড্রেস সেট করে দেয়া হয় তখন এটি কাজ করবে কিন্তু আমরা এটিকে এখন ট্রান্সপারেন্ট হিসেবে সেট করতে চাই।

যারা এ গেটওয়ের আওতায় থাকবেন তাদের কিছুই করার প্রয়োজন হবে না এবং জাদুর মত কাজ করবে।
এটিকে আমরা ফায়ারওয়ালে একটি নিয়ম হিসেবে সেট করে করতে পারি যেটি প্রক্সি সার্ভারের ভায়ার মাধ্যমে না গিয়ে (যা আমরা ইতিমধ্যে গেটওয়ে মেশিনে পোর্ট 8080-তে স্থাপন করেছি) ওয়েবে আউটগোয়িং রিকোয়েস্টসমুহকে (পোর্ট ৮০) রিডাইরেক্ট করবে ।

নিচের কমান্ডগুলিকে ফায়ারওয়্যালের নিয়মের সাথে যোগ করিঃ

# Transparent proxying
iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j REDIRECT --to-port
8080


উপরের কমান্ডটি সব ধরনের রিকোয়েস্ট যা পোর্ট 8080 জন্য টার্গেট করা হয়েছে তাকে নতুন স্কুইড ইনস্টলের পোর্ট 80 তে রিডাইরেক্ট করে থাকে।

ফায়ারওয়্যাল নতুন করে চালু করি।

স্কুইড চেক করার জন্য এর লগফাইল দেখতে হবে যখন অন্য মেশিন থেকে কোন ওয়েব ব্রাউজ করা হয়ঃ
গেটওয়ে মেশিন এ নিচের কমান্ডটি দিইঃ

tail -f /var/log/squid/access.log

আপনার ল্যান এর কোন মেশিন ইন্টারনেটে ব্রাউজ করার সময় লগ ফাইলে যদি নিচের মত আউটপুট দেখতে পান তাহলে এটি কাজ করছে বলে ধরে নিতে পারেনঃ

1104854410.086 159 192.168.1.50 TCP_MISS/302 469 GET http://www.google.com/ -
DIRECT/216.239.59.104 text/html
1104854410.217 128 192.168.1.50 TCP_MISS/200 1459 GET http://www.google.co.uk
/ - DIRECT/216.239.59.99 text/html
1104854410.397 180 192.168.1.50 TCP_MISS/200 9022 GET http://www.google.co.uk
/intl/en_uk/images/logo.gif - DIRECT/216.239.59.99 image/gif
1104854415.196 200 192.168.1.50 TCP_MISS/200 1459 GET http://www.google.co.uk
/ - DIRECT/216.239.59.99 text/html
1104854415.271 74 192.168.1.50 TCP_REFRESH_HIT/304 235 GET http://www.google
.co.uk/intl/en_uk/images/logo.gif - DIRECT/216.239.59.99 text/html

0 comments:

Post a Comment