সাধারণভাবে:
ফায়ারওয়াল কনফিগারেশন দেখতে এবং সংশোধন করতে প্রশাসনিক সুবিধাগুলি প্রয়োজন ( root) যেমন সীমাবদ্ধ পোর্ট নম্বর পরিসরে খোলার পরিষেবাগুলি। এর অর্থ হল কমান্ডটি রুট হিসাবে চালানোর জন্য আপনাকে হয় হিসাবে লগইন করা উচিত rootঅথবা বিকল্পভাবে ব্যবহার sudoকরা উচিত। আমি এই জাতীয় কমান্ডগুলি alচ্ছিক দিয়ে চিহ্নিত করার চেষ্টা করব [sudo]।
সূচিপত্র:
- অর্ডার বিষয় বা মধ্যে পার্থক্য
-Iএবং-A
- বর্তমান ফায়ারওয়াল কনফিগারেশন প্রদর্শন করুন
- এর আউটপুট ব্যাখ্যা
iptables -L -v -n
- আপনার পরিবেশ জানুন
- ইনপুট এবং ফরোয়ার্ড চেইন
- কার্নেল মডিউলগুলি
1. অর্ডার বিষয় বা মধ্যে পার্থক্য -Iএবং-A
মনে রাখার বিষয়টি হ'ল ফায়ারওয়াল বিধিগুলি তালিকাভুক্ত হওয়ার সাথে তাদের পরীক্ষা করা হয়। কোনও নিয়ম ট্রিগার করা হলে কার্নেল শৃঙ্খলা প্রক্রিয়াজাতকরণ বন্ধ করে দেবে যা প্যাকেট বা সংযোগকে অনুমতি দেয় বা নিষ্ক্রিয় করে।
আমি মনে করি নবজাতক ফায়ারওয়াল প্রশাসকদের সবচেয়ে সাধারণ ভুলটি হ'ল তারা নীচের মত একটি নতুন বন্দর খোলার জন্য সঠিক নির্দেশাবলী অনুসরণ করে:
[sudo] iptables -A INPUT -i eth0 -p tcp --dport 8080 -j ACCEPT
এবং তারপরে আবিষ্কার করুন যে এটি কার্যকর হবে না।
এর কারণটি হ'ল -Aবিকল্পটি বিদ্যমান নিয়মগুলির পরে
এবং নতুন ফর্মওয়ালটিতে চূড়ান্ত নিয়মটি যুক্ত করে যা এই নতুন ট্র্যাফিককে স্পষ্টভাবে অনুমোদিত নয় এমন সমস্ত ট্র্যাফিককে ব্লক করে দেয় যার ফলে
...
7 2515K 327M REJECT all -- * * 0.0.0.0/0 0.0.0.0/0 reject-with icmp-host-prohibited
8 0 0 ACCEPT all -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:8080
বা iptables-save এর সমতুল্য:
...
iptables -A INPUT -j REJECT
iptables -A INPUT -p tcp --dport 8080 -j ACCEPT
এবং নতুন বিধি খোলার টিসিপি পোর্ট 8080 কখনই পৌঁছাবে না। (জবাবদিহিভাবে 0 প্যাকেট এবং শূন্য বাইটে থাকা কাউন্টারদের দ্বারা প্রমাণিত)।
-Iনতুন নিয়মের সাথে নিয়ম সন্নিবেশ করিয়ে শৃঙ্খলে প্রথম স্থান পেত এবং কাজ করবে।
২. বর্তমান ফায়ারওয়াল কনফিগারেশন প্রদর্শন করুন
ফায়ারওয়াল প্রশাসকের জন্য আমার পরামর্শটি হ'ল লিনাক্স কার্নেলটি চলমান প্রকৃত কনফিগারেশনটি ব্যবহারকারী ব্যবহারকারীর সরঞ্জামগুলি থেকে ফায়ারওয়াল সমস্যাগুলি সনাক্ত করার চেষ্টা করার পরিবর্তে চলছে look অন্তর্নিহিত সমস্যাগুলি প্রায়শই একবার বুঝতে পারলে আপনি সহজেই সেগুলি সেই সরঞ্জামগুলির দ্বারা সমর্থিত কোনও বিষয়ে সমাধান করতে পারেন।
কমান্ডটি [sudo] iptables -L -v -nআপনার বন্ধু (যদিও কিছু লোক iptables-saveআরও ভাল পছন্দ করে )। প্রায়শই কনফিগারেশনগুলি নিয়ে আলোচনা --line-numbersকরার সময় নম্বর লাইনের বিকল্পটি ব্যবহার করা কার্যকর। # এক্সকে নিয়ম করে উল্লেখ করা তাদের আলোচনাটি কিছুটা সহজ করে তোলে।
দ্রষ্টব্য: NAT বিধিগুলি iptables-saveআউটপুটে অন্তর্ভুক্ত রয়েছে তবে -t natবিকল্পটি যোগ করে পৃথকভাবে তালিকাবদ্ধ করতে হবে [sudo] iptables -L -v -n -t nat --line-numbers,।
একাধিকবার কমান্ড চালানো এবং বাড়ানো কাউন্টারগুলির জন্য অনুসন্ধান করা কোনও নতুন নিয়মটি আসলে ট্রিগার হয়ে যায় কিনা তা দেখার জন্য দরকারী সরঞ্জাম হতে পারে।
[root@host ~]# iptables -L -v -n
Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
num pkts bytes target prot opt in out source destination
1 784K 65M fail2ban-SSH tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:22
2 2789K 866M ACCEPT all -- * * 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED
3 15 1384 ACCEPT all -- lo * 0.0.0.0/0 0.0.0.0/0
4 44295 2346K ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 state NEW tcp dpt:22
5 40120 2370K ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 state NEW tcp dpt:80
6 16409 688K ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 state NEW tcp dpt:443
7 2515K 327M REJECT all -- * * 0.0.0.0/0 0.0.0.0/0 reject-with icmp-host-prohibited
Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
num pkts bytes target prot opt in out source destination
1 0 0 REJECT all -- * * 0.0.0.0/0 0.0.0.0/0 reject-with icmp-host-prohibited
Chain OUTPUT (policy ACCEPT 25 packets, 1634 bytes)
num pkts bytes target prot opt in out source destination
Chain fail2ban-SSH (1 references)
num pkts bytes target prot opt in out source destination
1 0 0 REJECT all -- * * 117.239.37.150 0.0.0.0/0 reject-with icmp-port-unreachable
2 4 412 REJECT all -- * * 117.253.208.237 0.0.0.0/0 reject-with icmp-port-unreachable
বিকল্পভাবে আউটপুট iptables-saveএকটি স্ক্রিপ্ট দেয় যা উপরের ফায়ারওয়াল কনফিগারেশনটিকে পুনরায় তৈরি করতে পারে:
[root@host ~]# iptables-save
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [441:59938]
:fail2ban-SSH - [0:0]
-A INPUT -p tcp -m tcp --dport 22 -j fail2ban-SSH
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 80 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 443 -j ACCEPT
-A INPUT -j REJECT --reject-with icmp-host-prohibited
-A FORWARD -j REJECT --reject-with icmp-host-prohibited
-A fail2ban-SSH -s 117.239.37.150/32 -j REJECT --reject-with icmp-port-unreachable
-A fail2ban-SSH -s 117.253.208.237/32 -j REJECT --reject-with icmp-port-unreachable
COMMIT
আপনি বুঝতে সহজতর কি এটি পছন্দ করার বিষয়।
3. এর আউটপুট ব্যাখ্যা iptables -L -v -n
নীতি ডিফল্ট অ্যাকশন শৃঙ্খল ব্যবহার করেন, যখন কোন স্পষ্ট নিয়ম ম্যাচ সেট করে। ইন INPUTশৃঙ্খল যে সমস্ত ট্রাফিক গ্রহণ করতে সেট করা হয়।
ইনপুট চেইনের প্রথম নিয়মটি তত্ক্ষণাত্ একটি আকর্ষণীয়, এটি টিসিপি পোর্ট 22 ( tcp dpt:22) এর জন্য নির্ধারিত সমস্ত ট্র্যাফিক (উত্স 0.0.0.0/0 এবং গন্তব্য 0.0.0.0/0) কাস্টম টার্গেটে এসএসএইচ-র ডিফল্ট পোর্ট প্রেরণ করে fail2ban-SSH) । নামটি নির্দেশ করে যেহেতু এই নিয়মটি ব্যর্থ 2 বা তত্ত্বাবধানে পরিচালিত হয় (এমন সুরক্ষা পণ্য যা অন্যান্য জিনিসের মধ্যে সিস্টেম লগ ফাইলগুলি সম্ভাব্য অপব্যবহারের জন্য স্ক্যান করে এবং গালাগালীর আইপি-ঠিকানা আটকে দেয়)।
এই নিয়মটি iptables -I INPUT -p tcp -m tcp --dport 22 -j fail2ban-SSHiptables-save হিসাবে আউটপুটে পাওয়া যায় বা iptables-save হিসাবে পাওয়া যায় এমন একটি iptables কমান্ডলাইন দ্বারা তৈরি করা হত -A INPUT -p tcp -m tcp --dport 22 -j fail2ban-SSH। প্রায়শই আপনি ডকুমেন্টেশনে এই স্বরলিপিগুলির মধ্যে একটি খুঁজে পাবেন।
কাউন্টারগুলি নির্দেশ করে যে এই নিয়মটি 784'000 প্যাকেট এবং 65 মেগাবাইট ডেটার সাথে মেলে।
এই প্রথম নিয়মের সাথে মেলে ট্র্যাফিকটি fail2ban-SSHচেইন দ্বারা প্রক্রিয়া করা হয় যা একটি অ-মানক শৃঙ্খলা হিসাবে, OUTPUT চেইনের নীচে তালিকাভুক্ত হয়।
এই শৃঙ্খলে দুটি নিয়ম রয়েছে, প্রতিটি আপত্তিজনকদের জন্য একটি (উত্স আইপি-ঠিকানা 117.253.221.166 বা 58.218.211.166) যা ব্লক করা হয়েছে (একটি দিয়ে reject-with icm-port-unreachable)।
-A fail2ban-SSH -s 117.253.221.166/32 -j REJECT --reject-with icmp-port-unreachable
-A fail2ban-SSH -s 58.218.211.166/32 -j REJECT --reject-with icmp-port-unreachable
এসএসএইচ প্যাকেটগুলি যেগুলি অবরুদ্ধ হোস্টগুলি থেকে নেই তা এখনও অনুমোদিত বা অস্বীকৃত মঞ্জুরিপ্রাপ্ত এবং কাস্টম চেইনটি সম্পন্ন হওয়ার পরে ইনপুট চেইনের দ্বিতীয় নিয়মের বিরুদ্ধে পরীক্ষা করা হবে।
যে সমস্ত প্যাকেট 22 বন্দরের জন্য নির্ধারিত ছিল না তারা INPUT চেইনে প্রথম নিয়মটি পাস করেছে এবং ইনপুট নিয়ম # 2 এও মূল্যায়ন করা হবে।
2 নম্বর ইনপুট নিয়মটিকে এটি একটি স্টেটফুল ফায়ারওয়াল হিসাবে চিহ্নিত করা হয়েছে যা সংযোগগুলি ট্র্যাক করে। এর কিছু সুবিধা রয়েছে, কেবলমাত্র নতুন সংযোগের প্যাকেটগুলি সম্পূর্ণ নিয়ম-সেট-এর বিপরীতে চেক করা দরকার, তবে একবার অনুমোদিত বা সম্পর্কিত সংযোগের অতিরিক্ত প্যাকেটগুলি আরও চেক না করে গ্রহণ করা হবে।
ইনপুট নিয়ম # 2 এর সাথে সমস্ত ওপেন এবং সম্পর্কিত সংযোগ এবং প্যাকেটগুলির সাথে মেলে যেগুলি এই নিয়মের সাথে মেলে এবং আরও মূল্যায়ন করার প্রয়োজন হবে না।
দ্রষ্টব্য: রাষ্ট্রীয় ফায়ারওয়ালের কনফিগারেশনের নিয়ম পরিবর্তনগুলি কেবল নতুন সংযোগগুলিতে প্রভাব ফেলবে, প্রতিষ্ঠিত সংযোগ নয়।
বিপরীতে একটি সাধারণ প্যাকেট ফিল্টার ট্র্যাকিং সংযোগের স্থিতি ছাড়াই প্রতিটি প্যাকেট পুরো নিয়ম-সেটটির বিপরীতে পরীক্ষা করে। এই ধরনের ফায়ারওয়ালে কোনও রাজ্যের কীওয়ার্ড ব্যবহার করা হত না।
ইনপুট নিয়ম # 3 বেশ বিরক্তিকর, লুপব্যাকের সাথে সংযুক্ত সমস্ত ট্র্যাফিক ( loবা 127.0.0.1) অনুমোদিত।
ইনপুট বিধি 4, 5 এবং 6 টিসিপি বন্দরগুলি 22, 80 এবং 443 (শ্রদ্ধার জন্য ডিফল্ট পোর্টস SS এসএসএইচ, এইচটিটিপি এবং এইচটিটিপিএস) খোলার জন্য নতুন সংযোগে অ্যাক্সেস প্রদানের মাধ্যমে ব্যবহৃত হয় (বিদ্যমান সংযোগগুলি ইতিমধ্যে ইনপুট বিধি 2 দ্বারা অনুমোদিত)।
স্টেটলেস ফায়ারওয়ালে এই বিধিগুলি রাষ্ট্রীয় বৈশিষ্ট্য ছাড়াই উপস্থিত হবে:
4 44295 2346K ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0
5 40120 2370K ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0
6 16409 688K ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0
অথবা
-A INPUT -p tcp -m tcp --dport 22 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 80 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 443 -j ACCEPT
চূড়ান্ত ইনপুট নিয়ম, # 7 একটি নিয়ম যা সমস্ত ট্র্যাফিককে ব্লক করে যা ইনপুট বিধি 1-7 এ অ্যাক্সেস পায় নি। একটি মোটামুটি প্রচলিত সম্মেলন: অনুমোদিত নয় এমন সমস্ত কিছুই অস্বীকার করা হয়েছে। তত্ত্বের ক্ষেত্রে এই নিয়মটি বাদ দেওয়া যেতে পারে ডিফল্ট POLICY সেটাকে প্রত্যাখ্যান করে।
সর্বদা পুরো চেইনটি তদন্ত করুন।
4. আপনার পরিবেশ জানুন
4.1। সফ্টওয়্যার ফায়ারওয়ালের সেটিংসটি নেটওয়ার্কের অন্য যে কোনও স্থানে রক্ষণাবেক্ষণ করা সুরক্ষা সেটিংসকে প্রভাবিত করবে না, অর্থাত্ iptablesআপনার নেটওয়ার্কের রাউটারগুলিতে বা অন্য ফায়ারওয়ালগুলিতে অশোধিত অ্যাক্সেস নিয়ন্ত্রণ তালিকাগুলি দিয়ে একটি নেটওয়ার্ক পরিষেবা খোলার পরেও ট্র্যাফিক অবরোধ করতে পারে ...
4.2। যখন কোনও পরিষেবা শুনছে না তখন আপনি ফায়ারওয়াল সেটিংস নির্বিশেষে সংযোগ করতে এবং কোনও সংযোগ অস্বীকার করার ত্রুটি পেতে সক্ষম হবেন না । অতএব:
- নিশ্চিত করুন যে কোনও পরিষেবা শুনছে (সঠিক নেটওয়ার্ক ইন্টারফেস / আইপি-ঠিকানাতে) এবং পোর্ট নম্বরগুলি ব্যবহার করে আপনি আশা করছেন
[sudo] netstat -plnutবা বিকল্পভাবে ব্যবহার করছেন ss -tnlp।
- যদি আপনার পরিষেবাগুলি এখনও চলছে বলে মনে না করা হয়, তবে নেটক্যাট উদাহরণস্বরূপ একটি সাধারণ শ্রোতার অনুকরণ করুন:
[sudo] nc -l -p 123বা আপনার openssl s_server -accept 1234 [options] যদি কোনও টিএলএস / এসএসএল শ্রোতার প্রয়োজন হয় ( man s_serverবিকল্পগুলির জন্য পরীক্ষা করুন)।
- যাচাই করুন যে আপনি সার্ভারে নিজেকে IE থেকে সংযোগ করতে পারেন
telnet <IP of Server> 123বা echo "Hello" | nc <IP of Server> 123যখন TLS / SSL এর নিরাপদ পরিষেবার পরীক্ষার বা openssl s_client -connect <IP of Server>:1234, একটি দূরবর্তী হোস্ট থেকে একই চেষ্টা করার আগে।
4.3। আপনার পরিষেবাগুলি দ্বারা ব্যবহৃত প্রোটোকলগুলি বুঝতে tand আপনি যথাযথভাবে বুঝতে পারবেন না এমন পরিষেবাগুলি আপনি সঠিকভাবে সক্ষম / অক্ষম করতে পারবেন না। এই ক্ষেত্রে:
- টিসিপি বা ইউডিপি ব্যবহার হয় বা উভয়ই (ডিএনএসের মতো)?
- পরিষেবাটি কি কোনও স্থির ডিফল্ট পোর্ট ব্যবহার করে (উদাহরণস্বরূপ কোনও ওয়েবসভারের জন্য টিসিপি পোর্ট 80 এর মতো কিছু)?
- বিকল্পভাবে একটি গতিশীল পোর্ট নম্বর নির্বাচন করা যায় যা পরিবর্তিত হতে পারে (যেমন পোর্টম্যাপের সাথে নিবন্ধিত ক্লাসিক এনএফএসের মতো আরপিসি পরিষেবাদি)?
- প্যাসিভ মোড ব্যবহার করার জন্য যখন কনফিগার করা হয় তখন কুখ্যাত এফটিপি এমনকি দুটি বন্দর ব্যবহার করে , একটি স্থির এবং একটি গতিশীল পোর্ট নম্বর ...
- এতে থাকা পরিষেবা, বন্দর এবং প্রোটোকল বিবরণ অবশ্যই
/etc/servicesকোনও বন্দর ব্যবহার করে প্রকৃত পরিষেবার সাথে মেলে না।
4.4। কার্নেল প্যাকেট ফিল্টারটি কেবলমাত্র নেটওয়ার্ক সংযোগকে সীমাবদ্ধ করতে পারে না:
- সেলইনাক্স নেটওয়ার্ক পরিষেবাদিগুলিকে সীমাবদ্ধ করতে পারে।
getenforceSELinux চলছে কিনা তা নিশ্চিত করবে।
- যদিও কিছুটা অস্পষ্ট হয়ে উঠেছে টিসিপি র্যাপার্স এখনও নেটওয়ার্ক সুরক্ষা কার্যকর করার একটি শক্তিশালী সরঞ্জাম।
ldd /path/to/service |grep libwrapএবং /hosts.[allow|deny]নিয়ন্ত্রণ ফাইলগুলির সাথে পরীক্ষা করুন ।
5. INPUTবা FORWARDচেইন
চেইনের ধারণাটি এখানে আরও পুঙ্খানুপুঙ্খভাবে ব্যাখ্যা করা হয়েছে তবে এর সংক্ষিপ্তসারটি হ'ল:
INPUTশৃঙ্খল আপনি যেখানে খুলুন এবং / অথবা যেখানে আপনি iptables- র কমান্ড ইস্যু পরিষেবার জন্য ঘনিষ্ঠ নেটওয়ার্কের পোর্ট, স্থানীয়ভাবে চলমান হোস্ট চালু আছে।
FORWARDশৃঙ্খল যেখানে আপনি যে অন্যান্য সিস্টেমে কার্নেল দ্বারা ফরওয়ার্ড পরার প্রকৃত সিস্টেম ফিল্টার ট্রাফিক নিয়ম, কিন্তু Docker পাত্রে এবং ভার্চুয়াল গেস্ট সার্ভার সার্ভার যখন আপনার Linux মেশিন একটি সেতু, রাউটার, হাইপারভাইসরের হিসাবে অভিনয় এবং / অথবা নেটওয়ার্ক ঠিকানা নেই প্রয়োগ অনুবাদ এবং পোর্ট ফরওয়ার্ডিং
একটি সাধারণ ভ্রান্ত ধারণাটি হ'ল যেহেতু কোনও ডকার ধারক বা কেভিএম অতিথি স্থানীয়ভাবে চালিত হয়, তাই প্রয়োগ করা ফিল্টারের নিয়মগুলি INPUT চেইনে থাকা উচিত, তবে সাধারণত এটি হয় না।
6. কার্নেল মডিউল
যেহেতু প্যাকেট ফিল্টারটি লিনাক্স কার্নেলের মধ্যে চলে তাই এটি ডায়নামিক মডিউল হিসাবে সংকলন করা যায়, একাধিক মডিউল আসলে। বেশিরভাগ ডিস্ট্রিবিউশনে নেটফিল্টার মডিউল হিসাবে অন্তর্ভুক্ত থাকে এবং প্রয়োজনীয় নেটফিল্টার মডিউলগুলি প্রয়োজনীয় হিসাবে কার্নেলের মধ্যে লোড হয়ে যাবে, তবে কিছু মডিউলগুলির জন্য ফায়ারওয়াল প্রশাসককে ম্যানুয়ালি এটি লোড হওয়া নিশ্চিত করতে হবে। এটি প্রাথমিকভাবে সংযোগ ট্র্যাকিং মডিউলগুলি নিয়ে উদ্বেগ করে, যেমন nf_conntrack_ftpলোড করা যায় insmod।
চলমান কার্নেলের মধ্যে বর্তমানে লোড হওয়া মডিউলগুলি প্রদর্শিত হতে পারে lsmod।
মডিউলগুলি নিশ্চিত করার পদ্ধতিটি পুনরায় বুটগুলি জুড়ে অবিচ্ছিন্নভাবে লোড করা হয় লিনাক্স বিতরণের উপর নির্ভর করে।