web-dev-qa-db-ja.com

1つの国からのトラフィックのみを許可するiptables

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

私はオンラインで複数の方法を見たり読んだりしましたが、それらのほとんどは(Xtablesアドオンを使用して)古くなっており、残りの半分は、1つのIPが好ましくないIPをブラックリストに登録する方法を示しています。

ただし、これは間違ったアプローチであり、すべてを1つずつブラックリストに載せます。より良いアプローチは、ホワイトリストを実行して、そのホワイトリスト以外のすべてをブロックすることです。

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

私が配置しているiptablesルールは

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

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

4
teran

これが最良のオプションであるとはお勧めしませんが、機能する別のオプションが見つからない場合は、ダウンロード可能なGeoIPデータベースと ipset ツールを使用して「独自にロール」できます。

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

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

franceと呼ばれるフランスのネットワークを含むipsetをビルドします。

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

Ipsetを使用して、フランス以外のものをドロップするiptablesルールを作成します。ローカルネットワークが削除されないようにするには、ルールを追加する必要がある場合があります。

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

あなたはcsfを試すことができます-それはインストールが簡単です、そしてcsfpost.shであなたはあなたにiptablesルールを設定できます。 csf.confには、FRを設定できるCC_ALLOW_FILTERがあります。 Webドキュメントとアドバイスを確認してください。サーバーのコンソールへのアクセスは、自分をロックアウトした場合に備えて、良いアイデアです。

0
Varga Adrian