দমনকারী ব্যবহার করার সময় জটিল জটিল ফায়ারওয়াল (ইউএফডাব্লু) কোনও কিছুই ব্লক করে না


44

এটি আমার প্রথমবারের মতো উবুন্টু সার্ভার (14.04 এলটিএস) সেটআপ করা হচ্ছে এবং ফায়ারওয়াল (ইউএফডাব্লু) কনফিগার করতে আমার সমস্যা হচ্ছে।

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

sudo ufw disable

sudo ufw reset
sudo ufw default deny incoming
sudo ufw default allow outgoing

sudo ufw allow 22/tcp
sudo ufw allow 80/tcp

sudo ufw enable
sudo reboot

তবে আমি এখনও এই মেশিনের অন্যান্য পোর্টের ডাটাবেসের সাথে সংযোগ করতে পারি । আমি কী ভুল করছি সে সম্পর্কে কোনও ধারণা?

সম্পাদনা : এই ডাটাবেসগুলি ডকারের পাত্রে রয়েছে। এটি কি সম্পর্কিত হতে পারে? এটা কি আমার ইউএফডু কনফিগারেশনকে ওভাররাইড করছে?

EDIT2 : এর আউটপুটsudo ufw status verbose

Status: active
Logging: on (low)
Default: deny (incoming), allow (outgoing), deny (routed)
New profiles: skip

To                         Action      From
--                         ------      ----
22/tcp                     ALLOW IN    Anywhere
80/tcp                     ALLOW IN    Anywhere
22/tcp (v6)                ALLOW IN    Anywhere (v6)
80/tcp (v6)                ALLOW IN    Anywhere (v6)

কি ডাটাবেস? কোন বন্দর? আপনি কি নিশ্চিত যে এটি একই মেশিন? আউটপুট কি ufw status
দক্ষিণায়ণ

হ্যাঁ, আমি নিশ্চিত এটি একই মেশিন। ডাটাবেসটি ইনফ্লাক্সডিবি (একটি ডকার পাত্রে) পোর্ট সহ 8083এবং 8086। আমি ufw status verboseপ্রশ্নের আউটপুট যুক্ত । ধন্যবাদ।
ESala

উত্তর:


64

সমস্যাটি -pপাত্রে পতাকা ব্যবহার করা হয়েছিল ।

দেখা যাচ্ছে যে ডকার সরাসরি আপনার উপর পরিবর্তন করে iptablesযা এগুলি প্রদর্শিত হয় না ufw status

সম্ভাব্য সমাধানগুলি হ'ল:

  1. -pপতাকা ব্যবহার বন্ধ করুন । পরিবর্তে ডকার লিঙ্কিং বা ডকার নেটওয়ার্কগুলি ব্যবহার করুন।

  2. পাত্রে স্থানীয়ভাবে বেঁধে রাখুন যাতে সেগুলি আপনার মেশিনের বাইরে প্রকাশিত হয় না:

    docker run -p 127.0.0.1:8080:8080 ...

  3. আপনি যদি -pপতাকাটি ব্যবহার করার জন্য জেদ করেন , তবে ডককে বলুন যে iptablesএগুলিকে অক্ষম করে /etc/docker/daemon.jsonএবং পুনরায় চালু করে আপনার স্পর্শ করবেন না :

    { "iptables" : false }

আমি বিকল্প 1 বা 2 প্রস্তাব দিচ্ছি যে সাবধানতা অবলম্বন করুন 3 বিকল্পটির পার্শ্ব-প্রতিক্রিয়া রয়েছে , যেমন পাত্রে ইন্টারনেটের সাথে সংযোগ স্থাপনে অক্ষম হয়ে যায়।


