いくつかのセキュリティのヒントの下のCentOSのSSH

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に
        PasswordAut​​henticationをなし
        #サービス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

Your email address will not be published. Required fields are marked *