ম্যাক ওএস এক্স এর জন্য iptables সমতুল্য


55

আমি অনুরোধগুলি থেকে 192.168.99.100:80পাঠাতে চাই 127.0.0.1:8000। আমি লিনাক্সে এটি ব্যবহার করে এটি করব iptables:

iptables -t nat -A OUTPUT -p tcp --dport 80 -d 192.168.99.100 -j DNAT --to-destination 127.0.0.1:8000

আমি ম্যাকস এক্স এ একই জিনিসটি কীভাবে করব? আমি ipfwঅনেক সাফল্য ছাড়াই কমান্ডের সংমিশ্রণ চেষ্টা করেছিলাম :

ipfw add fwd 127.0.0.1,8000 tcp from any to 192.168.99.100 80

(আমার জন্য সাফল্য একটি ব্রাউজারের দিকে ইঙ্গিত করছে http://192.168.99.100এবং আমি যে বিকাশ করা সার্ভারে চলছে সেখান থেকে প্রতিক্রিয়া পেয়েছি localhost:8000)


আমরা কি ওএসএক্স ক্লায়েন্ট বা সার্ভারের সাথে কথা বলছি?
স্কট প্যাক

1
এটা তুষার চিতা।
নাফে

192.168.99.100:80 শোনার জন্য আপনি কেবল নিজের ওয়েব সার্ভারটি কনফিগার করতে পারবেন না এমন কোনও কারণ আছে?
জোরদাচে

1
@ জোরেডাচি 80 বন্দরে শুনার জন্য সুডোর প্রয়োজন এবং কিছু ওয়েবসার্ভগুলি সুডো দিয়ে নিরাপদে চালানোর জন্য পর্যাপ্ত সুযোগগুলি দ্রুত ততটা ফেলে না।
নবীন

উত্তর:


33

সুতরাং আমি এটি করার একটি উপায় খুঁজে পেয়েছি । আমি এটি পছন্দসই উপায় কিনা তা নিশ্চিত নই তবে এটি কার্যকর! আপনার প্রিয় শেল এ:

sudo ifconfig lo0 10.0.0.1 alias
sudo ipfw add fwd 127.0.0.1,9090 tcp from me to 10.0.0.1 dst-port 80

(উপনামটি lo0অনুপস্থিত অংশ বলে মনে হচ্ছে)

আপনি যদি এই নতুন উপন্যাসটির দিকে ইঙ্গিত করতে কোনও (নকল) ডোমেইন চান তবে নিশ্চিত হন / ইত্যাদি / হোস্টগুলিতে লাইন রয়েছে:

10.0.0.1 www.your-domain.com

4
আইপিএফডাব্লু ইয়োসেমাইটে (ম্যাক) কাজ করবে না এবং মনে হচ্ছে তাকে
অবহেলা করা

25

আমি ম্যাক ১০.১০.২- এ ifconfigএবং pfctlকমান্ডগুলি ব্যবহার করে এই কাজটি করতে সক্ষম হয়েছি। নিম্নলিখিত পদ্ধতির আমি সফলভাবে ম্যাপিং করছি 127.0.0.1:3000করার mydomain.comআমার মেশিনে স্থানীয়ভাবে।

আপনার কমান্ড লাইন নিম্নলিখিত দুই সংযোগ ফরোয়ার্ড করতে কমান্ড লেখার 127.0.0.1:3000জন্য 10.0.0.1:

sudo ifconfig lo0 10.0.0.1 alias
echo "rdr pass on lo0 inet proto tcp from any to 10.0.0.1 port 80 -> 127.0.0.1 port 3000" | sudo pfctl -ef -

তারপরে আপনার /etc/hostsবা /private/etc/hostsফাইলটি সম্পাদনা করুন এবং আপনার ডোমেনে মানচিত্রের জন্য নিম্নলিখিত লাইনটি যুক্ত করুন 10.0.0.1

10.0.0.1 mydomain.com

আপনি আপনার হোস্ট ফাইল সংরক্ষণ করার পরে আপনার স্থানীয় ডিএনএস ফ্লাশ করুন:

sudo discoveryutil udnsflushcaches

এখন mydomain.comএকটি ব্রাউজারে খুলুন এবং আপনি আপনার লোকালহোস্ট পোর্টে (যেমন 127.0.0.1:3000) সার্ভার হোস্ট করতে দেখবেন । মূলত এই প্রক্রিয়ায় একটি মানচিত্র <ip>:<port>একটি নতুন <ip>যাতে আপনি তারপর যে আইপি একটি হোস্ট ম্যাপ করতে পারেন।


1
শুধু একটি বাচ্চা হ্যাকি, কিন্তু কাজ শেষ। ভাল প্রদর্শনী.
জোয়ে কারসন

6
ধন্যবাদ. আপনি কীভাবে ওরফে এবং ফরোয়ার্ডিং পূর্বাবস্থায় ফিরবেন?
কার্লোস নুয়েজ

1
হাই sudo discoveryutil udnsflushcachesআমাকে দেয় command not foundতবে এটি এখনও প্রবেশের সাথে সঠিকভাবে মেলে। তবে আমি কীভাবে দ্বিতীয় বন্দরটি মানচিত্র করতে পারি? আমি আইডি: 10.0.0.2এবং অন্য একটি বন্দর দিয়ে 1 + 2 পদক্ষেপগুলি করার চেষ্টা করেছি , তবে এটি সর্বদা শেষ সংযোগটি নেয়। সুতরাং আমি যদি শেষটি করি 10.0.0.1এবং port 3000এটি অগ্রবর্তী হয় 3000, যদি আমি শেষটি করি 10.0.0.2এবং 4000এটি পোর্ট করে ফরোয়ার্ড করি 4000। আমার মধ্যে /private/etc/hostsআমি পৃথক আইডি দিয়ে উভয় এন্ট্রি লিখেছি।
অ্যান্ডি গিগা

কাজ করে, তবে আমি ওএসএক্স পুনরায় চালু করার সময় আমার এটি আবার প্রয়োজন .... স্থায়ীভাবে এটি সংরক্ষণ করার জন্য কোনও জিনিস?
ক্যাস্পার

1
সঙ্গে আপডেট করুনsudo dscacheutil -flushcache
northtree

5

আমাকেও সম্প্রতি একই রকম কাজ করতে হয়েছিল এবং অনুসন্ধানে এই উত্তরটি এসেছিল। দুর্ভাগ্যক্রমে, নাফির উত্তরগুলি ipfwহ'ল যা এখন অবহিত এবং ওএসএক্সে অনুপলব্ধ; এবং কেভিন লিয়ারির উত্তরটি আসলে কিছুটা হ্যাকিশ। সুতরাং আমাকে আরও ভাল কিছু (ক্লিনার) তৈরি করতে হয়েছিল এবং এটি উত্তরোত্তর জন্য এখানে ভাগ করে নেওয়ার সিদ্ধান্ত নিয়েছে। এই উত্তরটি মূলত পদ্ধতির পদে উল্লেখিত উপর ভিত্তি করে তৈরি এই সারকথা

ওপি যেমন উল্লেখ করেছে, 192.168.99.100 এ একটি ব্রাউজার দেখানো লোকালহোস্ট: 8000 এ কোনও সার্ভারের কাছ থেকে প্রতিক্রিয়া পাওয়া উচিত। একটি উপনাম যুক্ত করা ifconfigসত্যিই প্রয়োজনীয় নয়, pfctlএকা যথেষ্ট: pf.confফাইলটি /etc/pf.confসংশোধন করতে হবে এটি অর্জনের জন্য।

আমরা প্রথমে (উবুন্টু সঙ্গে) একটি নতুন নোঙ্গর ফাইল (এটা কল দিন তৈরি redirectionকরুন): /etc/pf.anchors/redirection। এটি মুলত একটি নিয়মিত টেক্সট ফাইল এবং (ঠিক কেভিন Leary এর উত্তরে মত) নিম্নলিখিত লাইন রয়েছে: rdr pass on lo0 inet proto tcp from any to 192.168.99.100 port = 80 -> 127.0.0.1 port 8000। নতুন অ্যাঙ্কর ফাইলটি তৈরি হয়ে গেলে, ফাইলের মধ্যে এটি উল্লেখ করা দরকার pf.confpf.confSudo দিয়ে ফাইলটি খুলুন এবং rdr-anchor "redirection"শেষ rdr-anchor লাইন (যা rdr-anchor "com.apple/*") এর পরে যুক্ত করুন load anchor "redirection" from "/etc/pf.anchors/redirection"এবং শেষে যুক্ত করুন।

শেষ পর্যন্ত, pf.conf ফাইলটি দেখতে এমন হওয়া উচিত:

scrub-anchor "com.apple/*"
nat-anchor "com.apple/*"
rdr-anchor "com.apple/*"
rdr-anchor "redirection"  #added for redirection/port forwarding
dummynet-anchor "com.apple/*"
anchor "com.apple/*"
load anchor "com.apple" from "/etc/pf.anchors/com.apple"
load anchor "pow" from "/etc/pf.anchors/redirection"  #added for redirection/port forwarding

এবং এটি প্রায় এটি। প্রথমে এটি অক্ষম করার জন্য pfctlজারি করে পুনরায় চালু করুন sudo pfctl -dএবং তারপরে sudo pfctl -fe /etc/pf.confএটি আবার শুরু করুন।

এখন, আপনার যদি প্রতিটি পুনঃসূচনা হওয়ার পরে pfctlস্বয়ংক্রিয়ভাবে এটির প্রয়োজন হয় তবে আর একটি ছোট্ট কাজ করা দরকার: প্রবর্তন ডেমোনটি আপডেট করা দরকার (রেফারেন্সড গিস্ট উল্লেখ করেছে যে পিএফ বুটে স্বয়ংক্রিয়ভাবে সক্ষম হয়ে গেছে, তবে এটি মনে হয় না) কোডটি দেখার থেকে কেস)। (Sudo সহ) খুলুন System/Library/LaunchDaemons/com.apple.pfctl.plistএবং এটি দেখুন:

<array>
          <string>pfctl</string>
          <string>-f</string>
          <string>/etc/pf.conf</string>
</array>

এবং লাইনটি <string>-e</string>শেষ পর্যন্ত এটির মতো করে যুক্ত করুন:

<array>
         <string>pfctl</string>
         <string>-e</string>
         <string>-f</string>
         <string>/etc/pf.conf</string>
</array>

যা করা উচিৎ.

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

ব্যাখ্যা: লোকালহোস্ট লো -0 এর জন্য ইতিমধ্যে (ডিফল্ট) উলাম যে কমান্ডটি জারি করা হয়েছে তা পরীক্ষা করে দেখতে পারেন - এই সত্যটি লোকালহোস্টের জন্য অতিরিক্ত অতিরিক্ত নাম যুক্ত না করা এবং কেবলমাত্র ফাইলে ডিফল্ট ঠিকানা ব্যবহার করার জন্য ব্যবহৃত হচ্ছে ।ifconfig127.0.0.1pf.conf

আপডেট: দুর্ভাগ্যক্রমে, দেখে মনে হচ্ছে প্রারম্ভকালে ফাইলটি লোড করা কাজ করে না। এটি বাছাই করার জন্য আমি এখনও সাহায্য পাওয়ার চেষ্টা করছি। ততক্ষণে, sudo pfctl -f /etc/pf.confশুরু করার পরে দৌড়ানো কৌতুকটি করে।


