ipfw

今さらながら、やっとipfwを導入。きっかけは、DDoS攻撃を受けたこと。

導入のきっかけ

さくらからの通信遮断の連絡

さくらインターネットから、DoS攻撃を検知したため通信を遮断したとのメールがあった。

平素は弊社サービスをご利用いただき、誠にありがとうございます。
お客様ご利用の以下IPアドレスに対して、外部からDoSアタックを受けている状態を検知いたしました。
IPアドレス :xxx.xxx.xxx.xxx
この影響により、他のお客様のサービスが正常にご利用できない状態となる恐れがございましたため、上記のIPアドレス通信を遮断いたしました。
DoSアタック検知時刻 :2017年04月16日 21時14分48秒
通信遮断時刻 :2017年04月16日 21時15分16秒
現在は xxx.xxx.xxx.xxx に対しての通信の疎通性が取れない状態となっております。
通信遮断処理の解除につきましては、弊社にてDoSアタックの収束を確認後に実施いたします。設定の解除後に再度メールにてご報告差し上げます。
緊急の措置でございましたため、事後のご報告となりましたこと深くお詫び
申し上げます。

これは何とかしないと。

攻撃元は中国

さくらからのメールには、通信ログも添付されていた。それによると、攻撃対象のポートは443 (HTTPS)、攻撃元はすべて中国。

なぜこんな個人サイトが狙い撃ちなのか…。と思ったら、別にうちだけじゃなかった。さくらの障害情報に「外部からのDoSと思われるトラフィックによる通信障害」が。でも、うちのサイトのIPは一覧になし。うちだって外部からのDoSによる通信障害だったんだけど。お知らせを出したり出さなかったりする基準は、何なんだろう。

SYN flood攻撃

結果から言うと、SYN flood攻撃だった。初めて見た。

netstatコマンドを叩いてみると、SYN_RECVの行がぞろぞろと表示される。これはアプリケーションでは対策のしようがないので、やっと重い腰を上げてipfwを設定することに。

ipfwの導入手順

/etc/rc.confを編集

/etc/rc.confに次の行を追加。昔のFreeBSDではカーネルを再構築したりする必要があったらしいけれども、現在のバージョンでは標準で組み込まれている。

firewall_interfaceに設定する値は、ifconfig -aで確認する。

解放するポート

ポート番号内容
21, 22ftp, ftp-data
22ssh
25sendmail
42, 53dns (UDPのみ)
80http
110pop3
123ntp (UDPのみ)
137-139netbios (samba)
143imap
280http-mgmt
443https
445microsoft-ds (samba)
578mailサブミッション
900swat
5999csup
3306MySQLレプリケーション
11022ssh代替(※自分で割り当てたもの)

Samba関連のポートは、使わなくなったので削除。

/etc/rc.firewallを編集

/etc/rc.firewallのsetup_loopbackの部分のみ編集。

cf. 「ipfw」(FreeBSD日本語検索)
cf. 「ipfw でフィルタリング

参考資料