Ubuntu 16.04LTSサーバーの特定の国、つまり中国、イランなどからのIPアドレスの範囲をブロックしようとしています。
動的に更新されるリストを簡単に作成するためのスクリプトまたは実行可能なものを見つけたいと思っていました。国コードを入力するだけで、現在のリストがどこかから自動的に読み込まれ、ブロック範囲が追加されます。アドレスのリストの変更に応じて簡単に更新できます。しかし、最初に country ip blocks を使用して中国の住所のリストを検索し、「chinaiprange.txt」というタイトルのテキストファイルに保存しました
いくつかの検索の後、 this の例からすべてを一度に入力する次のコマンドを見つけました
while read line; do Sudo ufw insert 1 deny from $line to any; done < chinaiprange.txt
ただし、実行すると、次の出力を受け取ります。ERROR: Bad source address
アドレスは次の形式で保存されます。
1.0.1.0/24
1.0.2.0/23
1.0.8.0/21
...
これを行うためのより良い方法があればそれは素晴らしいことですが、私が間違っていることを私に知らせることは同じくらい素晴らしいでしょう。前もって感謝します!
man ufw
を再読み取りします。紛らわしい2つの類似したufw
呼び出しがあります。
ufw [--dry-run] [delete] [insert NUM] allow|deny|reject|limit [in|out] [log|log-all] PORT[/PROTOCOL]
ufw [--dry-run] [rule] [delete] [insert NUM] allow|deny|reject|limit [in|out [on INTERFACE]] [log|log-all] [proto PROTOCOL] [from ADDRESS [port PORT]] [to ADDRESS [port PORT]]
あなたはおそらく
Sudo ufw insert 1 deny on eth0 from $line
コマンドの構文(ufw
コマンド自体、またはbashループのいずれかに問題はないと思います-$line
変数、つまり... from "$line" to any ...
を引用することをお勧めします)。
ERROR: Bad source address
エラーはアドレス文字列自体に問題があることを示しており、DOSスタイルのCR-LF
行の終わりが原因であると推測できます-nano
でchinaiprange.txt
ファイルを開くことで確認できました。
解決策は、次のようなよく知られた方法のいずれかを使用して、行末を修正することです。
dos2unix
コマンドを使用してファイルを実行するtr
またはsed
を使用-例えばsed -i 's/\r$//' chinaiprange.txt
vi
でファイルを開き、:set ff=unix
に続いて:wq
を実行して再保存します