এর জন্য ধন্যবাদ, এটি ওএস এক্স সিয়েরাতে আমার জন্য কাজ করেছিল। এটি খুব গুরুত্বপূর্ণ যদিও পুনঃনির্দেশ ফাইলটি একটি নতুন লাইনের সাথে শেষ হয়।
kadrian

সিস্টেম ফাইলগুলি ওভাররাইট করা যেমন নিরাপদ বলে মনে হয় না System/Library/LaunchDaemons/com.apple.pfctl.plist; এটি সম্ভবত কোনও ওএস আপডেট থেকে বাঁচবে না?
টম

4

এটি আমার পক্ষে ভাল কাজ করেছে:

  • সিস্টেম পছন্দসমূহের মাধ্যমে ফায়ারওয়াল সক্ষম করুন
  • এখানে বর্ণিত আইপিএফডাব্লু স্টার্টআপ ফাইলটি তৈরি করুন: https://serverfault.com/a/235124/94860
  • এখানে বর্ণিত হিসাবে স্টার্টআপ ফাইলটিতে নিম্নলিখিত লাইনটি যুক্ত করুন: http://xeiam.com/port-forwarding-80-to-8080-used-ipfw-on-mac-os-x/

    add 100 fwd 127.0.0.1,8080 tcp from any to any 80 in


1

10.5 থেকে, ওএস এক্স এর পরিবর্তে একটি নতুন, অ্যাপ্লিকেশন-ভিত্তিক ফায়ারওয়াল নিয়ে আসে ipfw। তবে আইপিএফডাব্লু এখনও ইনস্টল করা আছে। যদি এর সিনট্যাক্স নিয়ে আপনার সমস্যা হয় তবে গ্রাফিকাল ফ্রন্টএন্ডগুলি WaterRoofবা এর মতো করে দেখুন Flying Buttress

এইচটিএইচ, পেরা


1

নিয়মের ক্রম গুরুত্বপূর্ণ, আপনার অনুমতিপ্রাপ্ত বিধিগুলির আগে "সমস্ত অস্বীকার করুন" বা এর মতো কিছু নেই তা নিশ্চিত করুন।


পরামর্শের জন্য ধন্যবাদ তবে আমি মনে করি না যে আমার কাছে সেই বিশেষ সমস্যা আছে (আইপিএফডাব্লু তালিকা কেবল আমার নিয়ম এবং এটি দেখায় 65535 allow ip from any to any)।
নাফে

1

আপনার কমান্ডটি একটি বিধি নম্বর অনুপস্থিত বলে মনে হচ্ছে; চেষ্টা করে দেখুন:

ipfw add 100 fwd 127.0.0.1,8000 tcp from any to 192.168.99.100 80

(আপনি যদি রুট হিসাবে চালাচ্ছেন না, আপনি এটি sudo দিয়ে উপসর্গ করতে হবে)। অন্য একটি জিনিস যাচাই করে দেখুন যে ফায়ারওয়াল সক্ষম হয়েছে:

sysctl net.inet.ip.fw.enable

যদি এটি 0 (অফ) মানের সাথে ফিরে আসে তবে এটি দিয়ে চালু করুন:

sysctl -w sysctl net.inet.ip.fw.enable=1

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

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