web-dev-qa-db-ja.com

UFWでIPアドレスの範囲をブロックする方法

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
...

これを行うためのより良い方法があればそれは素晴らしいことですが、私が間違っていることを私に知らせることは同じくらい素晴らしいでしょう。前もって感謝します!

3
mrhatter

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 
0
waltinator

コマンドの構文(ufwコマンド自体、またはbashループのいずれかに問題はないと思います-$line変数、つまり... from "$line" to any ...を引用することをお勧めします)。

ERROR: Bad source addressエラーはアドレス文字列自体に問題があることを示しており、DOSスタイルのCR-LF行の終わりが原因であると推測できます-nanochinaiprange.txtファイルを開くことで確認できました。

解決策は、次のようなよく知られた方法のいずれかを使用して、行末を修正することです。

  • dos2unixコマンドを使用してファイルを実行する
  • trまたはsedを使用-例えばsed -i 's/\r$//' chinaiprange.txt
  • viでファイルを開き、:set ff=unixに続いて:wqを実行して再保存します
1
steeldriver