iptables টিপস এবং কৌশল [বন্ধ]


60

আমি নিশ্চিত লিনাক্স সিসাদমিনগুলি প্যাকেট-ফিল্টারিং কাঠামোর সাথে iptablesইউজারল্যান্ড ইন্টারফেসের সাথে বেশ পরিচিত netfilter

এখন, এই "প্রশ্ন" বলতে বিভিন্ন বিট-এন-টুকু জ্ঞানের একসাথে সংগ্রহ করার জন্য একটি সম্প্রদায়ের উইকি বোঝানো হয়েছে iptables। কিছুই খুব সাধারণ বা খুব অস্পষ্ট হয় না। আপনি জানেন এমন যে কোনও কিছু পোস্ট করুন যা অন্যকে সর্বাধিক সাহায্য করতে সহায়তা করবে iptables

উত্তর:


26

Iptables সহ শ্বেত তালিকা এবং কালো তালিকাভুক্ত ব্যবহার Using

#!/bin/bash

WHITELIST=/whitelist.txt
BLACKLIST=/blacklist.txt

#THIS WILL CLEAR ALL EXISTING RULES!
echo 'Clearing all rules'
iptables -F

#
## Whitelist
#

for x in `grep -v ^# $WHITELIST | awk '{print $1}'`; do
        echo "Permitting $x..."
        $IPTABLES -A INPUT -t filter -s $x -j ACCEPT
done

#
## Blacklist
#

for x in `grep -v ^# $BLACKLIST | awk '{print $1}'`; do
        echo "Denying $x..."
        $IPTABLES -A INPUT -t filter -s $x -j DROP
done

পোর্ট খোলার স্ক্রিপ্ট

#!/bin/bash
ALLOWEDTCP="80 3128 3784"
ALLOWEDUDP="3128 3784"

#
## Permitted Ports
#

for port in $ALLOWEDTCP; do
       echo "Accepting port TCP $port..."
       $IPTABLES -A INPUT -t filter -p tcp --dport $port -j ACCEPT
done

for port in $ALLOWEDUDP; do
        echo "Accepting port UDP $port..."
        $IPTABLES -A INPUT -t filter -p udp --dport $port -j ACCEPT
done

পোর্টস্ক্যান ব্লক করা হচ্ছে

# Attempt to block portscans
# Anyone who tried to portscan us is locked out for an entire day.
iptables -A INPUT   -m recent --name portscan --rcheck --seconds 86400 -j DROP
iptables -A FORWARD -m recent --name portscan --rcheck --seconds 86400 -j DROP

# Once the day has passed, remove them from the portscan list
iptables -A INPUT   -m recent --name portscan --remove
iptables -A FORWARD -m recent --name portscan --remove

# These rules add scanners to the portscan list, and log the attempt.
iptables -A INPUT   -p tcp -m tcp --dport 139 -m recent --name portscan --set -j LOG --log-prefix "Portscan:"
iptables -A INPUT   -p tcp -m tcp --dport 139 -m recent --name portscan --set -j DROP

iptables -A FORWARD -p tcp -m tcp --dport 139 -m recent --name portscan --set -j LOG --log-prefix "Portscan:"
iptables -A FORWARD -p tcp -m tcp --dport 139 -m recent --name portscan --set -j DROP

স্পুফড / অবৈধ প্যাকেট

# Reject spoofed packets
# These adresses are mostly used for LAN's, so if these would come to a WAN-only server, drop them.
iptables -A INPUT -s 10.0.0.0/8 -j DROP
iptables -A INPUT -s 169.254.0.0/16 -j DROP
iptables -A INPUT -s 172.16.0.0/12 -j DROP
iptables -A INPUT -s 127.0.0.0/8 -j DROP

#Multicast-adresses.
iptables -A INPUT -s 224.0.0.0/4 -j DROP
iptables -A INPUT -d 224.0.0.0/4 -j DROP
iptables -A INPUT -s 240.0.0.0/5 -j DROP
iptables -A INPUT -d 240.0.0.0/5 -j DROP
iptables -A INPUT -s 0.0.0.0/8 -j DROP
iptables -A INPUT -d 0.0.0.0/8 -j DROP
iptables -A INPUT -d 239.255.255.0/24 -j DROP
iptables -A INPUT -d 255.255.255.255 -j DROP

# Drop all invalid packets
iptables -A INPUT -m state --state INVALID -j DROP
iptables -A FORWARD -m state --state INVALID -j DROP
iptables -A OUTPUT -m state --state INVALID -j DROP

ব্লক স্মুর আক্রমণ

# Stop smurf attacks
iptables -A INPUT -p icmp -m icmp --icmp-type address-mask-request -j DROP
iptables -A INPUT -p icmp -m icmp --icmp-type timestamp-request -j DROP
iptables -A INPUT -p icmp -m icmp -j DROP

# Drop excessive RST packets to avoid smurf attacks
iptables -A INPUT -p tcp -m tcp --tcp-flags RST RST -m limit --limit 2/second --limit-burst 2 -j ACCEPT

ব্লক আইসিএমপি (ওরফে পিং)

# Don't allow pings through
iptables -A INPUT -p icmp -m icmp --icmp-type 8 -j DROP

4
"স্পোফড" মন্তব্যে একটি মন্তব্য যুক্ত করার কথা বিবেচনা করুন, যাতে কম অভিজ্ঞ ব্যবহারকারীরা কেন উত্সের ঠিকানাগুলিকে স্পোফড হিসাবে বিবেচনা করা হয় তা (... যখন একটি ডান ইন্টারফেসে পৌঁছেছেন))
3molo

1
ভাল কল :-). সম্পন্ন.
বার্ট ডি ভোস

অপেক্ষা করুন। ব্লক আইএমএমপি (ওরফে পিং) লাইনটি কি ব্লক স্মুর অ্যাটাক লাইনের রিডানড্যান্ট নয়: iptables -A INPUT -p icmp -m icmp -j DROP?
স্ট্যান

2
হোয়াইটলিস্ট স্ক্রিপ্টটি পুনরায় করুন: iptables8 নং লাইনে থেরেস এবং তারপরে $IPTABLESপরে। এটি কেবল iptablesসর্বত্র ব্যবহার করার পক্ষে যথেষ্ট ? অন্যথায় আমি মনে করি আপনি ঠিক মত কিছু বরাদ্দ করা প্রয়োজন IPTABLES=/sbin/iptables?
UpTheCreek

1
আমি পোর্টসক্যানগুলি সেভাবে অবরুদ্ধ করব না। পরিবর্তে এমন কিছু আছে যা tcp / udp সংযোগ গ্রহণ করবে এবং একাধিক সম্পর্কিত প্যাকেট সন্ধান করবে। tcp সহজ, কেবল p পোর্টগুলির জন্য প্রতিষ্ঠিত সন্ধান করুন। অন্য যে কোনও কিছু, অন্যরা এটির জন্য স্পুফ প্যাকেটগুলি পরীক্ষা করতে পারে এবং আপনার শ্বেতলিস্টে নেই এমন কোনও কিছুকে ব্লক করতে পারে যেমন আপনার গেটওয়ে।
হারুন

25

নেটফিল্টারের পারফরম্যান্স ব্যবহার করে অনুকূলিত করুন ipset

আপনি যদি কেবল আইপি, পোর্ট বা উভয়ের উপর ভিত্তি করে প্রচুর অনুরূপ নিয়ম লেখেন তবে ipsetনেট ফিল্টারটির পারফরম্যান্সকে অনুকূল করতে ব্যবহার বিবেচনা করুন consider

উদাহরণ স্বরূপ:

iptables -s 192.168.1.11 -j ACCEPT
iptables -s 192.168.1.27 -j ACCEPT
iptables -s 192.168.1.44 -j ACCEPT
... hundreds of similar rules ...
iptables -s 192.168.251.177 -j ACCEPT

এর অর্থ হল, 192.168.251.177 এর উত্স ঠিকানা সম্বলিত একটি প্যাকেট দুদক প্রতিবেদনের রায় পাওয়ার আগে প্রথমে কয়েকশ বিধি অতিক্রম করতে হবে।

অবশ্যই, অভিজ্ঞ সিসাদমিনগুলি সাবনেট দ্বারা বিধি বিভক্ত করবে। কিন্তু তারপরেও এর অর্থ শত শত নিয়ম।

ipset উদ্ধার করতে!

প্রথমে, আইপি সেট ipmapটাইপের সংজ্ঞা দিন:

ipset -N Allowed_Hosts ipmap --network 192.168.0.0/16

তারপরে, এগুলি ঠিকানাগুলির সাথে বিশিষ্ট করুন:

for ip in $LIST_OF_ALLOWED_IP; do ipset -A Allowed_Hosts $ip; done

অবশেষে, উপরের শত শত iptables নিয়মকে একটি নিয়মের সাথে প্রতিস্থাপন করুন :

iptables -m set --match-set Allowed_Hosts src -j ACCEPT

