Ubuntu ユーザーの皆さん、こんにちは!
以下は私の iptables.rules ファイルの例です。
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
:f2b-sshd - [0:0]
:f2b-sshd-ddos - [0:0]
-A INPUT -p tcp -m multiport --dports 22 -j f2b-sshd-ddos
-A INPUT -p tcp -m multiport --dports 22 -j f2b-sshd
-A INPUT -s 202.215.160.75/32 -j DROP
-A INPUT -s 66.210.251.136/32 -j DROP
-A INPUT -s 61.40.0.0/16 -j DROP
-A INPUT -p tcp -m multiport --dports 22 -j f2b-sshd-ddos
-A INPUT -i tap0 -j ACCEPT
-A INPUT -p tcp -m multiport --dports 22 -j f2b-sshd
-A INPUT -i br0 -j ACCEPT
-A FORWARD -i br0 -j ACCEPT
-A f2b-sshd -j RETURN
-A f2b-sshd-ddos -j RETURN
COMMIT
これは私のファイルの要約版であることに注意してください。削除する IP/ドメインはおそらく 100 個程度です。
私の問題は、xxxx のような新しい IP を削除すると、次のように追加されることです。
-A INPUT -i br0 -j ACCEPT
-A INPUT -s x.x.x.x/32 -j DROP
-A FORWARD -i br0 -j ACCEPT
これでは、どういうわけか、私が望むように IP アドレスが削除されません。ユーザー/ドメインを削除するために使用するシェル スクリプトがあります。
./ドロップユーザー
sudo iptables -A INPUT -s $1 -j DROP
sudo sh -c "iptables-save > /etc/iptables.rules"
./ドロップドメイン
sudo iptables -A INPUT -s $1/16 -j DROP
sudo sh -c "iptables-save > /etc/iptables.rules"
この問題に対処するために、/etc/iptables.rules ファイルを手動で編集して、xxxx ip を次の行より上に移動します。
-A INPUT -p tcp -m multiport --dports 22 -j f2b-sshd-ddos
そして次のように呼び出します:
sudo iptables-restore < /etc/iptables.rules
私のプロセスに何か問題があるのでしょうか? もっと良い方法はありますか? 毎日、ハッキングに対処するのに約 10 分を費やしており、そのほとんどの時間を iptables.rules ファイルの編集と、iptables-restore による復元に費やしています。./drop-user または ./drop-domain を呼び出すだけで済むようにしたいのですが、iptables に対する理解が足りないと感じています。
iptables-restore の前に次のコマンドを実行する必要がありますか?
sudo iptables -F
sudo iptables -Z
前もって感謝します!
答え1
fail2ban
デフォルトの設定で問題なく動作し、さらに多くのサービスを監視する場合はさらにカスタマイズできる を使用して禁止プロセスを自動化することを強くお勧めします。
と組み合わせるとiptables-persistent
、再起動後もルールが保持されるので便利です。
以下は、Ubuntu サーバーで私が行っていることの基本的な概要です。
fail2banをインストールして設定する
sudo aptitude install fail2ban && sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local && sudo nano /etc/fail2ban/jail.local
これにより、インストールされ、カスタマイズ用に構成ファイルが新しいファイルにコピーされます。パッケージが更新されても編集内容が上書きされないようにするため、これがベスト プラクティスです。
私の個人的な好みは、禁止時間そして時間を見つけるデフォルトから変更します。禁止時間は、攻撃者が禁止される期間で、検索時間は、攻撃をレート制限した場合に攻撃の試行がカウントされる時間枠です。bantime = 21600
(6 時間に増加、時間の値は秒単位) およびfindtime = 3600
(1 時間あたり最大 3 回の攻撃試行) を検索して編集します。
既存の Iptables ルールをフラッシュし、新しいデフォルトを設定する
これは、ポート 22 (SSH)、ポート 80 (HTTP)、およびポート 443 (HTTPS) のみをリッスンする受信ポートを持つ一般的な Web サーバーで使用することを目的としたワンライナーです。このDigitalOceanチュートリアル独自のものを構築したり、カスタマイズしたりする方法についての良い参考資料です。Iptables と DROP ルールの設定には注意してください。順序を間違えると、永久にロックアウトされてしまいます。とはいえ、私が使用しているのは次のワンライナーであり、安全で、テスト済みで、完璧に動作します。
sudo iptables -P INPUT ACCEPT && sudo iptables -F && sudo iptables -A INPUT -i lo -j ACCEPT && sudo iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT && sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT && sudo iptables -A INPUT -p tcp --dport 80 -j ACCEPT && sudo iptables -A INPUT -p tcp --dport 443 -j ACCEPT && sudo iptables -A INPUT -j LOG && sudo iptables -A FORWARD -j LOG && sudo ip6tables -A INPUT -j LOG && sudo ip6tables -A FORWARD -j LOG && sudo iptables -A INPUT -j DROP
再起動後も変更を永続化する
最後のステップは、パッケージをインストールして構成することですiptables-persistent
。これにより、再起動後もルールの保存と復元が自動化されます。
sudo aptitude install iptables-persistent && sudo service iptables-persistent start
IPV4 および IPV6 ルールの確認を求めるプロンプトが表示されるので、Tab キーを使用してそれぞれに「はい」を選択し、保存します。再起動すると自動的に開始されるため、それ以上の設定を心配する必要はありません。
ルールを永続化する場合の注意点の 1 つは、追加または編集した新しいルール (たとえば、ポート 443 で HTTPS を追加または削除した場合など) をプロセスに手動で通知する必要があることです。これを行うには、sudo service iptables-persistent save
現在のルール セットを更新する which を実行します。バージョン 14.04 以降ではコマンドが "netfilter-persistent" に変更されたと思うので、sudo service netfilter-persistent save
最初のコマンドが機能しない場合はこれを使用してください。
まとめ
これで、fail2ban は SSH への攻撃を監視し、設定したパラメータに従って IP アドレスを自動的に追加および削除します。Iptables は開いていないポートのすべての着信トラフィックを無視し、これらのルールは再起動後も維持されるため、他に必要な作業はほとんどありません。余った自由時間を楽しんでくださいね!
すべての変更を元に戻したい場合は、上記の手順をすべて逆にしてください。
何らかの理由でこの方法を使い続けたくない場合は、すべてをすぐに元に戻すことができます。これはお勧めできませんが、それはあなたのマシンなので、方法は次のとおりです。
- すべての Iptables ルールをフラッシュし、すべてのポートのすべてのトラフィックを受け入れます
sudo iptables -P INPUT ACCEPT && sudo iptables -F
(最後に DROP ルールを削除するには、これを行う必要があります。そうしないと、ロックアウトされます) - 以前にインストールしたパッケージとその設定
sudo aptitude purge fail2ban iptables-persistent
(netfilter-persistent
Ubuntu サーバーのバージョンによっては )を削除します。再起動後、以前の状態に戻ります。ただし、現在行っているように手動で再度追加する必要があるカスタム Iptables 設定は除きます。