DigitalOceanに複数のサーバーがあり、それらが互いに通信できるようにしたいとします。
DigitalOceanはWAN接続とLAN接続を提供します。問題はどちらも安全だとは感じないということです。 WANはインターネットで、LANはDigitalOceanにコンピュータ(VPS)を持つすべての人が共有します。
そのため、WANで53、80、443などのいくつかのポートを除くすべてのポートをブロックしたいと思います。これは標準的な手順です。
その後、別のコンピュータにMySQLがある可能性があるので、IPアドレス10.1.1.1(実際にはDigitalOceanでは動作しないIPの例)に対してポート3306を開きたいと思います。
今私の問題は、インターフェイスが表示される前にファイアウォールルールを適用したいということです。
auto eth0 eth1
iface eth0 inet static
address 8.8.8.2 # some Internet address
netmask 255.255.255.255
gateway 8.8.8.1 # some Internet address
dns-nameservers 8.8.8.8 8.8.4.4
pre-up /etc/network/firewall
iface eth1 inet static
address 10.1.1.1
netmask 255.0.0.0
pre-up /etc/network/firewall
私が思いついたのは、pre-up
両方のインターフェースに追加することです。これにより、スクリプトが2回実行される前に起動されるようになります。これはスクリプトが2回実行されるという意味でもあります。
これはできますか?それとも、pre-up
すべてのインターフェースに対してグローバルに同等の機能を達成するためのより良い方法はありますか?
注:オペレーティングシステムは、利用可能な最新バージョンのUbuntu 16.04.1です。
答え1
私は実際に解決策を見つけました。私はUbuntu 16.04を使用していてsystemdを持っているので、スクリプトを生成してsnapinitfirewall.service
ファイアウォールコードにインストールしました。
# Documentation available at:
# https://www.freedesktop.org/software/systemd/man/systemd.service.html
[Unit]
Description=Snap! Websites firewall initialization
Before=network.target
[Service]
Type=oneshot
RemainAfterExit=true
ExecStart=/etc/network/firewall
#ExecStop=... -- why would you ever want to remove your firewall rules?
[Install]
WantedBy=multi-user.target
# vim: syntax=dosini
/etc/network/firewall
起動時にすべてのルールをすぐに復元するスクリプト。
そのパッケージに別のサービスファイルがあるため(つまり、1つのパッケージが両方のサービスを提供するため)、初期化を有効にして再起動時に実行するには、次の行を含める必要があります。
systemctl -q enable snapinitfirewall
pre-up
これは、ネットワークが起動する前に実行されていることを確認できるため、この機能を使用するよりも優れたアプローチです。
もっと気になる方のために、スナップショットファイアウォールプロジェクトgithubから。