8
এটি এতটাই দরকারী - আমি যে বন্দরগুলিতে অ্যাক্সেস করতে পারিনি সেগুলিতে অ্যাক্সেস করতে পেরে আমি পাগল হয়ে যাচ্ছিলাম। আইপটিবলস = মিথ্যা ব্যবহারের ফলে অনেকটা ব্রেক হয়, যেমন পাত্রে লোকালহোস্টে অ্যাক্সেসযোগ্য হয়ে থাকে, যেমন বিপরীত প্রক্সি করার জন্য ying কনটেইনারটি সঠিক শুনেছে তা নিশ্চিত করে নেওয়া ভাল, -80 80 -80 ব্যবহার করবেন না তবে -p 127.0.0.1:80:80 বা 127.0.0.1:3000:80 এর মতো আলাদা পোর্ট ব্যবহার করুন যাতে এনজিনেক্স বা অ্যাপাচি এবং কোনও বন্দরের বিপরীতে প্রক্সিংয়ের জন্য নয় সংঘর্ষে।
আন্দ্রেয়াস রেফ 19

2
@ আন্ড্রেস রেফ আপনি ঠিক বলেছেন, তবে ইদানীং আমি -pযথাসম্ভব এড়ানো ভাল বলে মনে করেছি । উদাহরণস্বরূপ, বিপরীত প্রক্সিটির ক্ষেত্রে আমি শ্রমিক পাত্রে কোনও পোর্ট ম্যাপ করি না, এবং তারপরে তার নিজস্ব ধারকটিতে nginx রেখে অন্যদের কাছে -p 80:80একটি --linkরাখি। এইভাবে কোনও বন্দর সংঘর্ষ হতে পারে না এবং অ্যাক্সেসের একমাত্র পয়েন্টটি এনজিএনএক্সের মাধ্যমে।
ESala

1
তৃতীয় সাবধানতা অবলম্বনের জন্য আপনাকে এই পোস্টটি পরীক্ষা করে দেখুন! svenv.nl/unixandlinux/dockerufw
হেন্ক

1
গুরুত্বপূর্ণ : /etc/default/dockerআপস্টার্ট কনফিগারেশন দ্বারা ব্যবহৃত একটি কনফিগারেশন ফাইল। আপনি যদি আপস্টার্ট থেকে সিস্টেমডে চলে এসেছেন তবে এই ফাইলটি ব্যবহার করা হবে না।
orshachar

@ ইশালা আপনার উত্তরটি সঠিকভাবে চিহ্নিত হওয়ার পরে এটি সঠিকভাবে চিহ্নিত করার বিষয়ে চিন্তা করা উচিত।
সিটি ব্রাউন

8

16.04 নতুন চ্যালেঞ্জ উপস্থাপন করে। আমি সমস্ত ধাপ হিসাবে দেখানো করেনি ufw ফায়ারওয়ালের পিছনে Docker রানিং কিন্তু আমি 16,04 উপর Docker প্লাস UFW কাজ পেতে পারে। অন্য কথায়, আমি সমস্ত ডকার বন্দর যা-ই করলাম তা বিশ্বব্যাপী ইন্টারনেটে প্রকাশিত হয়েছিল। যতক্ষণ না আমি এটি খুঁজে পেয়েছি: আইপিটিবেলেস / ফায়ারওয়ালডে হস্তক্ষেপ না করার জন্য ডকারকে কীভাবে 1.12+ সেট করবেন

আমাকে ফাইলটি তৈরি করতে হবে /etc/docker/daemon.jsonএবং নিম্নলিখিতগুলি লিখতে হয়েছিল:

{
    "iptables": false
}

আমি তখন জারি sudo service docker stopতারপর sudo service docker startঅবশেষে Docker কেবল UFW যথাযথ নিয়ম অনুসরণ করা হয়।

অতিরিক্ত ডেটা: ডকার ইউএফডাব্লুকে ছাড়িয়ে যায়!


উবুন্টু 16.04 এবং ডকার সংস্করণ 17.09 এর সাথে, এই দ্রবণটি ধারকগুলি থেকে বহির্মুখী সংযোগ বিচ্ছিন্ন করে। প্রতিক্রিয়া জিজ্ঞাসা করুন জিজ্ঞাসা / নম্বরে
/

5

যদি আপনি সিস্টেমেডের init সিস্টেমটি ব্যবহার করেন (উবুন্টু 15.10 এবং তারপরে) সম্পাদনা করুন /etc/docker/daemon.json(এটি উপস্থিত না থাকলে এটি তৈরি করার প্রয়োজন হতে পারে), নিশ্চিত হয়ে নিন যে এটিতে iptablesকীটি কনফিগার করা আছে:

