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
แก้ไข : มีความจำเป็นที่จะต้องอนุญาตให้ ssh ก่อนตั้งค่านโยบายเริ่มต้นเป็น "ปฏิเสธ" (แต่เดิมตรงกันข้ามกับด้านบน) มิฉะนั้นคุณอาจถูกล็อคเอาไว้ระหว่างสองขั้นตอน
จากนั้นในแต่ละบทบาทฉันมีกฎไฟร์วอลล์เพิ่มเติมสำหรับบทบาทนั้น ตัวอย่างเช่นใน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
วิธีนี้คุณสามารถสร้างการกำหนดค่าทั่วไปที่คุณต้องการและเพิ่มกฎเพิ่มเติมในบทบาทที่เฉพาะเจาะจงมากขึ้น
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
ได้