নিরাপত্তা
একটি Antimatter সার্ভারকে নিরাপদ করার চেকলিস্ট: কী এক্সপোজ করতে হবে, কোন সীমা এবং প্রাইভেসি সেটিংস পর্যালোচনা করতে হবে, সার্ভার কোন বাইরের সার্ভিসগুলির সাথে যোগাযোগ করে, এবং একটি নিরাপত্তা সমস্যা রিপোর্ট করার পদ্ধতি।
কী এক্সপোজ করতে হবে
| পোর্ট | সার্ভিস | এক্সপোজার |
|---|---|---|
| 443/tcp, 443/udp, 80/tcp | আপনার HTTPS প্রক্সি (Caddy বা nginx) | পাবলিক: এটিই Antimatter-এ পৌঁছানোর মাধ্যম। |
| 8443/udp এবং 8443/tcp | কল মিডিয়া | পাবলিক, যদি আপনার নেটওয়ার্কের বাইরের মানুষরা কল ব্যবহার করেন। |
| 8065/tcp | Antimatter-এর ওয়েব সার্ভার | শুধুমাত্র প্রক্সির জন্য: এটি 127.0.0.1-এ পাবলিশ করুন (HTTP_PORT=127.0.0.1:8065)। |
| 8067/tcp | মেট্রিকস | শুধুমাত্র প্রাইভেট নেটওয়ার্কের জন্য, যখন সক্রিয় করা থাকে। কোনো সাইন-ইন নেই। |
| 8074/tcp এবং udp | ক্লাস্টার গসিপ | শুধুমাত্র ক্লাস্টার নোডগুলির মধ্যে। |
| 5432, 9000, 8080, 8066 | PostgreSQL, ফাইল স্টোরেজ, GIF সার্ভিস, পুশ প্রক্সি | কখনোই নয়। কম্পোজ ফাইলগুলো এগুলিকে কোনো পাবলিশ করা পোর্ট ছাড়াই অভ্যন্তরীণ নেটওয়ার্কে রাখে। |
সাইটের কম্পোজ ফাইল প্রতিটি কন্টেইনারকে no-new-privileges সহ চালায়, Antimatter-কে একটি ডিস্ট্রোলস ইমেজে একটি অপ্রাইভিলেজড ইউজার হিসেবে চালায়, এবং GIF সার্ভিসকে একটি রিড-অনলি ফাইল সিস্টেম সহ চালায়। ডাটাবেস, স্টোরেজ এবং GIF সার্ভিস একটি ইন্টারনেট অ্যাক্সেস ছাড়া নেটওয়ার্কে অবস্থিত।
ইনস্টল করার পর চেকলিস্ট
- সার্ভারে অন্য কেউ পৌঁছানোর আগে প্রথম অ্যাডমিন অ্যাকাউন্ট তৈরি করুন (ইনস্টল করা)।
- Antimatter-কে শুধুমাত্র HTTPS-এর মাধ্যমে সার্ভ করুন, এবং সাইট URL-টি
https://ঠিকানায় সেট করুন (ডোমেইন এবং HTTPS)। .env,config.jsonএবং TLS কীগুলি শুধুমাত্র রুট (বা সার্ভারের ইউজার) দ্বারা পড়া যাক এমনভাবে রাখুন:chmod 600 .env।- নির্ধারণ করুন কে অ্যাকাউন্ট তৈরি করতে পারে, কমিউনিটি পাবলিক না হলে ওপেন সার্ভার সক্রিয় করুন বন্ধ রাখুন, এবং ইমেল কাজ করার পর ইমেইল ভেরিফিকেশন আবশ্যক চালু করুন (সাইন-ইন এবং অ্যাকাউন্ট)।
- মাল্টি-ফ্যাক্টর অথেনটিকেশন চালু করুন, এবং অন্তত অ্যাডমিনদের অ্যাকাউন্টে এটি বাধ্যতামূলক করুন, অথবা আপনার আইডেন্টিটি প্রোভাইডারের ব্যবহার করুন।
- নিচের বাইরের সংযোগগুলি পর্যালোচনা করুন, বিশেষ করে কল যে STUN সার্ভারটি ডিফল্টভাবে ব্যবহার করে।
- মডেল সংযোগ যোগ করার আগে, AI এনক্রিপশন কী (
AM_AI_ENCRYPTION_KEY) সেট করুন এবং ডেটাবেস ব্যাকআপ থেকে আলাদাভাবে একটি কপি সংরক্ষণ করুন (AI)। - ব্যাকআপ নিন, এবং একটি রিস্টোর পরীক্ষা করুন (ব্যাকআপ এবং আপগ্রেড)।
- ইমেজ বা প্যাকেজগুলো আপ-টু-ডেট রাখুন: নিরাপত্তা সংশোধনীগুলো নতুন সংস্করণের সাথে আসে।
রেট লিমিটিং
সার্ভার প্রতিটি ক্লায়েন্ট কতগুলো API রিকোয়েস্ট পাঠাতে পারে তা সীমাবদ্ধ করতে পারে। ডিফল্ট অবস্থায় এটি বন্ধ থাকে। সিস্টেম কনসোল › এনভাইরনমেন্ট › রেট লিমিটিং-এ:
| সেটিং | কী | ডিফল্ট |
|---|---|---|
| রেট লিমিটিং চালু করুন | RateLimitSettings.Enable | বন্ধ |
| প্রতি সেকেন্ডে সর্বোচ্চ কোয়েরি | RateLimitSettings.PerSec | 10 |
| সর্বোচ্চ বার্স্ট সাইজ | RateLimitSettings.MaxBurst | 100 |
| মেমরি স্টোর সাইজ | RateLimitSettings.MemoryStoreSize | ১০০০০ ক্লায়েন্ট ট্র্যাক করা হয় |
| রিমোট ঠিকানা অনুযায়ী রেট লিমিট পরিবর্তন করুন | RateLimitSettings.VaryByRemoteAddr | অন |
| ইউজার অনুযায়ী রেট লিমিট পরিবর্তন করুন | RateLimitSettings.VaryByUser | বন্ধ |
| HTTP হেডার অনুযায়ী রেট লিমিট পরিবর্তন করুন | RateLimitSettings.VaryByHeader | খালি |
প্রক্সির পেছনে, শুধুমাত্র ঠিকানা অনুযায়ী সীমাবদ্ধতা তখনই কাজ করে যখন সার্ভার প্রতিটি ক্লায়েন্টের ঠিকানা জানে (ServiceSettings.TrustedProxyIPHeader এবং ServiceSettings.TrustedProxyIPs, দেখুন প্রক্সির পেছনে ক্লায়েন্ট ঠিকানা)। অন্যথায় প্রতিটি রিকোয়েস্ট প্রক্সি থেকে আসা মনে হবে, এবং সবাই একই সীমাবদ্ধতা শেয়ার করবে। IP ফিল্টারিং এবং অডিট লগের ঠিকানাগুলোর ক্ষেত্রেও একই কথা প্রযোজ্য।
সাইন-ইন চেষ্টা আলাদাভাবে সীমাবদ্ধ: সর্বোচ্চ লগইন চেষ্টা (১০) — এই সংখ্যক ভুল পাসওয়ার্ডের পর একটি অ্যাকাউন্ট লক হয়ে যায়।
IP ফিল্টারিং
সিস্টেম কনসোল › সাইট কনফিগারেশন › IP ফিল্টারিং IP ঠিকানা অনুযায়ী সার্ভারে অ্যাক্সেস সীমাবদ্ধ করে, allow এবং deny নিয়মসহ (প্রতিটিতে একটি ঠিকানা বা CIDR রেঞ্জ)। IP ফিল্টারিং সক্রিয় করুন চালু থাকলে, যাদের ঠিকানা কোনো deny নিয়মের সাথে মিলে, অথবা allow নিয়ম থাকলে কোনো allow নিয়মের সাথে না মিলে, তারা সার্ভারে পৌঁছাতে পারে না। পেজটি এমন নিয়ম প্রত্যাখ্যান করে যা আপনার নিজের ঠিকানা ব্লক করবে। প্রক্সির পেছনে, আগে ক্লায়েন্ট ঠিকানা সেটআপ করুন (প্রক্সির পেছনে ক্লায়েন্ট ঠিকানা): অন্যথায় প্রতিটি রিকোয়েস্ট প্রক্সি থেকে আসা মনে হবে।
আপলোড এবং ফাইল শেয়ারিং
| সেটিং | কোথায় | ডিফল্ট |
|---|---|---|
সর্বোচ্চ ফাইল সাইজ (FileSettings.MaxFileSize) | এনভাইরনমেন্ট › ফাইল স্টোরেজ | ১০০ MB। প্রক্সির রিকোয়েস্ট সাইজ সীমা কমপক্ষে এই পরিমাণ রাখুন। |
সর্বোচ্চ পেইলোড সাইজ (বাইট) (ServiceSettings.MaximumPayloadSizeBytes) | এনভাইরনমেন্ট › ওয়েব সার্ভার | ৩০০০০০: ফাইল আপলোড ছাড়া সবচেয়ে বড় API রিকোয়েস্ট |
ফাইল শেয়ারিং অনুমতি দিন (FileSettings.EnableFileAttachments) | সাইট কনফিগারেশন › ফাইল শেয়ারিং এবং ডাউনলোড | অন |
| মোবাইলে ফাইল আপলোড অনুমোদিত, মোবাইলে ফাইল ডাউনলোড অনুমতি দিন | সাইট কনফিগারেশন › ফাইল শেয়ারিং এবং ডাউনলোড | অন |
পাবলিক ফাইল লিংক সক্রিয় করুন (FileSettings.EnablePublicLink) | সাইট কনফিগারেশন › পাবলিক লিংক | বন্ধ: চালু থাকলে, লগইন ছাড়াই একটি ফাইল শেয়ার করার লিংক পাঠানো যায় |
SVG সক্রিয় করুন (ServiceSettings.EnableSVGs) | সাইট কনফিগারেশন › পোস্ট | নতুন সার্ভারে বন্ধ: চালু থাকলে, SVG ইমেজ ইনলাইন দেখানো হয় |
ফাইল সার্চ সক্ষম করুন (ServiceSettings.EnableFileSearch) | সাইট কনফিগারেশন › ফাইল শেয়ারিং এবং ডাউনলোড | অন: অফ থাকলে ক্লাসিক ওয়েব অ্যাপ এবং Fusion উভয়তেই সার্চ ফলাফলের Files ট্যাব থেকে ফাইল সার্চ লুকিয়ে থাকে |
ফাইল ইনডেক্সিং সক্ষম করুন (ElasticsearchSettings.EnableFileIndexing) | Environment › Elasticsearch, যেখানে Elasticsearch বা OpenSearch সেটআপ করা আছে | অন: অফ থাকলে নতুন বা পরিবর্তিত ফাইল ইনডেক্স করা বন্ধ হয়ে যায়, কিন্তু আগে ইনডেক্স করা ফাইলগুলো সার্চযোগ্য থাকে |
Antimatter আপলোড করা ফাইলে ম্যালওয়্যার স্ক্যান করে না।
প্রাইভেসি সেটিংস
সিস্টেম কনসোল › সাইট কনফিগারেশন › ব্যবহারকারী এবং টিমসমূহ-এ:
| সেটিং | কী | ডিফল্ট | এটি কী করে |
|---|---|---|---|
| ইমেইল ঠিকানা দেখান | PrivacySettings.ShowEmailAddress | অন | বন্ধ, সদস্যদের ইমেইল ঠিকানা অ্যাডমিনসমূহ ছাড়া অন্য কারো কাছে দেখানো হয় না। পাবলিক সার্ভারে এটি বন্ধ রাখুন। |
| পুরো নাম দেখান | PrivacySettings.ShowFullName | অন | বন্ধ, পুরো নাম লুকানো থাকে এবং এর বদলে ইউজারনেম দেখানো হয়। |
| উপেক্ষা, ব্লক এবং মেসেজ রিকোয়েস্ট সক্রিয় করুন | PrivacySettings.EnableUserBlocking | অন | নিচে দেখুন। |
| ব্যবহারকারীদের ডাইরেক্ট মেসেজ চ্যানেল খোলার অনুমতি দিন | TeamSettings.RestrictDirectMessage | Antimatter সার্ভারের যেকোনো ব্যবহারকারী | অথবা টিমের যেকোনো সদস্য: শুধুমাত্র যারা একই কমিউনিটি শেয়ার করেন। |
উপেক্ষা, ব্লক এবং মেসেজ রিকোয়েস্ট
উপেক্ষা, ব্লক এবং মেসেজ রিকোয়েস্ট চালু করুন অন থাকলে (ডিফল্ট), ব্যবহারকারীরা একে অপরকে উপেক্ষা এবং ব্লক করতে পারেন, এবং অচেনা ব্যক্তিদের থেকে আসা ডাইরেক্ট মেসেজগুলো স্বাভাবিকভাবে আসবে, মেসেজ রিকোয়েস্ট হিসেবে অপেক্ষা করবে, নাকি সরাসরি প্রত্যাখ্যান করা হবে তা বেছে নিতে পারেন (যাকে প্রত্যাখ্যান করা হয়েছে সে তাদের সাথে কোনো ডাইরেক্ট বা গ্রুপ মেসেজ শুরু করতে পারে না, বা এখনও গৃহীত হয়নি এমন কোনো মেসেজে লিখতে পারে না); প্রতিটি কমিউনিটির জন্য এই পছন্দগুলো আলাদা হতে পারে, এবং ব্যবহারকারীরা যেসব কমিউনিটি শেয়ার করেন সেগুলোর মধ্যে সবচেয়ে কঠোর নিয়মটি প্রযোজ্য হয়। এটি পাবলিক কমিউনিটির জন্য উপযুক্ত। যেসব কর্মক্ষেত্রে সহকর্মীদের সবসময় একে অপরকে যোগাযোগ করতে হয়, সেখানে এটি অফ করুন (AM_PRIVACYSETTINGS_ENABLEUSERBLOCKING=false): ডাইরেক্ট মেসেজের এই পছন্দগুলো আর প্রয়োগ করা হয় না, তবে ব্যবহারকারীদের তালিকা এবং পছন্দগুলো সংরক্ষিত থাকে এবং আপনি যদি এটি আবার অন করেন তবে তা পুনরায় প্রযোজ্য হবে। প্রতিটি কমিউনিটির ব্যবহারকারীরা অন্যদের কোন প্রোফাইল বিবরণ দেখতে পান তা যেকোনো অবস্থায় প্রয়োগ করা হয়; সিস্টেম অ্যাডমিন এবং ব্যক্তি নিজে সবসময় সবকিছু দেখতে পান।
সেশন এবং টোকেন
- সেশনের মেয়াদ এবং আইডল টাইমআউট: সাইন-ইন এবং অ্যাকাউন্ট দেখুন। ছোট সেশন মেয়াদ মানে হারানো ল্যাপটপ বা ফোন কম সময়ের জন্য সাইন-ইন থাকে।
- ব্যক্তিগত অ্যাক্সেস টোকেন সক্রিয় করুন (
ServiceSettings.EnableUserAccessTokens, বন্ধ) ব্যক্তিদের API টোকেন তৈরি করার অনুমতি দেয়; সর্বোচ্চ পার্সোনাল অ্যাক্সেস টোকেন মেয়াদ (দিন) এদের সীমা নির্ধারণ করে। উভয়ই সিস্টেম কনসোল › ইন্টিগ্রেশনসমূহ › ইন্টিগ্রেশন ম্যানেজমেন্ট-এ আছে। - সবাইকে একসাথে সাইন-আউট করতে, যেমন একটি সন্দেহজনক লঙ্ঘনের পর: সিস্টেম কনসোল › ব্যবহারকারী ব্যবস্থাপনা › ব্যবহারকারীসমূহ-এ সব সেশন বাতিল করুন।
- Antimatter-এর ইন্টারফেসে, ব্যবহারকারীরা তাদের নিজস্ব অ্যাকাউন্টে নতুন সাইন-ইন সম্পর্কে সতর্ক করা হয় যখন তারা সংযুক্ত থাকেন, এবং তারা নিজেই তা ডিসকানেক্ট করতে পারেন (দেখুন Where you are signed in)। সিস্টেম অ্যাডমিনদের অন্যদের সাইন-ইন সম্পর্কে জানানো হয় না।
বাইরের সার্ভিসের সাথে সংযোগ
Antimatter Mattermost, Inc. দ্বারা পরিচালিত কোনো সার্ভিসের সাথে যোগাযোগ করে না। এটি কোনো টেলিমেট্রি, ক্র্যাশ রিপোর্ট বা সিকিউরিটি আপডেট চেক পাঠায় না, এবং কোনো প্রোডাক্ট নোটিশ আনে না। Mattermost থেকে আনা এমন একটি কনফিগারেশন যেখানে Mattermost-এর কোনো সার্ভিসের (এর পুশ সার্ভিস, এর অ্যাপ মার্কেটপ্লেস, এর নোটিশ বা কলের জন্য এর STUN সার্ভার) নাম উল্লেখ থাকে, সেটি সার্ভারকে তাদের সাথে যোগাযোগ করায় না: ঐ ঠিকানাগুলো উপেক্ষিত হয়।
সার্ভার এবং অ্যাপসমূহ শুধুমাত্র যে বৈশিষ্ট্যগুলোর জন্য প্রয়োজন, এবং আপনি যে সার্ভিস কনফিগার করেন, তাদের সাথে যোগাযোগ করে:
| ফিচার | যোগাযোগ | ডিফল্টভাবে |
|---|---|---|
| কল: STUN দিয়ে পাবলিক ঠিকানা খোঁজা। সার্ভার এবং কলে যোগ দানোর প্রতিটি ব্যক্তি একটি রিকোয়েস্ট পাঠায়, যা STUN সার্ভারকে তার IP ঠিকানা এবং পোর্ট দেখায়। | Cloudflare-এর পাবলিক STUN সার্ভার, stun.cloudflare.com | চালু, যদি কলস অ্যাপ সক্রিয় থাকে। পরিবর্তন করতে, কলস দেখুন। |
লিংক প্রিভিউ: সার্ভার মেসেজে লিংক করা পেজগুলি ফেচ করে (ওয়েবসাইট লিংক প্রিভিউ সক্রিয় করুন, ServiceSettings.EnableLinkPreviews) | মানুষ যে ওয়েবসাইটগুলিতে লিংক করে | চালু। AM_SERVICESETTINGS_ENABLELINKPREVIEWS=false দিয়ে বন্ধ করুন। |
| মোবাইল অ্যাপে পুশ নোটিফিকেশন | আপনার নিজের পুশ প্রক্সি (পুশ নোটিফিকেশন) | বন্ধ, যতক্ষণ না আপনি এর ঠিকানা সেট করেন |
রিমোট অ্যাপ মার্কেটপ্লেস (PluginSettings.EnableRemoteMarketplace) | আপনি যে মার্কেটপ্লেস URL সেট করেছেন | বন্ধ, এবং কোনো ঠিকানা নেই |
| ইমেইল | আপনার SMTP সার্ভার | ডিফল্ট সার্ভার হলো localhost |
| মডেল সংযোগ (রিলেট, রিক্যাপ, অনুবাদ, রিড আলাউড, এজেন্ট এবং অ্যাপস), কমিউনিটি অ্যাডমিনদের নিজস্ব মডেল সংযোগ | সিস্টেম কনসোল › AI › মডেল কানেকশনসমূহ বা কোনো কমিউনিটির সেটিংসে (AI) যোগ করা AI প্রোভাইডারগুলো | যতক্ষণ না কেউ একটি যোগ করে, ততক্ষণ কোনোটি নেই |
| সিঙ্গেল সাইন-অন, AI চ্যাট অ্যাপের AI সার্ভিস, স্পিচ-টু-টেক্সট এবং অনুবাদ, আউটগোয়িং ওয়েবহুক, এবং Mail, Calendar, GitHub, GitLab বা Jira-এর মতো অ্যাপস | আপনি যে সার্ভিসগুলি কনফিগার করেন | বন্ধ, যতক্ষণ না আপনি সেগুলি কনফিগার করেন |
ডিফল্টভাবে সার্ভার এইগুলোর জন্য (লিংক প্রিভিউ, ওয়েবহুক, অ্যাপস, কমিউনিটি মডেল সংযোগ) ব্যক্তিগত এবং লুপব্যাক ঠিকানায় সংযোগ স্থাপন করতে অস্বীকার করে, যাতে একটি মেসেজ বা ইন্টিগ্রেশন আপনার অভ্যন্তরীণ নেটওয়ার্কে পৌঁছাতে না পারে। যেসব অভ্যন্তরীণ হোস্টে এটি পৌঁছাতে পারে, সেগুলো অপ্রমাণিত অভ্যন্তরীণ সংযোগ অনুমোদন করুন (ServiceSettings.AllowedUntrustedInternalConnections, সিস্টেম কনসোল › এনভাইরনমেন্ট › ডেভেলপার-এ) তালিকাভুক্ত করুন; সাইটের কম্পোজ ফাইলে সেখানে gifs তালিকাভুক্ত করা আছে।
ভালাবিলিটি রিপোর্ট করা
নিজস্বভাবে সিকিউরিটি সমস্যা রিপোর্ট করুন, Antimatter সিকিউরিটি পলিসি-তে যেভাবে বলা হয়েছে, পাবলিক ইস্যুতে নয়।