যখন কোনও প্যাকেট আসবে, নেটফিল্টার আইপি সেটটির বিপরীতে প্যাকেটের উত্স (এসসিআর) আইপিটির জন্য খুব দ্রুত বিটম্যাপ অনুসন্ধান করবে Allowed_Hosts। 192.168.0.0/16 থেকে আসা সমস্ত প্যাকেটগুলি একটি নিয়ম অনুভব করবে । এবং আমাকে বিশ্বাস করুন যে একটি বিটম্যাপ অনুসন্ধান করা শত শত iptables নিয়ম-চেকিংয়ের চেয়ে কমপক্ষে দুটি ক্রমের গতিবেগ faster

ipsetআইপি ঠিকানাগুলিতে সীমাবদ্ধ নয়। এটি পোর্টস, আইপি-পোর্ট টিপল, নেটওয়ার্ক / সাবনেট অ্যাড্রেস, আইপি-ম্যাক টিপল ইত্যাদির উপর ভিত্তি করে মিল করতে পারে। এবং এটি উত্স বা গন্তব্য বা উভয়ের মিশ্রণ হিসাবে এই মানদণ্ডের সাথে মিলিত হতে পারে (টিপলসের ক্ষেত্রে)।

এবং শেষ অবধি, ipsetআপনি স্বয়ংক্রিয়ভাবে আইপি ঠিকানাগুলি ব্ল্যাকলিস্ট / হোয়াইটলিস্টে রাখতে পারেন। এই ব্ল্যাকলিস্ট / শ্বেতলিস্টগুলি 'বয়স' করতে পারে, যাতে কনফিগারযোগ্য পরিমাণ সময় পার হওয়ার পরে স্বয়ংক্রিয়ভাবে আইপি ঠিকানা মুছে ফেলা যায়।

আরও বিশদ জন্য দয়া করে ipsetম্যান পৃষ্ঠা দেখুন।

খুব গুরুত্বপূর্ণ নোট:

কিছু লিনাক্স ডিস্ট্রো পারে না 'আউট-অফ-বক্স' এর জন্য সমর্থন আছে ipset(যেমন উবুন্টু 10.04 এই সমস্যা ছিল)। এই সিস্টেমে একটি পদ্ধতি হ'ল ipsetসোর্স কোড থেকে ইনস্টল করা।

পরিবর্তে, ipsetএর ওয়েবসাইটটি এর ওয়েবসাইট থেকে ডাউনলোড করুন : http://ipset.netfilter.org/install.html

অন্যথা, যদি আপনি ব্যবহার xtables-addons, ipset হয় তার সোর্সে অন্তর্ভূক্ত করেছেন: http://xtables-addons.sourceforge.net/


3
এটি সত্যিকারের আক্ষেপ যা এটি ডেবিয়ান এবং উবুন্টুতে ডিফল্টরূপে সমর্থিত নয়। আমি ভেবেছিলাম আপনি কিছু অস্পষ্ট ডিস্ট্রো তালিকাবদ্ধ করতে যাচ্ছেন: /
আপড্রিক্রিক

@ ইউপি-ক্রিক আমি আমার উত্তর সম্পাদনা করেছি ... উত্তর পোস্ট করার সময় 'বিশেষ নোট' প্রযোজ্য ছিল, কিন্তু এখন আর প্রযোজ্য নয়।
পেপলুয়ান

21

আপনার নিয়মে মন্তব্য যুক্ত করুন:

-m comment --comment "Comments help to read output of iptables -nvL"

16

সুপরিচিত টিসিপি আক্রমণগুলি ব্লক করুন

নিম্নলিখিত নিয়মগুলি যুক্ত করুন, পছন্দসইভাবে -t raw -A PREROUTING

-p tcp --tcp-flags FIN,SYN FIN,SYN -j DROP
-p tcp --tcp-flags SYN,RST SYN,RST -j DROP
-p tcp --tcp-flags FIN,SYN,RST,PSH,ACK,URG FIN,PSH,URG -j DROP
-p tcp --tcp-flags FIN,SYN,RST,PSH,ACK,URG FIN -j DROP
-p tcp --tcp-flags FIN,SYN,RST,PSH,ACK,URG NONE -j DROP
-p tcp --tcp-flags FIN,SYN,RST,PSH,ACK,URG FIN,SYN,RST,PSH,ACK,URG -j DROP

আক্রমণগুলি অবরুদ্ধ করা হচ্ছে যথাক্রমে:

  • SYN-FIN আক্রমণ
  • SYN-RST আক্রমণ attack
  • এক্স-মাস আক্রমণ
  • এনএমএপ এফআইএন স্ক্যান
  • NULLflags আক্রমণ
  • ALLflags আক্রমণ

(উপরের আক্রমণগুলির নাম সম্পাদনা করতে নির্দ্বিধায়)


4
-p tcp --tcp-flags FIN,SYN,RST,PSH,ACK,URG FIN,SYN,RST,PSH,ACK,URG -j DROPসরানো যেতে পারে যেমন The -p tcp --tcp-flags FIN,SYN FIN,SYN -j DROPপ্রত্যেক প্যাকেট অবরুদ্ধ পারে ফেলবো।

4
সিকিউরিটি.স্ট্যাকেক্সেঞ্জারভিউ / প্রশ্নগুলি / ৪৪০০/৩ অনুসারে । "অবৈধ বা ত্রুটিযুক্ত প্যাকেটগুলি ফেলে দেওয়ার দরকার নেই, এই আক্রমণগুলির এক দশক পুরানো which , কেউ কেউ তর্ক করতে পারে Well আচ্ছা, আপনি কীভাবে জানেন যে ভবিষ্যতের ত্রুটি টিসিপি হ্যান্ডলারের মধ্যে থাকবে, আইপিটিবেস টিসিপি পার্সারে নেই? "
ম্যাট

1
@ ভ্লাস্টিমিলবারিয়ান তাত্ত্বিকভাবে তাদের আর প্রয়োজন নেই। তবে এই বিধিগুলির সেটগুলি যুক্ত করার ফলে না নেটওয়ার্ক গতি কমিয়ে দেয় এবং না সিপিইউ লোড বাড়ায়, তাই আমি এগুলি যুক্ত না করার এবং তাদের সম্পর্কে ভুলে যাওয়ার কোনও কারণ দেখছি না 😊
পেপলুয়ান

7

নাট সক্ষম করা হচ্ছে

  1. echo 1 > /proc/sys/net/ipv4/ip_forward
  2. /sbin/iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

পদক্ষেপ 1 আইপি ফরোয়ার্ডিংয়ের জন্য মঞ্জুরি দেওয়ার জন্য কার্নেল প্যারামিটার সেট করে, পদক্ষেপ 2 একটি iptables নিয়ম সেট করে যা ইন্টারফেসের eth0 এ NAT সক্ষম করে।


4
এটি একটি রিবুটের মাধ্যমে অবিচল থাকবে না, তাই না? আপনার সম্পাদনা করা দরকার /etc/sysctl.conf net.ipv4.ip_forward = 1। (রেড হ্যাট বা ডেরিভেটিভ ধরে নিচ্ছেন))
অ্যারন কোপলি

6

আইসিএমপি আক্রমণ বন্ধ করুন

নিম্নলিখিত নিয়মগুলি যুক্ত করুন, পছন্দসইভাবে -t raw -A PREROUTING

-p icmp -m u32 ! --u32 "4&0x3FFF=0"   -j DROP
-p icmp -m length --length 1492:65535 -j DROP

প্রথম নিয়মটি সমস্ত আইসিএমপি প্যাকেটগুলিকে অবরুদ্ধ করে দেয় যাদের "টুকরো টুকরো পতাকা" 0 টি নয় (আইসিএমপি কখনই খণ্ডিত হওয়া উচিত নয় ; সেগুলি ছোট বেতনের ভার বহন করা উচিত)

দ্বিতীয় নিয়মটি অতিরঞ্জিত আইসিএমপি প্যাকেটগুলিকে বড় করে দেয়।


এমটিইউ আবিষ্কারটি কি ব্রেক ব্রেক করবে না?
ম্যাট

@ ম্যাট না, কারণ পাথ এমটিইউ আবিষ্কারটি কেবলমাত্র ইথারনেট পেডলোড আকারের মতো প্যাকেটগুলি ব্যবহার করে, 1500 বাইট, যার মধ্যে 8 টি বাইট আইপি শিরোলেখ এবং আইসিএমপি শিরোলেখ ব্যবহার করে।
পেপলুয়ান

স্পষ্টতার জন্য ধন্যবাদ, তবে 1492-64k? কেন এটি 1500-65k নয়। আমি পিপিপিও-র জন্য 1492 তবে সোজা ইথারনেট বুঝতে পারি।
ম্যাট

এটি কি এখনও প্রযোজ্য?
লিনাক্সসিকিউরিটিফ্রেক

@ ভ্লাস্টিমিলবারিয়ান আমি হ্যাঁ বলব বড় আকারের আইসিএমপি প্যাকেটের প্রয়োজন নেই।
পেপোলুয়ান

4

ফায়ার হোল ব্যবহার করে - সুবিধাজনক iptables মোড়ক

আমি এটি সরাসরি iptables কমান্ডের চেয়ে অনেক বেশি স্বজ্ঞাত পেয়েছি। বিশেষত অন্য ফায়ারওয়ালের সাথে অতীতের অভিজ্ঞতা সম্পন্ন ব্যক্তিদের জন্য:

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


2
আমি শোরওয়ালকে পছন্দ করি যা সক্রিয়ভাবে বিকাশযুক্ত, আইপিভি 4 এবং আইপিভি 6 সমর্থন করে এবং অন্যান্য আইপটবেবল সিস্টেমের জন্য ফায়ারওয়াল তৈরি করতে পারে।
বিলথোর

4

(আমার iptables_t কৌশল.txt ফাইল থেকে, অনেক জায়গা থেকে পুনরায় সংকলিত: পি)

পোর্ট 22 (এসএসএইচ) থেকে একই আইপি থেকে নতুন সংযোগের মধ্যে আইপটিবলগুলি 15 সেকেন্ড অপেক্ষা করে তোলে:

 iptables -A INPUT -p tcp -i eth0 -m state --state NEW --dport 22 -m recent --update --seconds 15 -j DROP
 iptables -A INPUT -p tcp -i eth0 -m state --state NEW --dport 22 -m recent --set -j ACCEPT

1
একই, তবে প্রচেষ্টার গণনা সহ:-A INPUT -p tcp --dport 22 -m state --state NEW -m recent --set --name SSH -A INPUT -p tcp --dport 22 -m state --state NEW -m recent --update --seconds 60 --hitcount 5 --rttl --name SSH -j DROP
অ্যালেক্সাম

3

আইপিটিবেলস ভিডিও টিউটোরিয়াল

পর্ব 1 http://www.youtube.com/watch?v=ldB8kDEtTZA&feature=player_e এম্বেড

পর্ব 2 http://www.youtube.com/watch?v=aDaEXxRHeXY&feature= সম্পর্কিত

শেষ পর্ব

http://www.youtube.com/watch?v=JojqHKcSxpo&feature=player_embedded

যে কোনও নবজাতকের জন্য একটি ভাল শুরু হবে।


খুব ভাল টিউটোরিয়াল
স্টান

3

আইপি সেটগুলি পুনরায় দেখা গেছে

ইতিমধ্যে আইপি সেটগুলি উল্লেখ করে একটি উত্তর রয়েছে। তবে এটি বরং দ্বি-মাত্রিক কারণ এটি ক্লাসিক নিয়মের তুলনায় পারফরম্যান্স লাভের উপর দৃষ্টি নিবদ্ধ করে এবং আইপি সেটগুলি যে সমস্যাটি হ্রাস করে তা হ্রাস করে অনেকের ব্যক্তিগত আইপি ঠিকানা যা সহজেই সিআইডিআর স্বরলিপিতে সাবনেট হিসাবে প্রকাশ করা যায় না।

নীচে স্বরলিপি ব্যবহৃত

কারণ ipsetআমি পড়ে ipset restoreএবং দ্বারা লিখিত স্বরলিপি ব্যবহার করব ipset save

অনুসারে iptables(এবং ip6tables) বিধিগুলির জন্য আমি স্বরলিপিটি পড়ে iptables-restoreএবং দ্বারা লিখিত হিসাবে ব্যবহার করব iptables-save। এটি একটি সংক্ষিপ্ত স্বরলিপি তৈরি করে এবং এটি আমাকে সম্ভাব্য আইপিভি 4-কেবল (উপসর্গযুক্ত -4) বা আইপিভি 6-কেবল (উপসর্গযুক্ত -6) বিধিগুলি হাইলাইট করতে দেয় ।

কিছু উদাহরণে আমরা প্যাকেট প্রবাহকে অন্য চেইনে রূপান্তর করব। চেইনটি সেই মুহুর্তে বিদ্যমান বলে ধরে নেওয়া হয়, তাই চেইনগুলি তৈরি করার জন্য লাইন তৈরি হয় না (সারণীর নামটিও উল্লেখ করা হয় না বা শেষে কমান্ডগুলি COMMITদেওয়া হয় না)।

উন্নত আইপি সেট

অন্যান্য উত্তরগুলিতে বর্ণিত আইপি সেটগুলি আরও অনেক কিছু করতে পারে এবং আপনার এখানে অবশ্যই এই সংক্ষিপ্ত এন্ট্রি ছাড়াও আইপি সেট ডকুমেন্টেশন ( ipset(8)) পড়তে হবে iptables-extensions(8)

উদাহরণ হিসেবে বলা যায় আমি প্রধানত তিনটি সেট ধরনের উপর ফোকাস করব: hash:ip, hash:netএবং list:set, কিন্তু তুলনায় আরও বেশি এবং তারা সকল বৈধ ব্যবহারের ক্ষেত্রে আছে।

আপনি উদাহরণস্বরূপ , কেবল আইপি ঠিকানাগুলি নয়, পোর্ট নম্বরগুলিও মেলাতে পারেন ।

সংরক্ষণ এবং মত আইপি সেট পুনরূদ্ধার iptables-saveএবংiptables-restore

আপনি বাল্কে আইপি সেট ঘোষণাগুলি তৈরি করতে পারেন এবং এগুলিতে পাইপ রেখে এগুলি আমদানি করতে পারেন ipset restore। আপনি যদি ইতিমধ্যে বিদ্যমান এন্ট্রিগুলির বিরুদ্ধে আপনার কমান্ডটিকে আরও স্থিতিশীল করতে চান তবে ব্যবহার করুন ipset -exist restore

যদি আপনার বিধিগুলি যদি এমন কোনও ফাইলে থাকে যা default.setআপনি ব্যবহার করতে চান:

ipset -exist restore < default.set

এর মতো একটি ফাইল সেগুলিতে প্রবেশের জন্য createএবং সেগুলিতে প্রবেশের জন্য থাকতে পারে add। তবে সাধারণত কমান্ড লাইন থেকে প্রাপ্ত বেশিরভাগ কমান্ডেরই ফাইলগুলিতে অনুরূপ সংস্করণ থাকে। উদাহরণ (ডিএনএস সার্ভারের একটি সেট তৈরি করা):

create dns4 hash:ip family inet
create dns6 hash:ip family inet6
# Google DNS servers
add dns4 8.8.8.8
add dns4 8.8.4.4
add dns6 2001:4860:4860::8888
add dns6 2001:4860:4860::8844

এখানে একটি সেট আইপিভি 4 ( dns4) এবং একটি আইপিভি 6 ( dns6) এর জন্য তৈরি করা হয়েছে।

আইপি সেটে সময়সীমা

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

এটি যেভাবে কাজ করে তা নিম্নরূপ (আইপি সেট তৈরির সময় ডিফল্ট):

create ssh_loggedon4 hash:ip  family inet  timeout 5400
create ssh_loggedon6 hash:ip  family inet6 timeout 5400
create ssh_dynblock4 hash:ip  family inet  timeout 1800
create ssh_dynblock6 hash:ip  family inet6 timeout 1800

আমরা নীচে এই নির্দিষ্ট সেটগুলিতে ফিরে যাব এবং তারা কেন সেভাবে সেট করা হচ্ছে তার যুক্তি।

আপনি যদি কোনও নির্দিষ্ট আইপি ঠিকানার জন্য সময়সীমা নির্ধারণ করতে চান, আপনি কেবল বলতে পারেন:

add ssh_dynblock4 1.2.3.4 timeout 7200

(সেট) ডিফল্ট আধ ঘন্টাের পরিবর্তে আইপি 1.2.3.4 কে দুই ঘন্টা অবরুদ্ধ করতে।

আপনি যদি ipset save ssh_dynblock4কিছুক্ষণ পরে এটির দিকে নজর রাখেন তবে আপনি এর লাইনে কিছু দেখতে পাবেন:

create ssh_dynblock4 hash:ip family inet hashsize 1024 maxelem 65536 timeout 1800
add ssh_dynblock4 1.2.3.4 timeout 6954

সময়সীমা সাবধান

  • টাইমআউটগুলি কোনও প্রদত্ত সেটে একটি বৈশিষ্ট্য। সময়সীমা সমর্থন সহ যদি সেটটি তৈরি না করা হয় তবে আপনি একটি ত্রুটি পাবেন (উদাঃ Kernel error received: Unknown error -1)।
  • সময় সেকেন্ডে দেওয়া হয়। উদাহরণস্বরূপ মিনিট থেকে কয়েক সেকেন্ড সময় পেতে বাশ পাটিগণিতের এক্সপ্রেশনগুলি ব্যবহার করুন। উদাহরণ:sudo ipset add ssh_dynblock4 1.2.3.4 timeout $((120*60))

প্রদত্ত আইপি সেটে কোনও এন্ট্রি বিদ্যমান কিনা তা পরীক্ষা করা হচ্ছে

আপনার স্ক্রিপ্টগুলির ভিতরে এটি প্রবেশদ্বার ইতিমধ্যে বিদ্যমান কিনা তা দেখতে দরকারী হতে পারে। এটি অর্জন করা যেতে পারে ipset testযা এন্ট্রি উপস্থিত থাকলে শূন্য এবং অন্যথায় শূন্য না হলে ফিরে আসে। সুতরাং সাধারণ চেকগুলি কোনও স্ক্রিপ্টে প্রয়োগ করা যেতে পারে:

if ipset test dns4 8.8.8.8; then
  echo "Google DNS is in the set"
fi

তবে, অনেক ক্ষেত্রে আপনি -existস্যুইচটি ব্যবহার করতে চান ipsetএটি বিদ্যমান এন্ট্রিগুলির বিষয়ে অভিযোগ না করার জন্য এটি নির্দেশ করতে।

iptablesবিধি থেকে আইপি সেট পপুলেটিং করছে

এটি আমার মতে, আইপি সেটগুলির অন্যতম হত্যাকারী বৈশিষ্ট্য। আপনি কেবল একটি আইপি সেটের এন্ট্রিগুলির সাথে মেলে না, আপনি বিদ্যমান আইপি সেটে নতুন এন্ট্রি যুক্ত করতে পারেন।

উদাহরণস্বরূপ এই প্রশ্নের উত্তরে আপনার কাছে রয়েছে:

-A INPUT -p tcp -i eth0 -m state --state NEW --dport 22 -m recent --update --seconds 15 -j DROP
-A INPUT -p tcp -i eth0 -m state --state NEW --dport 22 -m recent --set -j ACCEPT

... এসএসএইচ (টিসিপি পোর্ট 22) সাথে রেট-সীমা সংযোগের চেষ্টা করার উদ্দেশ্যে। ব্যবহৃত মডিউল recentসাম্প্রতিক সংযোগ প্রচেষ্টা ট্র্যাক করে। stateমডিউলটির পরিবর্তে , আমি conntrackমডিউলটিকে পছন্দ করি ।

# Say on your input chain of the filter table you have
   -A INPUT -i eth+ -p tcp --dport ssh -j SSH
# Then inside the SSH chain you can
# 1. create an entry in the recent list on new connections
   -A SSH -m conntrack --ctstate NEW -m recent --set --name tarpit
# 2. check whether 3 connection attempts were made within 2 minutes
#    and if so add or update an entry in the ssh_dynblock4 IP set
-4 -A SSH -m conntrack --ctstate NEW -m recent --rcheck --seconds 120 --hitcount 3 --name tarpit -j SET --add-set ssh_dynblock4 src --exist
-6 -A SSH -m conntrack --ctstate NEW -m recent --rcheck --seconds 120 --hitcount 3 --name tarpit -j SET --add-set ssh_dynblock6 src --exist
# 3. last but not least reject the packets if the source IP is in our
#    IP set
-4 -A SSH -m set --match-set ssh_dynblock4 src -j REJECT
-6 -A SSH -m set --match-set ssh_dynblock6 src -j REJECT

এই ক্ষেত্রে আমি প্রবাহটিকে SSHশৃঙ্খলে এমনভাবে পুনঃনির্দেশ করছি যা -p tcp --dport sshপ্রতিটি একক নিয়মের জন্য আমাকে নিজেকে পুনরাবৃত্তি করতে হবে না ।

পুনরাবৃত্তি করতে:

  • -m setiptablesসচেতন করে তোলে যে আমরা setমডিউলটি (যা আইপি সেটগুলি পরিচালনা করে) থেকে স্যুইচ ব্যবহার করছি
  • --match-set ssh_dynblock4 srcনামকরণ করা সেট ( ) এর বিপরীতে উত্স ( ) ঠিকানার iptablesসাথে ম্যাচ করতে বলেsrcssh_dynblock4
    • এটি এর সাথে মিলে যায় sudo ipset test ssh_dynblock4 $IP(যেখানে $IPপ্যাকেটের সোর্স আইপি ঠিকানা রয়েছে)
  • -j SET --add-set ssh_dynblock4 src --existআইপি সেটে প্যাকেট থেকে উত্স ( src) ঠিকানা যুক্ত বা আপডেট করে ssh_dynblock4। কোনও এন্ট্রি উপস্থিত থাকলে ( --exist) এটি সহজভাবে আপডেট করা হবে।
    • এটি এর সাথে মিলে যায় sudo ipset -exist add ssh_dynblock4 $IP(যেখানে $IPপ্যাকেটের সোর্স আইপি ঠিকানা রয়েছে)

আপনি যদি এর পরিবর্তে লক্ষ্য / গন্তব্য ঠিকানার সাথে মেলে চেয়েছিলেন, তাহলে আপনি ব্যবহার করতে চাই dstপরিবর্তে src। আরও বিকল্পের জন্য ম্যানুয়ালটির পরামর্শ নিন।

সেট সেট

আইপি সেটে অন্যান্য সেট থাকতে পারে। এখন আপনি যদি এখানে নিবন্ধটি অনুসরণ করেন তবে আপনি বিস্মিত হবেন যে সেটগুলি একত্রিত করা সম্ভব কিনা। এবং অবশ্যই এটি। উপরের আইপি সেটগুলির জন্য আমরা দুটি যৌথ সেট তৈরি করতে পারি ssh_dynblockএবং ssh_loggedonযথাক্রমে আইপিভি 4-কেবল এবং আইপিভি 6-কেবল সেটগুলি রাখতে:

create ssh_loggedon4 hash:ip  family inet  timeout 5400
create ssh_loggedon6 hash:ip  family inet6 timeout 5400
create ssh_dynblock4 hash:ip  family inet  timeout 1800
create ssh_dynblock6 hash:ip  family inet6 timeout 1800
# Sets of sets
create ssh_loggedon  list:set
create ssh_dynblock  list:set
# Populate the sets of sets
add ssh_loggedon ssh_loggedon4
add ssh_loggedon ssh_loggedon6
add ssh_dynblock ssh_dynblock4
add ssh_dynblock ssh_dynblock6

আর পরের প্রশ্নে যে আপনার মনের মধ্যে পপ আপ হবে কিনা তা এই আমাদের অনুমতি দেয় মেলে একটি IP সংস্করণ অ্যাগনোস্টিক ফ্যাশন এবং এবং আইপি সেট নিপূণভাবে।

এবং এর উত্তর একটি সুরদায়ক: হ্যাঁ! (হায় আফসোস, শেষ বার যখন আমি পরীক্ষা করেছি এটি স্পষ্টভাবে নথিভুক্ত করা হয়নি)

ফলস্বরূপ পূর্ববর্তী বিভাগের বিধিগুলি পুনরায় লেখা যেতে পারে:

-A INPUT -i eth+ -p tcp --dport ssh -j SSH
-A SSH -m conntrack --ctstate NEW -m recent --set --name tarpit
-A SSH -m conntrack --ctstate NEW -m recent --rcheck --seconds 120 --hitcount 3 --name tarpit -j SET --add-set ssh_dynblock src --exist
-A SSH -m set --match-set ssh_dynblock src -j REJECT

যা অনেক বেশি সংক্ষিপ্ত। এবং হ্যাঁ, এটি চেষ্টা করা এবং পরীক্ষিত হয় এবং এটি একটি কবজির মতো কাজ করে।

এগুলিকে একসাথে রেখে দেওয়া: এসএসএইচ প্রাণবন্ত প্রতিরক্ষা

আমার সার্ভারগুলিতে আমার একটি স্ক্রিপ্ট চাকরিরূপে চালিত হয়েছে cronযা একসাথে হোস্টের নাম নেয় এবং সেগুলিকে আইপি অ্যাড্রেসে সমাধান করে, তারপরে এটিকে "বিশ্বস্ত হোস্ট" এর আইপি সেটে খাওয়ানো হয়। ধারণাটি হ'ল বিশ্বস্ত হোস্টগুলি সার্ভারে লগ ইন করার জন্য আরও বেশি প্রচেষ্টা পায় এবং অন্য কারও হিসাবে অগত্যা অবরুদ্ধ করা হয় না।

বিপরীতভাবে আমি পুরো দেশগুলি আমার এসএসএইচ সার্ভারের সাথে সংযোগ স্থাপন থেকে বিরত রেখেছি, বিশ্বস্ত হোস্টের (সম্ভাব্য) ব্যতিক্রম ব্যতীত (বিধি সম্পর্কিত বিষয়গুলির ক্রম)।

তবে এটি পাঠকের অনুশীলন হিসাবে ছেড়ে গেছে। এখানে আমি একটি ঝরঝরে সমাধান যুক্ত করতে চাই ssh_loggedonযা পরবর্তী সংযোগের প্রচেষ্টাগুলির মাধ্যমে অন্য প্যাকেটের মতো একই তদন্তের সাপেক্ষে না হয়ে সেটটিতে থাকা সেটগুলি ব্যবহার করবে ।

নিম্নলিখিত নিয়মগুলি দেখার ssh_loggedonজন্য 90 মিনিটের জন্য 30 মিনিটের এবং 30 মিনিটের ডিফল্ট সময়সীমাটি মনে রাখা গুরুত্বপূর্ণ :ssh_dynblockiptables

-A INPUT -i eth+ -p tcp --dport ssh -j SSH
-A SSH -m set --match-set ssh_loggedon src -j ACCEPT
-A SSH -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A SSH -m conntrack --ctstate NEW -m recent --set --name tarpit
-A SSH -m conntrack --ctstate NEW -m recent --rcheck --seconds 120 --hitcount 3 --name tarpit -j SET --add-set ssh_dynblock src --exist
-A SSH -m set --match-set ssh_dynblock src -j REJECT

