ssh等

SSH端口转发

SSH会自动的加密和解密所有SSH客户端与服务器之间的网络数据;同时也可以将其他TCP端口的数据加密转发,这一过程叫“隧道”,这样也可以减少防火墙开启的端口。

实现过程是数据首先通过连接本机的某一个端口,被当做ssh协议数据发送给ssh服务器,ssh服务器解密再发给远程主机的端口

本地转发

-L localport:remotehost:remotehostport sshserver

locaolport本机端口号、远程主机地址和端口、ssh协议的端口–23端口或25端口

选项:

-f 后台启用

-N 不打开远程shell,处于等待状态(一般搭配f,实现在当前窗口就可传输数据,不需要开新窗口)

-g 启用网关功能

示例

ssh –L 9527:telnetsrv:23  sshsrv

telnet 127.0.0.1 (也可接端口,即指定连接端口)

远程转发:

-R sshserverport:remotehost:remotehostport sshserver

示例:

ssh –R 9527:telnetsrv:23 –N sshsrv

让sshsrv侦听9527端口的访问,如有访问,就加密后通过ssh服务转发请求到本机ssh客户端,再由本机解密后转发到telnetsrv:23(Data←→sshsrv:9527←→sshsrv:22←→localhost:XXXXX←→localhost:YYYYY←→telnetsrv:23)

还有一种是动态端口转发。

 

ssh服务器

服务器端:sshd, 配置文件: /etc/ssh/sshd_config

常用参数:

ØPort 端口

ØListenAddress ip

ØLoginGraceTime 2m 登录等待时间

ØPermitRootLogin yes是否允许root登录

ØStrictModes yes 检查.ssh/文件的所有者,权限等

ØMaxAuthTries 6最多的验证密码的次数(生效一半)

ØMaxSessions 10 同一个连接最大会话(同一个会话→克隆)

ØPubkeyAuthentication yes 是否支持基于key验证登录

ØPermitEmptyPasswords no

ØPasswordAuthentication yes 是否基于密码验证登录

ClientAliveInterval 60 用户没有操作是最多等待n秒

ClientAliveCountMax 等待结束提醒次数最多为多少后,就退出ssh服务连接

UseDNS yes 改为no可提升访问速度

GSSAPIAuthentication yes 提高速度可改为no

MaxStartups 未认证连接最大值,默认值10(10:30:100 10个以上的连接后开始70%的成功率连接)

Banner /path/file 可以设置提示界面的提示语

限制可登录用户的办法:(直接在配置文件中添加即可生效)

AllowUsers user1 user2 user3

DenyUsers

AllowGroups

DenyGroups

 

ssh服务的最佳实践

u建议使用非默认端口

u禁止使用protocol version 1

u限制可登录用户

u设定空闲会话超时时长

u利用防火墙设置ssh访问策略

u仅监听特定的IP地址

u基于口令认证时,使用强密码策略

tr -dc A-Za-z0-9_ < /dev/urandom | head -c 30| xargs

u使用基于密钥的认证

u禁止使用空密码

u禁止root用户直接登录

u限制ssh的访问频度和并发在线数

u经常分析日志(last查看日志信息或lastb查看失败登录的信息;在/var/log/下,btmp是失败登录的日志)

 

编译安装dropbear示例

ssh协议的另一种实现方式:dropbear

开始:

  1. 确保已安装开发包组yum groupinstall “Development tools”
  2. 下载dropbear最新的安装包
  3. tar
  4. 了解README等帮助文件
  5. 分配配置文件等文件的各个安装路径:./configure  –prefix=/data/dropbear  –sysconfdir=/etc/dropbear/
  6. 上一步缺什么依赖包就安装什么包,以确保上一步正确完整安装
  7. 开始编译(若是能力允许,其实可以自选)make PROGRAMS=”dropbear dbclient dropbearkey dropbearconvert scp”
  8. make install 和ls  /data/dropbear/ 等查看是否完成;/etc/dropbear/文件夹若是没有,手动创建即可
  9. 在/etc/profile.d/dropbear.sh设置path变量,并且进行生效操作

281

  1. 根据帮助文档中的提示,生成必要的key在/etc/dropbear/中:dropbearkey -t rsa -f /etc/dropbear/dropbear_rsa_host_key -s 2048
  2. 然后即可登录,第一次最好在前台测试:dropbear -p :2222 -F –E #前台运行
  3. 客户端访问:dbclient -p 2222 root@127.0.0.1

 

AIDE

是一个入侵检测工具,主要用途是检查文件的完整性,审计计算机上的那些文件被更改过了

操作:

初始化默认的AIDE的库:

/usr/local/bin/aide –init

生成检查数据库(建议初始数据库存放到安全的地方)

