কীভাবে নিশ্চিত করতে হবে যে এসএসএইচ পোর্ট কেবলমাত্র একটি নির্দিষ্ট আইপি ঠিকানার জন্য উন্মুক্ত?


42

এটি আমার /etc/sysconfig/iptables:

এটিতে দুটি পোর্ট খোলা রয়েছে 80 অ্যাপাচি এবং 22 এসএসএসের জন্য।

# Firewall configuration written by system-config-firewall
# Manual customization of this file is not recommended.
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT
-A INPUT -j REJECT --reject-with icmp-host-prohibited
-A FORWARD -j REJECT --reject-with icmp-host-prohibited
COMMIT

22 পোর্টের জন্য (এসএসএইচ) আমি নিশ্চিত করতে চাই যে কোনও নির্দিষ্ট আইপি ঠিকানা ব্যতীত কেউ এই বন্দরের সাথে সংযোগ স্থাপন করতে পারে না।

উদাহরণ আইপি:

1.2.3.4

আমার আইপি যদি পরিবর্তন হয় এবং আমি আর আমার সার্ভারে এসএসএইচ না করতে পারি তবে কী সম্পর্কিত কোনও পর্যবেক্ষণ / উদ্বেগ উপেক্ষা করুন।

উত্তর:


47

যদি আমি প্রশ্নটি সঠিক উপায়ে পাই তবে আপনি চান যে আপনার সার্ভারটি কেবল পোর্ট ২২-এর নির্দিষ্ট আইপি ঠিকানা থেকে পৌঁছানো যায়, আপনি এর জন্য আইপটেবলগুলি আপডেট করতে পারেন:

iptables -A INPUT -p tcp -s YourIP --dport 22 -j ACCEPT

সেক্ষেত্রে আপনার অভ্যন্তরীণ নেটওয়ার্কের জন্য যদি আপনার ডিএনএস খোলার প্রয়োজন হয় তবে আপনি কেবল আপনার আইআইপি-তে এসএস পোর্টটি খুলছেন:

iptables -A INPUT -p udp -s YourIP --dport 53 -j ACCEPT
iptables -A INPUT -p tcp -s YourIP --dport 53 -j ACCEPT

একবার আপনি সেগুলিকে যুক্ত করে those আইপিগুলির জন্য খোলার পরে, আপনাকে বাকি আইপিগুলির জন্য দরজাটি বন্ধ করতে হবে

iptables -A INPUT -p tcp -s 0.0.0.0/0 --dport 22 -j DROP
iptables -A INPUT -p udp -s 0.0.0.0/0 --dport 53 -j DROP
iptables -A INPUT -p tcp -s 0.0.0.0/0 --dport 53 -j DROP

(আপনার রোলসেটে নিয়মগুলি সঠিক অবস্থানে সেট করার বিষয়টি নিশ্চিত করুন currently iptables -A INPUTবিধিগুলি INPUTবর্তমানে যেমন রয়েছে তেমন যোগ করবে))

বা জোল যেমন বলেছিল আপনি তার পরিবর্তে একটি নিয়ম যুক্ত করতে পারেন:

iptables -A INPUT -p tcp ! -s <permittedIP> -j DROP

অথবা আপনি এটি দিয়ে ফায়ারওয়ালে ডিফল্ট নীতি সেট করতে পারেন

iptables -P INPUT DROP

সংক্ষেপে, এসও তে এই প্রশ্নে যেমন উপস্থাপন করা হয়েছে :

iptables -A INPUT -p tcp --dport 22 -s YourIP -j ACCEPT
iptables -A INPUT -p tcp --dport 22 -j DROP

2
iptablesআপনি লক্ষ্যবস্তু করতে চান এমন ক্ষেত্রে ব্যাং অপারেটরের সাথে বিপর্যয়কে সমর্থন করে তাও লক্ষণীয় DROP। উদাহরণ:iptables -I INPUT -p tcp ! -s <permittedIP> -j DROP
ব্র্যাচলে

1
এছাড়াও, শর্তহীনগুলির DROPআসলে প্রয়োজন হয় না আপনি কেবল iptables -P INPUT DROPএটির সাথে ফায়ারওয়ালে ডিফল্ট নীতি সেট করতে পারেন এবং এটিকে যেতে দিন। আপনি সম্ভবত এগুলিকে এপেন্ড হিসাবে এটি করতে চান যদি সেগুলি এইভাবে করে তবে অন্যথায় সমস্ত ট্র্যাফিক DROPআপনার দ্বারা ধরা পড়বে এবং আপনার ACCEPTনিয়মে পৌঁছবে না ।
ব্র্যাচলে