এতক্ষণে আপনার নিজের জিজ্ঞাসা করা উচিত যে কীভাবে সংযুক্ত আইপি ঠিকানাটি ssh_loggedonউপ-সেটে শেষ হয়। তাই পড়ুন ...

বোনাস: এসএসএইচ লগনের সময় আপনি যে আইপি দিয়ে লগ ইন করেছেন তা যুক্ত করুন

যদি আপনি sshrcএবং বন্ধুদের সাথে পরীক্ষা করে থাকেন তবে আপনি এর ত্রুটিগুলি শিখতে পারবেন। তবে প্যাম উদ্ধার করতে আসে। নামের মডিউলটি pam_exec.soআমাদের এসএসএইচ লগনের সময় এমন একটি স্থানে স্ক্রিপ্ট শুরু করার অনুমতি দেয় যেখানে আমরা জানি যে ব্যবহারকারীটি প্রবেশ করেছে।

ইন /etc/pam.d/sshdনিচে pam_envএবং pam_selinuxএন্ট্রি নিম্নলিখিত পংক্তিটি যোগ করুন:

session    optional     pam_exec.so stdout /path/to/your/script

এবং নিশ্চিত করুন যে আপনার স্ক্রিপ্টের ( /path/to/your/scriptউপরে) সংস্করণটি বিদ্যমান এবং কার্যকর রয়েছে।

কী চলছে তা যোগাযোগের জন্য প্যাম পরিবেশের ভেরিয়েবল ব্যবহার করে, যাতে আপনি এটির মতো একটি সাধারণ স্ক্রিপ্ট ব্যবহার করতে পারেন:

#!/bin/bash
# When called via pam_exec.so ...
SETNAME=ssh_loggedon
if [[ "$PAM_TYPE" == "open_session" ]] && [[ -n "$PAM_RHOST" ]]; then
    [[ "x$PAM_RHOST" != "x${PAM_RHOST//:/}" ]] && SETNAME="${SETNAME}6" || SETNAME="${SETNAME}4"
    ipset -exist add $SETNAME "$PAM_RHOST"
fi

দুর্ভাগ্যক্রমে ipsetইউটিলিটিটি নেটফিল্টারের অন্তর্নির্মিত স্মার্টগুলি বলে মনে হচ্ছে না। সুতরাং আমাদের এন্ট্রি যুক্ত করার সময় আমাদের আইপিভি 4 এবং আইপিভি 6 আইপি সেটগুলির মধ্যে পার্থক্য করতে হবে। অন্যথায় ipsetধরে নেবে আমরা আইপির পরিবর্তে সেটগুলির সেটটিতে আরও একটি সেট যুক্ত করতে চাই । এবং অবশ্যই এটি কোনও আইপি এর নামে একটি সেট থাকবে :) এর সম্ভাবনা কম :)

সুতরাং আমরা :আইপি ঠিকানার জন্য যাচাই করি এবং 6এ জাতীয় ক্ষেত্রে এবং 4অন্যথায় সেট নামের সাথে যুক্ত করি ।

শেষ।


2

Iptables কনফিগার করতে ব্যবহার করা যেতে পারে এমন আরও একটি জিইউআই হ'ল ফায়ারওয়াল বিল্ডার । এটি ব্যবহারকারীদের একটি ডেটাবেজে আইটেম হিসাবে নিয়মের উপাদান তৈরি করতে এবং তারপরে কাঙ্ক্ষিত ফায়ারওয়াল নীতি তৈরি করার জন্য এই বিষয়গুলিকে একটি নিয়ম সম্পাদকের মধ্যে টেনে নিয়ে যায় এবং ফেলে দেয়। এরপরে অ্যাপ্লিকেশনটি নিয়মগুলি প্রয়োগ করার জন্য প্রয়োজনীয় সমস্ত আইপিটিবেল কমান্ড সহ একটি স্ক্রিপ্ট ফাইল তৈরি করে।

কিছু অন্যান্য iptables GUI সমাধানের বিপরীতে যেখানে আপনি একবারে কেবলমাত্র একটি iptables কনফিগারেশন পরিচালনা করতে পারবেন, ফায়ারওয়াল নির্মাতার সাথে আপনি একক অ্যাপ্লিকেশন থেকে সমস্ত সংখ্যক iptables কনফিগারেশন পরিচালনা করতে পারবেন। ফায়ারওয়াল বিল্ডার লিনাক্স, উইন্ডোজ এবং ম্যাক ওএস এক্সে চলছে, 10 বছরেরও বেশি সময় ধরে রয়েছে এবং সারা বিশ্বে হাজার হাজার সক্রিয় ব্যবহারকারী রয়েছে।

সম্পূর্ণ প্রকাশ - আমি নেটসিটাডেলের সহ-প্রতিষ্ঠাতা যা ফায়ারওয়াল বিল্ডার বিকাশকারী সংস্থা।


1

uid এর সাথে লগ আউটগোয়িং সংযোগ

iptables -A OUTPUT -m state --state NEW -m tcp -p tcp -m limit --limit 5/m -j LOG --log-uid --log-prefix="outgoing connection: "

পোর্ট / সংযোগ ফরওয়ার্ডিং:

iptables -A PREROUTING -t nat -i eth1 -p tcp --dport 80 -j DNAT --to 10.0.1.7:80
iptables -A INPUT -p tcp -m state --state NEW --dport 80 -i eth1 -j ACCEPT

1
আমি NFLOGলক্ষ্য পছন্দ । এটি দীর্ঘতর লাইনের উপসর্গের অনুমতি দেয় এবং ব্যবহারকারী মোড ডেমন ডাটাবেসেও লগ করতে পারে।
0xC0000022L

1

একটি ওয়াইল্ডকার্ডের সাথে বেশ কয়েকটি ইন্টারফেসের নাম মেলে

উদাহরণ: আপনার রয়েছে eth0 এবং eth1 তাদের মধ্যে কোনও ট্র্যাফিকের অনুমতি দিতে চান?

iptables -A FORWARD -i eth+ -o eth+ -j ACCEPT

আমি অতীতে এটিকে veth<something>ইন্টারফেসগুলির গতিশীলরূপে তৈরি এবং LXC দ্বারা নামকরণ করার জন্য ব্যবহার করেছি । তাই আমি একসাথে সব মিলাতে পারেন veth+

এর _<something>সাথে ম্যাচ করার জন্য আমি ইচ্ছাকৃতভাবে কিছু ইন্টারফেসের নাম দিয়েছি _+


1

অস্বাভাবিক এমএসএস মানগুলি অবরুদ্ধ করুন

iptables -t mangle -A PREROUTING -p tcp \
-m conntrack --ctstate NEW -m tcpmss ! --mss 536:65535 -j DROP

DDos সুরক্ষার জন্য SYNPROXY লক্ষ্য

এই টার্গেটের উদ্দেশ্য হ'ল যে হোস্ট SYN প্যাকেট প্রেরণ করেছে সেটি কি চেক করে এসআইএন সংযোগের সূচনা করার পরে সংযোগ স্থাপন করে বা কিছুই করে না। যদি এটি কিছু না করে তবে এটি সর্বনিম্ন প্রচেষ্টা সহ প্যাকেটটি ছাড় দেয়।

কাঁচা টেবিলের সংযোগ ট্র্যাকিং টেবিলে সিন প্যাকেট সেট করুন

iptables -t raw -A PREROUTING -p tcp -m tcp --dport 80 --syn -j CT --notrack

HTTP সার্ভারের জন্য সিনপ্রক্সি সক্ষম করুন:

iptables -A INPUT -p tcp -m tcp --dport 80 -m conntrack --ctstate INVALID,UNTRACKED \
-j SYNPROXY --sack-perm --timestamp --wscale 7 --mss 1460

সংস্থান: RHEL ব্লগ থেকে SYNPROXY লক্ষ্য


1

সমস্ত পৃথক আইপি ঠিকানা আইপি সেটগুলির সাথে আউটবাউন্ড ব্যান্ডউইথ কোটায় সীমাবদ্ধ

আপনি আপনার আইএসপি-তে আপনার মেটারড ব্যান্ডউইথ কোটার জন্য সম্ভবত ব্যান্ডউইথ ব্যবহারের আক্রমণ প্রতিফলিত করতে বা ডজ করার আশায় প্রতি মাসে প্রতিটি পৃথক আইপি 15 গিগাবাইট ব্যান্ডউইথ ব্যবহারের অনুমতি দেওয়ার জন্য আপনার সার্ভারটি কনফিগার করতে পারেন। এটি নিম্নলিখিত হিসাবে সম্পাদন করা যেতে পারে:

প্রথমে আইপিভি 4 এবং আইপিভি 6 এর জন্য আইপি সেটগুলি তৈরি করুন:

ipset create IP_QUOTA_SET_OUT hash:ip timeout 345600 counters
ipset create IP_QUOTA_SET_OUT_INET6 hash:ip timeout 345600 counters family inet6

