あらまし
以前までfedoraでsshなどのIP制御をする場合は/etc/hosts.deny
と/etc/hosts.allow
をいい感じに編集することで行っていました。
しかし最近のfedoraではこれらが非推奨になっているらしく、公式のフォーラムなどを見てもfirewalldを使えとの回答があるので、こちらで行ってみます。
Changes/Deprecate TCP wrappers - Fedora Project Wiki
なおfirewalldに対応するfirewall-cmd以外を使う方法では、nftablesを使う方法があり、こちらに関してはこのエントリを見るといい様です。
fedoraでsshの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番ポートのアクセスを許可する設定にしていきます。(sshがTCPで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
で確認すればいい感じになると思います。
取り急ぎこんな感じで...