iptablesは1つの国からのトラフィックのみを許可します。

iptablesは1つの国からのトラフィックのみを許可します。

ある国からのトラフィックだけを許可したいです。

私はオンラインでいくつかの方法を見て読んでいましたが、ほとんどは古いものです(Xtablesアドオンを使用)、残りの半分は不要なIPをブラックリストに追加する方法を示しています。

しかし、これはすべてを1つずつブラックリストに載せる誤ったアプローチです。より良いアプローチは、ホワイトリスト外のすべてのアイテムがブロックされるようにホワイトリストを作成することです。

私はフランスにいます。フランスのクライアント/ユーザーだけがサーバーにアクセスできるようにしたいです。

私の既存のiptablesルールは次のとおりです。

sudo iptables -t nat -A PREROUTING -p tcp --dport 80 -j DNAT --to-destination xx.xx.xx.xx:80

トラフィックを転送するだけです。

ベストアンサー1

これが最善の選択であるとは言いませんが、他の実行可能なオプションが見つからない場合は、ダウンロード可能なGeoIPデータベースを使用してIPセットツール。

たとえば、ダウンロードGeolite2データベースCSV形式の国です。ファイルをダウンロードして解凍しました:

wget https://geolite.maxmind.com/download/geoip/database/GeoLite2-Country-CSV.zip
unzip GeoLite2-Country-CSV.zip
cd GeoLite2-Country-CSV_20190430

フランスのIDを見つけ、フランスのネットワークのすべての履歴をフィルタリングします。

grep France GeoLite2-Country-Locations-en.csv
3017382,en,EU,Europe,FR,France,1

awk -F, '$2 == 3017382 {print $1}' > french_networks.txt

次のフランスネットワークを含むIPsetを構築しますfrance

ipset create france hash:net
while read network ; do 
    ipset add france $network; 
done < french_networks.txt

iptablesipsetを使用して、フランス語以外のコンテンツを削除するルールを作成します。ローカルネットワークが削除されないように、追加のルールを追加する必要があります。

iptables -A INPUT -m set ! --match-set france src -j DROP

おすすめ記事