এখন আপনার iptables বিধি যুক্ত করুন। প্রথম লাইনটি আইপিটি সেটটিতে ইতিমধ্যে উপস্থিত না থাকলে যোগ করবে। সেটটিতে আইপির জন্য স্থানান্তরিত বাইটগুলি নির্দিষ্ট পরিমাণের চেয়ে বেশি হলে দ্বিতীয় লাইন মিলবে না। তারপরে আইপিভি 6 এর জন্য একই কাজ করা হয়।

iptables -I OUTPUT -m set ! --match-set IP_QUOTA_SET_OUT dst -j SET --add-set IP_QUOTA_SET_OUT dst --timeout 345600
iptables -I OUTPUT -m set --match-set IP_QUOTA_SET_OUT dst --bytes-gt 16106127360 -j DROP

ip6tables -I OUTPUT -m set ! --match-set IP_QUOTA_SET_OUT_INET6 src -j SET --add-set IP_QUOTA_SET_OUT_INET6 src --timeout 345600
ip6tables -I OUTPUT -m set --match-set IP_QUOTA_SET_OUT_INET6 src --bytes-gt 16106127360 -j DROP

এটি আক্রমণগুলি প্রতিরোধ করবে যেমন কোনও ব্যবহারকারী আপনার ওয়েবসার্ভার থেকে দীর্ঘ সময়ের জন্য, বা সেই বিষয়ে কোনও পরিষেবা থেকে কোনও বড় ফাইলের জন্য অনুরোধ করে। ইনপুট চেইনের জন্যও এটি করা যেতে পারে।


0

আমি কিছু করি, মূলত আমার আরও মার্জিত সমাধান সম্পর্কে আমার অজ্ঞতার কারণে, আমার এনগিনেক্স লগগুলি ম্যানুয়ালি প্রতি 4 ঘন্টা অন্তর্ভুক্ত পরীক্ষা করা হয় এবং মেল সার্ভার স্বতন্ত্র আইপি দ্বারা অতিরিক্ত অ্যাক্সেসের জন্য প্রতি 2 মিনিটে লগ করে s আমি এক সাথে কয়েকটি স্ক্রিপ্ট চালাচ্ছি যে:

  1. access.logসার্ভারে কতগুলি হিট রয়েছে তার দ্বারা সংগঠিত শীর্ষ 10 আইপি'র তালিকাটি পরীক্ষা করে দেখুন
  2. লগ ফাইলে ফলাফল ডাম্প করুন
  3. সেই লগ ফাইলটি অন্য স্ক্রিপ্টে দেখুন এবং কোনও আইপি নিষিদ্ধ করুন যা গত এক্স ঘন্টাগুলিতে X পরিমাণের চেয়ে বেশিবার সার্ভারকে আঘাত করেছে
  4. আমার বাঁচান iptables.save

দেখতে দেখতে এটি কী:

autoBanIPs_mail.sh
#!/bin/bash

# This script checks the last 2 minutes of log entries to see if any 
# IP has made over 99 connections

now=$(date +"%m_%d_%Y")

/root/bin/checkBadIPs_mail.sh > /home/ipChecker/ipcheckMAIL_$now.txt
cat /home/ipChecker/ipcheckMAIL_$now.txt | \
    grep " \\(\\([9][9]\\)\\|\\([0-9][0-9][0-9]\\+\\)\\) " | \
    awk '{print $2}' > /home/ipChecker/badMailIPs_$now.sh
sed -i "s/^/\/usr\/local\/sbin\/blockIP /g" /home/ipChecker/badMailIPs_$now.sh
/bin/bash /home/ipChecker/badMailIPs_$now.sh
cat /home/ipChecker/ipcheckMAIL_$now.txt >> /home/ipChecker/ipcheckMAIL_$now.log
rm /home/ipChecker/ipcheckMAIL_$now.txt
rm /home/ipChecker/badMailIPs_$now.sh
checkBadIPs_mail.sh

এখানে একটি বিষয় লক্ষণীয় অত্যন্ত গুরুত্বপূর্ণ যে আপনাকে একটি শ্বেতলিস্ট সেটআপ করতে হবে বা আপনি সার্ভারগুলি থেকে প্রচুর পরিমাণে খাঁটি আইপি ব্লক করা শুরু করছেন যা আপনি কেবলমাত্র অন্যান্য লগ থেকে বা এর চেয়ে অনেক বেশি ইমেল পেয়েছেন, আইপি এর বৈধ কারণে কেবল আপনার সার্ভারকে প্রচুর আঘাত করুন। | পরে ঠিক গ্রেপ পাইপ যুক্ত করে আমার শ্বেত তালিকাটি এই স্ক্রিপ্টটিতে তৈরি করা হয়েছে গ্রেপ ']' | | যা দেখতে এই "গ্রেপ-ভি 127.0 |" এর মতো দেখতে
কোনটি উচ্চ ট্র্যাফিক আইপি বৈধ এবং কোনটি নয় তা আপনার সার্ভারটি শেখানোর জন্য আপনাকে সময় নেওয়া উচিত। আমার জন্য এটির অর্থ হ'ল আমাকে প্রথম সপ্তাহ বা তার জন্য আমার লগগুলি কয়েক ঘন্টা কয়েক সময় ব্যয় করতে হবে, আইপলোকেশন.টায় উচ্চ ট্র্যাফিক আইপি অনুসন্ধান করতে হবে এবং তারপরে অ্যামাজন, বক্স ডট কম বা এমনকি আমার বাড়ি / অফিসের মতো বৈধতা যুক্ত করতে হবে আইপি এই শ্বেত তালিকাতে রয়েছে। আপনি যদি না করেন তবে সম্ভবত আপনাকে নিজের সার্ভার থেকে ব্লক করা হবে বা আপনি বৈধ মেল / ওয়েব সার্ভারগুলি ব্লক করা এবং ইমেল বা ট্র্যাফিকের ক্ষেত্রে বাধা সৃষ্টি করতে যাচ্ছেন।

cat /var/log/mail.log | awk \
    -v d1="$(date --date="-2 min" "+%b %_d %H:%M")" \
    -v d2="$(date "+%b %_d %H:%M")" \
    '$0 > d1 && $0 < d2 || $0 ~ d2' | \
    grep '\[' | grep '\]' | \
    grep -Eo '[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}' | grep -v 127.0 | \
    awk '{print $1}' | sort | uniq -c | sort -n | tail -10
BlockIP
#!/bin/bash
sudo iptables -I INPUT -s $1 -j DROP
sudo bash -c "iptables-save > /etc/network/iptables.save"

আবার আমি জানি এটি জাহান্নাম হিসাবে অপরিশোধিত এবং সম্ভবত একটি দুর্দান্ত পরিষ্কার দক্ষ প্রোটোকল রয়েছে যা এই সমস্ত কিছুই করে তবে আমি এটি সম্পর্কে জানতাম না এবং এই জিনিসটি এখন এক বা দু'বছর ধরে চলেছে এবং খারাপ লোকদের উপকারে চলেছে। একটি বিষয় যা আমি খুব গুরুত্ব সহকারে সুপারিশ করব তা হ'ল আপনার প্রধান সার্ভারটি অ্যাক্সেস করতে আপনি উইংসগুলিতে একটি প্রক্সি বা অন্য কোনও সার্ভার ব্যবহার করতে পারেন .. কারণ হ'ল যদি আপনি একদিন নীল রঙের বাইরে ওয়েব ডেভলপমেন্ট করেন এবং আপনি কিছু পরীক্ষার জন্য 5 ঘন্টার মধ্যে আপনার স্ব 2000 বার পিং করুন আপনি প্রক্সি ব্যতীত আর কোনও উপায় ছাড়াই অবরুদ্ধ হয়ে যেতে পারেন।

আপনি দেখতে পাচ্ছেন যে checkBadIPs.shআমি গ্রেপ-ভি 127.0 রেখেছি এবং আমার আসল ফাইলে আমার নিজের আইপি এবং অন্যান্য বিশ্বস্ত আইপি রেঞ্জের নিয়মগুলি উপেক্ষা করার অনেক বেশি সময় আছে তবে কখনও কখনও আপনার আইপি পরিবর্তন হয়, আপনি আপডেট করতে ভুলে যান এবং তারপরে আপনি লক হয়ে যান আপনার নিজের সার্ভারের বাইরে।

যাইহোক, আশা করি যে সাহায্য করে।

হালনাগাদ

