(1) Firewalldの紹介:
これはLinux上の新しいファイアウォールソフトウェアです。iptablesファイアウォールに似ていますが、使用して設定することをお勧めします。
Firewalldはcentos7の主要な機能です。最大の利点は2つあります。サービスを再起動せずに動的更新をサポートすることです。2つ目は、ファイアウォールの「ゾーン」概念を追加することです。
, また、ネットワークリンクとインターフェイスセキュリティレベルのネットワーク/ファイアウォールゾーン(ゾーン)定義をサポートする動的ファイアウォール管理ツールも提供します。
CentOS7.0では、iptablesサービスの代わりにファイアウォールがデフォルトで使用されるため、ソフトファイアウォールの操作がより便利でユーザーフレンドリーになります。Firewalldにはグラフィカルインターフェイスと文字コマンドインターフェイスがあります。
Firewalldの機能:
ヒント:「firewalld自体にはファイアウォールの機能はありません」が、iptablesのようにカーネルのnetfilterを介して実装する必要があります。つまり、firewalldとiptablesはどちらもルールの維持に使用され、カーネルのnetfilterは実際にはルールに使用されます。 「firewalldとiptablesの構造と使用法が異なるだけです」。
Q:地域とは何ですか? *
ネットワーク領域は、ネットワーク接続の信頼性レベルを定義します。これは1対多の関係であり、接続はリージョンの一部にしかなれず、リージョンは多くの接続に使用できることを意味します。
Q:どのエリアが利用できますか?*
Firewalldが提供するゾーンは、信頼できないものから信頼できるものへと並べ替えられます。
NetworkManagerによって制御されるネットワーク接続
説明:ファイアウォールは、NetworkManagerによって表示される名前を使用してネットワーク接続を構成することはできません。構成できるのは、ネットワークインターフェイスのみです。
構成ファイルに構成された領域がない場合、インターフェースはデフォルトの領域であるfirewalldに構成されます。ネットワーク接続が複数のインターフェースを使用する場合、すべてのインターフェースがfiwewalldに適用されます。インターフェイス名の変更もNetworkManagerによって制御され、firewalldに適用されます。
このネットワーク接続を簡素化するために、地域との関係として使用されます。
参考資料:[https://fedoraproject.org/wiki/FirewallD/zh-cn](https://fedoraproject.org/wiki/FirewallD/zh-cn)
公式文書:[https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/7/html/Security_Guide/sec-Using_Firewalls.html#sec-Introduction_to_firewalld](https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/7/html/Security_Guide/sec-Using_Firewalls.html#sec-Introduction_to_firewalld)
(2) ファイアウォールのインストールと起動
デフォルト環境:CentOS Linuxリリース7.6.1810(コア)
文字インターフェース管理ツール:firewall-cmd
グラフィカルインターフェイス管理ツール:firewall-config
yum install firewalld firewall-config bash-completion -y # bash-タブキーを使用してコマンドプロンプトを完了します
systemctl start firewalld.service #ファイアウォールを開始します
systemctl stop firewalld.service #ファイアウォールを停止します
systemctl enable firewalld.service #起動時にファイアウォールを開始できるようにする
systemctl disable firewalld.service #ファイアウォールの起動を禁止する
# コマンドフォーマット
firewall-cmd [オプション...]
一般的なオプション
- h,--help #ヘルプ情報を表示します。
- V,--version #バージョン情報を表示する.(このオプションを他のオプションと組み合わせることはできません);
- q,--quiet #ステータスメッセージを印刷しないでください。
ステータスオプション
- - state #Firewalldのステータスを表示します。
- - reload #サービスを中断せずにリロードします。
- - complete-reload #中断されたすべての接続をリロードします。
- - runtime-to-permanent #現在のファイアウォールルールを永続的に保存します。
- - check-config #構成の正確さを確認してください。
ログオプション
- - get-log-denied #拒否されたレコードのログを取得します。
- - set-log-denied=<value> #拒否されたログに設定します。'all','unicast','broadcast','multicast','off'それらの中の一つ;
# インストールの検証
firewall-cmd --version #バージョンを表示、ヘルプ
firewall-cmd --help
firewall-cmd --state #ステータスを確認する
running
/usr/lib/firewalld/ #システム構成,変更しないようにしてください
cd /usr/lib/firewalld/services
# このディレクトリに保存されているのは、定義済みのネットワークサービスとポートのパラメータです。これらは参照用であり、変更することはできません。このディレクトリでは、一般的なネットワークサービスの一部のみが定義されています。
# このディレクトリで定義されていないネットワークサービスの場合、関連するxml定義を追加する必要はなく、管理コマンドを使用して直接追加できます。
/etc/firewalld/ #ユーザー構成アドレス
/etc/firewalld/zones/ #設定が有効になった後に保存された設定ファイルは次のとおりです。通常、変更する前にバックアップすることをお勧めします。
# ここに保存されているシステムまたはユーザー構成ファイルは、システム管理者が構成インターフェイスを介してカスタマイズすることも、手動でカスタマイズすることもできます。これらのファイルは、デフォルトの構成ファイルをオーバーライドします。
# から/usr/bin/使用する必要のあるサービスのxmlファイルをfirewalldの上のディレクトリからこのディレクトリにコピーします。ポートが変更された場合は、ファイルの値を変更できます。
$cp /usr/lib/firewalld/services/ssh.xml /etc/firewalld/services/<?xml version="1.0" encoding="utf-8"?><service><short>SSH</short><description>Secure Shell(SSH) is a protocol for logging into and executing commands on remote machines. It provides secure encrypted communications. If you plan on accessing your machine remotely via SSH over a firewalled interface, enable this option. You need the openssh-server package installed forthis option to be useful.</description><port protocol="tcp" port="22"/></service>
(3) Firewall-cmdコマンド
# Firewalldはルールセットを動的に管理するため、既存の接続やセッションを中断することはありません。
firewall-cmd --reload #状態を変更せずにファイアウォールをリロードします
# 使用する場合--complete-リロードすると、状態情報は失われます。このオプションは、ファイアウォールの問題を処理する場合にのみ使用する必要があります。たとえば、状態情報とファイアウォールルールは正常ですが、接続を確立できません。
# サポートされている地域のリストを取得する
$firewall-cmd --get-zones
block dmz drop external home internal public trusted work
# サポートされているすべてのサービスを取得する
$firewall-cmd --get-services
# エリアで有効になっているサービスを一覧表示します
firewall-cmd [--zone=<zone>]--list-services
firewall-cmd --list-service
ssh dhcpv6-client
# サポートされているすべてのICMPタイプを取得します
$firewall-cmd --get-icmptypes
# デフォルトでパブリックエリアを表示
firewall-cmd [--zone=<zone>]--list-all #デフォルトでゾーンを指定せず、デフォルトでパブリックに使用されます
firewall-cmd --list-all-zones #すべての有効な領域の機能を一覧表示します
# デフォルトゾーンで構成されたインターフェイスに流れる新しいアクセス要求は、新しいデフォルトゾーンに配置されます。現在アクティブな接続は影響を受けません。
# デフォルトゾーンを表示および設定する
firewall-cmd --get-default-zone #デフォルトのエリア名を取得する
firewall-cmd --set-default-zone=<zone> #デフォルトエリアを設定する
# アクティブエリアを取得する(ゾーンとインターフェース)
firewall-cmd --get-active-zones
firewall-cmd --get-zone-of-interface=<interface> #インターフェイスに従ってエリアを取得します
firewall-cmd --get-zone-of-interface=ens192
public
# インターフェースがエリアに含まれているかどうかを照会します
firewall-cmd [--zone=<zone>]--query-interface=<interface> #インターフェイスがエリアに存在するかどうかを返します。出力なし。
firewall-cmd --query-interface=ens192
yes
# エリアにインターフェースを追加
# インターフェイスがゾーンに属していない場合、インターフェイスはゾーンに追加されます。
# ゾーンを省略すると、デフォルトのゾーンインターフェイスが使用され、リロード後に再適用されます。
firewall-cmd [--zone=<zone>]--add-interface=<interface>
# インターフェイスが属する領域を変更します
firewall-cmd [--zone=<zone>]--change-interface=<interface>
# このオプションはと同じです--add-インターフェイスオプションも同様ですが、インターフェイスがすでに別の領域に存在する場合、インターフェイスは新しい領域に追加されます。
# ゾーンからインターフェイスを削除します
firewall-cmd [--zone=<zone>]--remove-interface=<interface>
# 緊急モードを有効にして、すべてのネットワーク接続をブロックし、緊急を防止します
firewall-cmd --panic-on #0で.3.0以前のバージョンのFirewallD,パニックオプションは--enable-パニックと--disable-panic.
firewall-cmd --panic-off #パニックモードを無効にする
firewall-cmd --query-panic #緊急モードの照会
firewall-cmd --permanent [ランタイムエリア] #永続的になります
(4) プロセスランタイムエリア
注:ランタイムモードでの領域への変更は永続的ではなく、リロードまたは再起動後に無効になります。
# エリア内のサービスを有効にする
# エリアが指定されていない場合、デフォルトのエリアが使用されます。
# タイムアウト期間が設定されている場合、サービスは特定の秒数の間のみ有効になります。
# サービスがすでにアクティブになっている場合、警告メッセージは表示されません。
firewall-cmd [--zone=<zone>]--add-service=<service>[--timeout=<seconds>]
firewall-cmd --zone=home --add-service=ipp-client --timeout=60 #ゾーンでippを作成します-クライアントサービスは60秒間有効になります:
# エリア内の特定のサービスを無効にする
firewall-cmd [--zone=<zone>]--remove-service=<service>
firewall-cmd --zone=home --remove-service=http
# エリアで特定のサービスが有効になっているかどうかを問い合わせる
firewall-cmd [--zone=<zone>]--query-service=<service>
# 地域のポートとプロトコルの組み合わせを有効にする
# これにより、ポートとプロトコルの組み合わせが可能になります。ポートは別のポートにすることができます<port>またはポート範囲<port>-<port>。プロトコルはtcpまたはudpにすることができます。
firewall-cmd [--zone=<zone>]--add-port=<port>[-<port>]/<protocol>[--timeout=<seconds>]
# ポートとプロトコルの組み合わせを無効にする
firewall-cmd [--zone=<zone>]--remove-port=<port>[-<port>]/<protocol>
# エリアでポートとプロトコルの組み合わせが有効になっているかどうかを照会します
firewall-cmd [--zone=<zone>]--query-port=<port>[-<port>]/<protocol>
# ゾーンでIPマスカレードを有効にする
# プライベートネットワークのアドレスは非表示になり、パブリックIPにマップされます。これはアドレス変換の形式であり、ルーティングによく使用されます。カーネルの制限により、カモフラージュ機能はIPv4でのみ使用できます。
firewall-cmd [--zone=<zone>]--add-masquerade
firewall-cmd [--zone=<zone>]--remove-masquerade #ゾーンでのIPマスカレードを無効にする
firewall-cmd [--zone=<zone>]--query-masquerade #エリアのカモフラージュステータスを照会する
# エリアのICMPブロッキング機能を有効にする
# これにより、選択したインターネット制御メッセージプロトコル(ICMP)メッセージをブロックできるようになります。 ICMPメッセージは、エラー応答だけでなく、要求情報または作成された応答メッセージにすることができます。
firewall-cmd [--zone=<zone>]--add-icmp-block=<icmptype> #[echo-リクエストとエコー-reply]
firewall-cmd [--zone=<zone>]--remove-icmp-block=<icmptype> #禁止区域のICMPブロッキング機能
firewall-cmd [--zone=<zone>]--query-icmp-block=<icmptype> #クエリエリアのICMPブロッキング機能
# ゾーンでポート転送またはマッピングを有効にする
# ポートは、別のホストの同じポートにマップすることも、同じホストまたは別のホストの別のポートにすることもできます。ポート番号は別のポートにすることができます<port>またはポート範囲<port>-<port>。プロトコルはtcpまたはudpにすることができます。宛先ポートはポート番号にすることができます<port>またはポート範囲<port>-<port>。宛先アドレスはIPv4アドレスにすることができます。カーネルによる制限により、ポート転送機能はIPv4でのみ使用できます。
firewall-cmd [--zone=<zone>]--add-forward-port=port=<port>[-<port>]:proto=<protocol>{:toport=<port>[-<port>]|:toaddr=<address>|:toport=<port>[-<port>]:toaddr=<address>}
# 禁止区域のポート転送またはポートマッピング
firewall-cmd [--zone=<zone>]--remove-forward-port=port=<port>[-<port>]:proto=<protocol>{:toport=<port>[-<port>]|:toaddr=<address>|:toport=<port>[-<port>]:toaddr=<address>}
# エリアのポート転送またはポートマッピングを照会します
firewall-cmd [--zone=<zone>]--query-forward-port=port=<port>[-<port>]:proto=<protocol>{:toport=<port>[-<port>]|:toaddr=<address>|:toport=<port>[-<port>]:toaddr=<address>}
# 例:エリアのsshを127に転送します.0.0.2接続する
firewall-cmd --zone=home --add-forward-port=port=22:proto=tcp:toaddr=127.0.0.2
(5) 直接オプション
直接オプションは主に、サービスとアプリケーションがルールを追加できるようにするために使用されます。ルールは、リロードまたは再起動後に保存されないため、再送信する必要があります。
渡されたパラメーター<args>は、iptables、ip6tables、およびebtablesと一致しています。
# コマンドをファイアウォールに渡します。
firewall-cmd --direct --passthrough { ipv4 | ipv6 | eb }<args>
# テーブル用<table>新しいチェーンを追加する<chain> 。
firewall-cmd --direct --add-chain { ipv4 | ipv6 | eb }<table><chain>--remove-chain #テーブル<table>チェーンを削除<chain>。同上
- - query-chain #お問い合わせ<chain>チェーンはテーブルと一緒に存在しますか<table>.はいの場合、0を返します,それ以外の場合は1を返します.同上
# スペースで区切られたテーブルを取得する<table>ミディアムチェーンのリスト。
firewall-cmd --direct --get-chains { ipv4 | ipv6 | eb }<table>
# テーブル用<table>次のようにパラメータを追加します<args>チェーン<chain>、優先度はに設定されています<priority>。
firewall-cmd --direct --add-rule { ipv4 | ipv6 | eb }<table><chain><priority><args>
# テーブル<table>パラメータ付き<args>チェーン<chain>。
firewall-cmd --direct --remove-rule { ipv4 | ipv6 | eb }<table><chain><args>
firewall-cmd --direct --query-rule { ipv4 | ipv6 | eb }<table><chain><args> #パラメータを使用したクエリ<args>チェーン<chain>テーブルが存在するかどうか<table>に
# テーブルを取得<table>すべてがチェーンに追加されます<chain>ルールは新しい行で区切られます。
firewall-cmd --direct --get-rules { ipv4 | ipv6 | eb }<table><chain>
(6) コマンドライン構成の豊富なルール
# 豊富なルールを表示
firewall-cmd --list-rich-rules
# 豊富なルールを作成する
firewall-cmd --add-rich-rule 'rule family=ipv4 source address=送信元アドレスサービス名=サービス名ログプレフィックス="fpt" level=info accept'--permannet
# ping方法のルールを禁止する
firewall-cmd --permanent --add-rich-rule='rule protocol value=icmp drop'
# このルールがあるかどうかを確認します
firewall-cmd --query-rich-rule='rule protocol value='icmp' drop'
# ピンをオンにします(一時的に有効)-削除方法
firewall-cmd --remove-rich-rule='rule protocol value=icmp drop'
firewall-cmd --zone=public--add-service=ftp --permanent #ftpサービスを永続的に開く
firewall-cmd --remove-service=ftp --permanent #サービスを完全にシャットダウンします
firewall-cmd --zone=public--remove-service=ssh --permanent #パブリックゾーンからサービスを削除する
firewall-cmd --zone=public--add-service=ssh --permanent
firewall-cmd --reload #最後の有効な構成(実行する必要があります):
firewall-cmd --query-service ftp #サービスのアクティブ化ステータスを照会する
no
firewall-cmd --zone=public--query-service=ssh #クエリは成功しましたか?:
yes
# sshサービスを削除して、firewalldファイアウォールを通過できるようにします(リモートsshを使用しているため、sshトラフィックの通過は閉じられません。)
firewall-cmd --zone=public--remove-service=ssh --permanent
$firewall-cmd --zone=public--list-all
$firewall-cmd --zone=public--list-ports
$firewall-cmd --get-active-ゾーンゾーン情報を表示する(パブリックインターフェイス):
$firewall-cmd --get-zone-of-interface=eth0 #指定されたインターフェースの領域を表示します:
$firewall-cmd --zone=public--add-interface=eth0 #パーマネントエフェクトプラス--永続的で、ファイアウォールをリロードします
$firewall-cmd --zone=internal --change-zone=p3p1 #ゾーンは内部ゾーンに属しています,インターフェイスを一時的にp3p1に変更します
# リモートマシンが上記のルールを実行すると、すぐにネットワークから切断されます,さりげなく実行することはできないことを覚えておく必要があります。仮想マシンまたは物理マシンにログインするだけの場合は、それを実行してデバッグできます。
firewall-cmd --query-panic
# すべてのパッケージを拒否します。
firewall-cmd --panic-on
# 拒否ステータスのキャンセル:
firewall-cmd --panic-off
# 次の更新ファイアウォールパラメータの違いは、ルールを動的に追加するためのファイアウォール機能の1つである最初のパラメータを切断する必要がないことと、2番目のパラメータを切断してサービスを再起動する必要があることです。
firewall-cmd --reload #ルールを動的に追加する
firewall-cmd --complete-reload #サービスを再開します
service firewalld restart
firewall-cmd --zone=public--add-port=80/tcp --permanent #永続的なパラメータなしで永続的に有効であり、再起動後は無効です
firewall-cmd --reload #構成をリロードして有効にします
# 追加が成功したかどうかを確認します
firewall-cmd --zone=public--query-port=80/tcp #指定したポートのオープン状態を確認してください
$firewall-cmd --zone=public--list-ports #開いているすべてのポートを表示
80 /tcp
firewall-cmd --zone=public--remove-port=80/tcp --permanent #許可されたポートを削除します,許可を渡す80ポートTCPトラフィックを削除します
# さまざまなポートを追加することもできます
firewall-cmd --zone=public--add-port=4990-4999/udp #4990を追加-4999udpポート
ipが指定されているが、ポートが指定されていない場合、デフォルトでは、送信元ポート
が使用されます。# vi/etc/sysctl.conf put net.ipv4.ip_forward=0がネットに変更されました.ipv4.ip_forward=1
sed -i '/net.ipv4.ip_forward/ s/\(.*= \).*/\11/'/etc/sysctl.conf
# (1) 同じサーバーのポート80のトラフィックを8080に転送する
firewall-cmd --add-forward-port=port=80:proto=tcp:toport=8080
# ポートを別のサーバーに転送する場合,必要なエリアでマスカレードをアクティブにします
firewall-cmd --zone=public--add-masquerade
# (2) この例では、ローカルの80ポートトラフィックがIPアドレスに転送されます:10.0.10.リモートサーバーの15ポート8080。
firewall-cmd --zone=public--add-forward-port=port=80:proto=tcp:toport=8080:toaddr=10.0.10.15
# (3)
firewall-cmd --add-forward-port=port=80:proto=tcp:toport=8080 #ポート80から8080にトラフィックを転送する
firewall-cmd --add-forward-port=port=80:proto=tcp:toaddr=192.168.0.1 #ポート80から192にトラフィックを転送する.168.0.1
firewall-cmd --add-forward-port=port=80:proto=tcp:toaddr=192.168.0.1:toport=8080 #ポート80から192にトラフィックを転送する.168.0.1ポート8080
構成後にポート転送を使用できない場合は、次の2つの問題を確認できます。
補足:
firewall-cmd --query-masquerade #IPスプーフィングが許可されているかどうかを確認します
firewall-cmd --add-masquerade #ファイアウォールがIPをスプーフィングできるようにする
firewall-cmd --remove-masquerade #ファイアウォールスプーフィングIPを禁止する
# 追加して、sshポートへの特定のIPアクセスを拒否します。
firewall-cmd --add-rich-rule "rule family=ipv4 source address=10.0.10.1 service name='ssh' reject"
# rule :ルール
# family:ipv4はipv4のアドレスを指定します
# source address=10.0.10.1拒否されるIPは、IPまたはIPセグメントのいずれかです。
# service name='ssh'はsshサービスを指定します
# drop :このルールの実行方法は破棄することです
# 私は直接ドロップすることを好みます:
firewall-cmd --add-rich-rule "rule family=ipv4 source address=10.0.10.1 service name='ssh' drop"
firewall-cmd --add-rich-rule='rule family=ipv4 source address=10.0.10.1 port port=22 protocol=tcp reject'
# このIPがファイアウォールの通過を許可されていることを示します
firewall-cmd --add-rich-rule='rule family="ipv4" source address="10.0.10.1" accept'
# 1つのIPを許可する(10.0.10.1)指定されたポートのみを通過できます(8080-8090)ターゲットへのアクセス(10.0.10.13):
firewall-cmd --add-rich-rule='rule family="ipv4" source address="10.0.10.1" destination address="10.0.10.13/32" port port="8080-8090" protocol="tcp" accept'
# 削除ルールは比較的面倒です
firewall-cmd --remove-rich-rule='rule family="ipv4" source address="10.0.10.1" destination address="10.0.10.13/32" port port="80" protocol="tcp" accept'
# 管理者に172を許可する.31.1.2ホストはsshを介してイントラネットの192をリモートで管理します.168.31.83ホスト(使用されるポートは23456です)
firewall-cmd --add-rich-rule 'rule family=ipv4 source address=172.31.1.2 forward-port port=23456 protocol=tcp to-port=10211 to-addr=192.168.31.83'--permanent --zone=external
# FirewallDにはダイレクトモードが含まれており、TCPプロトコルポート9999を開くなど、いくつかの作業を完了するために使用できます。
firewall-cmd --direct --add-rule ipv4 filter INPUT 0-p tcp --dport 9000-j ACCEPT
firewall-cmd --reload