ページ 11

iptablesでのフィルタ設定方法

投稿記事Posted: 2014/3/06(木) 08:14
by yusk
いくつか問い合わせがあったので、
メモをpostします。

QTS3.8-4.0.5まで実績があります。
QTS4.1ではカーネルバージョンが上がるので、ちょっと変わるかもしれません。

----
0.gcc,make,gawk,find,sed,ncursesあたりをipkg install
以下例
ipkg install nano gcc make automake ncurses ncursesw wget ncurses-dev
ipkg install patch coreutils pkgconfig
ipkg install perl perl-libxml perl-dbi
ipkg install findutils sed grep gawk

/opt/binをパスの先頭にする

1.qnapのサイトよりGPLソースを落としてくる。

2.cp kernel_cfg/機種名/configを src/linux-2.6.33.2-arm/.configにコピー

3.vi .configでNETFILETRあたりで好きなモジュールを足すように編集(REJECT追加する)
#こちらの環境ではipt_LOGモジュールをロードするとカーネルが落ちます。
たとえば下記
589c589
< # CONFIG_NETFILTER_XT_MATCH_HASHLIMIT is not set
---
> CONFIG_NETFILTER_XT_MATCH_HASHLIMIT=m

628,629c629,630
< # CONFIG_IP_NF_TARGET_REJECT is not set
< # CONFIG_IP_NF_TARGET_LOG is not set
---
> CONFIG_IP_NF_TARGET_REJECT=m
> CONFIG_IP_NF_TARGET_LOG=m

4.makeに必要なlibcursesのリンク
ln -s /opt/lib/libncurses.so /lib/libncurses.so
ln -s /opt/lib/libncurses.so.5 /lib/libncurses.so.5
ln -s /opt/lib/libncurses.so.5.7 /lib/libncurses.so.5.7
ln -s /opt/lib/libncursesw.so /lib/libncursesw.so
ln -s /opt/lib/libncursesw.so.5 /lib/libncursesw.so.5
ln -s /opt/lib/libncursesw.so.7 /lib/libncursesw.so.7 4.1.

5.
fs/ext4/ext4.hをコンパイルが通らないので一部書き換え

4つの場合分けで書き直す

#if defined(QNAP_ONLINE_RESIZE_INODE) && defined(QNAP_SEARCH_FILENAME_CASE_INSENSITIVE)
__u32 s_reserved[157];
__le32 s_feature_qnap_compat; /* QNAP internal features */
__le32 s_rsved_gdt_blks_large; /* Use s_rsved_gdt_blks_large to replace s_reserved_gdt_blocks */
__u32 s_hash_magic; /* HTree case insensitive enable flag */
#endif

#if !defined(QNAP_ONLINE_RESIZE_INODE) && defined(QNAP_SEARCH_FILENAME_CASE_INSENSITIVE)
__u32 s_reserved[159];
__u32 s_hash_magic;
#endif

#if defined(QNAP_ONLINE_RESIZE_INODE) && !defined(QNAP_SEARCH_FILENAME_CASE_INSENSITIVE)
__u32 s_reserved[158];
__le32 s_feature_qnap_compat; /* QNAP internal features */
__le32 s_rsved_gdt_blks_large; /* Use s_rsved_gdt_blks_large to replace s_reserved_gdt_blocks */ #endif

#if !defined(QNAP_ONLINE_RESIZE_INODE) && !defined(QNAP_SEARCH_FILENAME_CASE_INSENSITIVE)
__u32 s_reserved[160];
#endif

6.make oldconfig <途中で質問が出るが、基本的にENTERキーでOK>

7.make modules <カーネルモジュールのみ>

8.net/netfilterの中にカーネルモジュールができている。

9.iptables 1.4.12のコンパイル
netfilter.orgよりダウンロード
./configure --enable-static --disable-shared --prefix=/opt
make
make install

10.テスト
openvpnが有効になっていると、下記コメント部分のモジュールはロードされている
(lsmodで確認)
insmod net/netfilter/xt_hashlimit.ko
#insmod net/netfilter/xt_recent.ko
#insmod net/ipv4/netfilter/nf_defrag_ipv4.ko
#insmod net/ipv4/netfilter/nf_conntrack_ipv4.ko
#insmod net/ipv4/netfilter/nf_nat.ko
#insmod net/ipv4/netfilter/ip_tables.ko
#insmod net/ipv4/netfilter/iptable_nat.ko
#insmod net/ipv4/netfilter/iptable_filter.ko
#insmod net/ipv4/netfilter/ipt_MASQUERADE.ko
#insmod net/ipv4/netfilter/ipt_REDIRECT.ko
insmod net/ipv4/netfilter/ipt_REJECT.ko
insmod net/ipv4/netfilter/ipt_LOG.ko

/opt/sbin/iptables -A INPUT -p udp --dport 5060 -m hashlimit --hashlimit-name hash_sip --hashlimit 1/m --hashlimit-burst 50 --hashlimit-mode srcip --hashlimit-htable-expire 600000 -j ACCEPT
/opt/sbin/iptables -A INPUT -p udp --dport 5060 -j LOG /opt/sbin/iptables -A INPUT -p udp --dport 5060 -j REJECT
/opt/sbin/iptables -L

Re: iptablesでのフィルタ設定方法

投稿記事Posted: 2014/5/03(土) 10:41
by sti555
QTS 4.0.7まではyuskさんの手順を少し変えて、正しく動作していました。
しかしQTS 4.1.0 RC2にしたところinsmodでエラーになり、それまでのモジュールが使用できなくなりました。
(どんなエラーが出たか保存しておくのを忘れました。申し訳ありません。)

そこでmake modulesをやり直そうとしましたが、以下のエラーのため完了しません。

[/share/MD0_DATA/Download/tmp/GPL_TS/src/linux-3.4.6] # make modules
scripts/kconfig/conf --silentoldconfig Kconfig
HOSTCC arch/x86/tools/relocs
CHK include/linux/version.h
CHK include/generated/utsrelease.h
CC kernel/bounds.s
kernel/bounds.c:1: error: code model 'kernel' not supported in the 32 bit mode
kernel/bounds.c:1: sorry, unimplemented: 64-bit mode not compiled in
make[1]: *** [kernel/bounds.s] Error 1
make: *** [prepare0] Error 2

GPL Sourceは「GPL_QNAP_TS_20131016.tar.gz」を使用しました。
QTS 4.1.0では64bitに変更されているため、QTS 4.1.0のソースがないと無理でしょうか?
それとも設定を変えれば通るのでしょうか?

おわかりになる方がいましたら、返信願います。

Re: iptablesでのフィルタ設定方法

投稿記事Posted: 2014/9/20(土) 04:58
by yusk
4.1にて
GPL_TS-20140513-4.1.0.tar.gz
を使うと同じようにできています。