パケットフィルタリングでセキュリティ向上!iptablesとfirewalld

パケットフィルタリング

パケットフィルタリングとは簡単に言えば「データの通信を許可するか遮断するかを決める機能のこと」です。

パケットフィルタリングは必要最低限な通信のみを許可することで外部からのデータに紛れてコンピュータウイルス等が侵入してくるのを防ぎます。

この記事ではLinuxにおけるパケットフィルタリング機能としてiptablesとfirewalldについて紹介します。

パケットフィルタリングとは?

パソコンはインターネットを通して外部とデータのやり取りをしています。

このデータのやり取りを制限する仕組みをパケットフィルタリング(ファイアウォール)といいます。

外部からの通信を何でも通してしまうと、データにまぎれてウイルスが侵入してくる恐れなどがあるからです。こうした不正アクセスを防ぐ仕組みとしてパケットフィルタリングがあります。

パケットフィルタリングの機能

パケットフィルタリングの機能

インターネットからの通信を監視・制限するといっても監視する経路は複数あります。

  1. インターネットからルーター
  2. ルーターからNIC
  3. NICからアプリケーション

の経路があります。

パケットフィルタリングの箇所は複数ある

パケットフィルタリングの箇所は複数ある

ここでいうパケットフィルタリングはNICにおけるフィルタリングを指します。

具体的には、ルーターからPCのNICを通って来たapache(80番ポート)宛てのパケット通信を通すか通さないか、あるいはapacheから外部への通信を通すか通さないか?というのをOSで制御するのがパケットフィルタリングです。

Netfilterの設定を行うのがiptablesやfirewalld

LinuxにはNetfilterというパケットフィルタリングやNATを行うモジュールがあります。

このNetfilterを使ったパケットフィルタリングの設定を行う部分が「iptables」や「firewalld」です。

パケットフィルタリングは

  1. プロトコル (TCPやUDP、ICMP等)
  2. 送信元、送信先IPアドレス
  3. 送信元、送信先のポート番号

を使って条件を設定し、パケットのフィルタリングをします。

iptablesでは上記の情報を指定して条件を作りフィルタリングします。firewalldはiptablesよりも簡易的に設定ができるように「ゾーン」という設定のテンプレートが用意してあります。

簡単な設定で十分な場合はfirewalldを選択

より細かく設定したい場合はiptablesを選択します。

iptablesの設定

チェインとは?

チェインとはパケットが移動する経路のことです。

iptablesではチェインごとにルールを設定します。

ルーターなどから自分のPCに入ってきたデータはNIC(LANアダプタや無線子機)を通して入ってきます。これらのデータはパケットにかかれた宛先のIPアドレス/ポートに送られていくことになります(ルーティング)。

重要なチェインは

  • NICからルーティングを通してアプリ(プロセス)に向かう経路のINPUT
  • アプリから外の経路に向かうOUTPUT
  • 別のコンピュータに転送するFORWARD

の3つです。特に、INPUTとOUTPUTが重要です。

チェインとは?

チェインとは?

パケットの処理 ターゲット

流れているパケットをどう扱うのか?を表しているのが「ターゲット」です。ターゲットには

  1. ACCEPT
  2. DROP
  3. REJECT
  4. REDIRECT
  5. RETURN
  6. SNAT
  7. DNAT
  8. MADQUERADE
  9. LOG

などがあります。

たくさんありますが、とりあえず知っておくべきものは

  • ACCEPT   パケットの通過を許可
  • DROP    パケットを廃棄
  • REJECT   パケットを廃棄し、エラーを知らせる。

です。

DROPとREJECTの違いはパケットを廃棄したことを通知するかどうか?です。

セキリュティの観点からいえば、DROPにするのが推奨されるようです。なぜなら攻撃者からすればエラー通知をしてくれたほうがテストが早く終わるからです。

一方で、通常の業務を行う上ではエラー通知をしてくれたほうが状況がすぐわかるので時間の節約になります。

REJECTとDROPの違い

REJECTとDROPの違い

パケットフィルタリングの設定

iptablesを操作してパケットフィルタリングの設定をやってみましょう。

設定には大きく分けて2つの設定があります。

  1. 大きい範囲・チェイン別の設定
  2. 細かい設定 (IPアドレスやポート番号、プロトコル指定)

チェイン別の設定 デフォルトポリシー

iptablesで特に設定しない場合は各チェインの「デフォルトポリシー」に従います。

  1. INPUT   DROP
  2. OUTPUT  ACCEPT
  3. FORWARD DROP

となっています。設定の方針としては「中に入れるパケットは基本的には遮断して、必要なら許可してください」ということです。

細かい設定 (IPアドレス、ポート、プロトコル)