{   "iptables" : false }

সম্পাদনা করুন : এর ফলে আপনার অভ্যন্তরের পাত্রে ইন্টারনেটের সংযোগ হারাতে পারে

আপনার যদি ইউএফডাব্লু সক্ষম হয়ে থাকে তবে যাচাই করুন যে আপনি অভ্যন্তরের পাত্রে থেকে ইন্টারনেট অ্যাক্সেস করতে পারবেন। যদি না - আপনি সংজ্ঞায়িত করতে হবে DEFAULT_FORWARD_POLICYযেমন ACCEPTউপর /etc/default/ufwএবং প্রয়োগ কৌতুক এখানে বর্ণিত: https://stackoverflow.com/a/17498195/507564


2

ডকার চালানোর সময় এবং পোর্ট ম্যাপিং করার সময় একটি দ্রুত কাজ করা হয়। আপনি সর্বদা করতে পারেন

docker run ...-p 127.0.0.1:<ext pot>:<internal port> ...

আপনার ডকারকে বাইরে থেকে অ্যাক্সেস করা থেকে বিরত রাখতে।


2

/etc/docker/daemon.jsonসামগ্রী সহ ব্যবহার

{
  "iptables": false
}

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

নির্দিষ্ট আইপি-তে ধারককে বাঁধাই করতে একই প্রয়োগ হয়। আপনি এটি করতে না চাইতে পারেন। চূড়ান্ত বিকল্পটি হ'ল একটি ধারক তৈরি করা এবং এটি ইউএফডাব্লু এর পিছনে রাখুন কী ঘটেছিল এবং কীভাবে আপনি এই ধারকটি তৈরি করেন তা বিবেচনা করে না , সুতরাং এর সমাধান রয়েছে:

আপনি /etc/docker/daemon.jsonফাইল তৈরির পরে , অনুরোধ করুন:

sed -i -e 's/DEFAULT_FORWARD_POLICY="DROP"/DEFAULT_FORWARD_POLICY="ACCEPT"/g' /etc/default/ufw
ufw reload

সুতরাং আপনি গ্রহণ এবং ব্যবহারের জন্য ইউএফডাব্লুতে ডিফল্ট ফরোয়ার্ড নীতি সেট আপ করেছেন:

iptables -t nat -A POSTROUTING ! -o docker0 -s 172.17.0.0/16 -j MASQUERADE

আপনি যদি ডকার-কমপোজ ব্যবহার করতে চলেছেন তবে উপরের কমান্ডের আইপিটি নেটওয়ার্ক ডকার-কমপোজ আইপি চালানোর সাথে সাথে তৈরি করা উচিত docker-compose up

আমি এই নিবন্ধে আরও ব্যাপকভাবে সমস্যা এবং সমাধান বর্ণনা করেছি

আশা করি এটা সাহায্য করবে!


1

আমার ক্ষেত্রে আমি নির্দিষ্ট আইপি থেকে ডকার অ্যাক্সেসের অনুমতি দেওয়ার জন্য iptables সংশোধন করে শেষ করেছি।

অনুযায়ী ESala এর উত্তর :

আপনি যদি -pধারকগুলিতে পতাকা ব্যবহার করেন তবে ডকার ইউফডাব্লু উপেক্ষা করে সরাসরি আইপটিবেলে পরিবর্তন আনবে।

ডকার দ্বারা iptables এ রেকর্ডের উদাহরণ

'ডকার' চেইনে যাত্রা:

-A PREROUTING -m addrtype --dst-type LOCAL -j DOCKER
-A OUTPUT ! -d 127.0.0.0/8 -m addrtype --dst-type LOCAL -j DOCKER

'ডকার' চেইন থেকে ধারক পর্যন্ত প্যাকেট ফরোয়ার্ড করা:

-A DOCKER -i docker0 -j RETURN
-A DOCKER ! -i docker0 -p tcp -m tcp --dport 6379 -j DNAT --to-destination 172.17.0.3:6379