1
এটি আমার পক্ষে কার্যকর হয়নি কারণ -I (সন্নিবেশ) -এর জন্য ডিফল্টটি নিয়ম # 1 হিসাবে সন্নিবেশ করানো হয়, তাই DROP নিয়ম # 1 হিসাবে সন্নিবেশ করা হয় এবং প্রথমে মূল্যায়ন করা হয় এবং তাই সমস্ত এসএস প্যাকেটগুলি ড্রপ করে, কখনই এসিসিপিটি নিয়মের মূল্যায়ন করে না। আপনাকে এক্সিকিউট করতে হবে iptables -I INPUT 3 -p tcp -s 0.0.0.0/0 --dport 22 -j DROPএবং iptables -I INPUT 3 -p udp -s 0.0.0.0/0 --dport 53 -j DROPINPUT এর পরে "3" মানে ইনপুট নিয়ম # 3 হিসাবে সন্নিবেশ করানো (ধরে নিও যে আপনি দুটি এসিইপিটিএস সন্নিবেশ করছেন, অন্যথায় যদি কেবল একটি এসিইপিটি হয় তবে ইনপুটটির জন্য "2" ব্যবহার করুন।
কেভিন ট্রিপলেট

@ নেট ওয়ার্কার ব্যবহার -Iকরে শীর্ষে নতুন iptables নিয়ম প্রবেশ করানো হবে। এই হিসাবে আপনি আপনার অনুমতি আগে আপনার ড্রপ অন্তর্নিহিত শেষ হতে পারে। আমি -Aপরিবর্তে এটি ব্যবহার করার পরামর্শ দিচ্ছি
ব্লু ক্যাক্টি

1
ভাল আমি নিজেকে লক আউট,
gj

6

যদিও আমি এসএসএইচ কীগুলি ব্যবহার করার পরামর্শ দিচ্ছি, আমি আপনাকে একটি ব্যাখ্যা দেব।

আপনি যেটি অর্জনের চেষ্টা করছেন তার জন্য আপনাকে আইপেটেবলগুলি ব্যবহার করতে হবে না, একাধিক উপায় রয়েছে। এটি IPtables উপায়:

iptables -I INPUT -s [YOUR_HOME_IP] -p tcp -m tcp --dport [SSH_PORT] -j ACCEPT

[YOUR_HOME_IP] = আপনার বাড়ির আইপি (বেশ সোজা)

[SSH_PORT] = আপনি যে বন্দরে এসএসএইচ চালাচ্ছেন (ডিফল্ট 22)

iptables -I INPUT -p tcp -m tcp --dport [SSH_PORT] -j REJECT

এটি নিশ্চিত করে যে আপনার আইপি ব্যতীত আর কেউ এসএসএইচে লগ ইন করতে পারে না।

এর আরও একটি উপায় রয়েছে, যা হল কিছুতে যুক্ত করে sshd_config

নিম্নলিখিত যুক্ত করুন:

AllowUsers root@[YOUR_HOME_IP]
PermitRootLogin without-password

এটি আপনাকে rootপাসওয়ার্ড না চাইতেই আপনার আইপি থেকে ব্যবহারকারী হিসাবে এসএসএইজে লগ ইন করতে দেয় allows

দয়া করে মনে রাখবেন যে একটি ক্রোনজ সঙ্গে

iptables -X
iptables -F

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


ক্রোনজব যদিও ফায়ারওয়ালিং সরাবে। কেন iptablesপ্রথম স্থানে স্থাপন? ব্যান্ড অ্যাক্সেসের বাইরে কিছু ফর্ম হ'ল প্রায় সাধারণ পদ্ধতি। knockdঅন্য একটি।
ম্যাট

@ এমটিএম হ্যাঁ, আপনি যখন লক আউট হয়ে যাবেন তখন ক্রোনজব আপনার আইপেটেবলস সেটআপটি পুনরায় সেট করবে যাতে আপনি আবার এসএসএইচ অ্যাক্সেস করতে সক্ষম হবেন। লোকেরা আইপিটবেলগুলি ব্যবহার করার কারণগুলি ভিন্ন, আমার মতে এটি কার্যকর, সহজ এবং নমনীয় ফায়ারওয়াল।
উইলিয়াম এডওয়ার্ডস 16

2
ওআইসি। আপনার অর্থ নিয়মিত নির্ধারিত না হয়ে একবার সেটআপের সময় ফ্লাশ চালানো। atএটা করে
ম্যাট

4
কেবলমাত্র আপনার আইপি শ্বেত তালিকাভুক্ত করা এবং তারপরে পাসওয়ার্ড ছাড়াই একটি রুট লগইনকে অনুমতি দেওয়া এক ভয়ানক ধারণা বলে মনে হচ্ছে।
অ্যালেক্স ডাব্লু