チェイン別の設定よりも細かく設定したい場合は、IPアドレスやポート番号、プロトコルを指定して個別に設定できます。

  1. プロトコル (TCPやUDP、ICMP等)
  2. 送信元、送信先IPアドレス
  3. 送信元、送信先のポート番号

各設定は、チェイン別に記載されます。

  • Chain INPUT (polisy DROP)
    • 詳細設定
  • Chain FORWARD (polisy ACCEPT)
    • 詳細設定
  • etc
ターゲット プロトコル オプション 送信元 送信先 ポート
ターゲット(ex.ACCEPT) TCP、all パケットに対する処理オプション 送信元IPアドレス,(anywhereも) 送信先IPアドレス(anywhereも) dpt, spt

設定されたものを見るにはiptables -Lのコマンドで調べることができます。

iptables実際の操作

iptablesはCentOS7ではもともと入っていると思います。もしも入っていない場合はyumでインストールしましょう。

「yum install iptables」

また、iptablesを利用する時はfirewalldと共存できないので、firewalldを停止させましょう。

「systemctl disabled firewalld 」

「systemctl stop firewalld」

iptablesの起動はsystemctlで行います。

iptablesの起動・自動起動
systemctl start iptables
systemctl enable iptables

iptablesの設定状態の確認

iptablesの設定確認はiptebles -Lで行います。

iptablesの設定表示
iptables -L

設定項目はチェイン別に表示されます。

  • Chain INPUT (polisy ACCEPT)
    • 詳細設定
  • Chain FORWARD (polisy ACCEPT)

INPUTチェインの設定はポリシーがDROPになっています。設定されていない部分はDROPになります。

iptables -L

iptables -Lで表示された項目

詳細の設定は6つのカラムに分かれて表示されます。

  1. ターゲット  ターゲットはACCEPTやDROPなどのパケット処理を表示ます。
  2. プロトコル  TCPやUDPなどを設定します。記載のない場合「all」になります。
  3. オプション  パケットに対する処理のオプション
  4. 送信元    送信元のIPアドレス。設定しない場合はanywhereになる
  5. 送信先    送信先のIPアドレス。設定しない場合はanywhereになる
  6. ポート    送信元ポート(spt : “source-port”), 宛先ポート (dpt : “destination-port”)はtcp dpt:httpなどのように表記されます

ルールの設定

ルールを実際に設定する方法を解説します。

チェインのデフォルトポリシーを変更するコマンドは

デフォルトポリシーの変更
iptables -P (チェイン) (ターゲット)
例:iptables -p INPUT ACCEPT 
このように設定できます。 詳細な設定を変更するコマンドオプションは-Aです。
詳細設定の変更

iptables -A チェイン (オプション)
例:iptables -A INPUT -p tcp -s test.jp -d 127.0.0.1 –dport 22 –sport 80 -j ACCEPT

各オプションが指定している項目は

  • -p    プロトコル
  • -s   送信元アドレス
  • -d   宛先アドレス
  • -dport  宛先ポート
  • -sport  送信元ポート
  • -j    ターゲット

です。

その他のiptablesのオプションは

HTML
iptables -Dチェイン (オプション) 項目の削除
例:iptables -D INPUT -p tcp -s test.jp -d 127.0.0.1 --dport 22 --sport 80 -j ACCEPT

iptables -D INPUT 2 
   -Lで表示されたINPUTの2番目の設定項目をして消去

iptablesの一括消去

   iptables -F

各ルールの先頭に追加する (-Aは最後)

   iptables -I

設定の保存

iptablesで設定した項目は/etc/sysconfig/iptablesで保存しなければ消えてしまいます。

iptables-save > /etc/sysconfig/iptables

として書き込んでおきましょう。

firewalldの設定

firewalldはゾーンと呼ばれる設定を選択してフィルタリング設定を行います。

ゾーンには

  • drop    INPUTはすべてdrop
  • block    INPUTは基本REJECT
  • public    ssh、dhcpv6-client許可
  • external   ssh, マスカレードが有効
  • dmz     dmz用 ssh許可
  • work     ssh, dhcpv6-client, ipp-client有効
  • home      ssh, dhcpv6-client, ipp-client, samba, mdns有効
  • internal    ssh, dhcpv6-client, ipp-client, samba, mdns有効
  • trusted    すべて許可

が用意されていおり、基本的に下に行くにつれてフィルタリングが甘いです。

dropはすべての外部からの通信を遮断する設定、trustedはすべてを許可する設定です。

firewalldのゾーン設定
firewall-cmd --zone=trusted --permanent

状態を確認するコマンドは

firewalldの設定確認
firewall-cmd --list-all-zones

で確認できます。「firewall-cmd –get-default-zone」でデフォルトゾーンの確認もできます。

firewalldとiptablesは一方のみを使います。必要に応じて使いわけましょう。

 

コメントを残す

メールアドレスが公開されることはありません。