SSH的一些安全小技巧

运维 系统运维
关于 ssh 的好处, 相信不用我多说了吧? 简而言之, 之前的 rpc command 与 telnet 都全可用 ssh 代替。

 一前言

  关于 ssh 的好处相信不用我多说了吧?

  简而言之之前的 rpc command 与 telnet 都全可用 ssh 代替.

  比方如下的这些常见功能:

  远程登录

  ssh user@remote.machine

  远程执行

  ssh user@remote.machine 'command ...'

  远程复制

  scp user@remote.machine:/remote/path /local/path

  scp /local/path user@remote.machine:/remote/path

  - X forward

  ssh -X user@remote.machine

  xcommand ...

  - Tunnel / 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 为范例)

  1) 禁止 root 登录

  # vi /etc/ssh/sshd_config

  PermitRootLogin no

  2) 废除密码登录强迫使用 RSA 验证(假设 ssh 账户为 user1 )

  # vi /etc/ssh/sshd_config

  RSAAuthentication yes

  PubkeyAuthentication yes

  AuthorizedKeysFile .ssh/authorized_keys

  PasswordAuthentication no

  # service sshd restart

  # su - user1

  $ mkdir ~/.ssh 2>/dev/null

  $ chmod 700 ~/.ssh

  $ touch ~/.ssh/authorized_keys

  $ chmod 644 ~/.ssh/authorized_keys

  --------------------------------------------------

  转往 client :

  $ ssh-keygen -t rsa

  (按三下 enter 完成﹔不需设密码,除非您会用 ssh-agent )

  $ scp ~/.ssh/id_rsa.pub user1@server.machine:id_rsa.pub

  (若是 windows client, 可用 puttygen.exe 产生 public key,

  然后复制到 server 端后修改之使其内容成为单一一行.)

  ---------------------------------------------------

  回到 server :

  $ cat ~/id_rsa.pub >> ~/.ssh/authorized_keys

  $ rm ~/id_rsa.pub

  $ exit

  3) 限制 su / sudo 名单:

  # vi /etc/pam.d/su

  auth required /lib/security/$ISA/pam_wheel.so use_uid

  # visudo

  %wheel ALL=(ALL) ALL

  # gpasswd -a user1 wheel

  4) 限制 ssh 使用者名单

  # vi /etc/pam.d/sshd

  auth required pam_listfile.so item=user sense=allow file=/etc/ssh_users onerr=fail

  # echo user1 >> /etc/ssh_users

 

#p#

 

    5) 封锁 ssh 联机并改用 web 控管清单

  # iptables -I INPUT -p tcp --dport 22 -j DROP

  # mkdir /var/www/html/ssh_open

  # cat > /var/www/html/ssh_open/.htaccess < 

  AuthName "ssh_open"

  AuthUserFile /var/www/html/ssh_open/.htpasswd

  AuthType basic

  require valid-user

  END

  # htpasswd -c /var/www/html/ssh_open/.htpasswd user1

  (***还将 SSL 设起来或只限 https 联机更佳我这里略过 SSL 设定请读者自补.)

  (如需控制联机来源那请再补 Allow/Deny 项目也请读者自补.)

  # cat > /var/www/html/ssh_open/ssh_open.php < 

   

  //Set dir path for ip list

  $dir_path=".";

  //Set filename for ip list

  $ip_list="ssh_open.txt";

  //Get client ip

  $user_ip=$_SERVER['REMOTE_ADDR'];

  //allow specifying ip if needed

  if (@$_GET['myip']) {

  $user_ip=$_GET['myip'];

  }

  //checking IP format

  if ($user_ip==long2ip(ip2long($user_ip))) {

  //Put client ip to a file

  if(@!($file = fopen("$dir_path/$ip_list","w+")))

  {

  echo "Permission denied!!";

  echo "Pls Check your rights to dir $dir_path or file $ip_list";

  }

  else

  {

  fputs($file,"$user_ip");

  fclose($file);

  echo "client ip($user_ip) has put into $dir_path/$ip_list";

  }

  } else {

  echo "Invalid IP format!!ssh_open.txt was not changed.";

  }

  ?>

  END

  # touch /var/www/html/ssh_open/ssh_open.txt

  # chmod 640 /var/www/html/ssh_open/*

  # chgrp apache /var/www/html/ssh_open/*

  # chmod g+w /var/www/html/ssh_open/ssh_open.txt

  # chmod o+t /var/www/html/ssh_open

  # service httpd restart

  # mkdir /etc/iptables

  # cat > /etc/iptables/sshopen.sh < 

  #!/bin/bash

  PATH=/sbin:/bin:/usr/sbin:/usr/bin

  list_dir=/var/www/html/ssh_open

  list_file=$list_dir/ssh_open.txt

  chain_name=ssh_rules

  mail_to=root

  # clear chain if exits, or create chain.

  iptables -L -n | /bin/grep -q "^Chain $chain_name" && {

  iptables -F $chain_name

  true

  } || {

  iptables -N $chain_name

  iptables -I INPUT -p tcp --dport 22 -j $chain_name

  }

  # clear chain when needed

  [ "$1" = clear ] && {

  iptables -F $chain_name

  exit 0

  }

责任编辑:春晓 来源: 比特网
相关推荐

2022-02-17 13:58:38

Linux技巧文件

2024-03-11 15:08:26

Linux操作系统进程

2009-11-17 17:15:21

路由器安全设置

2015-08-17 15:53:58

Linux桌面

2011-07-19 18:11:09

iPhone 开发

2020-09-25 08:28:12

Javascript

2022-08-28 23:51:04

编辑器vim代码

2011-06-01 16:50:21

JAVA

2012-05-21 10:13:05

XCode调试技巧

2013-03-29 13:17:53

XCode调试技巧iOS开发

2021-02-16 09:02:59

Python代码技巧

2011-07-12 09:47:53

WebService

2011-05-23 18:06:24

站内优化SEO

2021-10-12 23:10:58

UnsafeJavaJDK

2019-11-22 10:10:46

IT工具技术

2022-12-02 14:58:27

JavaScript技巧编程

2021-11-01 12:10:56

Python技巧代码

2009-11-26 10:32:57

PHP代码优化

2020-04-08 10:21:58

bash脚本语言

2020-04-14 09:22:47

bash脚本技巧
点赞
收藏

51CTO技术栈公众号