Linuxが絶大な人気を博している主な理由の1つは、ネットワーキングにおけるその純粋な能力です。 Linuxは、その堅牢なネットワーキング機能により、世界中の大多数のビジネスサーバーに電力を供給しています。これにより、システム管理者はネットワークを好きなように制御できます。 Linux iptablesは、システム管理者が現代のネットワークを効果的に管理するために必要なすべてを提供するユーティリティの1つです。これは、ユーザーがカーネルファイアウォールテーブルを構成し、単純なiptablesルールを使用してそれに含まれるチェーンとルールを管理できるようにするユーザースペースプログラムです。
50の生産的なIPtablesファイアウォールルール
人々はiptablesファイアウォールルールをよく考えますが、実際には、いったん始めれば、それらはかなり簡単です。 iptablesユーティリティとその目的に関する基本的な知識により、ファイアウォールの習得が容易になります。このガイドを注意深くキュレーションし、それに応じて内容を概説しました。主題をよりよく理解するために、これらのiptablesルールを実践して、ネットワーキングスキルを磨き始めましょう。
LinuxIPtablesルールの基礎と構造
Linuxカーネルには、ネットワーキングを目的としたNetfilterと呼ばれるフレームワークが含まれています。これは、システムにベアボーンネットワーキング機能を提供するカーネルルーチンのスタックにすぎません。フレームワークは非常に低レベルであるため、日常のユーザーには適していません。バン、ここにiptablesがあります。
これはユーザースペースプログラムであり、ユーザーがNetfilterの生の力を簡潔で整理された方法で利用できるようにするすっきりとしたコマンドラインインターフェイスを備えています。システムで使用されるネットワーク通信の単位であるパケットを検査、変更、リダイレクト、またはドロップできます。
Iptablesは、敵対的なシステムからの着信ネットワークパケットをブロックすることにより、ファイアウォールとして機能します。しかし、それはあなたがしたいあらゆる種類のネットワーキングの魔法を行うことができます。さて、iptablesは何で構成されていますか?内部には、いくつかのテーブル、チェーン、およびルールが含まれています。
IPtablesコンポーネントの詳細
Iptablesは5つのテーブルで構成され、それぞれが特殊なネットワーキングジョブ用です。それらにはチェーンとルールが含まれています。デフォルトのテーブルはfilter;その他は生です 、 nat 、マングル 、およびセキュリティ 。チェーンはルールの単純なリストです。フィルタには3つのチェーンが組み込まれています。 入力 、出力 、およびフォワード 。 NATテーブルには、 PREROUTINGと呼ばれる2つの追加チェーンがあります。 およびPOSTROUTING 。
ネットワークトラフィックのフィルタリングは、ルールを介して行われます。それらは、複数の一致を持ち、特定のターゲットに一致するように指定できます。ターゲットはjを使用してアクティブ化されます オプション、 –jumpの略 。それらは、ユーザー定義のチェーン、組み込みのターゲット、または拡張機能にすることができます。 Iptablesの組み込みターゲットは承認です 、ドロップ 、キュー 、および RETURN 。
---ポリシーチェーンは、デフォルトチェーンの動作を指示します。テーブル内のiptablesルールに一致しないパケットをどう処理するかを決定します。私たちが教えるいくつかのコマンドを試して、彼らの働きを学びます。準備を整えて、ネットワークの脅威に備えて端末を起動してください。
Linuxの基本的なIPtablesルール
基本的なiptablesコマンドを理解すると、長期的にツールを習得するのに役立ちます。以下では、Linuxシステム管理者としての生産性をまったく新しいレベルに高める、非常に基本的でありながら重要なコマンドについて説明します。
1。デフォルトのポリシーチェーンの動作を確認する
$ sudo iptables -L | grep policy
上記のコマンドは、システムのデフォルトのポリシーチェーンの動作を出力します。私のUbuntu19.08システムでは、デフォルトのポリシーは、フィルターテーブルの3つの組み込みチェーンすべてのパケットを受け入れることです。以前に変更していない場合は、システムでも同じである必要があります。
2。現在のルールを確認する
$ sudo iptables -L
-L を使用してiptablesを呼び出すことにより、システムの現在のiptables構成を確認できます。 オプション。ポリシー、ターゲット、ソース、および宛先に関する情報とともに、適切にフォーマットされたルールのリストが表示されるはずです。
3。仕様別にルールを一覧表示する
$ sudo iptables -S
-S iptablesコマンドで追加されたオプションは、仕様に基づいてすべてのルールのリストを表示します。私のシェルは、INPUT、OUTPUT、およびFORWARDチェーンのすべてのパケットを受け入れることを示しています。
4。 Iptablesのステータスを確認する
$ sudo iptables -L -v
上記のコマンドは、iptablesの現在のステータスを表示します。これまでにシステムが受け入れて送信したパケットの数が一覧表示されます。 FORWARDチェーンに注意する必要があります。以前にファイアウォール設定を変更していない限り、すべてゼロにする必要があります。
5。 Iptablesルールをリセットする
$ sudo iptables -F
iptablesの構成が文字化けして、システムのネットワークが完全に台無しになったときが来るかもしれません。これは、新しいルールを試しているときに、一部の変更を元に戻せなかった場合に発生する可能性があります。ただし、このような状況ではこのコマンドが助けになるので、リラックスすることができます。
6。変更されたIptablesの保存
$ sudo service iptables save
iptablesへの変更は一時的なものです。つまり、デーモンが再起動されるたびに自動的にリセットされます。将来の使用のためにいくつかのルールを変更した後、iptablesを保存することをお勧めします。上記のコマンドはこれを実行し、次回の起動時にiptablesに新しい構成が読み込まれるようにします。
7。 Iptablesをフラッシュして変更を永続化する
$ sudo iptables -F && sudo /sbin/iptables-save
iptablesをフラッシュし、変更を永続的にするには、上記のコマンドを使用する必要があります。コマンドの後半(&&の後)は、コマンド番号6と同じ仕事をします。したがって、これらは互換的に使用できます。
LinuxIPtablesの管理
Iptablesは、このネットワーキングユーティリティの管理を非常に簡単にする堅牢な管理コマンドを提供します。ただし、これらのコマンドはシステムごとに異なる傾向があります。幸いなことに、変更は微妙で、新しいLinuxユーザーでも理解しやすいものです。
8。 Iptablesファイアウォールの開始
$ sudo systemctl start iptables
上記のコマンドを使用して、Fedora、OpenSUSE、Ubuntuなどのsystemdを使用するシステムでiptablesサービスを開始できます。
$ sudo /etc/init.d/iptables start
代わりにsysvinitを使用するシステムでは、このジョブに上記のバリエーションが必要になります。 MX Linux、Slackware、またはPuppy Linuxを使用している場合は、このバージョンを使用してシステムでiptablesを起動する必要があります。
9。 Iptablesファイアウォールの停止
$ sudo systemctl stop iptables
このコマンドは、systemdを使用するシステムで実行されているiptablesデーモンを停止します。
$ sudo /etc/init.d/iptables stop
sysvinitを実行しているシステムでも同じことを行います。
10。 Iptablesファイアウォールの再起動
$ sudo systemctl restart iptables
上記のコマンドを使用して、Ubuntuマシンでiptablesサービスを再起動できます。
$ sudo /etc/init.d/iptables restart
sysvinitを使用するシステムの場合は、代わりに上記のコマンドを試してください。上記の3つのコマンド間のパターンの類似性に注意してください。
11。既存のすべてのルールを確認する
$ sudo iptables -L -n -v
このiptablesコマンドは、その時点までに設定した既存のiptablesファイアウォールルールをすべて出力します。このコマンドは多くの情報を表示するため、grepを使用して特定のルールを見つけるのは賢明なアイデアです。
12。特定のテーブルの既存のルールを確認する
上記のコマンドは、デフォルトのテーブルであるフィルターに関する情報を表示します。 NATテーブルなど、他のテーブルに関する情報を検索する場合は、代わりに次のコマンドを使用してください。
$ sudo iptables -t nat -L -v -n
-t ここでは、iptablesにテーブル名を指定するためのオプションが使用されています。
13。 TCPチェーンのみのルールを一覧表示する
$ sudo iptables -S TCP
このコマンドは、TCPチェーンに関する情報のみを表示します。これは、着信TCP要求のみの出力が必要な場合に便利です。
14。 UDPチェーンのみのルールを一覧表示する
$ sudo iptables -S UDP
また、UDP要求は、多くのシステムでかなりの量のトラフィックを占めています。不要なUDPトラフィックをブロックする場合は、このコマンドを使用してこれらの要求を検査できます。
LinuxIPtablesファイアウォールルール
Linuxでのiptablesの主な用途の1つは、ネットワークファイアウォールを設定することです。特定のIPアドレス、IP範囲、MACアドレスなど、さまざまな基準に基づいて不要な着信要求をブロックするために使用できます。以下に、そのようなコマンドの適切な例をいくつか示します。
15。すべての着信リクエストをブロックする
次のコマンドは、システムへのすべての着信要求をブロックします。このコマンドは、リクエストごとにチェックされる最初のルールになるため、テーブル内の他のルールよりも優先されます。
$ sudo iptables INPUT -j DROP
16。特定のIPアドレスをブロックする
多くの場合、特定のIPアドレスからの邪魔なトラフィック動作に気付くでしょう。指定されたコマンドは、このような状況で役立ち、システム管理者がこれらのIPを完全にブロックできるようにします。
$ sudo iptables -A INPUT -s xxx.xxx.xxx.xxx -j DROP
このコマンドは、IPアドレス変数からのすべての着信要求をブロックします。 iptablesの用語では、これは「ドロップ」リクエストと呼ばれます。 -A オプションは、最初ではなく、INPUTチェーンの最後にこのルールを追加するために使用されます。
17。 IPからのすべてのTCPリクエストをブロックする
以下のコマンドは、特定のIPアドレスからのすべての着信TCP要求をブロックするために使用できます。 IPアドレス変数を既存のものに置き換えることを忘れないでください。
$ sudo iptables -A INPUT -p tcp -s xxx.xxx.xxx.xxx -j DROP
-p ここでは、フラグはTCP要求のみを選択するために使用されます。 -j オプションは、特定のアクションに「ジャンプ」するために使用されます。
18。 IPアドレスのブロックを解除する
以前にブロックしたIPアドレスのブロックを解除したい場合があります。以下のコマンドを使用すると、これを正確に実行できます。
$ sudo iptables -D INPUT -s xxx.xxx.xxx.xxx -j DROP
このコマンドは、指定されたIPをブロックしたルールを削除するだけです。 –削除を使用することもできます -Dの代わりに 必要に応じて。
19。 IPアドレス範囲をブロックする
システム管理者は、疑わしい動作が続くため、特定のIP範囲をブロックすることがよくあります。次のコマンドを使用すると、IP範囲xxx.xxx.xxx.0/24からのすべての着信リクエストをブロックできます。
$ sudo iptables -A INPUT -s xxx.xxx.xxx.0/24 -j DROP
20。 IPアドレス範囲のブロックを解除する
検査のためにIP範囲をブロックしたい場合があります。正当な場合は、システムへのアクセスを再度有効にする必要があります。以下のコマンドを使用して、iptablesファイアウォールから特定のIPアドレス範囲のブロックを解除します。
$ sudo iptables -D INPUT -s xxx.xxx.xxx.0/24 -j DROP
21。指定されたIP範囲のすべてのTCP要求をブロックする
悪意のあるユーザーは、正当なサーバーをTCP要求で溢れさせるために、ボットの広大なネットワークを使用することがよくあります。以下のコマンドを使用して、特定のIP範囲(たとえばxxx.xxx.xxx.0/24)からのすべてのTCP要求をブロックできます。
$ sudo iptables -A INPUT -p tcp -s xxx.xxx.xxx.0/24 -j DROP
22。特定のIP範囲のすべてのTCPリクエストのブロックを解除する
特定のIP範囲(たとえば、xxx.xxx.xxx.0 / 24)からすべてのTCPトラフィックのブロックを解除する場合は、以下のコマンドを使用できます。これは、特定のIPアドレス範囲からのすべての着信TCP要求をブロックした場合に役立ちます。
$ sudo iptables -D INPUT -p tcp -s xxx.xxx.xxx.0/24 -j DROP
23。特定のポートでTCP接続をブロックする
iptablesルールは、特定のポート(この場合は111など)ですべての発信TCP接続をブロックするために使用できます。
$ sudo iptables -A OUTPUT -p tcp --dport 111 -j DROP
同じポートでTCP接続をブロックするために、チェーン名をINPUTに置き換えることができますが、着信要求のためです。
$ sudo iptables -A INPUT -p tcp --dport xxx -j DROP
24。ポート80でTCP接続を許可する
次のコマンドは、システムのポート80で着信TCP要求を許可します。システム管理者は、管理のために特定のポート番号をさまざまな接続に指定することがよくあります。
$ sudo iptables -A INPUT -p tcp -s xxx.xxx.xxx.0/24 --dport 80 -j ACCEPT
25。ポート80でTCP接続を拒否する
以下のiptablesコマンドは、ポート80で試行されたTCP接続を拒否します。必要なのは、引数としてDROPを -jに渡すことだけです。 。
$ sudo iptables -A INPUT -p tcp -s xxx.xxx.xxx.0/24 --dport 80 -j DROP
同じことがUDP接続にも当てはまります。
$ sudo iptables -A INPUT -p udp -s xxx.xxx.xxx.0/24 --dport 80 -j DROP
26。ポート22で着信SSH接続を許可する
以下のコマンドは、デフォルトのポートですべての着信SSH接続を許可する場合に役立ちます。 –dportの引数としてsshを渡す必要があります iptablesルールにフラグを立てます。
$ sudo iptables -A INPUT -p tcp -s xxx.xxx.xxx.0/24 --dport ssh -j ACCEPT
27。着信SSH接続をブロックする
着信sshの試行をブロックするには、以下のコマンドを使用します。これにより、IP範囲xxx.xxx.xxx.0/24から行われるすべての着信SSH試行がブロックされます。
$ sudo iptables -A INPUT -p tcp -s xxx.xxx.xxx.0/24 --dport ssh -j DROP
28。発信SSH接続を許可する
Linuxマシンで安全なリモート通信を確立する場合は、発信SSHを有効にする必要があります。次のコマンドを使用すると、これを正確に実行できます。
$ sudo iptables -A OUTPUT -p tcp --dport ssh -j ACCEPT
これにより、システムからWeb経由ですべての発信SSH接続が可能になります。
29。すべての発信SSH接続をブロックする
次のコマンドは、システムから任意のネットワークへのすべての発信SSH試行をブロックします。このコマンドをリモートで使用すると、システムからロックされたままになる可能性があるため、注意してください。
$ sudo iptables -A INPUT -p tcp --dport ssh -j DROP
30。着信SSHを許可するときに状態を確立する
システム管理者は、SSH状態を使用して、リモート接続が適切なエンティティに属しているかどうかを判断することがよくあります。まず、以下のコマンドを使用して、着信SSH要求に状態を割り当てます。 -i フラグは、インターフェース(この場合はeth0)を参照するために使用されます。
$ sudo iptables -A INPUT -i eth0 -p tcp --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT
31。着信SSHを許可するときに状態を確立する
着信リクエストの場合と同じ方法で、発信SSHリクエストに状態を割り当てます。 -o ここではフラグを使用してインターフェースを参照します。この場合はeth0でもあります。
$ sudo iptables -A OUTPUT -o eth0 -p tcp --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT
32。着信要求に複数のポートを許可する
Linuxファイアウォールのiptablesを使用すると、管理者はiptablesのマルチポートオプションを使用して一度に複数のポートを有効にできます。次のコマンドは、ポート番号22、80、および110ですべての着信要求を受け入れるためのルールを設定します。
$ sudo iptables -A INPUT -p tcp -m multiport --dports 22,80,110 -j ACCEPT
33。送信リクエストに複数のポートを許可する
発信接続用に複数のポートを設定することは、上記のコマンドとほとんど同じです。ここで行う必要があるのは、OUTPUTオプションを使用することだけです。
$ sudo iptables -A OUTPUT -p tcp -m multiport --sports 22,80,110 -j ACCEPT
34。特定のポートでIP範囲を許可する
特定のIP範囲、つまりプライベートエンタープライズネットワークからのみネットワークリクエストを受信する場合があります。以下のコマンドは、デフォルトのSSHポートでxxx.xxx.xxx.0/24の範囲のすべての発信SSH要求を許可します。
$ sudo iptables -A OUTPUT -p tcp -d xxx.xxx.xxx.0/24 --dport 22 -j ACCEPT
35。特定のポートでIP範囲をブロックする
多くの場合、悪意のあるボットユーザーからの継続的なネットワークリクエストに遭遇します。これらは通常、特定のIP範囲で構成されます。以下のコマンドを使用すると、これらのトラフィックを簡単にブロックできます。
$ sudo iptables -A INPUT -p tcp -s xxx.xxx.0.0/24 --dport 22 -j DROP
36。 IptablesルールでFacebookをブロックする
多くの企業は、営業時間中にFacebookなどのソーシャルメディアサイトをブロックします。以下のコマンドは、この目的で使用できます。まず、地理的位置でFacebookが使用しているネットワーク範囲を調べます。
$ sudo host facebook.come
これにより、Facebookで使用される特定のIP(この場合は157.240.7.35など)で構成される結果が返されます。次のコマンドを実行します。
$ sudo whois 66.220.156.68 | grep CIDR
Facebookがあなたの場所に使用するIP範囲、この場合は157.240.0.0/16を提供します。これで、このネットワークへのすべての発信接続を簡単にブロックできます。
$ sudo iptables -A OUTPUT -p tcp -d 157.240.0.0/16 -j DROP
37。ネットワークフラッドをブロックする
悪意のあるユーザーは、会社のサーバーを危険にさらすためにネットワークフラッディングに頼ることがよくあります。このような攻撃からシステムを保護するために、単位時間あたりの着信要求を制限できます。
$ sudo iptables -A INPUT -p tcp --dport 80 -m limit --limit 50/minute --limit-burst 100 -j ACCEPT
このコマンドは、ポート80への着信トラフィックを1分あたり最大50接続に制限し、100の制限バーストを設定します。
38。着信pingリクエストをブロックする
ping要求は、サーバーが稼働しているかどうかを判断するために使用されます。また、潜在的なハッカーに貴重な洞察を提供することもできます。 Linuxファイアウォールのiptablesに次のコマンドを追加することで、これらのリクエストをブロックできます。
$ sudo iptables -A INPUT -pr icmp -i eth0 -j DROP
39。ドロップされたネットワークパケットをログに記録する
後で検査するために、iptablesファイアウォールルールによってドロップされたネットワークパケットを保存することをお勧めします。これは、以下のコマンドで実行できます。
$ sudo iptables -A INPUT -i eth0 -j LOG --log-prefix "IPtables dropped packets:"
–log-prefixの後に文字列を置き換えることができます お好みの何かに。 grepを使用して、ドロップされたパッケージを見つけます。
$ sudo grep "IPtables dropped packets:" /var/log/*.log
40。ネットワークインターフェースで接続要求をブロックする
複数のネットワークインターフェイスがある場合は、そのうちの1つで接続をブロックすることをお勧めします。以下のコマンドを使用して、最初のイーサネットインターフェイスeth0のIP範囲xxx.xxx.xxx.0/24からのすべてのリクエストをブロックします。
$ sudo iptables -A INPUT -i eth0 -s xxx.xxx.xxx.0/24 -j DROP
その他のIPtablesファイアウォールルール
Linux iptablesのルールは非常に多様である可能性があるため、システム管理に大きな影響を与えるいくつかの重要なコマンドをリストアップします。多くの場合、特定の問題の解決につながる可能性があり、iptablesファイアウォールのトラブルシューティングにも使用できます。
41。 Iptablesでポート転送を許可する
あるサービスのトラフィックを別のポートに転送したい場合があります。以下のコマンドは、そのような単純な例の1つを示しています。
$ sudo iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 25 -j REDIRECT --to-port 3535
上記のコマンドは、ネットワークインターフェイスeth0のすべての着信トラフィックをポート25から3535に転送します。
42。ループバックアクセスを許可する
ループバックアクセスは、ネットワークのトラブルシューティングやさまざまなテスト目的で重要です。以下のコマンドを使用してこれを許可できます。
着信接続の場合、
$ sudo iptables -A INPUT -i lo -j ACCEPT
発信接続の場合、
$ sudo iptables -A OUTPUT -o lo -j ACCEPT
43。特定のMACアドレスへのアクセスをブロックする
他の人が特定のMACアドレスからシステムにアクセスするのを防ぎたい場合は、以下のコマンドを使用してこれを行うことができます。以下のMACをブロックするアドレスに変更します。
$ sudo iptables -A INPUT -m mac --mac-source 00:00:00:00:00:00 -j DROP
44。 IPごとの同時接続を制限する
システム管理者は、特定のポートの単一のIPアドレスから確立される同時接続の数を制限したい場合があります。次のコマンドは、iptablesを使用してこれを行う方法を示しています。
$ sudo iptables -A INPUT -p tcp --syn --dport 22 -m connlimit --connlimit-above 3 -j REJECT
必要に応じて、ポート番号と接続制限を変更できます。
45。 Iptablesルールの検索
iptablesファイアウォールを設定して実行したら、後でいくつかのルールを検査する必要がある場合があります。これは、以下のコマンド構文を使用して実行できます。
$ sudo iptables -L $table -v -n | grep $string
$ tableをテーブル名に、$stringを検索語に置き換えることを忘れないでください。
46。 Iptablesルールをファイルに保存する
新しいiptablesファイアウォールをファイルに簡単に保存できます。次のコマンドは、新しく構成されたiptablesをiptables.rulesという名前のファイルに保存する方法を示しています。ファイル名は任意に変更できます。
$ sudo iptables-save > ~/iptables.rules
47。ファイルからIptablesを復元する
以下のコマンドは、ファイルからiptablesファイアウォールルールを復元する方法を示しています。この例では、ルールが上記の例で作成されたファイルに保存されていると想定しています。
$ sudo iptables-restore < ~/iptables.rules
48。送信メールを無効にする
システムが送信メールを送信する必要がないことが確実な場合は、iptablesを使用してそれらを完全に無効にすることができます。以下のコマンドは、SMTPポート上のすべての発信接続をブロックします。確認応答を送信したくない場合は、REJECTの代わりにDROPを使用してください。
$ sudo iptables -A OUTPUT -p tcp --dports 25,465,587 -j REJECT
49。パケット数とサイズをリセットする
以下のコマンドを使用して、iptablesのパケット数と集計サイズをリセットできます。これは、すでに確立されている接続中にサーバーが処理している新しいトラフィックの量を確認する場合に役立ちます。
$ sudo iptables -Z
50。内部から外部への接続を許可します
eth1の内部ネットワークインターフェイスと外部インターフェイスがeth0であるとします。以下のコマンドは、eth1アダプターが外部アダプターのトラフィックにアクセスできるようにします。
$ sudo iptables -A FORWARD l-i eth1 -o eth0 -j ACCEPT
終わりの考え
Linux iptablesルールは、ネットワークトラフィックを制御するための柔軟な手段を提供し、管理者がシステムを便利に管理できるようにします。多くの場合、iptablesファイアウォールルールが豊富にあるため、iptablesは範囲外であると考えられます。ただし、理解すれば非常に簡単です。
さらに、ネットワーキング分野でのキャリアを追求したい場合は、iptablesに関する深い知識が必須です。すぐに習得できるように、最も便利な50のiptablesコマンドの概要を説明しました。すぐに練習を始めて、何か新しいことを学ぶまで実験を続けてください。このガイドについてのご意見をお聞かせください。さまざまなLinuxおよびUnixコマンドに関するよりエキサイティングなガイドをご覧ください。