この記事は、私の著書であるLinux in Actionと、まだリリースされていない2番目のManningプロジェクトからの抜粋です。
ファイアウォール
ファイアウォールは一連のルールです。データパケットが保護されたネットワークスペースに出入りするとき、その内容(特に、その発信元、ターゲット、および使用する予定のプロトコルに関する情報)がファイアウォールルールに対してテストされ、通過が許可されるかどうかが確認されます。簡単な例を次に示します。
一方では、iptablesはLinuxマシンでファイアウォールルールを管理するためのツールです。
一方、firewalldは、Linuxマシンでファイアウォールルールを管理するためのツールでもあります。
問題がありますか?そして、nftablesと呼ばれる別のツールがあると言ったら、それはあなたの一日を台無しにするでしょうか?
OK、全体が少しおかしいにおいがすることを認めますので、説明させてください。それはすべて、Linuxカーネルモジュールレベルでネットワークスタックへのアクセスとネットワークスタックからのアクセスを制御するNetfilterから始まります。何十年もの間、Netfilterフックを管理するための主要なコマンドラインツールはiptablesルールセットでした。
Linuxターミナル
- Linux用の上位7つのターミナルエミュレータ
- Linuxでのデータ分析のための10個のコマンドラインツール
- 今すぐダウンロード:SSHチートシート
- 高度なLinuxコマンドのチートシート
- Linuxコマンドラインチュートリアル
これらのルールを呼び出すために必要な構文は少し難解なものとして出くわす可能性があるため、ufwやfirewalldなどのさまざまなユーザーフレンドリーな実装が高レベルのNetfilterインタープリターとして導入されました。ただし、Ufwとfirewalldは、主にスタンドアロンコンピューターが直面する種類の問題を解決するために設計されています。フルサイズのネットワークソリューションを構築するには、多くの場合、iptablesの追加の筋肉、または2014年以降、その代替のnftables(nftコマンドラインツールを使用)が必要になります。
iptablesはどこにも行きませんでしたが、今でも広く使用されています。実際、今後何年にもわたって、管理者としての作業でiptablesで保護されたネットワークに遭遇することを期待する必要があります。しかし、nftablesは、従来のNetfilterツールセットに追加することで、いくつかの重要な新機能をもたらしました。
ここからは、firewalldとiptablesが単純な接続の問題をどのように解決するかを例で示します。
firewalldを使用してHTTPアクセスを設定する
その名前から推測できるように、firewalldはsystemdファミリーの一部です。 FirewalldはDebian/Ubuntuマシンにインストールできますが、RedHatとCentOSにはデフォルトでインストールされています。マシンでApacheなどのWebサーバーを実行している場合は、サーバーのWebルートを参照して、ファイアウォールが機能していることを確認できます。サイトにアクセスできない場合は、firewalldがその役割を果たしています。
firewall-cmd
を使用します コマンドラインからfirewalld設定を管理するためのツール。 –state
を追加する 引数は現在のファイアウォールステータスを返します:
#firewall-cmd --state
running
デフォルトでは、firewalldはアクティブになり、SSHなどのいくつかの例外を除いてすべての着信トラフィックを拒否します。つまり、ウェブサイトの訪問者が多すぎないため、データ転送コストを大幅に節約できます。ただし、これはおそらくWebサーバーで考えていたものではないため、慣例によりそれぞれ80および443として指定されているHTTPポートとHTTPSポートを開くことをお勧めします。 Firewalldはそれを行う2つの方法を提供します。 1つは、–add-port
を使用する方法です。 使用するネットワークプロトコル(この場合はTCP)とともにポート番号を直接参照する引数。 –permanent
引数は、サーバーが起動するたびにこのルールをロードするようにfirewalldに指示します:
#firewall-cmd --permanent --add-port =80 / tcp
#firewall-cmd --permanent --add-port =443 / tcp
–reload
引数はそれらのルールを現在のセッションに適用します:
# firewall-cmd --reload
ファイアウォールの現在の設定について知りたいですか? –list-services
を実行します :
#firewall-cmd --list-services
dhcpv6-client http https ssh
前に説明したようにブラウザアクセスを追加したとすると、HTTP、HTTPS、SSHポートは、dhcpv6-client
とともにすべて開いているはずです。 、これにより、LinuxはローカルDHCPサーバーからIPv6IPアドレスを要求できます。
iptablesを使用してロックダウンされたカスタマーキオスクを構成する
キオスクは、空港、図書館、企業が横になって、顧客や通行人をコンテンツの閲覧に招待するボックスに入ったタブレット、タッチスクリーン、ATMのようなPCです。ほとんどのキオスクについてのことは、通常、ユーザーが自宅で自分自身を作り、自分のデバイスのように扱うことを望まないということです。これらは通常、国防総省に対する閲覧、YouTube動画の視聴、またはサービス拒否攻撃の開始を目的としたものではありません。したがって、誤用されないようにするには、ロックする必要があります。
1つの方法は、Linuxディスプレイマネージャーを巧みに使用する場合でも、ブラウザーレベルで使用する場合でも、ある種のキオスクモードを適用することです。ただし、すべての穴を確実に塞ぐために、ファイアウォールを介してハードネットワークコントロールを追加することもできます。次のセクションでは、iptablesを使用してそれを行う方法について説明します。
iptablesの使用について覚えておくべき重要なことが2つあります。ルールを指定する順序が重要であり、それ自体では、iptablesルールは再起動後も存続しません。ここで一度に1つずつ説明します。
キオスクプロジェクト
このすべてを説明するために、BigMartと呼ばれるより大きなチェーンの一部である店で働いていると想像してみましょう。彼らは何十年も前から存在しています。実際、私たちの想像上の祖父母はおそらくそこで買い物をして育ちました。しかし、最近では、BigMartの本社の人たちは、Amazonが彼らを永久に追いやるまでの時間を数えているだけでしょう。
それでも、BigMartのIT部門は最善を尽くしており、店舗全体の戦略的な場所に設置することが期待されるWiFi対応のキオスクデバイスをお送りしました。アイデアは、BigMart.comの製品ページにログインしたWebブラウザーを表示して、商品の機能、通路の場所、在庫レベルを検索できるようにすることです。キオスクは、多くの画像やビデオメディアが保存されているbigmart-data.comにもアクセスする必要があります。
これらに加えて、更新と、必要に応じてパッケージのダウンロードを許可する必要があります。最後に、ローカルワークステーションからのインバウンドSSHアクセスのみを許可し、他のすべてのユーザーをブロックする必要があります。次の図は、すべてがどのように機能するかを示しています。
スクリプト
これがすべてBashスクリプトにどのように適合するかを示します。
#!/ bin / bash
iptables -A OUTPUT -p tcp -d bigmart.com -j ACCEPT
iptables -A OUTPUT -p tcp -d bigmart-data.com -j ACCEPT
iptables -A OUTPUT -p tcp -d ubuntu.com -j ACCEPT
iptables -A OUTPUT -p tcp -d ca.archive.ubuntu.com -j ACCEPT
iptables -A OUTPUT- p tcp --dport 80 -j DROP
iptables -A OUTPUT -p tcp --dport 443 -j DROP
iptables -A INPUT -p tcp -s 10.0.3.1 --dport 22 -j ACCEPT
iptables -A INPUT -p tcp -s 0.0.0.0/0 --dport 22 -j DROP
ルールの基本的な構造は、-A
で始まります。 、次のルールを追加することをiptablesに通知します。 OUTPUT
これは、このルールがOUTPUTチェーンの一部になる必要があることを意味します。 -p
このルールがTCPプロトコルを使用するパケットにのみ適用されることを示します。ここで、-d
宛先はbigmart.comです。 -j
フラグはACCEPT
を指します パケットがルールに一致したときに実行するアクションとして。この最初のルールでは、そのアクションは要求を許可または受け入れることです。しかし、さらに下には、ドロップまたは拒否されるリクエストが表示されます。
順序が重要であることを忘れないでください。これは、iptablesが各ルールを超えてリクエストを実行するためですが、一致するまでのみです。したがって、たとえばyoutube.comの送信ブラウザリクエストは最初の4つのルールを通過しますが、–dport 80
のいずれかに到達すると または–dport 443
ルール(HTTPリクエストかHTTPSリクエストかに応じて)は削除されます。一致したため、iptablesはこれ以上チェックする必要はありません。
一方、ソフトウェアのアップグレードを求めるubuntu.comへのシステムリクエストは、適切なルールに達したときに処理されます。ここで行っているのは、明らかに、送信HTTPまたはHTTPSリクエストをBigMartまたはUbuntuの宛先にのみ許可し、他の宛先には許可しないことです。
最後の2つのルールは、着信SSH要求を処理します。ポート80または443を使用しないため、前の2つのドロップルールによってまだ拒否されていませんが、22です。この場合、ワークステーションからのログイン要求は受け入れられますが、他の場所への要求はドロップされます。これは重要です。ポート22ルールに使用するIPアドレスが、ログインに使用しているマシンのアドレスと一致していることを確認してください。一致しない場合、すぐにロックアウトされます。もちろん、大したことではありません。現在の構成方法では、サーバーを再起動するだけで、iptablesルールがすべて削除されます。サーバーとしてLXCコンテナーを使用していて、LXCホストからログオンしている場合は、パブリックアドレスではなく、ホストがコンテナーへの接続に使用するIPアドレスを使用します。
マシンのIPが変更された場合は、このルールを更新することを忘れないでください。そうしないと、ロックアウトされます。
家で一緒に遊んでいますか(うまくいけば、ある種の使い捨てVMで)?素晴らしい。独自のスクリプトを作成します。これでスクリプトを保存できます。chmod
を使用します 実行可能にし、sudo
として実行します 。 bigmart-data.com not found
ことを心配する必要はありません。 エラー-もちろん見つかりません。存在しません。
chmod + X scriptname.sh
sudo ./scriptname.sh
cURL
を使用して、コマンドラインからファイアウォールをテストできます。 。 ubuntu.comのリクエストは機能しますが、manning.comは失敗します。
curl ubuntu.com
curl manning.com
システムブート時にロードするiptablesの構成
Linuxターミナル
- Linux用の上位7つのターミナルエミュレータ
- Linuxでのデータ分析のための10個のコマンドラインツール
- 今すぐダウンロード:SSHチートシート
- 高度なLinuxコマンドのチートシート
- Linuxコマンドラインチュートリアル
では、キオスクが起動するたびにこれらのルールを自動的にロードするにはどうすればよいですか?最初のステップは、iptables-save
を使用して、現在のルールを.rulesファイルに保存することです。 道具。これにより、ルールのリストを含むファイルがルートディレクトリに作成されます。 sudo
を適用するには、パイプとそれに続くteeコマンドが必要です。 文字列の2番目の部分に対する権限:他の方法で制限されたルートディレクトリへのファイルの実際の保存。
次に、iptables-restore
という関連ツールを実行するようにシステムに指示できます。 起動するたびに。前のモジュールで見た種類の通常のcronジョブは、設定された時間に実行されるため役に立ちませんが、コンピューターがいつクラッシュして再起動するかはわかりません。
この問題を処理する方法はたくさんあります。これが1つです:
Linuxマシンに、anacronというプログラムをインストールします。このプログラムは、anacrontabという名前の/etc/ディレクトリにファイルを提供します。ファイルを編集して、このiptables-restore
を追加します コマンドを実行し、起動の1分後にその.rulesファイルの現在の値を毎日(必要な場合)iptablesにロードするように指示します。ジョブに識別子を付けます(iptables-restore
)次に、コマンド自体を追加します。家で私と一緒に遊んでいるので、システムを再起動してこれらすべてをテストする必要があります。
sudo iptables-save | sudo tee /root/my.active.firewall.rules
sudo apt install anacron
sudo nano / etc / anacrontab
1 1 iptables-restore iptables-restoreこれらの実用的な例が、Linuxベースのファイアウォールで接続の問題を管理するためにiptablesとfirewalldを使用する方法を示していることを願っています。
Linux