আইপি নিষিদ্ধ করতে শেল স্ক্রিপ্ট


8

কিছু আইপি আমার সার্ভারের কয়েক হাজার সংযোগ খুলছে। আমার একটি উবুন্টু 14 সার্ভার রয়েছে। আমি নিম্নলিখিত কমান্ডটি ব্যবহার করে মোট সংযোগগুলি পরীক্ষা করেছি:

netstat -an | grep tcp | awk '{মুদ্রণ $ 5}' | কাট -ফ 1-ডি: | সাজানো | uniq -c | সাজান -n

তারপরে আমি অপরাধীর আইপি ব্লক করতে নিম্নলিখিত আইপটবেবল নিয়ম ব্যবহার করি।

iptables -I INPUT 1 -s xxxx -j DROP

এটি সমস্ত সূক্ষ্মভাবে কাজ করে এবং আইপি ঠিকানাটি ব্লক করে। তবে, সার্ভারটি নিরীক্ষণের জন্য আমি 24/7 অনলাইন থাকতে পারি না। আমি ভাবছিলাম যে কোনও শেল স্ক্রিপ্ট আমি এটি স্বয়ংক্রিয়ভাবে করতে ব্যবহার করতে পারি কিনা? উদাহরণস্বরূপ, যদি কোনও আইপি যে কোনও সময়ে এক্স সংখ্যার বেশি সংযোগ খোলে, তবে এটি উপরের iptables বিধি দ্বারা স্বয়ংক্রিয়ভাবে নিষিদ্ধ করা উচিত।


6
ব্যর্থতা আপনার প্রয়োজনীয়তা পূরণ করে কিনা তা আপনি দেখেছেন ?
1024

আমার সীমাবদ্ধ জ্ঞান ক্ষমা করুন। Ssh প্রমাণীকরণের জন্য ব্যর্থ 2ban নয়? আমি এটি 80 বন্দরটিতে ব্যবহারের বিষয়ে নিশ্চিত নই addition এছাড়াও, আমার সার্ভারটি একটি চ্যাট-সার্ভার, সুতরাং কোনও ব্যবহারকারী একাধিকবার সংযোগ / পিং করার চেষ্টা করতে পারে। এই ক্ষেত্রে, ব্যর্থ 2ban অনেকগুলি মিথ্যা-ইতিবাচক অ্যালার্ম তৈরি করবে এবং বৈধ ট্র্যাফিক নিষিদ্ধ করবে। কোন চিন্তা?
ব্যবহারকারী3404047

উত্তর:


10

প্রথমত, চাকাটি পুনরায় উদ্ভাবন করবেন না। এটাই denyhostsহ'ল ঠিক কী জন্য:

   DenyHosts  is a python program that automatically blocks ssh attacks by
   adding entries to /etc/hosts.deny.  DenyHosts will  also  inform  Linux
   administrators  about  offending  hosts,  attacked users and suspicious
   logins.

যতদূর আমি জানি, denyhostsকেবল sshসংযোগের জন্য তবে fail2banএটির সাথে আরও অনেক কিছু রয়েছে:

   Fail2Ban consists of a client, server and configuration files to  limit
   brute force authentication attempts.

   The  server  program  fail2ban-server is responsible for monitoring log
   files and issuing ban/unban commands.  It  gets  configured  through  a
   simple  protocol  by fail2ban-client, which can also read configuration
   files and issue corresponding configuration commands to the server.

উভয়ই সংগ্রহস্থলগুলিতে পাওয়া যায়:

sudo apt-get install denyhosts fail2ban

আপনি চাইলে এটিও স্ক্রিপ্ট করতে পারতেন। কিছুটা এইরকম:

#!/usr/bin/env sh
netstat -an | 
    awk -vmax=100 '/tcp/{split($5,a,":"); if(a[1] > 0 && a[1]!="0.0.0.0"){c[a[1]]++}}
    END{for(ip in c){if(c[ip]>max){print ip}}}' |
        while read ip; do iptables -I INPUT 1 -s "$ip" -j DROP; done

