GNU/Linux >> Linux の 問題 >  >> Linux

システム管理者向けの16のiptablesのヒントとコツ

最新のLinuxカーネルには、Netfilterという名前のパケットフィルタリングフレームワークが付属しています。 Netfilterを使用すると、システムに出入りするトラフィックを許可、ドロップ、および変更できます。 iptables userspaceコマンドラインツールは、この機能に基づいて強力なファイアウォールを提供します。これは、ルールを追加してファイアウォールポリシーを形成することで構成できます。 iptablesは、その豊富な機能セットとバロックコマンド構文で非常に気が遠くなる可能性があります。それらのいくつかを調べて、システム管理者が遭遇する可能性のある多くの状況に対応する一連のiptablesのヒントとコツを開発しましょう。

自分を締め出さないようにする

シナリオ:会社のプライマリサーバーでiptablesポリシールールを変更します。あなたは自分自身、そして潜在的には他のすべての人を締め出すことを避けたいのです。 (これには時間とお金がかかり、電話が壁から鳴り響きます。)

ヒント#1:前にiptables構成のバックアップを取ります作業を開始します。

次のコマンドを使用して構成をバックアップします:

/sbin/iptables-save > /root/iptables-works

ヒント#2:さらに良いのは、ファイル名にタイムスタンプを含めることです。

次のコマンドでタイムスタンプを追加します:

/sbin/iptables-save > /root/iptables-works-`date +%F`

次のような名前のファイルを取得します:

/root/iptables-works-2018-09-11

システムが機能しないようなことをした場合は、すぐに復元できます:

/sbin/iptables-restore < /root/iptables-works-2018-09-11
ln –s /root/iptables-works-`date +%F` /root/iptables-works-latest

ヒント#4:特定のルールをポリシーの上部と下部の一般的なルール。

ポリシールールの上部にある次のような一般的なルールは避けてください。

iptables -A INPUT -p tcp --dport 22 -j DROP

ルールで指定する基準が多いほど、ロックアウトされる可能性は低くなります。上記の非常に一般的なルールの代わりに、次のようなものを使用してください:

iptables -A INPUT -p tcp --dport 22 –s 10.0.0.0/8 –d 192.168.100.101 -j DROP

