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
.