iptables 用の roleを作成してタスクは以下のように
ポイントは INPUT DROPを最後にしているところです。
SSHの設定より前にあると切断されてしまいます。接続できなくなりました。
$ vim iptables/tasks/main.yml
---
# tasks file for iptables
- name: Drop all forward
iptables:
chain: FORWARD
policy: DROP
- name: Accept all output
iptables:
chain: OUTPUT
policy: ACCEPT
- name: Accept INPUT from local
iptables:
in_interface: lo
chain: INPUT
jump: ACCEPT
- name: Allow related and established connections
iptables:
chain: INPUT
ctstate: ESTABLISHED,RELATED
jump: ACCEPT
- name: Allow new incoming SYN packets on TCP port 20222 (SSH).
iptables:
chain: INPUT
protocol: tcp
destination_port: '20222'
ctstate: NEW
syn: match
jump: ACCEPT
comment: Accept new SSH connections.
- name: Set open service ports for the INPUT to ACCESS
iptables:
chain: INPUT
protocol: tcp
destination_port: '{{ item }}'
jump: ACCEPT
with_items: [ '80', '443' ]
- name: Set the policy for the INPUT chain to DROP
iptables:
chain: INPUT
policy: DROP
結果はこんな感じです。
ローカルでは25に接続できましたが、外からはssh,http,httpsだけ接続できます。またデータベースサーバーなどバックエンドサーバーへの接続が必要な場合は別途タスクを追加します。自分の持っているサーバーIPからポートの範囲を指定して許可する形です。
# iptables -L -v
Chain INPUT (policy DROP 29 packets, 8620 bytes)
pkts bytes target prot opt in out source destination
5094 2899K ACCEPT all -- any any anywhere anywhere ctstate RELATED,ESTABLISHED
4 252 ACCEPT tcp -- any any anywhere anywhere tcp dpt:ipulse-ics flags:FIN,SYN,RST,ACK/SYN /* Accept new SSH connections. */ ctstate NEW
2 120 ACCEPT all -- lo any anywhere anywhere
0 0 ACCEPT tcp -- any any anywhere anywhere tcp dpt:http
0 0 ACCEPT tcp -- any any anywhere anywhere tcp dpt:https
Chain FORWARD (policy DROP 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
Chain OUTPUT (policy ACCEPT 171 packets, 15932 bytes)
pkts bytes target prot opt in out source destination
無事設定完了です!
コメント