iptablesの初心者ガイド、Linuxファイアウォール
iptablesは、Linuxオペレーティングシステム用に構築された非常に柔軟なファイアウォールユーティリティです。あなたが初心者のLinuxオタクであろうとシステム管理者であろうと、おそらくiptablesはあなたにとって非常に役に立つことができるいくつかの方法があります。最も用途の広いLinuxファイアウォールを設定する方法を私たちがあなたに示すので読んでください.
写真提供 ezioman.
iptablesについて
iptablesは、ポリシーチェーンを使用してトラフィックを許可または遮断するコマンドラインファイアウォールユーティリティです。システム上で接続が確立されようとすると、iptablesはリスト内でそれに一致するルールを探します。見つからない場合は、デフォルトのアクションに頼ります。.
iptablesはほとんどのLinuxディストリビューションにプレインストールされています。アップデート/インストールするには、iptablesパッケージを取得するだけです。
sudo apt-iptablesをインストールする
Firestarterのようにiptablesに代わるGUIがありますが、コマンドをいくつか実行してしまえばiptablesはそれほど難しくありません。 iptablesのルールを設定するときは、特にサーバーにSSH接続している場合は特に注意が必要です。1つの間違ったコマンドを実行すると、手動で物理マシンに固定されるまで、ロックアウトされる可能性があるからです。.
チェーンの種類
iptablesは3つの異なるチェーンを使用します:入力、転送、そして出力.
入力 - このチェーンは、着信接続の動作を制御するために使用されます。たとえば、ユーザがあなたのPC /サーバにSSHで接続しようとすると、iptablesはIPアドレスとポートを入力チェーンのルールと一致させようとします。.
進む - このチェーンは、実際にはローカルに配信されていない着信接続に使用されます。ルーターを考えてください - データは常にそれに送信されていますが、実際にはルーター自体を宛先とすることはめったにありません。データはターゲットに転送されるだけです。あなたのシステムで転送を必要とするある種のルーティング、NAT処理、または何か他のことをしているのでなければ、この連鎖さえ使用しないでください。.
あなたのシステムがフォワードチェーンを使用しているか必要としているかどうかを確認するための確実な方法が一つあります。.
iptables -L -v
上のスクリーンショットは、数週間稼働しているサーバーのもので、着信または発信接続に制限はありません。ご覧のとおり、入力チェーンは11GBのパケットを処理し、出力チェーンは17GBを処理しました。一方、フォワードチェーンは単一のパケットを処理する必要はありません。これは、サーバーがどのような種類の転送もパススルーデバイスとしても使用されていないためです。.
出力 - このチェーンは発信接続に使用されます。たとえば、howtogeek.comに対してpingを実行しようとすると、iptablesはその出力チェーンをチェックして、接続の試行を許可するか拒否するかを決定する前に、pingとhowtogeek.comに関する規則を確認します。.
注意点
外部ホストへのpingは、アウトプットチェーンを通過するだけでよいもののように見えますが、データを返すためにはインプットチェーンも使用されることに注意してください。 iptablesを使用してシステムをロックダウンするときは、多くのプロトコルで双方向通信が必要になるため、入力チェーンと出力チェーンの両方を正しく設定する必要があることに注意してください。 SSHは人々が両方のチェーンで許可することを忘れている一般的なプロトコルです.
ポリシーチェーンのデフォルトの動作
特定のルールに取り掛かり、構成する前に、3つのチェーンのデフォルトの動作をどのようにしたいかを決める必要があります。言い換えれば、接続が既存のどのルールとも一致しない場合、iptablesに何をさせますか。?
ポリシーチェーンが、不一致トラフィックを処理するように現在設定されていることを確認するには、次のコマンドを実行します。 iptables -L
コマンド.
お分かりのように、私たちはgrepコマンドを使ってよりきれいな出力を得ました。そのスクリーンショットでは、私たちのチェーンは現在トラフィックを受け入れるように考え出されています.
何度も、あなたのシステムがデフォルトで接続を受け付けるようにしたいでしょう。以前にポリシーチェーンのルールを変更していない限り、この設定はすでに構成されているはずです。どちらにせよ、これがデフォルトで接続を受け付けるコマンドです。
iptables --policy INPUT ACCEPT
iptables --policy OUTPUT ACCEPT
iptables --policy FORWARD ACCEPT
デフォルトでaccept規則を使用すると、iptablesを使用して特定のIPアドレスまたはポート番号を拒否しながら、他のすべての接続を受け入れ続けることができます。それらのコマンドにすぐにアクセスします.
すべての接続を拒否して、接続を許可したい接続を手動で指定する場合は、チェーンのデフォルトポリシーを[drop]に変更する必要があります。これを行うことは、機密情報を含み、それらに同じIPアドレスしか接続していないサーバーにのみおそらく有用でしょう。.
iptables --policy INPUT DROP
iptables --policy出力ドロップ
iptables --policyフォワードドロップ
接続固有の応答
デフォルトのチェーンポリシーを設定したら、iptablesにルールを追加して、特定のIPアドレスまたはポートとの間で接続が発生したときに何をすればよいかを知ることができます。このガイドでは、最も基本的で一般的に使用されている3つの「応答」について説明します。.
受け入れる - 接続を許可する.
ドロップ - 接続を切断し、それが起こったことがないように行動します。あなたのシステムが存在することをソースに認識させたくない場合はこれが最善です。.
拒否する - 接続を許可しないで、エラーを送り返してください。特定のソースからシステムに接続したくない場合は、これが最善です。.
これら3つのルールの違いを示す最も良い方法は、これらの各設定にiptablesを設定して、PCがLinuxマシンにpingを実行しようとしたときの様子を示すことです。.
接続を許可する
接続をドロップします。
接続を拒否する
特定の接続を許可またはブロックする
ポリシーチェーンを設定したら、特定のアドレス、アドレス範囲、およびポートを許可またはブロックするようにiptablesを設定できます。これらの例では、接続をに設定します。 ドロップ
, しかし、あなたはそれらをに切り替えることができます 受け入れる
または 拒否
, ニーズとポリシーチェーンの設定方法に応じて.
注:これらの例では、使用します。 iptables -A
既存のチェーンにルールを追加します。 iptablesはリストの先頭から始まり、一致するものが見つかるまで各ルールを順に調べます。あなたが他の上にルールを挿入する必要があるならば、あなたは使うことができます iptables -I [チェーン] [番号]
リストに含める番号を指定します.
単一のIPアドレスからの接続
この例では、IPアドレス10.10.10.10からのすべての接続をブロックする方法を示します。.
iptables -A INPUT -s 10.10.10.10 -j DROP
ある範囲のIPアドレスからの接続
この例は、10.10.10.0 / 24ネットワーク範囲内のすべてのIPアドレスをブロックする方法を示しています。ネットマスクまたは標準のスラッシュ表記を使用してIPアドレスの範囲を指定できます。.
iptables -A INPUT -s 10.10.10.0/24 -j DROP
または
iptables -A INPUT -s 10.10.10.0/255.255.255.0 -j DROP
特定のポートへの接続
この例では、10.10.10.10からのSSH接続をブロックする方法を示します。.
iptables -A入力-p tcp --dport ssh -s 10.10.10.10 -j DROP
「ssh」は任意のプロトコルまたはポート番号に置き換えることができます。の -p tcp
コードの一部は、iptablesにプロトコルが使用する接続の種類を指示します。 TCPではなくUDPを使用するプロトコルをブロックしていた場合は、 -PUP
代わりに必要でしょう.
この例では、任意のIPアドレスからのSSH接続をブロックする方法を示します。.
iptables -A入力-p tcp --dport ssh -j DROP
接続状態
前述したように、多くのプロトコルで双方向通信が必要になります。たとえば、システムへのSSH接続を許可したい場合は、入力チェーンと出力チェーンにルールを追加する必要があります。しかし、SSHがあなたのシステムに入ってくることだけを許可したいのであればどうしますか?アウトプットチェーンにルールを追加しないことで、発信SSH試行も許可される?
これが、接続状態が発生する場所です。これにより、双方向通信を可能にし、一方向接続のみを確立する必要がある可能性があります。この例を見てください。10.10.10.10からのSSH接続は許可されていますが、10.10.10.10へのSSH接続は許可されていません。ただし、セッションがすでに確立されている限り、システムはSSH経由で情報を返送することが許可されているため、これら2つのホスト間でSSH通信が可能になります。.
iptables -A入力-p tcp --dport ssh -s 10.10.10.10 -m状態 - 状態新しい、設定-j ACCEPT
iptables -A出力-p tcp --sport 22 -d 10.10.10.10 -m状態 - 状態ESTABLISHED -j ACCEPT
変更を保存する
iptablesルールに加えた変更は、変更を保存するためのコマンドを実行しない限り、次回iptablesサービスが再起動されたときに破棄されます。このコマンドはあなたのディストリビューションによって異なります。
Ubuntu:
sudo / sbin / iptables-save
Red Hat / CentOS:
/ sbin / service iptables保存
または
/etc/init.d/iptables save
その他のコマンド
現在設定されているiptablesルールを一覧表示します。
iptables -L
を追加 -v
オプションはあなたにパケットとバイト情報を与え、そして追加するでしょう -n
すべてを数字でリストします。言い換えれば、ホスト名、プロトコル、ネットワークは数字でリストされています。.
現在設定されているすべてのルールを消去するには、flushコマンドを発行します。.
iptables -F