このルールは追加します( -A 入力 ドロップするルールをチェーンします CIDRブロック10.0.0.0/8から発信されたパケット TCP上( -p tcp )ポート22(-dport 22 )IPアドレス192.168.100.101( -d 192.168.100.101 )宛て 。

より具体的にする方法はたくさんあります。たとえば、 -i eth0を使用します 処理をサーバー内の単一のNICに制限します。このように、フィルタリングアクションはルールを eth1に適用しません 。

ヒント#5:ポリシールールの上部にIPアドレスをホワイトリストに登録します。

これは、自分を締め出さないための非常に効果的な方法です。他のみんな、そんなに多くはありません。

iptables -I INPUT -s <your IP> -j ACCEPT

これを最初のとして配置する必要があります それが正しく機能するためのルール。覚えておいてください、-私 最初のルールとして挿入します。 -A リストの最後に追加します。

ヒント#6:現在のポリシーのすべてのルールを理解してください。

そもそも間違いを犯さないことは、戦いの半分です。 iptablesポリシーの背後にある内部の仕組みを理解していれば、それはあなたの生活を楽にします。必要に応じてフローチャートを作成します。また、覚えておいてください。ポリシーが行うことと、それが行うことになっていることは、2つの異なることになる可能性があります。

ワークステーションのファイアウォールポリシーを設定する

シナリオ:制限付きのファイアウォールポリシーを使用してワークステーションをセットアップする必要があります。

ヒント#1:デフォルトのポリシーをDROPとして設定します。

# Set a default policy of DROP
*filter
:INPUT DROP [0:0]
:FORWARD DROP [0:0]
:OUTPUT DROP [0:0]

ヒント#2:ユーザーに必要な最小限のサービス量を許可する彼らの仕事を成し遂げなさい。

iptablesルールでは、ワークステーションがDHCPを介してIPアドレス、ネットマスク、およびその他の重要な情報を取得できるようにする必要があります( -p udp --dport 67:68 --sport 67:68 )。リモート管理の場合、ルールはインバウンドSSH(-dport 22 )を許可する必要があります )、送信メール(-dport 25 )、DNS(-dport 53 )、アウトバウンドping( -p icmp )、ネットワークタイムプロトコル(-dport 123 --sport 123 )、およびアウトバウンドHTTP(-dport 80 )およびHTTPS(-dport 443

# Set a default policy of DROP
*filter
:INPUT DROP [0:0]
:FORWARD DROP [0:0]
:OUTPUT DROP [0:0]

# Accept any related or established connections
-I INPUT  1 -m state --state RELATED,ESTABLISHED -j ACCEPT
-I OUTPUT 1 -m state --state RELATED,ESTABLISHED -j ACCEPT

# Allow all traffic on the loopback interface
-A INPUT -i lo -j ACCEPT
-A OUTPUT -o lo -j ACCEPT

# Allow outbound DHCP request
-A OUTPUT –o eth0 -p udp --dport 67:68 --sport 67:68 -j ACCEPT

# Allow inbound SSH
-A INPUT -i eth0 -p tcp -m tcp --dport 22 -m state --state NEW  -j ACCEPT

# Allow outbound email
-A OUTPUT -i eth0 -p tcp -m tcp --dport 25 -m state --state NEW  -j ACCEPT

# Outbound DNS lookups
-A OUTPUT -o eth0 -p udp -m udp --dport 53 -j ACCEPT

# Outbound PING requests
-A OUTPUT –o eth0 -p icmp -j ACCEPT

# Outbound Network Time Protocol (NTP) requests
-A OUTPUT –o eth0 -p udp --dport 123 --sport 123 -j ACCEPT

# Outbound HTTP
-A OUTPUT -o eth0 -p tcp -m tcp --dport 80 -m state --state NEW -j ACCEPT
-A OUTPUT -o eth0 -p tcp -m tcp --dport 443 -m state --state NEW -j ACCEPT

COMMIT

IPアドレス範囲を制限する

シナリオ:あなたの会社のCEOは、従業員がFacebookに多くの時間を費やしていて、仕事をしていないと考えています。 CEOは、Facebookで時間を無駄にしている従業員について何かをするようにCIOに指示します。 CIOは、Facebookで時間を無駄にしている従業員について何かをするようにCISOに指示します。最終的に、あなた 従業員がFacebookで多くの時間を無駄にしていると言われ、あなたはそれについて何かをしなければなりません。 Facebookへのすべてのアクセスをブロックすることにしました。まず、ホストを使用してFacebookのIPアドレスを確認します およびwhois コマンド。

host -t a www.facebook.com
www.facebook.com is an alias for star.c10r.facebook.com.
star.c10r.facebook.com has address 31.13.65.17
whois 31.13.65.17 | grep inetnum
inetnum:        31.13.64.0 - 31.13.127.255

次に、CIDRからIPv4への変換ページを使用して、その範囲をCIDR表記に変換します。 31.13.64.0 / 18を取得します 。 www.facebook.comへの発信アクセスを防ぐには、次のように入力します。

iptables -A OUTPUT -p tcp -i eth0 –o eth1 –d 31.13.64.0/18 -j DROP
時間で調整

シナリオ:Facebookアクセスへのアクセスを拒否することに対する会社の従業員からの反発により、CEOは少し寛容になります(それと彼の管理アシスタントは、彼女がHIS Facebookページを最新の状態に保つことを彼に思い出させます)。 CEOは、ランチタイム(12PMから1PM)にのみFacebook.comへのアクセスを許可することを決定します。デフォルトのポリシーがDROPであると仮定して、iptablesの時間機能を使用してアクセスを開きます。

iptables –A OUTPUT -p tcp -m multiport --dport http,https -i eth0 -o eth1 -m time --timestart 12:00 --timestart 12:00 –timestop 13:00 –d 
31.13.64.0/18  -j ACCEPT

このコマンドは、許可するポリシーを設定します( -j ACCEPT )httpおよびhttps( -m multiport --dport http、https )正午まで(-タイムスタート12:00 )および午後13時(-タイムストップ13:00 )Facebook.com( –d 31.13.64.0/18

時間で調整—テイク2

シナリオ:システムメンテナンスの計画的なダウンタイム中に、午前2時から午前3時までのすべてのTCPおよびUDPトラフィックを拒否して、着信トラフィックによってメンテナンスタスクが中断されないようにする必要があります。これには2つのiptablesルールが必要です:

iptables -A INPUT -p tcp -m time --timestart 02:00 --timestop 03:00 -j DROP 
iptables -A INPUT -p udp -m time --timestart 02:00 --timestop 03:00 -j DROP

これらのルールを使用すると、TCPおよびUDPトラフィック(-ptcpおよび-pudp )拒否されます( -j DROP )午前2時(-timestart 02:00 )および午前3時(-タイムストップ03:00 )入力時(-入力

iptablesとの接続を制限する

シナリオ:インターネットに接続されたWebサーバーは、DoS(サービス拒否)を試みている世界中の悪意のある攻撃者による攻撃を受けています。これらの攻撃を軽減するには、単一のIPアドレスがWebサーバーに対して持つことができる接続の数を制限します。

iptables –A INPUT –p tcp –syn -m multiport -–dport http,https –m connlimit -–connlimit-above 20 –j REJECT -–reject-with-tcp-reset

このルールが何をするか見てみましょう。ホストが20を超える場合(-connlimit-20を超える )新しい接続( –p tcp –syn )1分でWebサーバーにアクセスします(-dport http、https )、新しい接続を拒否します( –j REJECT )接続を拒否していることを接続ホストに通知します(-reject-with-tcp-reset

iptablesルールを監視する

シナリオ:iptablesは、パケットがチェーン内のルールを通過するときに「最初の一致が勝つ」ベースで動作するため、頻繁に一致するルールはポリシーの上部にあり、一致頻度の低いルールは下部にある必要があります。どのルールが最も多くまたは最も少なくトラバースされているかをどのようにして知ることができるので、それらを上または下の近くに並べることができますか?

ヒント#1:各ルールがヒットした回数を確認します。

次のコマンドを使用します:

iptables -L -v -n –line-numbers

このコマンドは、チェーン内のすべてのルールを一覧表示します( -L )。チェーンが指定されていないため、すべてのチェーンが詳細な出力( -v )で一覧表示されます。 )パケットおよびバイトカウンターを数値形式で表示する( -n )チェーン内のそのルールの位置に対応する各ルールの先頭に行番号があります。

パケット数とバイト数を使用して、最も頻繁にトラバースされるルールを上に、最も頻繁にトラバースされないルールを下に並べることができます。

ヒント#2:不要なルールを削除します。

どのルールがまったく一致していませんか?これらは、ポリシーから削除するのに適した候補です。次のコマンドでそれを見つけることができます:

iptables -nvL | grep -v "0     0"

注:これはゼロ間のタブではありません。ゼロの間には5つ​​のスペースがあります。

ヒント#3:何が起こっているかを監視します。

top のように、iptablesで何が起こっているかをリアルタイムで監視したい 。このコマンドを使用して、iptablesアクティビティのアクティビティを動的に監視し、アクティブにトラバースされているルールのみを表示します。

watch --interval=5 'iptables -nvL | grep -v "0     0"'

見る 'iptables-nvL|を実行しますgrep -v "0 0"' 5秒ごとに、出力の最初の画面を表示します。これにより、パケットとバイト数の経時変化を監視できます。

iptablesに関するレポート

シナリオ:マネージャーは、このiptablesファイアウォールのものは素晴らしいと考えていますが、毎日のアクティビティレポートはさらに優れています。作業を行うよりもレポートを作成する方が重要な場合があります。

パケットフィルター/ファイアウォール/IDSログアナライザーFWLogwatchを使用して、iptablesファイアウォールログに基づいてレポートを作成します。 FWLogwatchは多くのログ形式をサポートし、多くの分析オプションを提供します。ログファイルの日次および月次の要約を生成し、セキュリティ管理者がかなりの時間を解放し、ネットワークセキュリティをより適切に制御し、見過ごされている攻撃を減らすことができるようにします。

FWLogwatchからの出力例は次のとおりです。

受け入れてドロップするだけではありません

iptablesを操作するときにロックアウトしないようにすることから、iptablesを監視すること、iptablesファイアウォールのアクティビティを視覚化することまで、iptablesのさまざまな側面について説明しました。これらにより、さらに多くのiptablesのヒントとコツを実現するための道を歩み始めることができます。


Linux
  1. Linuxシステム管理者向けの5つの高度なrsyncのヒント

  2. Pythonアプリケーションの作成、Linuxラボの構築、およびシステム管理者向けのその他のヒント

  3. マニュアルページで情報を見つけるための秘訣とヒント?

  1. curlとwgetのヒントとコツ

  2. MySQLコマンドラインのヒントとコツトップ8

  3. お気に入りの rsync のヒントとコツ

  1. Linuxのニュースとヒントのトップ5ポッドキャスト

  2. Linuxでの印刷にCUPSを使用するためのヒントとコツ

  3. Linux環境変数のヒントとコツ