awkআইপিগুলি উত্থিত করব এবং তাদেরকে গণনা এবং শুধুমাত্র যে বেশী প্রদর্শিত ঐ প্রিন্ট maxবার (এখানে -vmax=100, এটা সেই অনুযায়ী পরিবর্তন)। এরপরে আইপিগুলিকে কিছুক্ষণ লুপ দেওয়া হয় যা প্রাসঙ্গিক iptablesনিয়ম চালায় ।

এটি 24/7 চালানোর জন্য, আমি এমন একটি ক্রোনজব তৈরি করব যা প্রতি মিনিট বা তারও বেশি সময় ধরে কমান্ডটি চালায়। এই লাইনটি যুক্ত করুন/etc/crontab

* * * * * root /path/to/script.sh

একটি নির্ভুল উত্তরের জন্য ধন্যবাদ টেরডন। আফাইক, ব্যর্থ 2ban ssh অনুমোদনের জন্য। সমস্ত সংযোগ 80 পোর্টে খোলা হচ্ছে 80 80 বন্দরে আমি ব্যর্থ 2 ব্যাবহার করতে পারি কিনা তা আমি আবিষ্কার করব the স্ক্রিন কমান্ড? নাকি ক্রোন ইনস্টল করবেন? BTW। আমি চ্যাট-সার্ভার হিসাবে সার্ভারটি ব্যবহার করছি যাতে কোনও ব্যক্তি বহুবার পিং করতে পারে (বা একাধিক সংযোগ খুলতে পারে) তাই আপনার সরবরাহিত কাস্টম স্ক্রিপ্টের জন্য আমি যেতে পারি।
ব্যবহারকারী3404047

2
@ user3404047 আপনি এটি ক্রোনজব হিসাবে চালাতে পারেন, হ্যাঁ। আপডেট উত্তর দেখুন। তবে, fail2banশুধুমাত্র ssh এর জন্য নয়। এছাড়া জরিমানা বন্দর 80. দেখুন উদাহরণস্বরূপ জন্য কাজ করে, এখানে , এখানে এবং এখানে
টেরডন

1

একটি সম্ভাব্য বিকল্প বিকল্প হ'ল recentমডিউলটি ব্যবহার করে iptables নিয়মের মধ্যে থাকা সমস্ত আইপি ঠিকানার মধ্যে সমস্যা চিহ্নিতকরণ এবং তার সাথে ডিল করা । এই পদ্ধতির সাথে চ্যালেঞ্জটি হ'ল ডিফল্ট হিটকাউন্টের সীমা 20, সুতরাং উচ্চতর হিটকাউন্ট ট্রিগার পয়েন্ট অর্জনের জন্য কাউকে ডিফল্ট থেকে বিচ্যুত হওয়া বা উচ্চ স্তরের ক্যারি কাউন্টার তৈরি করতে হবে।

নীচের উদাহরণটি আমার আইপেটেবল নিয়ম সেট থেকে পাওয়া যায় এবং 12 মিনিটেরও কম সময়ে 80 টি বন্দরে 80 টিসিপি সংযোগ স্থাপন করে যদি এটি আইপি ঠিকানাকে 1 দিনেরও বেশি সময় নিষিদ্ধ করে। খারাপ লোকের তালিকায় একবার সংযোগ স্থাপনের যে কোনও প্রয়াস 1 দিনের কাউন্টারে 0 পুনরায় সেট করবে। এই পদ্ধতিটি অন্য ক্যারিতে সম্প্রসারণের আগে সর্বোচ্চ 400 টি হিটতে যেতে পারে (এবং আমি অন্য একটি ক্যারি চেইন পরীক্ষা করেছি)। নোট করুন যে পোস্ট করা কোডটিতে একাধিক সংক্ষিপ্ত সময়ের ট্রিগারগুলির উপর দীর্ঘ সময়ের জন্য নিষিদ্ধ করার জন্য অবকাঠামো রয়েছে। বর্তমানে, আমি এটি প্রথম ট্রিগারটির পরে কেবল দীর্ঘ সময়ের জন্য নিষিদ্ধ করার সিদ্ধান্ত নিয়েছি।