cd /var/lib/aide

mv aide.db.new.gz aide.db.gz

检测: /usr/local/bin/aide –check

更新数据库

aide –update

 

sudo

sudo能够授权指定用户在指定主机上运行某些命令。如果未授权用户尝试使用 sudo,会提示联系管理员

sudo也可以记录日志;使用时间戳文件默认每隔五分钟检测一次权限

添加权限要写入文件:/etc/sudoers

最好写一个单独的文件放入:/etc/sudoers.d/

visudo可直接添加附加权限,虽然有检查语法功能,但不是彩色的,需修改配置文件:(记得生效)

echo export EDITOR=vim >> /etc/profile.d/env.sh

时间戳文件:/var/db/sudo

日志文件:/var/log/secure

配置文件支持使用通配符glob:

?:任意单一字符

* :匹配任意长度字符

[wxc]:匹配其中一个字符

[!wxc]:除了这三个字符的其它字符

\x : 转义

[[alpha]] :字母 示例: /bin/ls [[alpha]]*

授权规则格式

用户 登入主机=(代表用户) 命令

示例:

root ALL=(ALL) ALL

格式说明:

user: 运行命令者的身份

host: 通过哪些主机

(runas):以哪个用户的身份

command: 运行哪些命令

sudo -u wang ….指定具备谁的权限来进行操作

支持别名识别

Users和runas:

username

#uid

%group_name

%#gid

user_alias|runas_alias

host:

ip或hostname

network(/netmask)

host_alias

command:

command name

directory

sudoedit

Cmnd_Alias

别名有四种类型:User_Alias, Runas_Alias, Host_Alias ,Cmnd_Alias

别名格式:[A-Z]([A-Z][0-9]_)*

别名定义:

Alias_Type NAME1 = item1, item2, item3 : NAME2 = item4, item5

示例1:

student ALL=(root) /sbin/pidof,/sbin/ifconfig

%wheel ALL=(ALL) NOPASSWD: ALL (后面是表示不需要输入密码即可操作)

示例2:

User_Alias NETADMIN= netuser1,netuser2

Cmnd_Alias NETCMD = /usr/sbin/ip

NETADMIN ALL=(root) NETCMD

示例3:(设置默认sudo所要代表的用户)

Defaults:wang runas_default=tom

wang ALL=(tom,jerry) ALL

sudo命令的其他选项:

-V 显示版本信息等配置信息

-u user 默认为root

-l,ll 列出用户在主机上可用的和被禁止的命令

-v 再延长密码有效期限5分钟,更新时间戳

-k 清除时间戳(1970-01-01),下次需要重新输密码

-K 与-k类似,还要删除时间戳文件

-b 在后台执行指令

-p 改变询问密码的提示符号

示例:-p ”password on %h for user %p:”

 

TCP_Wrappers

主要解决对TCP的安全控制

某进程是否接受libwrap的控制取决于发起此进程的程序在编译时是否调用该库

判断服务程序是否能够由tcp_wrapper进行访问控制的方法:

ldd /PATH/TO/PROGRAM|grep libwrap.so

strings PATH/TO/PROGRAM|grep libwrap.so

配置文件:/etc/hosts.allow, /etc/hosts.deny

帮助参考:man 5 hosts_access,man 5 hosts_options

检查顺序:hosts.allow,hosts.deny(默认允许)

注意:一旦前面规则匹配,直接生效,将不再继续

基本语法:

Ø daemon_list@hostip: client_list [ :options :option… ]

Daemon_list@host格式

  • 单个应用程序的二进制文件名,而非服务名,例如vsftpd
  • 以逗号或空格分隔的应用程序文件名列表,如:sshd,vsftpd
  • ALL表示所有接受tcp_wrapper控制的服务程序
  • 主机有多个IP,可用@hostIP来实现控制

如:in.telnetd@192.168.0.254

客户端Client_list格式

  • 以逗号或空格分隔的客户端列表
  • 基于IP地址:168.10.1 192.168.1.
  • 基于主机名:magedu.com .magedu.com 较少用
  • 基于网络/掩码:168.0.0/255.255.255.0
  • 基于net/prefixlen: 192.168.1.0/24(CentOS7)
  • 基于网络组(NIS 域):@mynetwork
  • 内置ACL:ALL,LOCAL,KNOWN,UNKNOWN,PARANOID

[:options]选项:

帮助:man 5 hosts_options

deny 主要用在/etc/hosts.allow定义“拒绝”规则

如:vsftpd: 172.16. :deny

allow 主要用在/etc/hosts.deny定义“允许”规则

如:vsftpd:172.16. :allow

spawn 启动一个外部程序完成执行的操作

