विशाल वातावरण में ansible के साथ Iptables प्रबंधन


20

एक बिंदु से iptables का प्रबंधन करने का सबसे अच्छा तरीका क्या है और स्थानीय सर्वर पर कुछ संपादित करने की क्षमता है।

हमें सभी सर्वरों पर केंद्रीकृत कुछ नियमों को जोड़ने की आवश्यकता है, लेकिन हमारे पास विशिष्ट आवश्यकताओं के साथ विशिष्ट सर्वर हैं जिनके पास नियमों का अपना सेट होना चाहिए।

मैंने कई के साथ बैश स्क्रिप्ट के बारे में सोचा है, जिसे प्रबंधित किया जाता है जिसे ansible के साथ केंद्रीकृत किया जाता है और स्थानीय सर्वर पर प्रबंधित किया जाता है। क्या यह अच्छा तरीका है? या शायद कुछ बेहतर है?

हम ansible के लिए 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

इसलिए मेरे सभी नगनेक्स सर्वर में 80 और 443 पोर्ट हैं।

इस तरह से आप जो भी सामान्य कॉन्फ़िगरेशन चाहते हैं उसका निर्माण कर सकते हैं और अधिक विशिष्ट भूमिकाओं में अतिरिक्त नियम जोड़ सकते हैं।

ferm

यदि आपके पास नियम हैं जो ufwसंभाल नहीं सकते हैं, तो मुझे लगता है कि एक समाधान अच्छी तरह से काम करेगा ferm; यह लगभग कुछ भी कर सकते हैं, और आप इसे कॉन्फ़िगर जैसे निर्देशिकाओं से नियमों को पढ़ने के लिए कर सकते हैं /etc/ferm/input.d/, /etc/ferm/output.d/, /etc/ferm/forward.d/, आदि आप अपने कर सकता है commonभूमिका आवश्यक तैयार fermविन्यास और उसके बाद अन्य भूमिकाओं इन निर्देशिकाओं में से फ़ाइलें ड्रॉप है।

सादे iptables

ansibleएक अन्य तरीके से निर्दिष्ट नियमों के अतिरिक्त नियमों को निर्दिष्ट करने की आपकी आवश्यकता असामान्य है और स्पष्ट रूप से उपयोग करने के लिए अधिकांश बिंदुओं को धता बताती है ansible। दुर्भाग्य से मैं इसे सादे के अलावा अन्य करने के लिए कोई रास्ता नहीं देखता iptables, जो काफी बदसूरत होगा। यहाँ बंदरगाह खोलने का एक उदाहरण है roles/nginx/tasks/main.yml(अप्राप्त) में 80 :

- 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


अगर मुझे इस दृष्टिकोण के साथ सही ढंग से याद है तो मैं ipset का उपयोग नहीं कर सकता और कुछ बहुत विशिष्ट बना सकता हूं। हम iptables में मॉड्यूल के मालिक का उपयोग कर रहे हैं। उदाहरण के लिए, हमारे पास iptables -m owner --uid 0 -j ACCEPT है। मैं इस मॉड्यूल का उपयोग ansible में ufw के साथ नहीं कर सकता और स्थानीय सर्वर पर ansible के बिना कुछ संपादित नहीं कर सकता।
Navern

वास्तव में, ufwजाहिरा तौर पर अपनी आवश्यकताओं को संभाल नहीं सकते हैं; लेकिन आपका क्या मतलब है जब आप कहते हैं कि "स्थानीय सर्वर पर बिना किसी चीज़ के संपादन नहीं कर सकते हैं"?
एंटोनी क्रिस्टोफ़ाइड्स

क्या कोई और उपाय है? मैं इस मामले में फंस गया, हल करना मुश्किल है। सामान्य तौर पर मेरा मतलब है कि मुझे केवल मौजूदा नियमों को तोड़ने के बिना नए नियमों को जोड़ने की आवश्यकता है। Ansible के साथ सर्वर पर सभी कॉन्फ़िगरेशन को संग्रहीत न करें। अंग्रेजी मेरी मूल भाषा नहीं है, इसलिए मुझे आशा है कि मैंने खुद को स्पष्ट कर दिया :)
Navern

कुछ विकल्पों के साथ मेरे उत्तर को अपडेट किया।
एंटोनियो क्रिस्टोफ़ाइड्स

शुक्र है कि मैं बहुत धन्यवाद, विशेष रूप से इस पर ध्यान देंगे।
Navern

12

lineinfile

यदि आप मौजूदा नियमों को अधिलेखित किए बिना अपने iptables कॉन्फ़िगरेशन में नियमों को प्रबंधित करना चाहते हैं या टेम्पलेट में केंद्रीय रूप से प्रबंध प्रबंध करना चाहते हैं, तो Ansible के लाइनइनफाइल मॉड्यूल का उपयोग करें:

- 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 नियमों का समर्थन करें
  • विशिष्ट मेजबान के लिए दानेदार नियमों को जोड़ने / ओवरराइड करने की अनुमति दें
  • आसानी से नियमों में चर इंजेक्ट करें
  • आदेश देने की अनुमति दें
  • सादगी
  • दृढ़ता (बूट पर नियमों को पुनः लोड करें)

Ansible galaxy या github पर mikegleasonjr.firewall देखें


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
नौवेरन

लेकिन वर्तमान में कोई उचित दस्तावेज नहीं है। मैं समझा सकता हूं कि यह कैसे काम करता है और बाद में उत्तर के रूप में पोस्ट करता है।
नौवेरन
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.