tohokuaikiのチラシの裏

技術的ネタとか。

CentOS7のfirewalldでsshdをポートを変更して特定IPアドレスから許可する

色々と検索したけど、なんか微妙な感じだったのでまとめる。
結果的に[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を作る手間が省ける。