twist 实际动作是拒绝访问,使用指定的操作替换当前服务,标准I/O和ERROR发送到客户端,默认至/dev/null

测试工具:

tcpdmatch [-d] daemon[@host] client

-d 测试当前目录下的hosts.allow和hosts.deny

示例

  • sshd: ALL :spawn echo “$(date +%%F) login attempt from %c to %s,%d” >>/var/log/sshd.log

说明:

Ø在/etc/hosts.allow中添加,允许登录,并记录日志

Ø在/etc/hosts.deny中添加,拒绝登录,并记录日志

Ø%c 客户端信息

Ø%s 服务器端信息

Ø%d 服务名

Ø%p 守护进程的PID

Ø%% 表示%

  • vsftpd: 172.16. :twist /bin/echo “connection prohibited”

 

PAM认证机制

PAM相关文件

Ø模块文件目录:/lib64/security/*.so

Ø环境相关的设置:/etc/security/

Ø主配置文件:/etc/pam.conf,默认不存在

Ø为每种应用模块提供一个专用的配置文件:/etc/pam.d/APP_NAME

Ø 注意:如/etc/pam.d存在,/etc/pam.conf将失效

 

pam认证原理

uPAM认证一般遵循这样的顺序:Service(服务)→PAM(配置文件)→pam_*.so

uPAM认证首先要确定那一项服务,然后加载相应的PAM的配置文件(位于/etc/pam.d下),最后调用认证文件(位于/lib/security下)进行安全认证

 

通用配置文件/etc/pam.conf格式

application type control module-path arguments

专用配置文件/etc/pam.d/* 格式

type control module-path arguments

说明:

模块类型(module-type)

control PAM库该如何处理与该服务相关的PAM模块的成功或失败情况

module-path 用来指明本模块对应的程序文件的路径名

Arguments 用来传递给该模块的参数

 

模块类型(module-type)

  • Auth 账号的认证和授权
  • Account 与账号管理相关的非认证类的功能,如:用来限制/允许用户对某个服务的访问时间,当前有效的系统资源(最多可以有多少个用户),限制用户的位置(例如:root用户只能从控制台登录)
  • Password 用户修改密码时密码复杂度检查机制等功能
  • Session 用户获取到服务之前或使用服务完成之后需要进行一些附加的操作,如:记录打开/关闭数据的信息,监视目录等
  • -type 表示因为缺失而不能加载的模块将不记录到系统日志,对于那些不总是安装在系统上的模块有用

 

Control控制:

PAM库如何处理与该服务相关的PAM模块成功或失败情况

两种方式实现:

简单复杂

简单方式实现:一个关健词实现

  1. required :一票否决,表示本模块必须返回成功才能通过认证,但是如果该模块返回失败,失败结果也不会立即通知用户,而是要等到同一type中的所有模块全部执行完毕再将失败结果返回给应用程序。即为必要条件
  2. requisite :一票否决,该模块必须返回成功才能通过认证,但是一旦该模块返回失败,将不再执行同一type内的任何模块,而是直接将控制权返回给应用程序。是一个必要条件
  3. sufficient :一票通过,表明本模块返回成功则通过身份认证的要求,不必再执行同一type内的其它模块,但如果本模块返回失败可忽略,即为充分条件
  4. optional :表明本模块是可选的,它的成功与否不会对身份认证起关键作用,其返回值一般被忽略
  5. include: 调用其他的配置文件中定义的配置信息

复杂详细实现:使用一个或多个“status=action”

[status1=action1 status2=action …]

Status:检查结果的返回状态

Action:采取行为 ok,done,die,bad,ignore,reset

  1. ok 模块通过,继续检查
  2. done 模块通过,返回最后结果给应用
  3. bad 结果失败,继续检查
  4. die 结果失败,返回失败结果给应用
  5. ignore 结果忽略,不影响最后结果
  6. reset 忽略已经得到的结果

 

module-path: 模块路径

  • 相对路径:

/lib64/security目录下的模块可使用相对路径

如:pam_shells.so、pam_limits.so

  • 绝对路径:

模块通过读取配置文件完成用户对系统资源的使用控制

/etc/security/*.conf

注意:修改PAM配置文件将马上生效

建议:编辑pam规则时,保持至少打开一个root会话,以防止root身份验证错误

 

ss -ntl 可查到现已开启的端口号

ss -nt 可查现在登录的客户端

本文来自投稿,不代表Linux运维部落立场,如若转载,请注明出处:http://www.178linux.com/99641

发表评论

登录后才能评论

This site uses Akismet to reduce spam. Learn how your comment data is processed.

联系我们

400-080-6560

在线咨询:点击这里给我发消息

邮件:1823388528@qq.com

工作时间:周一至周五,9:30-18:30,节假日同时也值班