AlpineLinux 3.6: awallでファイアウォール制御


Table of Contents

1 awallのインストール

awallパッケージをインストールします。

$ sudo apk add awall$ sudo rc-update add iptables

2 ファイアウォールの有効化と無効化

iptablesサービスを開始することでファイアウォールが有効になります。

$ sudo rc-service iptables start

iptablesサービスを停止することでファイアウォールが無効になります。

$ sudo rc-service iptables stop

3 ポリシーの追加

ファイアウォールで許可するパケット拒否するパケットはポリシーで定義します。

ここではサンプル用ポリシーのsample-policy.jsonを使用します。ポリシーの追加後にawall enableでポリシーを有効化し、awall activateで有効化したポリシーをファイアウォールに組み込みます。

$ sudo cp /usr/share/awall/sample/sample-policy.json /etc/awall/optional/sample-policy.json$ sudo awall enable sample-policy$ sudo awall activate -f

以降ではsample-policy.jsonの内容について記載します。

3.1 zone

“zone”で”internet”というzoneを定義します。

“variable”: { “internet_if”: “eth0″ },”zone”: { “internet”: { “iface”: “$internet_if” }},

  • “variable”は変数定義で、$internet_ifでeth0を表します。”zone”の$internet_ifをeth0にすれば”variable”は不要です。
  • “internet”というzoneはインターフェースがeth0のzoneです。
  • “_fw”という特別なzoneがあり、ホスト自身を表します。

3.2 policy

“policy”でデフォルトの挙動を定義します。

“policy”: [ { “in”: “internet”, “action”: “drop” }, { “action”: “reject” }],

  • “internet”からのパケット(eth0から入ってくるパケット)はすべてdropします(パケットを破棄)。
  • それ以外のパケットはすべてrejectします(ICMPエラーを返す)。つまり、”_fw”からのパケット(ホストから外部へのパケット)もrejectされるので、インターネットからホストへのsshやpingのパケットだけでなく、ホストからインターネットへのsshやpingのパケットも通りません。
  • 以下のようにホストからのパケットをacceptすれば、ホストからインターネットへのsshやpingのパケットは通ります。

“policy”: [ { “in”: “internet”, “action”: “drop” }, { “in”: “_fw”, “action”: “accept” }, { “action”: “reject” }],

3.3 filter

“filter”で”policy”の例外を定義します。

“filter”: [ { “in”: “internet”, “service”: “ping”, “action”: “accept”, “flow-limit”: { “count”: 10, “interval”: 6 } }, { “in”: “internet”, “out”: “_fw”, “service”: “ssh”, “action”: “accept”, “conn-limit”: { “count”: 3, “interval”: 60 } }, { “in”: “_fw”, “out”: “internet”, “service”: [ “dns”, “http”, “ntp” ], “action”: “accept” }, { “in”: “_fw”, “service”: [ “ping”, “ssh” ], “action”: “accept” }]

  • “service”のサービス名は/usr/share/awall/mandatory/services.jsonで定義されているものを使います。
  • “internet”からのpingパケットはacceptしますが、6秒に10回までしかパケットをacceptしません。
  • “internet”からのsshパケットはacceptしますが、60秒に3回までしかパケットをacceptしません。
  • “_fw”から”internet”へのdns、http、ntpのパケットをacceptします。よって、ホストで立ち上げたDNSサーバに名前解決する場合はrejectされます。
  • “_fw”からのping、sshのパケットはacceptします。

以下のように”internet”から0.2秒間隔でpingパケットを送信すると11個目のパケットはacceptされません。

$ ping -i 0.2 alpinelinux-3-6-awall.hiroom2.comPING alpinelinux-3-6-awall.hiroom2.com (192.168.11.93) 56(84) bytes of data.64 bytes from 192.168.11.93: icmp_seq=1 ttl=64 time=0.609 ms64 bytes from 192.168.11.93: icmp_seq=2 ttl=64 time=0.631 ms64 bytes from 192.168.11.93: icmp_seq=3 ttl=64 time=0.618 ms64 bytes from 192.168.11.93: icmp_seq=4 ttl=64 time=0.595 ms64 bytes from 192.168.11.93: icmp_seq=5 ttl=64 time=0.554 ms64 bytes from 192.168.11.93: icmp_seq=6 ttl=64 time=0.578 ms64 bytes from 192.168.11.93: icmp_seq=7 ttl=64 time=0.705 ms64 bytes from 192.168.11.93: icmp_seq=8 ttl=64 time=0.658 ms64 bytes from 192.168.11.93: icmp_seq=9 ttl=64 time=0.586 ms64 bytes from 192.168.11.93: icmp_seq=10 ttl=64 time=0.559 ms# 11th ping packet is not accepted.

Android | Linux | SDL - Narrow Escape