このボックスは Ubuntu 14.04b を実行しており、ほとんど未構成でした。
少なくともファイアウォールを導入するのが良いと考え、iptables を選択しました。
私見ですが、インターフェイスの起動前の段階で、 を介して iptables で生成されたファイルからルールをロードする方がよいでしょう (変更が必要な場合に備えて、起動後の段階で/etc/network/interfaces
を使用します)。
pre-up iptables-restore < /etc/iptables.rules
iptables-save
しかし、私をイライラさせるものが 2 つあります。
- まず、私のファイルで目的が正しく達成されるかどうかわかりません (下記参照)。
- 2 番目に、私が最後に iptables を使用したときは、IPv6 はまだ存在していませんでした。そのための ip6tables があることを発見しましたが、両方に同じルール ファイルを使用できるかどうかはわかりません... 使用できるとしたら素晴らしいのですが、残念ながら、簡単すぎて本当ではないようです :/
以下は私のルール ファイルです。何かおかしな点、不合理な点、不要な点があれば、どなたかご指摘いただけませんか?
ご覧の通り、箱にはApacheが入っていますウェブサーバー(ドメイン名付きなのでドメイン名通過する必要がある)、MySQL サーバー(リモートアクセス付き)、SFTP サーバー(FTPは今ではかなり時代遅れのようですが)、メールサーバー(おそらくpostfix、そしてmajordomoがまだ存在するならメーリングリストも)そして絶対にアクセス可能でなければならないを通してパスワード(このサーバーへの SSH アクセスを失うわけにはいきません。コンソールのない 400 km 離れた場所にある専用サーバーです)
# Generated by iptables-save v1.4.21 on Wed Sep 28 15:08:21 2016
*raw
:PREROUTING ACCEPT [30261051:8737714396]
:OUTPUT ACCEPT [28933128:15186346449]
COMMIT
# Completed on Wed Sep 28 15:08:21 2016
# Generated by iptables-save v1.4.21 on Wed Sep 28 15:08:21 2016
*nat
:PREROUTING ACCEPT [8040256:1000464908]
:INPUT ACCEPT [8040256:1000464908]
:OUTPUT ACCEPT [357964:47801350]
:POSTROUTING ACCEPT [357964:47801350]
COMMIT
# Completed on Wed Sep 28 15:08:21 2016
# Generated by iptables-save v1.4.21 on Wed Sep 28 15:08:21 2016
*mangle
:PREROUTING ACCEPT [30261051:8737714396]
:INPUT ACCEPT [30261051:8737714396]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [28933128:15186346449]
:POSTROUTING ACCEPT [28933128:15186346449]
COMMIT
# Completed on Wed Sep 28 15:08:21 2016
# Generated by iptables-save v1.4.21 on Wed Sep 28 15:08:21 2016
*filter
:INPUT ACCEPT [10752:1386943]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [18529:5801236]
# Do not kill established connections
-A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
-A OUTPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
#INPUT rules
#SSH & SFTP
-A INPUT -i eth0 -p tcp -m tcp --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT
#HTTP server
-A INPUT -i eth0 -p tcp -m tcp --dport 80 -m state --state NEW,ESTABLISHED -j ACCEPT
#HTTPS
-A INPUT -i eth0 -p tcp -m tcp --dport 443 -m state --state NEW,ESTABLISHED -j ACCEPT
#Echo
-A INPUT -p icmp -m icmp --icmp-type 0 -j ACCEPT
-A INPUT -p icmp -m icmp --icmp-type 8 -j ACCEPT
#DNS
-A INPUT -i eth0 -p udp -m udp --sport 53 -j ACCEPT
#SMTP
-A INPUT -i eth0 -p tcp -m tcp --dport 25 -m state --state NEW,ESTABLISHED -j ACCEPT
#SQL in
-A INPUT -i eth0 -p tcp -m tcp --dport 3306 -m state --state NEW,ESTABLISHED -j ACCEPT
#IMAP
-A INPUT -i eth0 -p tcp -m tcp --dport 143 -m state --state NEW,ESTABLISHED -j ACCEPT
#IMAP sur SSL
-A INPUT -i eth0 -p tcp -m tcp --dport 993 -m state --state NEW,ESTABLISHED -j ACCEPT
#POP3
-A INPUT -i eth0 -p tcp -m tcp --dport 110 -m state --state NEW,ESTABLISHED -j ACCEPT
#POP3 sur SSL
-A INPUT -i eth0 -p tcp -m tcp --dport 995 -m state --state NEW,ESTABLISHED -j ACCEPT
#Limit HTTP flood
-A INPUT -p tcp -m tcp --dport 80 -m limit --limit 25/min --limit-burst 100 -j ACCEPT
#Loopback
-A INPUT -i lo -j ACCEPT
#OUTPUTS
#SSH & SFTP
-A OUTPUT -o eth0 -p tcp -m tcp --sport 22 -m state --state NEW,ESTABLISHED -j ACCEPT
#HTTP
-A OUTPUT -o eth0 -p tcp -m tcp --sport 80 -m state --state ESTABLISHED -j ACCEPT
#HTTPS
-A OUTPUT -o eth0 -p tcp -m tcp --sport 443 -m state --state ESTABLISHED -j ACCEPT
#echo
-A OUTPUT -p icmp -m icmp --icmp-type 8 -j ACCEPT
-A OUTPUT -p icmp -m icmp --icmp-type 0 -j ACCEPT
#DNS
-A OUTPUT -o eth0 -p udp -m udp --dport 53 -j ACCEPT
#SMTP
-A OUTPUT -o eth0 -p tcp -m tcp --sport 25 -m state --state ESTABLISHED -j ACCEPT
#SQL out
-A OUTPUT -o eth0 -p tcp -m tcp --sport 3306 -m state --state ESTABLISHED -j ACCEPT
#IMAP
-A OUTPUT -o eth0 -p tcp -m tcp --sport 143 -m state --state ESTABLISHED -j ACCEPT
#IMAP sur SSL
-A OUTPUT -o eth0 -p tcp -m tcp --sport 993 -m state --state ESTABLISHED -j ACCEPT
#POP3
-A OUTPUT -o eth0 -p tcp -m tcp --sport 110 -m state --state ESTABLISHED -j ACCEPT
#POP3 sur SSL
-A OUTPUT -o eth0 -p tcp -m tcp --sport 995 -m state --state ESTABLISHED -j ACCEPT
#Doublons by legacy script.
#Remove?
-A OUTPUT -p tcp -m tcp --dport 53
-A OUTPUT -p udp -m udp --dport 53
-A OUTPUT -p tcp -m tcp --dport 53 -j ACCEPT
-A OUTPUT -p udp -m udp --dport 53 -j ACCEPT
#Loopback
-A OUTPUT -o lo -j ACCEPT
#End of config. Make it happen!
COMMIT
# Completed on Wed Sep 28 15:08:21 2016
ご協力いただきありがとうございます!
答え1
iptables
保存ファイルは IP を参照していないので、使用してip6tables
も問題ありません。最善の方法は、at
2 分 (または適切と思われる時間) でファイアウォール ルールをリセットするジョブを発行することです。
# echo "service iptables stop" | at now + 2 minutes
次に、ファイルから IPv4 と IPv6 の iptables ルールを適用します。
# iptables-restore < iptables-save-file
# ip6tables-restore < iptables-save-file
その時点でアクセスできない場合は、at
ジョブがファイアウォールを非アクティブ化するまで 2 分間待ってから、ルールセットを手動で構成し始めます。ルールセットが機能する場合は、実行しservice iptables save
てservice ip6tables save
新しいファイアウォールをお楽しみください。
また、既存のファイルでは、実際にはトラフィックが拒否、拒絶、またはドロップされることはありません。すべてのチェーンのデフォルト ポリシーは であり、またはターゲットACCEPT
を含む末尾のルールはないため、ファイアウォール構成があまり効果的でないように見えます。DROP
REJECT