#######################################################################
# USER DEFINED CHAIN SUBROUTINES:
#
# http-new-in4
#
# A NEW Connection on port 80 part 4.
#
# multiple hits on the banned list means you get a one day ban.
# (I re-load the firewall rule set often, so going longer makes
# little sense.)
#
# Custom tables must exist before being referenced, hence the order
# of these sub-toutines.
#
# Place holder routine, but tested. Logs if a day ban would have
# been activated.
#
$IPTABLES -N http-new-in4
#$IPTABLES -A http-new-in4 -m recent --set --name HTTP_BAN_DAY

$IPTABLES -A http-new-in4 -j LOG --log-prefix "DAY80:" --log-level info
$IPTABLES -A http-new-in4 -j DROP

#######################################################################
# USER DEFINED CHAIN SUBROUTINES:
#
# http-new-in3
#
# A NEW Connection on port 80 part 3.
#
# carry forward to the actual banned list:
# Increment this count. Leave the previous count.
#
# Custom tables must exist before being referenced, hence the order
# of these sub-toutines.
#
$IPTABLES -N http-new-in3
$IPTABLES -A http-new-in3 -m recent --remove --name HTTP_02
$IPTABLES -A http-new-in3 -m recent --update --hitcount 1 --seconds 86400 --name HTTP_BAN -j http-new-in4
$IPTABLES -A http-new-in3 -m recent --set --name HTTP_BAN

$IPTABLES -A http-new-in3 -j LOG --log-prefix "BAN80:" --log-level info
$IPTABLES -A http-new-in3 -j DROP

#######################################################################
# USER DEFINED CHAIN SUBROUTINES:
#
# http-new-in2
#
# A NEW Connection on port 80 part 2.
#
# carry forward from previous max new connections per unit time:
# Increment this count and clear the lesser significant count.
#
$IPTABLES -N http-new-in2
$IPTABLES -A http-new-in2 -m recent --remove --name HTTP_01
$IPTABLES -A http-new-in2 -m recent --update --hitcount 3 --seconds 720 --name HTTP_02 -j http-new-in3
$IPTABLES -A http-new-in2 -m recent --set --name HTTP_02

$IPTABLES -A http-new-in2 -j LOG --log-prefix "CARRY80:" --log-level info
$IPTABLES -A http-new-in2 -j ACCEPT

#######################################################################
# USER DEFINED CHAIN SUBROUTINES:
#
# http-new-in
#
# A NEW Connection on port 80:
#
$IPTABLES -N http-new-in

echo Allowing EXTERNAL access to the WWW server

# . check the static blacklist.
#
# http related
$IPTABLES -A http-new-in -i $EXTIF -s 5.248.83.0/24 -j DROP
... delete a bunch on entries ...
$IPTABLES -A http-new-in -i $EXTIF -s 195.211.152.0/22 -j DROP
$IPTABLES -A http-new-in -i $EXTIF -s 198.27.126.38 -j DROP

# . check the dynamic banned list
#
# The 1 Hour banned list (bumped to more than a day):
$IPTABLES -A http-new-in -m recent --update --seconds 90000 --name HTTP_BAN --rsource -j LOG --log-prefix "LIM80:" --log-level info
$IPTABLES -A http-new-in -m recent --update --seconds 90000 --name HTTP_BAN --rsource -j DROP

# A generic log entry. Usually only during degugging
#
#$IPTABLES -A http-new-in -j LOG --log-prefix "NEW80ALL:" --log-level info

# Dynamic Badguy List. Least significant hit counter.  Detect and DROP Bad IPs that do excessive connections to port 80.
#
$IPTABLES -A http-new-in -m recent --update --hitcount 20 --seconds 240 --name HTTP_01 -j http-new-in2
$IPTABLES -A http-new-in -m recent --set --name HTTP_01

$IPTABLES -A http-new-in -j LOG --log-prefix "NEW80:" --log-level info
$IPTABLES -A http-new-in -j ACCEPT

... a bunch of stuff not included here

# Allow any related traffic coming back to the server in.
#
#
$IPTABLES -A INPUT -i $EXTIF -s $UNIVERSE -d $EXTIP -m state --state ESTABLISHED,RELATED -j ACCEPT

... the above is needed before the below ...

# If required, go to NEW HTTP connection sub-routine
#
$IPTABLES -A INPUT -i $EXTIF -m state --state NEW -p tcp -s $UNIVERSE -d $EXTIP --dport 80 -j http-new-in
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.