ネットワークセキュリティを維持することはシステム管理者にとって重要であり、コマンドラインを介してファイアウォールを構成することは学ぶための重要なスキルです。この記事では、Linuxコマンドラインでfirewall-cmdを使用してファイアウォールを管理する方法について説明します。
ファイアウォールは基本的に、着信および発信ネットワークトラフィックを制御するように構成できるソフトウェアです。ファイアウォールは、実行中のシステムで他のユーザーがネットワークサービスを使用できないようにすることができます。ほとんどのLinuxシステムには、デフォルトのファイアウォールが付属しています。 Linuxシステムの以前のバージョンでは、パケットフィルタリングのデーモンとしてiptablesを使用していました。新しいバージョンのFedora、RHEL / CentOS、openSUSEには、デフォルトのファイアウォールデーモンとしてFirewalldが付属しています。 DebianおよびUbuntuディストリビューションにFirewalldをインストールすることもできます。
iptablesの代わりにFirewalldを使用することをお勧めします。私の言葉だけを信じてはいけません。 Linuxシステムで利用可能なオープンソースファイアウォールに関する包括的なガイドから詳細をご覧ください。
Firewalldは、ネットワークまたはファイアウォールゾーンをサポートするファイアウォールを管理するための動的デーモンです。ファイアウォールゾーンは、ネットワークインターフェイス、サービス、または接続のネットワークセキュリティの信頼レベルを定義します。ネットワークセキュリティシステムの管理者は、FirewalldがIPv4、IPv6、IPセット、およびイーサネットブリッジでうまく機能することを発見しました。 Firewalldを管理するには、firewall-cmdterminalコマンドまたはfirewall-configGUI構成ツールを使用できます。
このガイドでは、ファイアウォールコマンドを利用します。 ネットワークセキュリティを管理するコマンド。テスト環境はFedoraWorkstation33になります。
すべての技術を習得する前に、いくつかのネットワークの基本を学びましょう。
ネットワークの基本
ネットワークに接続されているコンピューターには、データのルーティングに使用されるIPアドレスが割り当てられます。コンピュータには、0〜65535の範囲のポートもあり、IPアドレスの接続ポイントとして機能します。アプリケーションは特定のポートを予約する場合があります。 Webサーバーは通常、安全なHTTP通信用にポート80を予約します。基本的に、ポート範囲0〜1024は、よく知られた目的とシステムのために予約されています。
2つの主要なインターネットデータ転送プロトコル(TCPおよびUDP)は、ネットワーク通信中にこれらのポートを使用します。ホストコンピューターは、送信元IPアドレスとポート(非セキュアHTTPの場合はポート80)と宛先アドレスとポートの間の接続を確立します。
ネットワークセキュリティを管理するために、ファイアウォールソフトウェアは、ポートやIPアドレスなどのルールに基づいてデータ転送または通信を許可またはブロックできます。
Firewalldのインストール
Fedora、RHEL / CentOS 7/8、openSUSE
Firewalldは、Fedora、RHEL / CentOS 7/8、およびopenSUSEにデフォルトでインストールされます。そうでない場合は、次のコマンドを使用してインストールできます。
# yum install firewalld -y
OR
#dnf install firewalld -y
Debian / Ubuntu
Ubuntuシステムには、デフォルトでUncomplicatedFirewallが付属しています。 Firewalldを使用するには、ユニバースリポジトリを有効にし、UncomplicatedFirewallを無効にする必要があります。
sudo add-apt-repository universe
sudo apt install firewalld
複雑でないファイアウォールを無効にする:
sudo systemctl disable ufw
起動時にfirewalldを有効にする:
sudo systemctl enable –now firewalld
Firewalldが実行されていることを確認します:
sudo firewall-cmd –state
running
ファイアウォールゾーン
Firewalldは、デフォルトゾーンを確立することにより、ファイアウォールの構成を簡単にします。ゾーンは、ほとんどのLinux管理者の日常のニーズに合った一連のルールです。ファイアウォールゾーンは、サービスとポートの信頼できるレベルまたは拒否されたレベルを定義できます。
- 信頼できるゾーン: すべてのネットワーク接続は、家族の家やテストラボなどの信頼できる環境でのみ受け入れられ、使用されます。
- パブリックゾーン: 他の接続がドロップされる間、特定のポートが接続を開くことを許可するためにのみルールを定義できます。ネットワーク内の他のホストを信頼しない場合は、パブリックエリアで使用できます。
- ホーム、内部、ワークゾーン: ほとんどの着信接続は、これら3つのゾーンで受け入れられます。着信接続は、接続またはアクティビティを予期しないポートのトラフィックを除外します。ネットワーク上の他のユーザーの一般的な信頼があるホーム接続に適用できます。選択した着信接続のみを許可します。
- ブロックゾーン: これは非常に偏執的なファイアウォール設定であり、ネットワークまたはサーバー内から開始された接続のみが可能です。ネットワークへのすべての着信接続が拒否され、ICMPホスト禁止メッセージが発行されます。
- DMZゾーン: 非武装地帯は、一部のサービスへのアクセスを一般に許可するために使用できます。選択した接続のみが受け入れられます。これは、組織のネットワーク内の特定の種類のサーバーにとって不可欠なオプションです。
- 外部ゾーン: 有効にすると、このゾーンはルーターとして機能し、マスカレードが有効になっている外部ネットワークで使用できます。プライベートネットワークのIPアドレスは、パブリックIPアドレスにマッピングされ、その背後に隠されています。 SSHを含め、選択した着信接続のみが受け入れられます。
- ドロップゾーン: 着信パケットは応答なしでドロップされます。このゾーンでは、発信ネットワーク接続のみが許可されます。
Fedoraワークステーション33によって定義されたデフォルトゾーンの例
cat /usr/lib/firewalld/zones/FedoraWorkstation.xml
<?xml version="1.0" encoding="utf-8"?>
<zone>
<short>Fedora Workstation</short>
<description>Unsolicited incoming network packets are rejected from port 1 to 1024, except for select network services. [firewall ] Incoming packets that are related to outgoing network connections are accepted. Outgoing network connections are allowed.</description>
<service name="dhcpv6-client"/>
<service name="ssh"/>
<service name="samba-client"/>
<port protocol="udp" port="1025-65535"/>
<port protocol="tcp" port="1025-65535"/>
</zone>
現在のゾーンを取得する:
– – get-active-zonesを使用できます フラグを立てて、システムで現在アクティブなゾーンを確認します。
sudo firewall-cmd --get-active-zones
[sudo] password for tuts:
FedoraWorkstation
interfaces: wlp3s0
libvirt
interfaces: virbr0
FedoraWorkstationゾーンのFedoraWorkstation33のデフォルトゾーン
デフォルトゾーンとすべての定義済みゾーンを取得します:
sudo firewall-cmd --get-default-zone
[sudo] password for tuts:
FedoraWorkstation
[tuts@fosslinux ~]$ sudo firewall-cmd --get-zones
FedoraServer Fedora Workstation block dmz drop external home internal libvirt nm-shared public trusted work
サービスの一覧表示:
– -list-services を使用して、ファイアウォールが他のシステムにアクセスを許可するサービスを取得できます。 フラグ。
[tuts@fosslinux ~]$ sudo firewall-cmd --list-services
dhcpv6-client mdns samba-client ssh
Fedora Linux 33では、ファイアウォールにより、既知のポート番号を持つ4つのサービス(dhcpv6-client mdns samba-client ssh)へのアクセスが許可されます。
ファイアウォールポート設定の一覧表示:
– -list-portsを使用できます フラグを立てて、任意のゾーンの他のポート設定を表示します。
tuts@fosslinux ~]$ sudo firewall-cmd --list-ports --zone=FedoraWorkstation
[sudo] password for tuts:
1025-65535/udp 1025-65535/tcp
オプション– -zone=FedoraWorkstaionを使用してチェックするゾーンを指定しました。
ゾーン、ポート、およびサービスの管理
ファイアウォール構成は、ランタイムまたは永続として構成できます。すべてのfirewall-cmdアクションは、コンピューターまたはファイアウォールが再起動するまでのみ存続します。 –permanentフラグを使用して永続的な設定を作成する必要があります。
ゾーンを作成する
ゾーンを作成するには、 – -new-zoneを使用する必要があります フラグ。
例:
fosscorpという新しいパーマネントゾーンを作成します:
[tuts@fosslinux ~]$ sudo firewall-cmd --new-zone fosscorp --permanent
[sudo] password for tuts:
success
ファイアウォールルールをリロードして、新しいゾーンをアクティブにします。
[tuts@fosslinux ~]$ sudo firewall-cmd --reload
fosscorpゾーンにsshサービスを追加して、リモートでアクセスできるようにします。
[tuts@fosslinux ~]$ sudo firewall-cmd --zone fosscorp --add-service ssh --permanent
[sudo] password for tuts:
success
新しいゾーン「fosscorp」がアクティブであることを確認します:
[tuts@fosslinux ~]$ sudo firewall-cmd --get-zones
FedoraServer FedoraWorkstation block dmz drop external fosscorp home internal libvirt nm-shared public trusted work
これで新しいゾーンfosscorpがアクティブになり、SSHトラフィックを除くすべての着信接続が拒否されます。
– -change-interfaceを使用します ゾーンfosscorpを、保護するネットワークインターフェイス(wlp3s0)のアクティブでデフォルトのゾーンにするためのフラグ:
[tuts@fosslinux ~]$ sudo firewall-cmd --change-interface wlp3s0 \
> --zone fosscorp --permanent
The interface is under the [ firewall ] control of NetworkManager, setting zone to 'fosscorp'.
success
fosscorpをデフォルトのプライマリゾーンとして設定する場合は、次のコマンドを実行します。
[tuts@fosslinux ~]$ sudo firewall-cmd --set-default fosscorp
success
– -get-active-zones を使用して、各インターフェースに現在割り当てられているゾーンを表示します フラグ:
[tuts@fosslinux ~]$ sudo firewall-cmd --get-active-zones
fosscorp
interfaces: wlp3s0
サービスの追加と削除:
ファイアウォールを通過するトラフィックを許可する簡単な方法は、事前定義されたサービスを追加することです。
利用可能な事前定義されたサービスのリスト:
tuts@fosslinux ~]$ sudo firewall-cmd --get-services
[sudo] password for tuts:
RH-Satellite-6 amanda-client amanda-k5-client amqp amqps apcupsd audit bacula bacula-client bb bgp bitcoin bitcoin-rpc
bitcoin-testnet bitcoin-testnet-rpc bittorrent-lsd ceph ceph-mon cfengine cockpit condor-collector ctdb dhcp dhcpv6 dhcpv6-client
[.....]
事前定義されたサービスのブロックを解除する
– -add-service を使用して、ファイアウォールを通過するHTTPSトラフィック(またはその他の事前定義されたサービス)を許可できます。 フラグ。
[tuts@fosslinux ~]$ sudo firewall-cmd --add-service https --permanent
success
[tuts@fosslinux ~]$ sudo firewall-cmd --reload
– -remove-serviceを使用してサービスを削除することもできます フラグ:
[tuts@fosslinux ~]$ sudo firewall-cmd --remove-service https --permanent
success
[tuts@fosslinux ~]$ sudo firewall-cmd --reload
ポートの追加と削除
–add-portフラグを使用して、ポート番号とプロトタイプを直接追加することもできます。事前定義されたサービスが存在しない場合は、ポート番号を直接追加すると便利です。
例:
非標準のポート1717を追加できます 次のコマンドを使用してカスタムゾーンにSSHで接続する場合:
[tuts@fosslinux ~]$ sudo firewall-cmd --add-port 1717/tcp --permanent
[sudo] password for tuts:
success
[tuts@fosslinux ~]$ sudo firewall-cmd –reload
–remove-portフラグオプションを使用してポートを削除します:
[tuts@fosslinux ~]$ sudo firewall-cmd --remove-port 1717/tcp --permanent>
success
[tuts@fosslinux ~]$ sudo firewall-cmd –reload
コマンドに–zoneフラグを追加して、ポートを追加または削除するゾーンを指定することもできます。
FedoraWorstationゾーンへのTCP接続用にポート1718を追加します:
[tuts@fosslinux ~]$ sudo firewall-cmd --zone=FedoraWorkstation --permanent --add-port=1718/tcp
success
[tuts@fosslinux ~]$ sudo firewall-cmd --reload
success
変更が有効になっているかどうかを確認します:
[tuts@fosslinux ~]$ sudo firewall-cmd --list-all
FedoraWorkstation (active)
target: default
icmp-block-inversion: no
interfaces: wlp3s0
sources:
services: dhcpv6-client mdns samba-client ssh
ports: 1025-65535/udp 1025-65535/tcp 1718/tcp
protocols:
masquerade: no
forward-ports:
source-ports:
icmp-blocks:
rich rules:
注:ポートの下に、ポート番号1718を追加しました TCPトラフィックを許可します。
ポート1718/tcpを削除できます 次のコマンドを実行します:
[tuts@fosslinux ~]$ sudo firewall-cmd --zone=FedoraWorkstation --permanent --remove-port=1718/tcp
success
[tuts@fosslinux ~]$ sudo firewall-cmd --reload
success
注:変更を永続的にする場合は、 – -permanentを追加する必要があります コマンドにフラグを立てます。
要約
Firewalldは、ネットワークセキュリティを管理するための優れたユーティリティです。システム管理スキルを向上させる最善の方法は、実践的な経験を積むことです。 Fedoraをお気に入りの仮想マシン(VM)またはBoxesにインストールして、使用可能なすべてのfirewall-cmd関数を試すことを強くお勧めします。公式のFirewalldホームページからfirewall-cmd機能の詳細を学ぶことができます。