アタックの多い国からのIPを弾く!

iptablesも無事インストールが終了したのでIPのフィルターを行ってみます。

アタックの多い国のIPと設定をまとめたサイトがあるので参考にさせてもらいました。

韓国 IP アドレスからのパケットを遮断する
※既にリンク先のサイトはなくなっているようです

この設定を行えばフィルタリング出来るのですが再起動するとfilterはクリアされてしまいます。
そこでスクリプトを作成してrc.localでスクリプトを動かすようにしました。

スクリプト用のディレクトリーの作成。
mkdir /etc/krfilter

filterスクリプトをDLして
/etc/krfilterの下にALL2.shとして保存しました。
※既にリンク先のサイトはなくなっているようです
次にフィルター作成と反映のスクリプトを作成します。
vi krfilter.shで新規作成

--------------

# krfilter init script for iptables

echo “initialize start krfilter.”

# make krfilter
iptables -N KRFILTER
iptables -N KRFILTERED

# add filter
sh /etc/krfilter/ALL2.sh

# set accept
iptables -A KRFILTER -j ACCEPT

# set reject
# comment output log
#iptables -A KRFILTERED -j LOG –log-prefix “Rej-TCP “
iptables -A KRFILTERED -j DROP

# initialize
iptables -A INPUT -p tcp -m state –state NEW -j KRFILTER

echo “krfilter initialized.”

--------------

スクリプトを保存して/etc/rc.localにこのスクリプトの実行を登録します。

vi /etc/rc.local

exit 0 よりも前に

sh /etc/krfilter/krfilter.sh

の一行を追加します。

これで起動時にフィルターが適用されるようになります。
(rc.localに書くと他のデーモン起動後に適用されますのでデーモンより前にフィルターしたい場合はそれなりの場所で起動させて下さい)

これでフィルターの設置は完了です。
再起動して実際に適用されたか確認してみましょう。

iptables -L

ズラズラと設定内容が出てきますのでCTRL+Cで適当なところで止めてもOKです。

EABI環境でiptablesコンパイル

いよいよ問題のiptablesコンパイルです。
まずはiptablesのソースをwebから取得します。
Iptables-1.3.8
ソースを適当な場所に解凍します。
そのままコンパイルすれば普通にビルドされます。
しかしエラーが出て動きません!(apt-getでのinstallと同じエラーが出ます)

これを解決するのに調べに調べてあるサイトに辿り着きました。(マジで情報少なくて苦労しました・・・)
ARM gcc バッドノウハウ集
このサイトの「8. EABI と legacy ABI」にgccコンパイル時のオプション指定方法が載っているじゃないですか!
(このサイトには本当に感謝しています)

コンパイル時にgccのコマンドオプションにEABIな事を伝えれば良いようです。
gcc -mabi=aapcs-linux
ではMakefileにこの設定を反映させる方法はと・・・
先頭行にこの一行を追加してください。

CC = gcc -mabi=aapcs-linux

こうすることでmakeした時に自動的に $(CC) を gcc -mabi=aapcs-linux に置き換えてくれます。
早速コンパイル開始です!
何のエラーも無く無事コンパイルが終了しました。
ではmake install してインストールしましょう。
depmod -a & 再起動後にiptablesが動くか確認してみます。

iptables -L

上のコマンドでエラーが出なければ無事コンパイル&インストールは完了です!

ここまで来るのに一週間くらいは考え込んじゃいました(笑)

EABI環境でkernelの再構築

まずARMなLinkstationではKernelがEABIという形式でコンパイルされていることを理解しましょう。
興味がある人は「debian EABI」で検索すれば少ないですが情報は取得出来ると思います。

LinkstationのkernelはこのEABIでコンパイルされているので
通常のapt-get install iptablesでiptablesをインストールしてもエラーが出て動きません。

サイトを検索するとkernelコンパイル時にEABIをOFFにしてOABIでコンパイルしている方が殆どのようです。
しかしこれは初心者には大変危険な方法なのです。
xfsでフォーマットしているファイルシステムは壊れてしまうことがあるのです!
(これもサイトを検索すれば色々と出てきます)
実際に一度OABIでコンパイルして動かしてみたら見事にファイルシステムが壊れました・・・
(おかげでこのサイトも数日止まってしまいました)

ではウンチクはこの辺で終わりにして実際にkernelのコンパイルを行います。
iptables有効なkernelのコンパイル方法を掲載したサイトはは沢山あるので要点だけ書きます。
まずはLS-GLのGPLなソースをバッファローからDLします。
GPL/LGPL Resource -BUFFALO INC.-
(DLするファイルはlinux-2.6.16_lsp.1.7.8.tar.gzです)
DLしたら適当な場所に解凍してmake menuconfigします。

設定画面が出たらrouting関連を全てチェックしnetfiter関連を全てのモジュールにしてから保存します。
(network filterはEnterキーで詳細項目の設定に移行します)
準備が出来たらmakeコマンドでコンパイルの開始です!
(事前にapt-get update と apt-get upgrade でGCCのバージョンを最新にしておいてください)
次にmake modulesコマンドでmodulesもコンパイルします。

コンパイルがうまく出来たらuImageとmodulesを組み込みます。
uImageはソースファイルの下の/arch/arm/bootの中にuImageで出来上がっています。
これを/bootにuImage.buffaloとしてコピーします。
modulesは INSTALL_MOD_PATH=/ make modules_installでinstallします。
終わったらdepmod -aでmodulesを反映させときます。

これでkernelのコンパイルとインストールは終了です。
再起動して動くか確認してみましょう。