বিপুল পরিবেশে জবাবদিহি সঙ্গে Iptables পরিচালনা


20

এক পয়েন্ট থেকে iptables পরিচালনা করার সর্বোত্তম উপায় কী এবং স্থানীয় সার্ভারে কিছু সম্পাদনা করার ক্ষমতা থাকতে পারে।

আমাদের সমস্ত সার্ভারগুলিতে কেন্দ্রীভূত কিছু বিধি যুক্ত করতে হবে, তবে আমাদের নির্দিষ্ট প্রয়োজনীয়তা সহ সুনির্দিষ্ট সার্ভার রয়েছে যার নিয়মগুলির নিজস্ব সেট থাকা উচিত।

আমি একাধিক অন্তর্ভুক্ত সহ বাশ স্ক্রিপ্ট সম্পর্কে ভেবেছিলাম যা উত্তরীয় সহ কেন্দ্রিয়ায়িত এবং স্থানীয় সার্ভারে পরিচালিত অন্তর্ভুক্ত। এটা কি ভাল পদ্ধতির? নাকি আরও ভাল কিছু আছে?

জবাবদিহি করার জন্য আমরা yML2 টেমপ্লেট তৈরি করতে পারি না কারণ নির্দিষ্ট হোস্টের মধ্যে খুব বেশি পার্থক্য রয়েছে।

দয়া করে iptables কেন্দ্রিয় পরিচালনার উদাহরণ সরবরাহ করুন।

উত্তর:


24

ufw

Ansibleফায়ারওয়াল নিয়মগুলি পরিচালনা করার জন্য একটি ufwমডিউল রয়েছে। ইন roles/common/tasks/main.yml, যা আমার সমস্ত সার্ভার অন্তর্ভুক্ত করা হয়েছে, আমি (অন্যান্য বিষয় ছাড়াও) আছে:

- name: Install ufw
  apt: name=ufw
- name: Allow ssh through firewall
  ufw: proto=tcp port=22 rule=allow
- name: Set ufw policy
  ufw: state=enabled direction=incoming policy=deny

সম্পাদনা : ডিফল্ট নীতিটি "অস্বীকার" করার জন্য সেট করার আগে এসএসএসের অনুমতি দেওয়া প্রয়োজন (মূলত এটি উপরের বিপরীতে ছিল), অন্যথায় আপনি দুটি ধাপের মধ্যেই লক আউট হয়ে থাকতে পারেন।

তারপরে, প্রতিটি ভূমিকায় আমার সেই ভূমিকার জন্য অতিরিক্ত ফায়ারওয়াল বিধি রয়েছে। উদাহরণস্বরূপ, এ roles/nginx/tasks/main.yml(আমার কাছে অন্যান্য জিনিসগুলির মধ্যে রয়েছে):

- name: Allow nginx firewall
  ufw: proto=tcp port=80 rule=allow
- name: Allow nginx ssl firewall
  ufw: proto=tcp port=443 rule=allow

সুতরাং আমার সমস্ত nginx সার্ভারের 80 এবং 443 পোর্ট খোলা আছে।

আপনি যেভাবে সাধারণ কনফিগারেশনটি চান তা তৈরি করতে পারেন এবং আরও নির্দিষ্ট ভূমিকাতে অতিরিক্ত নিয়ম যুক্ত করতে পারেন add

ferm

আপনি নিয়মটি যা থাকে ufwহ্যান্ডেল করতে পারে না, এক সমাধান আমি মনে করি চমত্কারভাবে কাজ চাই ferm; এটা প্রায় কিছু করতে পারেন, এবং আপনি এটি কনফিগার যেমন ডিরেক্টরি থেকে নিয়ম পড়তে পারেন /etc/ferm/input.d/, /etc/ferm/output.d/, /etc/ferm/forward.d/, ইত্যাদি আপনি আপনার বানাতে পারে commonভূমিকা অপরিহার্য প্রস্তুত fermকনফিগারেশন এবং তারপর অন্যান্য ভূমিকা এই ডিরেক্টরিগুলি থেকে ফাইলগুলিকে ড্রপ আছে।

প্লেইন iptables

ansibleঅন্য কোনওভাবে নির্দিষ্ট বিধিগুলির পাশাপাশি নিয়মগুলি নির্দিষ্ট করার জন্য আপনার প্রয়োজনীয়তা অস্বাভাবিক এবং স্পষ্টতই ব্যবহারের জন্য পয়েন্টটির বেশিরভাগ অংশকে অস্বীকার করে ansible। দুর্ভাগ্যক্রমে আমি সরল বাদে এটি করার কোনও উপায় দেখতে পাচ্ছি না iptables, যা বেশ কুৎসিত হবে। এখানে 80 টি roles/nginx/tasks/main.yml(অপরিশোধিত) পোর্ট খোলার উদাহরণ রয়েছে :

- name: Check if port 80 is allowed
  shell: iptables -L | grep -q "Allow http" && echo -n yes || echo -n no
  register: check_allow_http
  changed_when: no
  always_run: yes

