shinke1987.net
雑多な備忘録等のはず。
他のカテゴリ・タブ
目次
PR

ファイアウォールを設定

2023-05-05 2023-05-05

環境

$ cat /etc/redhat-release

の結果は次の通り。

Rocky Linux release 9.1 (Blue Onyx)

参考ページ

Linuxにおける新たなパケットフィルタリングツール「nftables」入門

概要

iptables廃止で、nftablesが使われるらしい。
firewalldもnftablesも根本は同じなので、慣れた方使えば良さそう。

おおざっぱな違いは下記の通り。

Tips

nftablesの構成について簡易まとめ

手順

firewalldを無効化する。

# systemctl disable --now firewalld

nftablesを有効化する。

# systemctl enable --now nftables

SSHとWebサーバに関するルールだけなので、テーブル1つ、ベースチェインもiptablesと同様に3つで設定する。

テーブル作成。

# nft create table inet filter

テーブルが作成されたことを確認。

# nft list tables

ベースチェインを作成。

# nft create chain inet filter input { type filter hook input priority 0\; policy drop\; }
# nft create chain inet filter output { type filter hook output priority 0\; policy accept\; }
# nft create chain inet filter forward { type filter hook forward priority 0\; policy drop\; }

SSHの22番ポート向けのパケットを全てAcceptする。

# nft add rule inet filter input tcp dport 22 accept

Webサーバの80番ポート向けのパケットを全てAcceptする。

# nft add rule inet filter input tcp dport 80 accept

Webサーバの443番ポート向けのパケットを全てAcceptする。

# nft add rule inet filter input tcp dport 443 accept

コネクションが確立した通信のパケットと、
コネクションが確立した通信に関連するパケットをAcceptする。

# nft add rule inet filter input ct state related, established accept

ローカルホストからのパケットをAcceptする。

# nft add rule inet filter input iif lo accept

pingを使えるようにAcceptする。

# nft add rule inet filter input icmp type { echo-request, echo-reply } accept

上記コマンドでSSHとpingについては正常に動作することを確認した。
(Webサーバ関連の確認は、Webサーバ構築後に行う)

再起動しても設定が保持されるようにするには、

/etc/nftables/任意のファイル名.nft

に、下記のコマンドで表示された文字列をコピーしても良いはず。
# nft list ruleset

(ただし、1行目にflush rulesetのコマンドは加えておいた方が良い)

今回作成した/etc/nftables/ファイル名.nftの内容は下記の通り。

# 初期化。
flush ruleset
# filterテーブル
table inet filter {
    # inputベースチェイン
    chain input {
        type filter hook input priority 0; policy drop;
        # SSHのポート22番向けのパケットを全てAcceptする。
        tcp dport 22 accept
        # HTTPサーバのポート80番向けのパケットを全てAcceptする。
        tcp dport 80 accept
        # HTTPSサーバのポート443番向けのパケットを全てAcceptする。
        tcp dport 443 accept
        # 確立済みコネクションのパケットと、それに関連するパケットをAcceptする。
        ct state related, established accept
        # ローカルホスト(サーバ自身)からのパケットをAcceptする。
        iif lo accept
        # pingを使えるようにAcceptする。
        icmp type { echo-request, echo-reply } accept
    }
    # outputベースチェイン
    chain output {
        type filter hook output priority 0; policy accept;
    }
    # forwardベースチェイン
    chain forward {
        type filter hook forward priority 0; policy drop;
    }
}

作成したファイル名.nftを反映させるために、

/etc/sysconfig/nftables.conf

に、下記文字列を追加する。

include "/etc/nftables/ファイル名.nft"

動作確認をするために、nftablesを下記コマンドで再起動。

# systemctl restart nftables

nftablesが正常に起動していることを確認するために、下記コマンドで確認。

# systemctl status nftables

nftablesが正常に起動していたら、下記コマンドで確認。

# nft list ruleset

設定した通りの内容が記載されていれば、nftablesの設定は完了。

同一カテゴリの記事