Linux iptablesファイアウォールに関する13のインタビュー質問
ニシタ・アガルワルさんは、頻繁に訪れるTecmintの訪問者として、インドのプネにある私営ホスティング会社で行ったばかりの就職面接に関する経験(質問と回答)を私たちと共有しました。彼女はさまざまなトピックに関する多くの質問を受けましたが、彼女はiptablesの専門家であり、近い将来面接を受ける人々に向けて、iptablesに関連する質問と彼女が提供した回答を共有したいと考えています。
すべての質問とその回答は、Nishita Agarwalの記憶に基づいて書き直されています。
こんにちは、友達!私の名前はニシタ・アガーワルです。私はテクノロジーの学士号を取得しました。私の専門分野はUNIXで、UNIXのバリアント(BSD、Linux)は、私がそれを聞いたときから魅了されています。ストレージに1年以上の経験があります。私は仕事の転職を探しており、インドのプネのホスティング会社に就職しました。
ここに、面接中に求められた質問のコレクションがあります。私は自分の記憶に基づいて、iptablesに関連する質問とその回答のみを記録しました。これがあなたの面接を突破するのに役立つことを願っています。
1. あなたはLinuxのiptablesやファイアウォールについて聞いたことがありますか?それらが何であるか、そして何に使われるのか知っていますか?
私は長い間iptablesを使用しており、iptablesとファイアウォールの両方について理解しています。iptablesは主にCプログラミング言語で書かれたアプリケーションプログラムで、GNU一般公衆ライセンスのもとでリリースされています。システム管理の観点から書かれており、現在の安定版はiptables1.4.21です。iptablesはUNIX系オペレーティングシステム用のファイアウォールと見なされ、より正確にはiptables/netfilterと呼ばれます。管理者はコンソールまたはGUIフロントエンドツールを通じてiptablesと対話し、事前定義されたテーブルにファイアウォールルールを追加および定義します。Netfilterは、フィルタリングの作業を行うカーネル内に組み込まれたモジュールです。
Firewalldは、RHEL/CentOS 7におけるフィルタリングルールの最新の実装です(私が知らない他のディストリビューションにも実装されている可能性があります)。それはiptablesインターフェースの代わりとなり、netfilterに接続します。
2. iptablesやLinuxコマンドラインのためのGUIベースのフロントエンドツールを使ったことがありますか?
回答: 私はShorewallのようなiptablesのGUIベースのフロントエンドツールとWebminを組み合わせて使用したことがありますが、Linuxコンソールを通じてiptablesに直接アクセスすることから得られる力を大いに認めざるを得ません。直接アクセスは、バックグラウンドで何が起こっているのかをより良く理解し、高度な柔軟性を提供します。GUIは初心者の管理者向けですが、コンソールは経験豊富な管理者向けです。
3. iptablesとfirewalldの基本的な違いは何ですか?
iptablesとfirewalldは同じ目的(パケットフィルタリング)を果たしますが、アプローチが異なります。iptablesは変更が行われるたびに全体のルールセットをフラッシュしますが、firewalldはそうではありません。通常、iptablesの設定は「/etc/sysconfig/iptables」にありますが、firewalldの設定は「/etc/firewalld/」にあり、これは一連のXMLファイルです。XMLベースのfirewalldの設定はiptablesの設定と比べて簡単ですが、同じタスクはiptablesとfirewalldの両方のパケットフィルタリングアプリケーションを使用して達成できます。Firewalldは、その内部でiptablesを実行し、独自のコマンドラインインターフェイスとXMLベースの設定ファイルを持っています。
4. 機会があれば、すべてのサーバーでiptablesをfirewalldに置き換えますか?
私はiptablesに精通しており、正常に動作しています。また、firewalldの動的な側面を必要としない場合、iptablesからfirewalldにすべての設定を移行する理由はなさそうです。これまでのところ、iptablesが問題を引き起こしたのを見たことはありません。情報技術の一般的な規則は、「壊れていないなら修理する必要はない」と言っています。しかし、これは私の個人的な考えであり、組織がiptablesをfirewalldに置き換えるのであれば、firewalldを実装することに何の問題もありません。
5. あなたはiptablesに自信があるようですね、そしてプラスのポイントは私たちもサーバーでiptablesを使用していることです。
iptablesで使用されるテーブルは何ですか? iptablesで使用されるテーブルとそれがサポートするチェーンについて簡単に説明してください。
回答: 認識していただきありがとうございます。質問の部分に移りますが、iptablesでは4つのテーブルが使用されています。具体的には次の通りです:
- ナットテーブル
- マングルテーブル
- フィルターテーブル
- 生のテーブル
Natテーブル : Natテーブルは主にネットワークアドレス変換(NAT)に使用されます。マスカレードされたパケットは、テーブル内のルールに従ってIPアドレスが変更されます。ストリーム内のパケットはNatテーブルを一度だけ通過します。つまり、パケットのジェットからマスカレードされた場合、ストリーム内の他のパッケージはこのテーブルを再度通過することはありません。このテーブルでフィルタリングしないことを推奨します。NATテーブルがサポートするチェーンは、PREROUTINGチェーン、POSTROUTINGチェーン、およびOUTPUTチェーンです。
マングルテーブル : 名称が示すように、このテーブルはパケットをマングルするために使用されます。特別なパッケージの変更に使用され、異なるパケットの内容とそのヘッダーを変更するために利用できます。マングルテーブルは、マスカレードには使用できません。サポートされているチェーンには、PREROUTINGチェーン、OUTPUTチェーン、FORWARDチェーン、INPUTチェーン、POSTROUTINGチェーンがあります。
フィルターテーブル : フィルターテーブルはiptablesで使用されるデフォルトのテーブルです。パケットをフィルタリングするために使用されます。ルールが定義されていない場合は、フィルターテーブルがデフォルトのテーブルとして適用され、フィルタリングはこのテーブルに基づいて行われます。サポートされているチェーンはINPUTチェーン、OUTPUTチェーン、FORWARDチェーンです。
生テーブル : 生テーブルは、以前に免除されたパッケージを構成したいときに使用されます。これは、PREROUTINGチェーンとOUTPUTチェーンをサポートします。
6. iptablesのtargetに指定できるターゲット値は何ですか、それぞれの役割を簡潔に説明してください!
回答 : 以下は、iptablesのターゲットに指定できるターゲット値です:
- 受信する : パケットを受け入れる
- キュー : ユーザースペースへのPaasパッケージ(アプリケーションとドライバが存在する場所)
- ドロップ : パケットをドロップする
- RETURN : 呼び出しチェーンに制御を戻し、チェーン内の現在のパケットに対する次のルールの実行を停止します。
7. iptablesの技術的な側面に移りましょう。ここでいう技術的とは実践的なことを指します。
CentOSにiptablesをインストールするために必要なiptablesのrpmをどのように確認しますか?
回答 : iptablesのrpmは標準のCentOSインストールに含まれており、別途インストールする必要はありません。rpmを確認するには、次のようにします:
# rpm -qa iptables
iptables-1.4.21-13.el7.x86_64
インストールが必要な場合は、yumを使用して取得できます。
# yum install iptables-services
8. iptablesサービスが動作しているかどうかを確認する方法は?
回答 : iptables のステータスを確認するには、ターミナルで以下のコマンドを実行します。
# service iptables status [On CentOS 6/5]
systemctl status iptables [On CentOS 7]
実行されていない場合、以下のコマンドを実行することができます。
---------------- On CentOS 6/5 ----------------
chkconfig --level 35 iptables on
service iptables start
---------------- On CentOS 7 ----------------
systemctl enable iptables
systemctl start iptables
iptablesモジュールがロードされているかどうかも確認できます:
# lsmod | grep ip_tables
9. 現在iptablesで定義されているルールをどのように確認しますか?
回答 : 現在のiptablesのルールは、次のように簡単に確認できます:
# iptables -L
サンプル出力
Chain INPUT (policy ACCEPT)
target prot opt source destination
ACCEPT all -- anywhere anywhere state RELATED,ESTABLISHED
ACCEPT icmp -- anywhere anywhere
ACCEPT all -- anywhere anywhere
ACCEPT tcp -- anywhere anywhere state NEW tcp dpt:ssh
REJECT all -- anywhere anywhere reject-with icmp-host-prohibited
Chain FORWARD (policy ACCEPT)
target prot opt source destination
REJECT all -- anywhere anywhere reject-with icmp-host-prohibited
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
10. すべてのiptablesルールまたは特定のチェーンをフラッシュするにはどうすればよいですか?
回答: 特定のiptablesチェーンをフラッシュするには、次のコマンドを使用できます。
iptables --flush OUTPUT
すべてのiptablesルールをフラッシュする。
# iptables --flush
11. 信頼できるIPアドレス(例えば192.168.0.7)からのパケットを受け入れるためにiptablesにルールを追加します。
このシナリオは、以下のコマンドを実行することで簡単に達成できます。
# iptables -A INPUT -s 192.168.0.7 -j ACCEPT
ソースには、次のように標準のスラッシュまたはサブネットマスクを含めることができます:
# iptables -A INPUT -s 192.168.0.7/24 -j ACCEPT
iptables -A INPUT -s 192.168.0.7/255.255.255.0 -j ACCEPT
12. iptablesでsshサービスに対してACCEPT、REJECT、DENY、DROPのルールを追加する方法。
回答: SSHがポート22で実行されていることを期待しているので、SSHのデフォルトポートでもありますが、次のようにiptablesにルールを追加できます:
sshサービス(ポート22)用のtcpパケットを受け入れるために。
# iptables -A INPUT -s -p tcp --dport 22 -j ACCEPT
sshサービス(ポート22)用のtcpパケットを拒否する。
# iptables -A INPUT -s -p tcp --dport 22 -j REJECT
sshサービス(ポート22)用のtcpパケットを拒否します。
iptables -A INPUT -s -p tcp --dport 22 -j DENY
sshサービス(ポート22)のためにtcpパケットをドロップします。
iptables -A INPUT -s -p tcp --dport 22 -j DROP
13. シナリオをお話ししましょう。ローカルIPアドレスが192.168.0.6のマシンがあるとします。そのマシンに対してポート21、22、23、および80の接続をブロックする必要があります。あなたはどうしますか?
回答: 必要なのは、iptablesでポート番号を指定する‘マルチポート‘オプションを使用することで、上記のシナリオを一度で達成できます。
# iptables -A INPUT -s 192.168.0.6 -p tcp -m multiport --dport 21,22,23,80 -j DROP
記載されたルールは、以下のコマンドを使用して確認できます。
# iptables -L
Chain INPUT (policy ACCEPT)
target prot opt source destination
ACCEPT all -- anywhere anywhere state RELATED,ESTABLISHED
ACCEPT icmp -- anywhere anywhere
ACCEPT all -- anywhere anywhere
ACCEPT tcp -- anywhere anywhere state NEW tcp dpt:ssh
REJECT all -- anywhere anywhere reject-with icmp-host-prohibited
DROP tcp -- 192.168.0.6 anywhere multiport dports ssh,telnet,http,webcache
Chain FORWARD (policy ACCEPT)
target prot opt source destination
REJECT all -- anywhere anywhere reject-with icmp-host-prohibited
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
面接官 : 私が聞きたかったのはそれだけです。あなたは貴重な従業員で、私たちはあなたを逃したくありません。HRにあなたの名前を推薦します。質問があれば私にどうぞ。
候補者として、会話を壊したくなかったので、もし選ばれた場合に担当するプロジェクトや会社の他の募集について質問を続けました。HRの面接も難しくはなく、チャンスを得ることができました。
また、私のインタビューを文書化するために時間を取ってくれたAvishekとRavi(長い間友人である)にも感謝したいです。
友達! もしあなたがそのようなインタビューを受けたことがあり、世界中のTecmint読者にあなたのインタビュー体験を共有したいのであれば、あなたの質問と回答を[email に送ってください。また、以下のフォームを使用してインタビュー体験を提出することもできます。
ありがとう!つながりを保ちましょう。また、私がどのように質問にもっと正確に答えられたか教えてください。
