ファイアウォールとは何ですか?
Firewalldは、Ubuntu、Debian、CentOS、RHEL、Fedoraなどの多くのLinuxディストリビューション向けのファイアウォール管理ソリューションです。 Linuxカーネルが提供するiptablesフィルタリングシステムのフロントエンドとして機能します。プロトコルに依存しないため、IPv4、IPv6、イーサネットブリッジ、IPセットをサポートします。
Firewalldの基本概念
FirewallDは、iptablesチェーンとルールの代わりにゾーンとサービスを使用します。ゾーンは、コンピューターが接続されているネットワークに対する信頼のレベルに応じて、許可するトラフィックを指定する一連のルールです。ネットワークインターフェイスは、ファイアウォールが許可する動作を指示するゾーンを割り当てました。
Firewalldは、firewall-cmdコマンドラインツールを使用して管理されます。ランタイムおよび永続的な構成を管理するためのインターフェースを提供します。
Firewalldゾーン
昇順の信頼レベルに応じて、Firewalldには9つの事前定義されたゾーンがあります。
各ゾーンの簡単な説明を以下に説明します:
- ドロップ: このゾーンの信頼レベルは最も低く、送信者に確認応答を送信せずにすべての着信トラフィックをドロップするために使用されます。
- ブロック: このゾーンはドロップゾーンと非常によく似ており、着信トラフィックは拒否され、送信者はメッセージを受け取ります。
- 公開: 特定のパブリックネットワークからのトラフィックを許可します。
- 外部: このゾーンは、システムがゲートウェイまたはルーターとして機能する場合に使用されます。
- 内部: プライベート内部ネットワーク内のコンピューターに適用される一連のルール。
- DMZ: このゾーンは、他の内部リソースにアクセスできない可能性のある、内部ネットワーク内のコンピューターの分離されたパッチです。
- 仕事: このゾーンは、作業機械に使用されます。信頼度は高いです。
- ホーム: このゾーンのほとんどのコンピューターは相互に信頼しています。信頼レベルは仕事よりも高いです。
- 信頼できる: このゾーンは最高の信頼レベルを持っています。ネットワーク内のすべてのコンピューターが信頼されています。
ステップ1-Firewalldのインストール
デフォルトでは、Firewalldはほとんどのオペレーティングシステムにプリインストールされています。ただし、最小限のOSインストールの一部にはfiが含まれていません。インストールされていない場合は、次のコマンドでインストールできます。
sudo yum install firewalld # CentOS/RHEL 8/7/6 sudo dnf install firewalld # Fedora and CentOS/RHEL 8 sudo apt install firewalld # Ubuntu and Debian
Firewalldをインストールした後、起動し、システムの再起動後に起動できるようにする必要があります。
sudo systemctl start firewalld sudo systemctl enable firewalld
次のコマンドを実行して、firewalldのステータスを確認します
systemctl status firewalld [OR] firewall-cmd --state
ステップ2–ゾーンとサービスの操作
デフォルトでは、publicはfirewalldのデフォルトゾーンであり、すべてのネットワークインターフェースはパブリックゾーンで構成されています。次のコマンドを使用して、デフォルトゾーンを一覧表示できます。
firewall-cmd --get-default-zone
出力:
public
次に、次のコマンドを実行して、アクティブゾーンのリストを取得します。
firewall-cmd --get-active-zones
次の出力が得られるはずです:
public interfaces: eth0 eth1
使用可能なすべてのゾーンのリストを取得するには、次のコマンドを実行します。
firewall-cmd --get-zones
次の出力が得られるはずです:
block dmz drop external home internal public trusted work
次のコマンドを使用して、パブリックゾーンに関連付けられているすべてのサービスを一覧表示できます。
firewall-cmd --list-all
次の出力が得られるはずです:
public (active) target: default icmp-block-inversion: no interfaces: eth0 eth1 sources: services: cockpit dhcpv6-client ssh ports: protocols: masquerade: no forward-ports: source-ports: icmp-blocks: rich rules:
デフォルトゾーンをパブリックからワークに変更するには、次のコマンドを実行します。
firewall-cmd --set-default-zone=work
これで、次のコマンドを使用してデフォルトゾーンを確認できます。
firewall-cmd --get-default-zone
出力:
work
次のコマンドを使用して、システムで使用可能なすべてのサービスのリストを取得できます。
firewall-cmd --get-services
次の出力が得られるはずです:
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 distcc dns dns-over-tls docker-registry docker-swarm dropbox-lansync elasticsearch etcd-client etcd-server finger freeipa-4 freeipa-ldap freeipa-ldaps freeipa-replication freeipa-trust ftp ganglia-client ganglia-master git grafana gre high-availability http https imap imaps ipp ipp-client ipsec irc ircs iscsi-target isns jenkins kadmin kdeconnect kerberos kibana klogin kpasswd kprop kshell ldap ldaps libvirt libvirt-tls lightning-network llmnr managesieve matrix mdns memcache minidlna mongodb mosh mountd mqtt mqtt-tls ms-wbt mssql murmur mysql nfs nfs3 nmea-0183 nrpe ntp nut openvpn ovirt-imageio ovirt-storageconsole ovirt-vmconsole plex pmcd pmproxy pmwebapi pmwebapis pop3 pop3s postgresql privoxy prometheus proxy-dhcp ptp pulseaudio puppetmaster quassel radius rdp redis redis-sentinel rpc-bind rsh rsyncd rtsp salt-master samba samba-client samba-dc sane sip sips slp smtp smtp-submission smtps snmp snmptrap spideroak-lansync spotify-sync squid ssdp ssh steam-streaming svdrp svn syncthing syncthing-gui synergy syslog syslog-tls telnet tentacle tftp tftp-client tile38 tinc tor-socks transmission-client upnp-client vdsm vnc-server wbem-http wbem-https wsman wsmans xdmcp xmpp-bosh xmpp-client xmpp-local xmpp-server zabbix-agent zabbix-server
ステップ3–Firewalldでのサービスの許可と拒否
Firewalldの事前定義されたサービスに基づいて、着信トラフィックを許可および拒否できます。
たとえば、パブリックゾーンのhttpサービスのすべての着信トラフィックを許可するには、次のコマンドを実行します。
firewall-cmd --zone=public --add-service=http
出力:
success
パブリックゾーンでftpサービスの着信トラフィックを許可するには、次のコマンドを実行します。
firewall-cmd --zone=public --add-service=ftp
出力:
success
上記のコマンドはhttpおよびftpサービスを一時的に追加し、再起動時に永続的ではありません。 --permanent
を使用する必要があります 以下に示すように、それらを永続的にするオプション:
>firewall-cmd --permanent --zone=public --add-service=http firewall-cmd --permanent --zone=public --add-service=ftp
次に、次のコマンドを実行して変更を実装します。
firewall-cmd --reload
次のコマンドを使用して、追加されたサービスのリストを取得できるようになりました。
firewall-cmd --permanent --zone=public --list-services
次の出力が表示されます。
cockpit dhcpv6-client ftp http ssh
次のコマンドを使用して、パブリックゾーンに関する詳細情報を確認することもできます。
firewall-cmd --info-zone public
出力:
public (active) target: default icmp-block-inversion: no interfaces: eth0 eth1 sources: services: cockpit dhcpv6-client ftp http ssh ports: protocols: masquerade: no forward-ports: source-ports: icmp-blocks: rich rules:
上記のサービスをfirewalldから削除/拒否する場合は、--remove-service
を使用します オプション:
>firewall-cmd --permanent --zone=public --remove-service=http firewall-cmd --permanent --zone=public --remove-service=ftp
次に、次のコマンドを実行して変更を適用します。
firewall-cmd --reload
ステップ4–Firewalldでポートを許可および拒否する
また、firewalldのポートに基づいて着信トラフィックを許可および拒否することもできます。
たとえば、ポート8080および443ですべての着信トラフィックを許可し、次のコマンドを実行します。
firewall-cmd --permanent --zone=public --add-port=443/tcp firewall-cmd --permanent --zone=public --add-port=8080/tcp
次に、次のコマンドを実行して変更を適用します。
firewall-cmd --reload
次に、次のコマンドを使用して、追加されたポートを確認します。
firewall-cmd --permanent --zone=public --list-ports
出力:
443/tcp 8080/tcp
同様に、上記のポートをfirewalldから削除/拒否し、–remove-portオプションを使用します:
firewall-cmd --permanent --zone=public --remove-port=443/tcp firewall-cmd --permanent --zone=public --remove-port=8080/tcp
次に、次のコマンドを実行して変更を適用します。
firewall-cmd --reload
ステップ5–ファイアウォールを使用したポートフォワーディング
ポート転送は、IPとポートの組み合わせからリクエストをリダイレクトし、別のIPやポートにリダイレクトするプロセスです。この手法により、リモートマシンはプライベートネットワーク内の特定のサービスに接続できます。
ポートフォワーディングを設定する前に、目的のゾーンでマスカレードをアクティブにする必要があります。 --add-masquerade
を使用してアクティブ化できます オプション:
firewall-cmd --zone=public --add-masquerade
次に、同じサーバー上のポート80からポート8080にトラフィックを転送するには、次のコマンドを実行します。
firewall-cmd --permanent --zone=public --add-forward-port=port=80:proto=tcp:toport=8080
IPアドレス192.168.1.200のリモートサーバー上のローカルポート80からポート8080にトラフィックを転送する場合は、次のコマンドを実行します。
firewall-cmd --permanent --zone=public --add-forward-port=port=80:proto=tcp:toport=8080:toaddr=192.168.1.200
次に、次のコマンドを実行して変更を適用します。
firewall-cmd --reload
上記のルールを削除する場合は、以下に示すように–addを–removeに置き換えます。
firewall-cmd --permanent --zone=public --remove-forward-port=port=80:proto=tcp:toport=8080:toaddr=192.168.1.200 firewall-cmd --permanent --zone=public --remove-forward-port=port=80:proto=tcp:toport=8080
結論
上記のガイドでは、Firewalldの基本的な概念と、それをLinuxオペレーティングシステムに実装する方法を学びました。これで、firewalldを使用して不要な着信トラフィックを制限できるようになることを願っています。