awallによるファイアウォール
9月27日ごろから始まった世界的なSYN floodは, WWWの辺境としか言いようのない当サイトまで標的としていました. SYN cookiesを利用することで サーバが機能停止に至ることはありませんでした. しかし,サーバを無線LANの先に設置していたため, このネットワークの接続速度がかなり損なわれてしまいました.
SYN floodでは送信元IPアドレスは偽装されているため IPアドレスによるアクセス拒絶は無効であると言われています. しかし,今回についていえば,送信元として書かれたIPアドレスが 海外の,日本人は使わないであろう ホスティング業者が保有するものとなっていました. ここからのアクセスを拒絶したとしても, どうでもいいマイナーなクローラーが 当サイトをクロールできなくなるだけと考えられるため, 今回は練習も兼ねてIPアドレスによる拒絶をやってみることにしました.
当サイトではこれまでサーバにファイアウォールを設定していませんでした. それは,このサーバがルータの配下に静的NATで配置されており, 必要なポート以外にはもともとアクセスできなかったからです. しかし,今回はIPアドレスによるアクセス拒否数十件という, ルータに設定するのは難しいアクセス設定が必要でした. そこでサーバのVM上でファイアウォールを設定することにしました.
サーバのOSがAlpine Linuxですから,「alpine linux firewall」で検索して awall (Alpine wall)を使用することにしました.
手順
インストールはapkコマンドを利用して行いました.
apk add -u awall
このソフトウェアはiptableによって動くらしいので,iptableを起動しました.
modprobe ip_tables rc-update add iptables
設定ファイルはいまひとつ似た設定を行う例がなかったので Zero-To-Awallと Alpine Wall User’s Guideを 参考に次のようなファイルを作成しました.
- /etc/awall/optional/main.json
{ "description": "Main firewall", "import": [ "base" ] }
- /etc/awall/private/base.json
{ "description": "Base zones and policies", "zone": { "WAN": { "iface": "eth0" }, "LAN": { "iface": "eth0", "addr": ["192.168.0.0/24"] } }, "policy": [ { "in": "_fw", "out": "WAN", "action": "accept" }, { "in": "LAN", "action": "accept" }, { "in": "WAN", "action": "drop" } ] }
- /etc/awall/optional/http.json
{ "description": "Allow HTTP on WAN", "filter": [ { "in": "WAN", "out": "_fw", "service": "http", "action": "accept" }, { "in": "WAN", "out": "_fw", "service": "https", "action": "accept" } ] }
- /etc/awall/optional/ban.json
{ "description": "Sample awall policy; copy to /etc/awall to use", "filter": [ { "src": [ "192.0.2.3","192.0.2.38","192.0.2.39","192.0.2.40", "198.51.100.0/24","203.0.113.0/30","203.0.113.6/31" ], "action": "drop" } ] }
- srcにIPアドレスを書くことで送信元IPアドレスによるフィルタリングが可能
- “action”: “drop"でACKを返すことなく通信を終了可能.
- ※IPアドレスは架空のものです
- /etc/awall/optional/main.json
有効化
awall enable main awall enable http awall enable ban awall translate -V awall activate
以降
/etc/awall/optional/ban.jsonを書き換え
設定を反映
awall translate -V awall activate