ファイアウォールを操作する
コマンド
ファイアウォールを起動する
# systemctl start firewalld
enp0s8にpublicゾーンを割り当てる
# firewall-cmd --zone=public --change-interface=enp0s8 --permanent
publicゾーンに外部からTPC80番ポートへの通信を許可する
# firewall-cmd --add-port=80/tcp --zone=public --permanent
最新のfirewall設定を反映させる
# firewall-cmd --reload
現在有効なゾーンを一覧表示する
# firewall-cmd --get-active-zone
publicゾーンの詳細を表示する
# firewall-cmd --list-all --zone=public
public (active)
target: default
icmp-block-inversion: no
interfaces: enp0s3, enp0s8
sources:
services: ssh dhcpv6-client
ports: 80/tcp
protocols:
masquerade: no
forward-ports:
source-ports:
icmp-blocks:
rich rules:
一味違うファイアウォールを構築するための情報
firewalldはiptables
のラッパーとして動作する。
iptablesはINPUT
OUTPUT
FORWARD
の3つのルールの組み合わせで動作する。
- INPUT ホスト宛のパケット向けのルール
- OUTPUT ホストから送信されるパケット向けのルール
- FORWARD ホストを経由して他のホストへ転送されるパケット向けのルール
firewalldは基本的にIPNUT
に作用するのでホスト(エンドポイント)のファイアウォールとしての運用が基本となる。
ルータとして構成したCentOSにファイアウォール機能を付与する場合はFORWARD-PORTSを設定する事。
サンプル構成
client
172.16.0.1/24
router-fw
enp0s8 : 172.16.0.100/24
enp0s9 : 192.168.1.100/24
enp0s10: 192.168.2.100/24
proxy
192.168.1.1/24
www
192.168.2.1/24
ルーターの設定
external (active)
target: default
icmp-block-inversion: no
interfaces: enp0s8
sources:
services: ssh
ports:
protocols:
masquerade: no
forward-ports: port=8080:proto=tcp:toport=:toaddr=192.168.1.1
source-ports:
icmp-blocks:
rich rules:
internal (active)
target: default
icmp-block-inversion: no
interfaces: enp0s10
sources:
services: ssh mdns samba-client dhcpv6-client
ports:
protocols:
masquerade: no
forward-ports:
source-ports:
icmp-blocks:
rich rules:
dmz (active)
target: default
icmp-block-inversion: no
interfaces: enp0s9
sources:
services: ssh
ports:
protocols:
masquerade: no
forward-ports: port=80:proto=tcp:toport=:toaddr=192.168.2.1
source-ports:
icmp-blocks:
rich rules:
ルーティングプロトコルを通過させる
ルーターはOSPFやBGPなどのプロトコルに則って経路情報をやり取りします。 ファイアウォールで経路情報がブロックされるとルーターが動作しなくなります。 add-protocolsを使ってospfやbgpのプロトコルに通過許可を出しましょう。
# firewall-cmd --add-protocol=ospf --zone={ゾーン名} --parmanent
IPマスカレード/NAPTって?
内部に複数のプライベートIPを持つネットワークが、ルータを通じて外部に通信するための手法です。 ルーターはプライベートIPを外部に転送する際グローバルIPに変換します。 グローバルIPは1つ(ルータのIP)しかないので複数のIPを区別するためにポート番号を利用します。
- プライベートIP-A(10.10.10.1)はグローバルIPのポート10001
- プライベートIP-B(10.10.10.2)はグローバルIPのポート10002
- プライベートIP-C(10.10.10.3)はグローバルIPのポート10003
このようなポートを利用した1対Nのアドレス変換がIPマスカレード/NAPTです。 firewwalldではIPマスカレードは出口インタフェース(グローバルIPが割り当てられているNIC)に指定します。
参考
http://zokibayashi.hatenablog.com/entry/2017/11/07/001411
https://qiita.com/kenjjiijjii/items/1057af2dddc34022b09e
http://www.atmarkit.co.jp/ait/articles/1602/18/news019_2.html