কেবলমাত্র নির্দিষ্ট উত্স আইপি (উদাহরণস্বরূপ 1.1.1.1) থেকে ডকারের চেইনে অ্যাক্সেসের অনুমতি দেওয়ার জন্য আপনি আইপটিবলগুলি সংশোধন করতে পারেন :

-A PREROUTING -s 1.1.1.1 -m addrtype --dst-type LOCAL -j DOCKER
-A OUTPUT -s 1.1.1.1 ! -d 127.0.0.0/8 -m addrtype --dst-type LOCAL -j DOCKER

আপনি iptables নিয়মগুলি ডাম্প, সম্পাদনা এবং পুনরুদ্ধার করতে iptables-save > /tmp/iptables.confএবং ব্যবহার করতে চাইতে পারেন iptables-restore < /tmp/iptables.conf


0

আপনি যখন কন্টেইনারটি শুরু করেন --network = হোস্টটি ব্যবহার করুন সুতরাং ডকার ডিফল্ট ব্রিজ নেটওয়ার্কের পরিবর্তে পৃথক পৃথক হোস্ট-নেটওয়ার্কে পোর্ট ম্যাপ করবে। ব্রিজড নেটওয়ার্ক ব্লক করার কোনও আইনি উপায় আমি দেখতে পাচ্ছি না। বিকল্পভাবে আপনি বিচ্ছিন্নতার সাথে কাস্টম ব্যবহারকারী-সংজ্ঞায়িত নেটওয়ার্ক ব্যবহার করতে পারেন।


0
  1. আপনার ডকার কনসোলে লগইন করুন:

    sudo ডকার এক্সিকিউটিভ -i -t ডকার_আইমেজ_নেস / বিন / বাশ

  2. এবং তারপরে আপনার ডকার কনসোলের ভিতরে:

    sudo apt-get update
    sudo apt-get install ufw
    sudo ufw allow 22
    
  3. আপনার ufw বিধি যুক্ত করুন এবং ufw সক্ষম করুন

    sudo ufw সক্ষম

    • আপনার ডকার চিত্রটি --cap-add = NET_ADMIN দিয়ে শুরু করা দরকার

"NET_ADMIN" ডকার বিকল্প সক্ষম করতে:

1. স্টপ পাত্রে:

ডকার আপনার কন্টেইনারকে থামান; 2. ধারক আইডি পান:

ডকার আপনার কন্টেইনার পরিদর্শন; 3.Modify হোস্টকনফিগ.জসন (ডিফল্ট ডকার পাথ: / ভার / লিব / ডকার, আপনি নিজের পরিবর্তন করতে পারেন)

vim /var/lib/docker/containers/containerid/hostconfig.json

৪. "ক্যাপএড ​​করুন" অনুসন্ধান করুন এবং ["NET_ADMIN"] এ নালটি পরিবর্তন করুন;

...., "ভলিউমফ্রম": নাল, "ক্যাপএডড": ["এনইএডিএডএমআইএন"], "ক্যাপড্রপ": নাল, .... 5. হোস্ট মেশিনে পুনরায় চালু করুন ডকার;

পরিষেবা ডকার পুনরায় চালু করুন; 6.আপনারকোন্যাটিনিয়ার শুরু করুন;

ডকার আপনার কন্টেইনার শুরু করুন;


0

আমি docker-composeবেশ কয়েকটি কনটেইনার শুরু করতাম এবং সমস্যাও ছিল যে একটি বন্দরে ufw নিয়ম উপেক্ষা করে বিশ্বের সামনে প্রকাশ করা হয়েছিল।

কেবলমাত্র আমার ডকারের ধারকগুলিতে বন্দরটি উপলব্ধ করার ফিক্সটি ছিল আমার docker-compose.ymlফাইলটিতে এই পরিবর্তন :

ports:
- "1234:1234"

এটি:

ports:
- "1234"

এখন অন্য ডকার-ধারকরা এখনও পোর্টটি ব্যবহার করতে পারে তবে আমি বাইরে থেকে এটি অ্যাক্সেস করতে পারি না।

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