Uhw
Ansible
memiliki ufw
modul untuk menangani aturan firewall. Di roles/common/tasks/main.yml
, yang termasuk dalam semua server saya, saya punya (antara lain):
- 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
Sunting : Diperlukan untuk mengizinkan ssh sebelum menetapkan kebijakan default untuk "menyangkal" (awalnya ini berlawanan di atas), jika tidak, Anda mungkin terkunci di antara dua langkah.
Kemudian, di setiap peran, saya memiliki aturan firewall tambahan untuk peran itu. Misalnya, dalam roles/nginx/tasks/main.yml
, saya punya (antara lain) ini:
- name: Allow nginx firewall
ufw: proto=tcp port=80 rule=allow
- name: Allow nginx ssl firewall
ufw: proto=tcp port=443 rule=allow
Jadi semua server nginx saya memiliki port 80 dan 443 dibuka.
Dengan cara ini Anda dapat membangun konfigurasi umum apa pun yang Anda inginkan dan menambahkan aturan tambahan dalam peran yang lebih spesifik.
ferm
Jika Anda memiliki aturan yang ufw
tidak bisa ditangani, satu solusi yang saya pikir akan berfungsi dengan baik adalah ferm
; dapat melakukan hampir semua hal, dan Anda bisa mengkonfigurasinya untuk membaca aturan dari direktori seperti /etc/ferm/input.d/
, /etc/ferm/output.d/
, /etc/ferm/forward.d/
, dll Anda bisa membuat Anda common
peran mempersiapkan penting ferm
konfigurasi dan kemudian memiliki peran lain drop file dalam direktori ini.
iptables polos
Persyaratan Anda untuk memiliki ansible
aturan khusus selain aturan yang ditentukan dengan cara lain tidak biasa dan tampaknya sebagian besar titik untuk menggunakan ansible
. Sayangnya saya tidak melihat cara untuk melakukannya selain dengan polos iptables
, yang akan sangat jelek. Berikut adalah contoh membuka port 80 in roles/nginx/tasks/main.yml
(belum teruji):
- 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
di mana Save iptables
handler yang mengeksekusi iptables-save
. Semua hal di atas cukup membosankan untuk ditulis, tetapi mungkin sesuai, terutama jika Anda hanya memiliki sedikit aturan untuk dikelola ansible
.
ufw
tampaknya tidak dapat menangani kebutuhan Anda; tetapi apa yang Anda maksud ketika Anda mengatakan "tidak dapat mengedit sesuatu tanpa mungkin di server lokal"?lineinfile
Jika Anda ingin mengelola aturan dalam konfigurasi iptables Anda tanpa menimpa aturan yang ada atau mengelola iptables secara terpusat di templat, gunakan modul lineinfile Ansible:
Inilah penangan "restart iptables":
sumber
Saya membuat peran untuk mengelola aturan iptables dengan fitur berikut:
Lihat mikegleasonjr.firewall di galaksi yang memungkinkan atau di github
sumber
Kami menulis modul khusus untuk ini yang disebut iptables_raw yang memungkinkan kami mengelola iptables dengan mudah. Semuanya dijelaskan dalam posting blog ini . Berikut adalah contoh cara menggunakan modul:
sumber