- name: Allow port 80
  command: >
    iptables -A INPUT -p tcp -m tcp --dport 80
    -m comment --comment "Allow http" -j ACCEPT
  when: check_allow_http.stdout == "no"
  notify:
  - Save iptables

Save iptablesহ্যান্ডলার যেখানে চালিত হয় iptables-save। উপরের সমস্তগুলি লিখতে বেশ ক্লান্তিকর, তবে এটি উপযুক্ত হতে পারে, বিশেষত যদি আপনার সাথে পরিচালনা করার জন্য কয়েকটি নিয়ম থাকে ansible


যদি আমি এই পদ্ধতির সাথে সঠিকভাবে মনে রাখি তবে আমি আইপসেট ব্যবহার করতে পারি না এবং খুব নির্দিষ্ট কিছু তৈরি করতে পারি না। আমরা iptables এ মডিউল মালিক ব্যবহার করছি। উদাহরণস্বরূপ আমাদের কাছে iptables -m মালিক --uid 0 -j ACCEPT রয়েছে। আমি উত্তরসূচকভাবে ufw সহ এই মডিউলটি ব্যবহার করতে পারি না এবং স্থানীয় সার্ভারে উত্তর না দিয়ে কিছু সম্পাদনা করতে পারি না।
নাভর

প্রকৃতপক্ষে, ufwসম্ভবত আপনার প্রয়োজনগুলি পরিচালনা করতে পারে না; তবে আপনি যখন "স্থানীয় সার্ভারে উত্তর না দিয়ে কোনও কিছু সম্পাদনা করতে পারবেন না" বলার অর্থ কী?
অ্যান্টনিস ক্রিস্টোফাইডস

অন্য কোন সমাধান আছে? আমি এই মামলায় আটকেছি, সমাধান করা শক্ত। সাধারণভাবে আমি বোঝাতে চাইছি যে আমার বিদ্যমান নীতিগুলি না ভেঙে কেবলমাত্র জবাবদিহি করে নতুন নতুন বিধি যুক্ত করা দরকার। জবাবদিহি দিয়ে সার্ভারে সমস্ত কনফিগারেশন সঞ্চয় করবেন না। ইংরাজী আমার মাতৃভাষা নয়, তাই আমি আশা করি আমি নিজেকে পরিষ্কার করে দিয়েছি :)
নাভর

কিছু উত্তর দিয়ে আমার উত্তর আপডেট।
অ্যান্টনিস ক্রিস্টোফাইডস

অনেক ধন্যবাদ আপনাকে আমি এটিকে বিশেষত খেয়াল করব।
নাভর

12

lineinfile

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

- name: ensure iptables allows established and related traffic
  lineinfile:
    dest=/etc/sysconfig/iptables
    state=present 
    regexp="^.*INPUT.*ESTABLISHED,RELATED.*ACCEPT" 
    insertafter="^:OUTPUT " line="-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT" 
    backup=yes
  notify: restart iptables


- name: ensure iptables is configured to allow ssh traffic (port 22/tcp)
  lineinfile:
    dest=/etc/sysconfig/iptables 
    state=present 
    regexp="^.*INPUT.*tcp.*22.*ACCEPT" 
    insertafter="^.*INPUT.*ESTABLISHED,RELATED.*ACCEPT" line="-A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT" 
    backup=yes
  notify: restart iptables

এখানে "পুনরায় চালু iptables" হ্যান্ডলারটি রয়েছে:

- name: restart iptables
  service: name=iptables state=restarted

2

আমি নিম্নলিখিত বৈশিষ্ট্যগুলি সহ iptables নিয়ম পরিচালনা করতে একটি ভূমিকা তৈরি করেছি:

  • কার্যত সমস্ত iptables নিয়ম সমর্থন করুন
  • নির্দিষ্ট হোস্টগুলির জন্য দানাদার নিয়ম সংযোজন / ওভাররাইডিংকে মঞ্জুরি দিন
  • নিয়মে ভেরিয়েবলগুলি সহজেই ইনজেক্ট করুন
  • আদেশের আদেশের অনুমতি দিন
  • সরলতা
  • অধ্যবসায় (বুটে নিয়মগুলি পুনরায় লোড করুন)

Mikegleasonjr.firewall উপর পরীক্ষা করে দেখুন ansible ছায়াপথ বা GitHub


0

আমরা এই iptables_raw নামে একটি বিশেষ মডিউল লিখেছি যা আমাদের সহজেই iptables পরিচালনা করতে দেয়। সবকিছু এই ব্লগ পোস্টে ব্যাখ্যা করা হয় । মডিউলটি কীভাবে ব্যবহার করতে হয় তার একটি উদাহরণ এখানে দেওয়া হয়েছে:

# Allow all IPv4 traffic coming in on port 80
- iptables_raw:
    name=allow_tcp_80
    rules='-A INPUT -p tcp -m tcp --dport 80 -j ACCEPT'

# Delete the above rule
- iptables_raw:
    name=allow_tcp_80
    state=absent

আমরা এই স্ক্রিপ্টটি দিয়ে এই সমস্যাটি সমাধান করেছি: github.com/SmilingNavern/iptables
নাভর

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