আমি জিনিসগুলিকে কিছুটা বদলেছি যাতে এখন প্রতি দুই ঘন্টা পরীক্ষা করার পরিবর্তে আমি প্রতি 2 মিনিটে কিছু লগ পরীক্ষা করে থাকি, মূলত আমার এসএসটি লেখার লগ এবং মেল লগ যখন তারা পাউন্ড হচ্ছে :(।

আমি প্রতিটি লগ ফাইলের জন্য নির্দিষ্ট স্ক্রিপ্টগুলি সেটআপ করি যদিও লগগুলি পরিদর্শন করতে চাইলে আমি নিজেই ব্যবহার করি ম্যানুয়াল স্ক্রিপ্ট থেকে এটি যথেষ্ট সহজ। এটা এমন দেখতে:

#!/bin/bash

log=$1 time=$2

cat /var/log/${log} | awk \
    -v d1="$(date --date="-${time} min" "+%b %_d %H:%M")" \
    -v d2="$(date "+%b %_d %H:%M")" \
    '$0 > d1 && $0 < d2 || $0 ~ d2' | \
    grep '\[' | grep '\]' | \
    grep -Eo '[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}' | \
    sort | uniq -c | sort -n | tail -10

এটি চালানোর সময় 2 ইনপুট প্রয়োজন, আপনি যে লগ ফাইলটি স্ক্যান করতে চান এবং অতীতে কতটা অতীতে স্ক্যান করতে চান তা দরকার।

সুতরাং আমি যদি আইপি গণনাগুলির জন্য মেইল.লগ চেক করতে চাইতাম তবে অতীতের 75 মিনিট আগে বলব:

$ sudo script.sh mail.log 75

Googling এর একটি দ্রুত বিট আমাকে এই পাওয়া যায় নি, যা কি আমি উপরে বর্ণিত কি বলে মনে হয়: cyberciti.biz/faq/iptables-connection-limits-howto
unc0nnected

1
নিস! আমি ipsetiptables চেইন দীর্ঘায়িত করার পরিবর্তে ব্যবহার করব , তবে ধারণাটি দুর্দান্ত এবং আমার ধারণা আমি এগুলি আমার প্রোডাকশন সার্ভারগুলিতে প্রয়োগ করব। ভাগ করে নেওয়ার জন্য ধন্যবাদ!
পেপলুয়ান

2
আমি অন্যদিন প্রথমবারের মতো আইপসেট সম্পর্কে পড়েছিলাম এবং এটি কী করে তা শিখতে পেরে আনন্দিত হয়েছিল .. আমি এটিকে বাস্তবায়িত করতে কিছুটা ভয় পেয়েছি কারণ আমি সম্ভবত প্রথম দিকে এটিকে উপহাস করব এবং সার্ভারটি বন্ধ করে দেব তবে এটি এখানে শিখতে আমার তালিকার তালিকায় রয়েছে। বলা হচ্ছে যে আমার iptable চেইন সম্ভবত 30-40 আইটেমের কাছাকাছি এবং কেবলমাত্র দু'দিনে 1 জন নতুন আসে তাই এটি এমন পর্যায়ে নয় যা আমি অত্যধিক চিন্তিত।
২৪

আপনি ব্যর্থ 2ban বিবেচনা করেছেন?
ছানা

0

আমি আইপসেট এবং টিসিপি পতাকা সম্পর্কিত মন্তব্যগুলির সাথে একমত, তবে এখনও অনেক কিছুই নিখোঁজ রয়েছে:

দেশের তালিকার জন্য আইপসেটের পরিবর্তে xtables-addons জিওপ ম্যাচটি ব্যবহার করুন। জিওআইপি ডেটা নিয়মিত আপডেট করুন (প্রতি মাসে অন্তত একবার) ডেটা আরও গতিশীল যে আগুন এবং ভুলে যাওয়া আইপসেট তালিকা।

টিসিপি পতাকা সহ সংযোগের স্থিতি ট্র্যাকিং বিবেচনা করুন। উদাহরণস্বরূপ, একটি টিসিপি আরএসটি বা এসিके কেবলমাত্র একটি প্রতিষ্ঠিত সংযোগের জন্য অর্থবোধ করে। এসওয়াইএন কেবলমাত্র নতুন এবং সম্পর্কিত সংযোগের জন্য অর্থবোধ করে। একটি প্রতিষ্ঠিত সংযোগের জন্য একটি এসওয়াইএন এর অর্থ হয় আপনার এসওয়াইএন + এসি কে হারিয়ে গেছে বা হ্যাকের চেষ্টা হয়েছে এবং সংযোগের উভয় পক্ষই রাষ্ট্র হিসাবে সম্মত না হওয়ায় পুনরায় সেট করা উচিত।

যদিও কোনওটি নয়, এসওয়াইএন + আরএসটি এবং এফআইএন + আরএসটি অবৈধ সংমিশ্রণ নয়, বিশেষ করে ডিএনএসের জন্য এসইএনএন + এফআইএন এখন টিসিপি ফাস্ট-ওপেন (টিসিপি বিকল্প 34) এর অধীনে বৈধ is এসআইএন প্যাকেটগুলি, এমনকি দ্রুত-খোলা থাকলেও খণ্ডিত হওয়া উচিত নয়। আমি পিএসএইচ এবং ইউআরজি পতাকাগুলির সাথে বিধিগুলি কার্যকর হিসাবে বিবেচনা করি না। টিসিপি রাষ্ট্রের সাথে সংযোগ ট্র্যাকিং স্থিতিকে বিভ্রান্ত করবেন না: ট্র্যাকিংয়ের উদ্দেশ্যে একটি এসওয়াইএন প্যাকেটের একটি আরএসটি প্রতিক্রিয়া প্রতিষ্ঠিত।

SYNPROXY ফরোয়ার্ড করা প্যাকেটের জন্য এবং স্থানীয়ভাবে বিতরণকারীদের জন্য সিঙ্কুকির সমর্থন ছাড়াই কিছু যোগ করে না।

আইসিএমপি ত্রুটি প্যাকেটগুলি সর্বদা সম্পর্কিত অবস্থায় এবং দৈর্ঘ্যের 48: 576 এগুলি বৈধ হয়। IPv6 এর জন্য দৈর্ঘ্য 84: 1280। অন্য সকলকে উপেক্ষা করা উচিত। তাদের সর্বোচ্চ আকারটিও সর্বনিম্ন এমটিইউ হওয়ায় এগুলি কখনই খণ্ডিত হওয়া উচিত নয়। আইসিএমপি অনুরোধগুলি (পিংস, টাইমস্ট্যাম্পস ইত্যাদি) সর্বদা নতুন থাকবে এবং উত্তরগুলি প্রতিষ্ঠিত হবে। অন্যান্য রাজ্যে আইসিএমপি প্যাকেট ফেলে দিন।

সাম্প্রতিক তালিকার সাথে এসএসএইচ উদাহরণের মতো এবং কেবল পরবর্তী এসওয়াইএন প্যাকেট গ্রহণ করে, এসএমটিপি-র জন্য একই কাজ করা উচিত, এবং কেবল আইপি অ্যাড্রেস ডেটামে "গ্রিলিস্টিং" এর অনুরূপ।

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

শেষ অবধি, নিয়মগুলি অন্ধভাবে অনুলিপি করবেন না যতক্ষণ না তারা সত্যই বুঝতে পারে যে তারা কী করে। নিয়মের অনুরূপ অনেকগুলি তালিকা সেগুলি করে এবং বেশিরভাগ সময় ফলাফল হাস্যকর।


-2
#!/bin/bash
# The following iptables/ip6tables configurations have
# been kindly shared with us from ArckWiki. There are
# a few additions apart from what has been defined.
#
#=================Flush current definitions==============
    iptables -F
    ip6tables -F
    iptables -X
    ip6tables -X

#
#=================Chains=================================
#
#----Define chains for opened ports
    iptables -N TCP
    ip6tables -N TCP
    iptables -N UDP
    ip6tables -N UDP

#
#----Setting up the filter table for NAT
#   iptables -N fw-interfaces
#   ip6tables -N fw-interfaces
#   iptables -N fw-open
#   ip6tables -N fw-open

#
#================Default Chain reactions=================
#
#----Default FORWARD reaction
    iptables -P FORWARD DROP
    ip6tables -P FORWARD DROP

#
#----Default OUTPUT reaction
    iptables -P OUTPUT ACCEPT
    ip6tables -P OUTPUT ACCEPT

#
#----Shellshock
    iptables -A INPUT -m string --algo bm --hex-string '|28 29 20 7B|' -j DROP
    ip6tables -A INPUT -m string --algo bm --hex-string '|28 29 20 7B|' -j DROP

#
#----Default INPUT reaction
    iptables -P INPUT DROP
    ip6tables -P INPUT DROP
#
#----Drop spoofing packets
    iptables -A INPUT -i eth0 -s 127.0.0.0/8 -j DROP
    iptables -A INPUT -i wlan0 -s 127.0.0.0/8 -j DROP
    iptables -A INPUT -i wlan1 -s 127.0.0.0/8 -j DROP
    iptables -A INPUT -s 10.0.0.0/8 -j DROP
    iptables -A INPUT -s 169.254.0.0/16 -j DROP
    iptables -A INPUT -s 172.16.0.0/12 -j DROP
    iptables -A INPUT -s 224.0.0.0/4 -j DROP
    iptables -A INPUT -d 224.0.0.0/4 -j DROP
    iptables -A INPUT -s 240.0.0.0/5 -j DROP
    iptables -A INPUT -d 240.0.0.0/5 -j DROP
    iptables -A INPUT -s 0.0.0.0/8 -j DROP
    iptables -A INPUT -d 0.0.0.0/8 -j DROP
    iptables -A INPUT -d 239.255.255.0/24 -j DROP
    iptables -A INPUT -d 255.255.255.255 -j DROP

#
#================Ping rate limiting globally=============
    iptables -A INPUT -p icmp --icmp-type 8 -m limit --limit 30/min --limit-burst 8 -j ACCEPT
    ip6tables -A INPUT -p icmpv6 --icmpv6-type 8 --match limit --limit-burst 8 -j ACCEPT
    iptables -A INPUT -p icmp --icmp-type 8 -j DROP
    ip6tables -A INPUT -p icmpv6 --icmpv6-type 8 -j DROP

#
#----flooding RST packets, smurf attack Rejection
    iptables -A INPUT -p tcp -m tcp --tcp-flags RST RST -m limit --limit 2/second --limit-burst 2 -j ACCEPT
    ip6tables -A INPUT -p tcp -m tcp --tcp-flags RST RST -m limit --limit 2/second --limit-burst 2 -j ACCEPT

#
#----Bogus packet DROP
    iptables -A INPUT -p tcp -m tcp --tcp-flags SYN,FIN SYN,FIN -j DROP
    ip6tables -A INPUT -p tcp -m tcp --tcp-flags SYN,FIN SYN,FIN -j DROP
    iptables -A INPUT -p tcp -m tcp --tcp-flags SYN,RST SYN,RST -j DROP
    ip6tables -A INPUT -p tcp -m tcp --tcp-flags SYN,RST SYN,RST -j DROP

#
#================RELATED,ESTABLISHED reaction============
    iptables -A INPUT --match conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
    ip6tables -A INPUT --match conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT

#
#================unfetered loopback======================
    iptables -A INPUT -i lo -j ACCEPT
    ip6tables -A INPUT -i lo -j ACCEPT

#
#================INVALID catagory of packets=============
    iptables -A INPUT -p 41 -j ACCEPT
    iptables -A INPUT --match conntrack --ctstate INVALID -j DROP
    ip6tables -A INPUT --match conntrack --ctstate INVALID -j DROP

#
#================IPv6 reactions and definitions==========
    ip6tables -A INPUT -s fe80::/10 -p icmpv6 -j ACCEPT
    ip6tables -t raw -A PREROUTING -p icmpv6 -s fe80::/10 -j ACCEPT
    ip6tables -t raw -A PREROUTING --match rpfilter -j ACCEPT
    ip6tables -t raw -A PREROUTING -j DROP
#
#=======Acceptable INVALIDs and a curteous response======
    iptables -A INPUT -p udp --match conntrack --ctstate NEW -j UDP
    ip6tables -A INPUT -p udp --match conntrack --ctstate NEW -j UDP
    iptables -A INPUT -p tcp --syn --match conntrack --ctstate NEW -j TCP
    ip6tables -A INPUT -p tcp --syn --match conntrack --ctstate NEW -j TCP

#
#================Defining the TCP and UDP chains
#
#########################################################
#            Notes for port open definitions            #
# It is important to note that this should be config-   #
# ured differently if you're providing any routing      #
# activity for any purpose. it is up to you to actively #
# define what suites your needs to get the job done.    #
# In this example, I'm exempting IPv6 from being able   #
# to interact with SSH protocols for two reasons. The   #
# first is because it is generally easier and more com- #
# for internal networks to be deployed with IPv4. The   #
# second reason is, IPv6 can be deployed globally.      #
#########################################################
#
#----SSH configured for eth0
    iptables -A TCP -i eth0 -p tcp --dport ssh -j ACCEPT

#!---Blocking SSH interactions in IPv6
    ip6tables -A TCP -p tcp --dport ssh -j DROP

#!---Leave commented for end service device
#   iptables -A TCP -p tcp --dport 80 -j ACCEPT
#   ip6tables -A TCP -p tcp --dport 80 -j ACCEPT
#   iptables -A TCP -p tcp --dport 443 -j ACCEPT
#   ip6tables -A TCP -p tcp --dport 443 -j ACCEPT
#
#!---Uncomment for remote service to this device
#   iptables -A TCP -p tcp --dport 22 -j ACCEPT
#   ip6tables -A TCP -p tcp --dport 22 -j ACCEPT
#
#!---Uncomment if you're providing routing services
#   iptables -A UDP -p udp 53 -j ACCEPT
#   ip6tables -A UDP -p udp 53 -j ACCEPT
#
#=================Tricking port scanners=================
#
#----SYN scans
    iptables -I TCP -p tcp --match recent --update --seconds 60 --name TCP-PORTSCAN -j DROP
    ip6tables -I TCP -p tcp --match recent --update --seconds 60 --name TCP-PORTSCAN -j DROP
    iptables -A INPUT -p tcp --match recent --set --name TCP-PORTSCAN -j DROP
    ip6tables -A INPUT -p tcp --match recent --set --name TCP-PORTSCAN -j DROP

#
#----UDP scans
    iptables -I UDP -p udp --match recent --update --seconds 60 --name UDP-PORTSCAN -j DROP
    ip6tables -I UDP -p udp --match recent --update --seconds 60 --name UDP-PORTSCAN -j DROP
    iptables -A INPUT -p udp --match recent --set --name UDP-PORTSCAN -j DROP
    ip6tables -A INPUT -p udp --match recent --set --name UDP-PORTSCAN -j DROP

#
#----For SMURF attack protection
    iptables -A INPUT -p icmp -m icmp --icmp-type address-mask-request -j DROP
    iptables -A INPUT -p icmp -m icmp --icmp-type timestamp-request -j DROP
    iptables -A INPUT -p icmp -m limit --limit 2/second --limit-burst 2 -j ACCEPT
    ip6tables -A INPUT -p icmpv6 -m limit --limit 2/second --limit-burst 2 -j ACCEPT

#
#----Ending all other undefined connections
    iptables -A INPUT -j DROP
    ip6tables -A INPUT -j DROP

#
#=======Defining the IN_SSH chain for bruteforce of SSH==
#
#!---I've elected to keep IPv6 out of this realm for
#!---ease of use
    iptables -N IN_SSH
    iptables -A INPUT -p tcp --dport ssh --match conntrack --ctstate NEW -j IN_SSH
    iptables -A IN_SSH --match recent --name sshbf --rttl --rcheck --hitcount 3 --seconds 10 -j DROP
    iptables -A IN_SSH --match recent --name sshbf --rttl --rcheck --hitcount 4 --seconds 1800 -j DROP
    iptables -A IN_SSH --match recent --name sshbf --set -j ACCEPT
    iptables -A INPUT -p tcp --dport ssh -m conntrack --ctstate NEW -j IN_SSH

#
#==================Setting up a NAT gateway==============
#
#########################################################
#                                                       #
# I commented this half out because it's not something  #
# that will apply to all setups. Make note of all par-  #
# tinate interfaces and what exactly is going on.       #
#                                                       #
#########################################################
#
#----Setting up the FORWARD chain
#   iptables -A FORWARD --match conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
#   ip6tables -A FORWARD --match conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
#
#
#----Defining the fw-interfaces/open chains for FORWARD
#   iptables -A FORWARD -j fw-interfaces
#   ip6tables -A FORWARD -j fw-interfaces
#   iptables -A FORWARD -j fw-open
#   ip6tables -A FORWARD -j fw-open
#   iptables -A FORWARD -j DROP # Should be REJECT. But, fuck them
#   ip6tables -A FORWARD -j DROP
#   iptables -P FORWARD DROP
#   ip6tables -P FORWARD DROP
#
#
#----Setting up the nat table
#   iptables -A fw-interfaces -i ### -j ACCEPT
#   ip6tables -A fw-interfaces -i ### -j ACCEPT
#   iptables -t nat -A POSTROUTING -s w.x.y.z/S -o ppp0 -j MASQUERADE
#   ip6tables -t nat -A POSTROUTING -s fe::/10 -o ppp0 -j MASQUERADE
#----The above lines should be repeated specifically for EACH interface
#
#----Setting up the PREROUTING chain
#
#######################################################
#                             #
# The PREROUTING chain will redirect either port      #
# targets to be redirected. This can also redirect    #
# traffic inbound to your network from the gateway    #
# to this machine. This can be useful if you're using #
# a honeypot or have any service within your network  #
# that you want to be pointed to a specific device.   #
#                             #
#######################################################
#
#----SSH honeypot server
#   iptables -A fw-open -d HONEYPOT_IP -p tcp --dport 22 -j ACCEPT
#   ip6tables -A fw-open -d HONEYPOT_IP -p tcp --dport 22 -j ACCEPT
#----With intuition, you can configure the above to also direct specific
#----requests to other devices providing those services. The bellow will
#----be for a squid server
#   iptables -A fw-open -d SQUID_IP -p tcp --dport 80 -j ACCEPT
#   ip6tables -A fw-open -d SQUID_IP -p tcp --dport 80 -j ACCEPT
#   iptables -t nat -A PREROUTING -i ppp0 -p tcp --dport 8000 -j DNAT --to SQUID_IP
#   ip6tables -t nat -A PREROUTING -i ppp0 -p tcp --dport 8000 -j DNAT --to SQUID_IP
#
#===============Declare configurations=================
    iptables -nvL
    ip6tables -nvL

1
সমস্ত চিৎকার দিয়ে, আমি আপনার পোস্টের বার্তাটি ধরতে পারি না।
হরিণ হান্টার
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.