SSHの利点について、私は、Telnetの代わりにSSHへのRPCコマンドの前に、次の例で使用できるすべてのこれらの共通の特徴で、私は短いそれを言う必要があると思いますか?:
– Telnetの
のssh user@remote.machine
– リモート実行
のssh user@remote.machine ‘コマンド…」
– リモート·コピー
SCPのuser@remote.machine:/リモート/パス/ローカル/パス
SCP /ローカル/パスuser@remote.machine:/リモート/パス
– Xフォワード
sshの-X user@remote.machine
xcommand …
– トンネル/ Portforward
のssh -L 1234:remote.machine:4321 user@remote.machine
のssh -R 1234:local.machine:4321 user@remote.machine
のssh -L 1234:other.machine:4321 user@remote.machine
詳細な使用方法については、私は、それを研究するために、読者を喜ばことを言うことはありません。
私はここに言うことだ、SSHサービスのために皆のためのいくつかの安全のためのヒントですが、私は安心してより多くので皆を願っています
例
(RedHatの9によれば、例えば)
クライアント側に転送:
$ SSH-keygenの-t RSA
*を押して完了するまでに3回入力、パスワードなしで、あなたはssh-agentの使用しない限り。
$ Scpのの〜/ .ssh / id_rsa.pub user1@server.machine:id_rsa.pub
* Windowsクライアントは、利用可能なputtygen.exeは、公開鍵を生成する場合、
その後、一行にその内容が終了した後、サーバーにコピーを変更します。
*サーバ側がパスワードを禁止している場合は、その後、他の放電ブリックキーでコピーされてください。
ログインサーバ側:
rootログインを禁止します
#Viには/ etc / sshを/ sshd_configファイル
ないのPermitRootLogin
RSA認証を使用するように強制的に廃止パスワード、(SSHアカウントUSER1を想定)
#Viには/ etc / sshを/ sshd_configファイル
はいRSAAuthentication
はいPubkeyAuthentication
AuthorizedKeysFileの.ssh / authorized_keysに
PasswordAuthenticationをなし
#サービスsshdの再起動
#蘇 – USER1
$ MKDIRの〜/ .ssh 2>を/ dev / null
$ chmodの700の〜/ .ssh
$タッチの〜/ .ssh / authorized_keysに
$ chmodの644の〜/ .ssh / authorized_keysに
$猫〜/ id_rsa.pub >>の〜/ .ssh / authorized_keysに
$ Rmの〜/ id_rsa.pub
$終了
SU / sudoのリストを制限します:
#Viを/etc/pam.d/su
認証/lib/security/$ISA/pam_wheel.soを必要use_uid
#visudoを
%ホイールALL =(ALL)ALL
#gpasswdを-a USER1ホイール
sshのユーザーリストを制限
#Viに/etc/pam.d/sshd
認証に必要なpam_listfile.so項目=ユーザーセンス=許可するファイル=は/ etc / = ONERR ssh_usersが失敗
#エコーUSER1 >>は/ etc / ssh_users
Control Managerのウェブリストに封鎖ssh接続し、スイッチ
#iptablesの-I INPUT -p TCPは22 -j DROPを–dport
#MKDIR / var / www / htmlと設定/ ssh_open
#猫> /var/www/html/ssh_open/.htaccess << END
でAuthName "ssh_open」
AuthUserFileは/var/www/html/ssh_open/.htpasswd
AuthTypeディレクティブの基本
有効なユーザーを必要とします
終わり
#htpasswdの-c /var/www/html/ssh_open/.htpasswd USER1
(より良い好ましくもSSLを設定、またはHTTPS接続のみ、私は、SSLの設定、会議のリーダーをスキップするようにここにいます。)(接続元を制御するには、/プロジェクトを拒否できるように固定してください、お願い会議からの読者。)
#猫> /var/www/html/ssh_open/ssh_open.php << END
<?
// IPリストに設定されたディレクトリのパス
$ Dir_path = "。";
// IPリストのための設定ファイル名
$ Ip_list = "ssh_open.txt";
//クライアントのIPを取得します
$ user_ipは= $ _ SERVER ['REMOTE_ADDR'];
必要に応じて// IPを指定する許可
{($ _ ['MYIPを'] GET @)の場合
$ user_ipは= $ _ GET ['MYIP'];
}
//確認IPフォーマット
IF($ user_ipは== long2ip(ip2long($のuser_ipは))){
//ファイルにクライアントのIPを入れて
(@!($ファイル=ののfopen( "$ dir_path / $ ip_list」、「W +」)))の場合
{
エコー "アクセス許可が拒否されました!!
」。
「PLSのは、dirの$ dir_pathまたはファイル$ ip_listにあなたの権利を確認してください “エコー;
}
ほかに
{
fputs($ファイル、 “$のuser_ipは”);
fcloseを($ファイル);
エコー「クライアントIP($のuser_ipは)は$ dir_path / $ ip_listに入れています」。
}
}エルス{
エコー “無効なIPフォーマット!!
ssh_open.txtは変更されませんでした。”;
}
?>
終わり
#タッチ/var/www/html/ssh_open/ssh_open.txt
#chmodの640 / var / www / htmlと設定/ ssh_open / *
#chgrpコマンドapacheの/ var / www / htmlと設定/ ssh_open / *
/var/www/html/ssh_open/ssh_open.txt W#のchmodのG +
#chmodのO + T / var / www / htmlと設定/ ssh_open
#サービスのhttpdの再起動
#MKDIRの/ etc / iptablesの
#猫> /etc/iptables/sshopen.sh << END
#!/ binに/ bashの
PATH = / sbinに:/ binにします。/ usr / sbinにします。/ usr / binに
list_dir = / var / www / htmlと設定/ ssh_open
list_file = $ list_dir / allow_ssh.txt
bad_list = $ list_dir / bad_ip.txt
auth_log = $ list_dir / xinetd.log
trusted_ip = "127.0.0.1の4.3.2.1」
chain_name = ssh_rules
MAIL_TO =ルート
#クリアチェーン終了した場合、またはチェーンを作成します。
iptablesの-L -n | / binに/ grepの-q "^チェーンの$ chain_name" && {
iptablesの-F $ chain_name
真
} || {
iptablesの-N $ chain_name
iptablesの-I INPUT -p tcpの--dport 22 -j $ chain_name
}
オンデマンド#クリアチェーン
[透明な "$ 1" =] && {
iptablesの-F $ chain_name
猫を/ dev / null> $ list_file
出口0
}
リストが空である間#何もしません
[-s $ List_file] || 1番出口
ホストが一覧表示するには数学をdosn’t場合#は接続を拒否します
HOST_IP = $($のauth_logはgrep ‘=からmyssh’ |尾-1 |のawk -F ‘=’ ‘{印刷$ NF}’)
list_ip = $(猫ドルlist_file)
[“$のHOST_IP” -a “$のHOST_IP” = “$のlist_ip” -n!]であれば、その後、
エコー-e “$ {trusted_ip / / \ n}は” | grepの-q “$のHOST_IP」|| {
/ sbinに/ iptablesの保存| grepの-q “INPUT -s $ HOST_IP -j DROP $” || {
/ sbinに/ iptablesの-I INPUT -s $ HOST_IP -j DROP
エコーの$ HOST_IP >> $のbad_list
“$のHOST_IPは$(日)に0ドルによってブロックされている「エコー|メール-s”ブロック
IP」の$ MAIL_TO
}
}
2番出口
Fiの
#ルールを追加します
iptablesの-A $ chain_name -p TCPは22 -s $(<$のlist_file)を--dport -j ACCEPT && \
「sshは$(日)に$(<$のlist_file)に開かれた「エコー| \
メール-s "sshopen" $のMAIL_TO
出口0
終わり
#chmodの+ X /etc/iptables/sshopen.sh
#エコー-e 'sshopen \ T \ t1234 / TCP' >> / etc / servicesに
#猫> /etc/xinetd.d/sshopen << END
サービスsshopen
{
LOG_TYPE = FILEの/studyarea/www/phorum/xinetd.log
log_on_success = HOST
log_on_failureの= HOST
なし=無効
socket_typeに=ストリーム
プロトコル= TCP
なし=待ちます
ユーザー=ルート
サーバ= /etc/iptables/sshopen.sh
}
1234 --dport TCP -p#iptablesの-I INPUTはACCEPT -j
#猫> /etc/cron.d/sshopen << END
* / 5 * * * *ルート/etc/iptables/sshopen.sh明確
終わり
クライアント側に転送
ブラウザのURL入力の場合:
のhttp://server.machine/ssh_open/ssh_open.php MYIP = 1.2.3.4?
(ない場合はどうなりますか?MYIP = 1.2.3.4場所クライアントのIPは、プロキシにより、次に勝つ、そうでない場合。)
そこで、サーバ側ssh_open.txt単一のレコードだけ、各上書き。
そして:
$のTelnet server.machine 1234
次に、SSHサーバとの接続に5分まで持っています!
次のようにこの手順の基本的な考え方は次のとおりです。
SSHDのファイアウォールは、すべての配線を遮断します。
その後、ディレクトリを設定httpdが、あなたは自動的につかむことができ、許可/制御を拒否し、その後あなたのライティングスキルを有効に応じて.txtでテキストファイルにディレクトリブラウザIPレコードでは、PHPを書くSSL + htpasswdの+設定することができますブラウザ側のIPを取り、また、ブラウザ側のパスの引数を使用できます。テキストファイルのみの単一のレコードを、それぞれが定期的に空に上書きします。
(例えば、XXXなど)新しい項目を追加するには、/ etc /サービスを変更し、(例えば、1234のような)新しいポートを指定します
xinetdは、このポートに耳を傾け、そして、スクリプトを作成するiptablesの設定、STEP2でのリスト、開いてssh接続からIPを取得するために開始します。
ルール上のiptablesのssh接続あたりのクリーンアップのcrontabのポイント数を設定し、記録をオフにします。これは、既存の接続に影響を与えないし、あっても時間の経過とともに、上記繰り返します。
前の手順を設定しなかった場合、あなたのSSHサービスの単語を試すには余りにも多くの人々を心配することができます。
#猫> /etc/iptables/sshblock.sh << END
#!/ binに/ bashの
PATH = / sbinに:/ binにします。/ usr / sbinにします。/ usr / binに
LOG_FILE =の/ var /ログ/安全な
KEY_WORD = "無効なユーザー"
KEY_WORD1は= "rootのパスワードを失敗しました」
PERM_LIST =は/ etc /ファイアウォール/ bad.list.perm
LIMIT = 5
MAIL_TO =ルート
IPT_SAV = "$(iptablesの保存)」
bad_list = $(egrepの "$ KEY_WORD」の$ LOG_FILE | awkは '{印刷$ NF}' | xargsの)
bad_list1 = $(egrepの "$ KEY_WORD1」の$ LOG_FILE | awkは '{$ 11印刷}' | xargsの)
bad_list = "$ bad_list $ bad_list1」
で私は$(エコー-e "$ {bad_list // / \ n}は" |ソート-u)
行います
ヒット= $(エコー$のbad_list | egrepの-o "$ i"の|トイレ-l)
["$ヒット「-ge」の$ LIMIT"] && {
{|| - のgrep -q「J DROP $ I *。 "|" $ IPT_SAV "エコー
エコー-e "\ n個$ iが$(日)\ nは上に滴下し、" | "$ {0 ## * /}によってDROP:$ i"のメール-s $ MAIL_TO
iptablesの-I INPUTは、私はDROPを-j $ -s
}
egrepの-q "^ $ I $" $ PERM_LIST ||エコー$ I >> $ PERM_LIST
}
終わりました
終わり
#chmodの+ X /etc/firewall/sshblock.sh
#猫>> /etc/hosts.allowファイル<< END
SSHD:ALL:スポーン(/etc/firewall/sshblock.sh)&:ALLOW
終わり
這樣、那些亂してみてくださいSSH的家夥、頂多能試5次(LIMIT可調整)、然後就給BLOCK掉了。此外、在PERM_LIST的のIP、也可提供給のiptables的初始スクリプト、來個永久性封閉:
で私は$(<$ PERM_LIST)
行います
/ sbinに/ iptablesの-I INPUTは、私はDROPを-j $ -s
終わりました
還有、你想知道有哪些人對你做フルレンジポートスキャン的話:
#iptablesが-I INPUTはACCEPT -j 79 --dport TCP -p
猫> /etc/xinetd.d/finger << END
サービス指
{
socket_typeに=ストリーム
なし=待ちます
ユーザー=誰も
サーバ= /usr/sbin/in.fingerd
なし=無効
}
終わり
#猫>> /etc/hosts.allowファイル<< END
in.fingerd:ALL:スポーン(エコー-e "\ n警告%aは指をしようとしていた\ N $(日)。" |メール-s "指%から「ルート)&:DENY
終わり
這裡、我只是設為發信給ルート。
事實上、你可修改為起動ファイアウォール將%A這個傳回值給禁止掉也行。
不過、對方要是有選擇性的做ポートスキャン、沒掃到指的話、那當然就沒用了...
Leave a Reply