fedoraのfirewall-cmdでsshのIP制御を行う

あらまし

以前までfedorasshなどのIP制御をする場合は/etc/hosts.deny/etc/hosts.allowをいい感じに編集することで行っていました。

www.thegeekdiary.com

しかし最近のfedoraではこれらが非推奨になっているらしく、公式のフォーラムなどを見てもfirewalldを使えとの回答があるので、こちらで行ってみます。

Changes/Deprecate TCP wrappers - Fedora Project Wiki

forums.fedoraforum.org

なおfirewalldに対応するfirewall-cmd以外を使う方法では、nftablesを使う方法があり、こちらに関してはこのエントリを見るといい様です。

knowledge.sakura.ad.jp

fedorasshのIP制御をする

試しに某大学のIPアドレス及びプライベートIPアドレス以外のsshログインを制御してみます。

現在の設定の確認にはfirewall-cmdの list-allオプションを使います

$firewall-cmd --list-all

FedoraServer
  target: default
  icmp-block-inversion: no
  interfaces: 
  sources: 
  services: dhcpv6-client http https ssh
  ports: 
  protocols: 
  masquerade: no
  forward-ports: 
  source-ports: 
  icmp-blocks: 
  rich rules: 

この場合 FedoraServer というzoneが使われており、許可しているservicesがhttp, https, ssh, dhcpv6-clientであるという状態です。デフォルトですね。

すべてのsshのログインを弾く

すべてのsshアクセスを弾くにはservicesからsshを外せばいいです。

$firewall-cmd --remove-service=ssh --zone=FedoraServer --permanent

処理をしたら忘れずにリロードを実行します

$ firewall-cmd --reload

特定のIPからのsshを許可する

次に許可したいIPをTCPの22番ポートのアクセスを許可する設定にしていきます。(sshTCPで22番ポートを使うので)

IPとサブネットマスクの表現はCIDRが使えます。

$firewall-cmd --permanent --zone=FedoraServer --add-rich-rule="rule family="ipv4" source address="133.13.0.0/16" port protocol="tcp" port="22" accept"
$firewall-cmd --permanent --zone=FedoraServer --add-rich-rule="rule family="ipv4" source address="10.0.0.0/8" port protocol="tcp" port="22" accept"

処理をしたら忘れずにリロードを実行します

$ firewall-cmd --reload

ここまで出来たら再び --list-allで確認すればいい感じになると思います。 取り急ぎこんな感じで...