1
@ অ্যালেক্সডাব্লু আমি জানি এটি কিছুক্ষণ হয়ে গেছে তবে আমি এখনও মন্তব্য করতে চেয়েছিলাম: Without-Passwordমানে পাসওয়ার্ড প্রমাণীকরণ অনুমোদিত নয়, সুতরাং আপনাকে পরিবর্তে এসএসএইচ কী প্রমাণীকরণ ব্যবহার করতে হবে। এই প্রমাণীকরণ পদ্ধতির নামকরণ এটি অস্পষ্ট কিছুটা হলেও bit তবে এর অর্থ এই নয় যে রুট হিসাবে লগইন করতে আপনার পাসওয়ার্ডের দরকার নেই। তবুও, আরও সুরক্ষিত পদ্ধতি হ'ল PermitRootLogin noলগইন করার জন্য একটি আলাদা সুডো অ্যাকাউন্ট সেট করা এবং ব্যবহার করা হয়, কারণ মূলটি একটি সাধারণ লক্ষ্য
BlueCacti

5

অন্যান্য উত্তরগুলি iptables -Iতাদের উদাহরণগুলিতে ব্যবহার করছে যা আপনার ব্যবহার করা উচিত তা প্রায়শই হয় না।

iptables প্রথম রুলটি কার্যকর করে যা মেলে, তাই নিয়মের ক্রমটি খুব গুরুত্বপূর্ণ। -Iহ'ল "সন্নিবেশ" কমান্ড, এবং প্রদত্ত নিয়মটি কোন তালিকার তালিকায় রয়েছে তা নির্দিষ্ট করতে একটি সূচক পরামিতি ব্যবহার করা উচিত। -Aহ'ল "অ্যাপেন্ড" কমান্ড, যা তালিকার শেষের দিকে নিয়ম যুক্ত করবে।

কিছু বিতর্কিত (সম্ভবত সমস্ত) -Iইনডেক্স প্যারামিটার ছাড়াই ব্যবহার করা নিয়মকে সূচী একটিতে যুক্ত করবে, এটি প্রথম নিয়মকে পরীক্ষা করে দেখবে। এই দৃশ্যে যদি আপনি চালিত শেষ কমান্ডটি হয় iptables -I INPUT -s tcp 0.0.0.0/0 -j DROPতবে iptables আপনার সমস্ত ACCEPTশৃঙ্খলা ছেড়ে দেবে, পরে শৃঙ্খলে আপনার কোনও বিধি আছে কিনা তা নির্বিশেষে ।

এখানে একটি নিয়ম স্থাপনের একটি নমুনা দেওয়া হয়েছে যা কেবলমাত্র একক আইপি থেকে এসএসএইচকে অনুমতি দেয়:

নিয়ম ছাড়াই শুরু:

#> iptables -nL
Chain INPUT (policy ACCEPT)
target     prot opt source               destination         

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination         

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination

একটি নতুন "1.2.3.4 থেকে এসএসএইচকে অনুমতি দিন" বিধি যুক্ত করুন:

#>iptables -A INPUT -p tcp -s 1.2.3.4 --dport 22 -j ACCEPT

অন্যান্য সমস্ত আইপি থেকে এসএসএইচ অবরোধ করুন:

#>iptables -A INPUT -p tcp -s 0.0.0.0/0 --dport 22 -j DROP

এখন আপনার ইনপুট চেনটি দেখতে পাবেন:

Chain INPUT (policy ACCEPT)
target     prot opt source               destination         
ACCEPT     tcp  --  1.2.3.4              0.0.0.0/0            tcp dpt:22
DROP       tcp  --  0.0.0.0/0            0.0.0.0/0            tcp dpt:22

পরে, যদি আপনার দ্বিতীয় আইপি শ্বেত তালিকাতে প্রয়োজন হয় তবে আপনি -Iপ্যারামিটারটি ব্ল্যাকলিস্টের নিয়মের আগে স্থাপন করতে পারেন ।

#>iptables -I INPUT 2 -p tcp -s 4.3.2.1 --dport 22 -j ACCEPT

Chain INPUT (policy ACCEPT)
target     prot opt source               destination         
ACCEPT     tcp  --  1.2.3.4              0.0.0.0/0            tcp dpt:22
ACCEPT     tcp  --  4.3.2.1              0.0.0.0/0            tcp dpt:22
DROP       tcp  --  0.0.0.0/0            0.0.0.0/0            tcp dpt:22

লক্ষ্য করুন যে -I INPUT 2নতুন নিয়মটি নিয়ম সংখ্যা 2 হিসাবে যুক্ত করেছেন এবং DROP বিধিটিকে 3 নম্বরে ঠেকিয়েছেন।

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