色々と検索したけど、なんか微妙な感じだったのでまとめる。
結果的に[CentOS] firewalldで特定のサービスを特定のIPアドレスに対して許可する #CentOS - Qiitaが一番適切だった。
firewalldは基本的に許可してないものは全部Drop
CentOS7では最初からpublicがActiveなゾーンとして設定されている。
# firewall-cmd --list-all-zones public (active) target: default icmp-block-inversion: no interfaces: eth0 sources: services: dhcpv6-client ssh ports: protocols: masquerade: no forward-ports: source-ports: icmp-blocks: rich rules:
手順
まずサービスの自体の追加
ポートを任意のモノ(2222とか)にしたサービスを設定する。
サービスの設定というけれども、これは単純にポートの設定。
ファイルを直接操作する。これはコマンドが無いのかな?
#cp /usr/lib/firewalld/services/ssh.xml /etc/firewalld/services/ssh-2222.xml
反映のためのreload
# firewall-cmd --reload
次に許可するリストのためのZoneを作成する。
# firewall-cmd --permanent --new-zone=custom
このゾーンはリロード時にActiveなゾーンになる。
削除する場合は
# firewall-cmd --permanent --delete-zone=custom
あるいは、/etc/firewalld/zones/custom.xml があるのでそのファイルを削除。
新規で作ったzoneに新規で作ったサービスを追加
# firewall-cmd --permanent --add-service=ssh-2222 --zone=custom
これで、このzoneはこのサービス(ポート)に対して接続を許可することになった。
そのZoneが使えるIPアドレスを指定
# firewall-cmd --permanent --add-source=192.168.1.125 --zone=custom
このあたり、先ほど作られたzoneファイルを直接編集しても大丈夫。
最後にDefaultのsshをpublicから削除してリロード
# firewall-cmd --permanent --remove-service=ssh --zone=public
これで通常のsshは外部から通らなくなる。(まだ設定は反映されてないので操作はできる)
# firewall-cmd --reload
サービスの自体の追加をしなくても、直接ポートでいける。
18443ポートをTCPで解放
#firewall-cmd --add-port=18443/tcp
add-serviceを使う時と比べて、「ポート番号/プロトコル」で指定しないとだけど、サービスの設定ファイル/etc/firewalld/services/ssh-2222.xmlを作る手間が省ける。