その後、サーバーをより安全にする方法に戸惑いました。 IPブロッキングでiptablesを直接使用しても問題は解決しませんでした。 稼働中のPCからだけでなく、家、別の都市、またはバス(渋滞に立っているとき)からもサーバーに接続できます。
ポートノッキングを使用することにしました 。
これを使用したことがない人は、猫の下で歓迎されています。
トピックに含まれていない人のために、私は簡単に言います:これはネットワークインターフェースを「リッスン」するデーモンであり、リクエストがポート7000,8000,9000に送信されていることを「聞いた」場合、事前に指定したポートにIPの許可ルールを追加します。 iptablesへのアクセスを許可または拒否するコマンドを実行するだけです。
だから、私はすべてのsshからカバーしたかった。
まず、デーモン自体をインストールします(テストでは、Ubuntuで作業中のPCを使用しました)。
sudo apt-get install knockd
CentOSの場合、次のようにインストールできます。
sudo rpm -Uhv http://pkgs.repoforge.org/knock/knock-0.5-3.el6.rf.x86_64.rpm
次に、このデーモン(/etc/knockd.conf)の構成を編集する必要があります。
[options] UseSyslog [openSSH] sequence = 7000:tcp,8000:tcp, 9000:udp seq_timeout = 5 command = /sbin/iptables -I INPUT 1 -s %IP% -d _IP____ -p tcp --dport 22 -j ACCEPT tcpflags = syn [closeSSH] sequence = 9000:udp,8000:tcp,7000:tcp seq_timeout = 5 command = /sbin/iptables -D INPUT -s %IP% -d _IP____ -p tcp --dport 22 -j ACCEPT tcpflags = syn
次に、デーモンを再起動します。
sudo /etc/init.d/knockd restart
次に、ポート22の全員に拒否ルールを追加します。
sudo iptables -A INPUT -s 0/0 -d _IP____ -p tcp --dport 22 -j REJECT
[openSSH]セクションで、行-I INPUT 1に注意してください。 代わりに単に-A INPUTと記述すると、ルールチェーンの最後に追加されるため、最上位のルールのみが実行されます。 したがって、禁止規則が最後に追加されるように記述します。
sequenceは、アクセスを許可するポートシーケンスを示します。 必ず自分のものを指定してください。
プロトコルを指定することもできます。たとえば、7000:udp、8000:udp、9000:tcp
tcpflags-ここでは、送信されたパケットに含まれるヘッダーを示します。
[closeSSH]セクションで、22番目のポートを閉じるための逆のシーケンスを指定します。 また、許可リストからIPを削除するコマンドがあります。
ここで疑問が生じます。このマジックシーケンスをポートに送信する方法は?
開発者のサイトから、人気のあるプラットフォーム用のプログラムをダウンロードできます。 他の使用例がそこにあります。
Windowsでは、これを使用しました:ダウンロード、解凍。 コマンドプロンプトを開きました
cd ____ knock 192.168.0.1 7000:tcp 8000:tcp 9000:udp
すべてがポートを開いています。 これでSSHに行くことができます!
別のプロトコルに使用する場合は、同じ方法で同じ方法で[openFTP] 、 [closeFTP]セクションを記述し 、ポートを必要なものに変更するだけです。
このことの欠点は、接続する前に追加のプログラムを使用する必要があることです。 しかし、私には安全のために許容できるようです。
すべてのセキュリティ!