ipset4.5のオプションについて教えてください。

CentOS5.9のメンテナンスでipsetを使用することになったので、ipset4.5をrpmでインストールしました。
そこで https://inaba-serverdesign.jp/blog/20150209/ipset_iptables_country_centos6.html を参考に導入を進めています。
(ここまででもいろいろ違いましたが)「ipsetの設定…定期的に最新の国別コードリストの情報を反映できるよう、スクリプトを用意しました」のところにおいて、ipsetのオプションもCentOS6系と5.9で異なるようで動きません。
そこで当時の資料を探しているのですがなかなか見つからず質問する次第です。
宜しくお願い致します。

回答の条件
  • 1人1回まで
  • 13歳以上
  • 登録:2018/09/11 11:36:08
  • 終了:2018/09/12 10:53:05

ベストアンサー

id:a-kuma3 No.1

a-kuma3回答回数4769ベストアンサー獲得回数20482018/09/11 14:51:52

ポイント100pt

# ipset create -exist WHITELIST hash:net

については

Bad argument `create'
Try `ipset -H' or 'ipset --help' for more information.

root で実行してないんじゃないでしょうか。

https://openlinksys.info/forum/viewthread.php?thread_id=18672&rowstart=0#post_138860
↑ポーランド語みたいです。
sudo がない環境で実行しているみたいで、ひとつ前のメッセージのスクリプトを実行しようとして、sudo が見つからんとエラーになってます。
sudo を外すと、

sudo ipset add geoblock $IP

に対して、以下のメッセージが返ってくると。

Try `ipset -H' or 'ipset --help' for more information.
Bad argument `add'



root になれない事情があって、sudo が使えるならシェルスクリプトを sudo で実行するか、mk_ipwhitelist.sh の ipset を実行している二ヶ所を sudo で呼ぶように書き換えて実行してください。

#!/bin/bash
 
# 国別コードリストをダウンロード
cd /root/bin/
if [ -s cidr.txt ]; then
    mv cidr.txt cidr.txt.old
fi
 
wget http://nami.jp/ipv4bycc/cidr.txt.gz
gunzip cidr.txt.gz
 
# ホワイトリストセットを作成
sudo ipset create -exist WHITELIST hash:net
 
# ホワイトリストセットに日本のIPアドレスを登録
sed -n 's/^JP\t//p' cidr.txt | while read ADDRESS; do
    sudo ipset add WHITELIST $ADDRESS
done






追記です。

ipset v4.5 のソースと man を読みました。
https://github.com/Olipro/ipset/releases/tag/v4.5

全然 オプション違う。多分、こんな感じです。

#!/bin/bash
 
# 国別コードリストをダウンロード
cd /root/bin/
if [ -s cidr.txt ]; then
    mv cidr.txt cidr.txt.old
fi
 
wget http://nami.jp/ipv4bycc/cidr.txt.gz
gunzip cidr.txt.gz
 
# ホワイトリストセットを作成
ipset -N WHITELIST nethash
 
# ホワイトリストセットに日本のIPアドレスを登録
sed -n 's/^JP\t//p' cidr.txt | while read ADDRESS; do
    ipset -A WHITELIST $ADDRESS
done

sudo 外してます。root で動かしてください。

他9件のコメントを見る
id:halohalolin

a-kuma3さん、何度もありがとうございます

その後、libipt_set.soについては
http://flexbox.sourceforge.net/centos/5/x86_64/iptables-1.3.5-5.6.centos5.1.x86_64.rpm
よりrpm2cpioコマンドでlibipt_set.soを取り出して、/lib64/iptables/へコピーしたらエラーが出なくなりました。

ip_set_iphash.koはなしでもとくにエラーは出ていません。

ですが、エラーが出なくなりこれでやっと海外からのアクセスが制限できるか!と思いましたが、まだ壁はありそうです。
ダミーでGoogle Cloud Compute(us-east1-b)からポート22でtelnetアクセスしたところ、普通にアクセスできました。
ダメもとで service iptables restart を繰り返しましたが、効果ありませんでした。

実は以前よりこのサーバーはfail2banを用いていたのですが、この組み合わせでiptablesの判定順位がうまく動作しないのではないか?と推測しています。

引き続き悩んでいますが、いったんa-kuma3さんにはポイントを配分します。
助かりました。

2018/09/12 10:52:41
id:halohalolin

a-kuma3さんへ

> 実は以前よりこのサーバーはfail2banを用いていたのですが、この組み合わせでiptablesの判定順位がうまく動作しないのではないか?と推測しています。

なんとかiptablesの設定を変えました。
するとGoogle Cloud Compute(us-east1-b)からアクセスできませんが、その他の国内環境からはアクセスできることを確認しいたので、おそれくこれで完了だと考えています。

# iptables -I INPUT -m state --state NEW -p tcp --dport 22 -m set --match-set WHITELIST src -j ACCEPT
ではなく
# iptables -I INPUT -m state --state NEW -p tcp --dport 22 -m set --set WHITELIST src -j ACCEPT

と修正しないとだめだったとは…。

ありがとうございました!

2018/09/12 20:41:01
  • id:a-kuma3
    「動きません」の内容をもう少し詳しくお願いします。
    エラーっぽいメッセージが表示されるのか、エラーは表示されないけど ipset list で内容が表示されないのか、とか。
  • id:halohalolin
    a-kuma3さんありがとうございます

    # ipset create -exist WHITELIST hash:net

    については

    Bad argument `create'
    Try `ipset -H' or 'ipset --help' for more information.

    と返ってきます。
    多分ここは

    # ipset --create WHITELIST iphash

    ではないかと進めました。
    ですが次に

    # ipset add WHITELIST $ADDRESS

    のままですとまた「Try `ipset -H' or 'ipset --help' for more information.」が出るので

    # ipset --add WHITELIST $ADDRESS

    に直したところ

    ipset v4.5: host/network `27.131.224.0/20' not found
    Try `ipset -H' or 'ipset --help' for more information.

    みたいに返ってきて、ここからどう直せばいいのか悩んでいます。
    以上よろしくお願いいたします。

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません