চীন আইপসেট ব্যবহার করে ব্লক করে
আপনি নিজের আইপিটিবেলে কয়েক হাজার আইপি ঠিকানা ম্যানুয়ালি যুক্ত করতে পারবেন না এবং এটি স্বয়ংক্রিয়ভাবে করা একটি খারাপ ধারণা কারণ এটি প্রচুর সিপিইউ লোডের কারণ হতে পারে (অথবা আমি পড়েছি)। পরিবর্তে আমরা আইপসেটটি ব্যবহার করতে পারি যা এই ধরণের জিনিসটির জন্য ডিজাইন করা হয়েছে। আইপসেট আইপি ঠিকানার বড় তালিকা পরিচালনা করে; আপনি কেবল একটি তালিকা তৈরি করুন এবং তারপরে iptables কে কোনও নিয়মে সেই তালিকাটি ব্যবহার করতে বলুন।
বিঃদ্রঃ; আমি ধরে নিলাম যে নীচের সম্পূর্ণতা মূল হিসাবে সম্পন্ন হয়েছে। আপনার সিস্টেমটি সুডোর উপর ভিত্তি করে থাকলে সেই অনুযায়ী সামঞ্জস্য করুন।
apt-get install ipset
এরপরে, আমি সমস্ত কাজ করার জন্য একটি ছোট বাশ স্ক্রিপ্ট লিখেছিলাম, যা আপনার এতে থাকা মন্তব্যগুলি থেকে বুঝতে সক্ষম হওয়া উচিত। একটি ফাইল তৈরি করুন:
nano /etc/block-china.sh
আপনি এতে কী আটক করতে চান তা এখানে:
# Create the ipset list
ipset -N china hash:net
# remove any old list that might exist from previous runs of this script
rm cn.zone
# Pull the latest IP set for China
wget -P . http://www.ipdeny.com/ipblocks/data/countries/cn.zone
# Add each IP address from the downloaded list into the ipset 'china'
for i in $(cat /etc/cn.zone ); do ipset -A china $i; done
# Restore iptables
/sbin/iptables-restore < /etc/iptables.firewall.rules
ফাইলটি সংরক্ষণ করুন। এটি সম্পাদনযোগ্য করুন:
chmod +x /etc/block-china.sh
এটি এখনও কিছু করেনি, তবে স্ক্রিপ্টটি চালালে এটি এক মিনিটের মধ্যেই ঘটবে। প্রথমত, আমাদের আইপটিবেলে একটি বিধি যুক্ত করতে হবে যা উপরের স্ক্রিপ্টটি সংজ্ঞায়িত করে এই নতুন আইপসেটের তালিকাটিকে বোঝায়:
nano /etc/iptables.firewall.rules
নিম্নলিখিত লাইন যুক্ত করুন:
-A INPUT -p tcp -m set --match-set china src -j DROP
ফাইলটি সংরক্ষণ করুন। পরিষ্কার হয়ে উঠতে, আমার সম্পূর্ণ আইপটিবলস.ফায়ারওয়াল.আরুলস এখন দেখতে দেখতে এটি:
*filter
# Allow all loopback (lo0) traffic and drop all traffic to 127/8 that doesn't use lo0
-A INPUT -i lo -j ACCEPT
-A INPUT -d 127.0.0.0/8 -j REJECT
# Accept all established inbound connections
-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
# Block anything from China
# These rules are pulled from ipset's china list
# The source file is at /etc/cn.zone (which in turn is generated by a shell script at /etc/block-china.sh )
-A INPUT -p tcp -m set --match-set china src -j DROP
# Allow all outbound traffic - you can modify this to only allow certain traffic
-A OUTPUT -j ACCEPT
# Allow HTTP and HTTPS connections from anywhere (the normal ports for websites and SSL).
-A INPUT -p tcp --dport 80 -j ACCEPT
-A INPUT -p tcp --dport 443 -j ACCEPT
# Allow SSH connections
#
# The -dport number should be the same port number you set in sshd_config
#
-A INPUT -p tcp -m state --state NEW --dport 22 -j ACCEPT
# Allow ping
-A INPUT -p icmp -j ACCEPT
# Log iptables denied calls
-A INPUT -m limit --limit 5/min -j LOG --log-prefix "iptables denied: " --log-level 7
# Drop all other inbound - default deny unless explicitly allowed policy
-A INPUT -j DROP
-A FORWARD -j DROP
COMMIT
এখনই সার্ভারের সাথে কিছুই পরিবর্তন হয়নি কারণ কোনও নতুন বিধি প্রয়োগ করা হয়নি; এটি করতে, block-china.sh স্ক্রিপ্টটি চালান:
/etc/block-china.sh
এটি কিছুটা আউটপুট দেখায় কারণ এটি চীনা ভিত্তিক আইপিগুলির একটি নতুন তালিকাটি টানছে এবং তারপরে, কয়েক সেকেন্ড বা তার পরে, এটি আপনাকে সম্পূর্ণ করে একটি কমান্ড প্রম্পটে ফিরিয়ে দেবে।
এটি কাজ করে কিনা তা পরীক্ষা করতে, চালান:
iptables -L
আপনার এখন চীনকে ব্লক করা একটি নতুন নিয়ম দেখতে পাওয়া উচিত - আউটপুটটি দেখতে এইরকম হওয়া উচিত:
Chain INPUT (policy ACCEPT)
target prot opt source destination
ACCEPT all -- anywhere anywhere
REJECT all -- anywhere loopback/8 reject-with icmp-port-unreachable
ACCEPT all -- anywhere anywhere state RELATED,ESTABLISHED
DROP tcp -- anywhere anywhere match-set china src
ACCEPT tcp -- anywhere anywhere tcp dpt:http
ACCEPT tcp -- anywhere anywhere tcp dpt:https
ACCEPT tcp -- anywhere anywhere state NEW tcp dpt:ssh
ACCEPT icmp -- anywhere anywhere
LOG all -- anywhere anywhere limit: avg 5/min burst 5 LOG level debug prefix "iptables denied: "
DROP all -- anywhere anywhere
Chain FORWARD (policy ACCEPT)
target prot opt source destination
DROP all -- anywhere anywhere
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
ACCEPT all -- anywhere anywhere
প্রায় শেষ! এটি কাজ করে এবং পুনরায় বুটের কাজ চালিয়ে যাবে। তবে, আইপি ঠিকানাগুলি পরিবর্তিত হয় এবং সেই তালিকা সময়ের সাথে সাথে বাসি বাড়বে grow আপনি যদি আইপিগুলির একটি আপডেট তালিকা টানতে এবং প্রয়োগ করতে চান তবে আপনি আবার block-china.sh স্ক্রিপ্টটি চালাতে পারবেন।
ক্রোন কাজের মাধ্যমে স্বয়ংক্রিয়ভাবে এটি করার জন্য আমরা মেশিনটিকে সেট করতে পারি:
crontab -e
এর মতো একটি লাইন যুক্ত করুন:
* 5 * * * /etc/block-china.sh
এটি প্রতিদিন / সকাল 5 টায় /etc/ block-china.sh চলবে। স্ক্রিপ্টটি ব্যবহারকারী ব্যবহারকারীর রুট হওয়া বা মূল অধিকার থাকা দরকার।
সূত্র