day2-ssh+tcp warappers+pam
LINUX安全应用
ssh访问控制
TCP Wrappers防护
PAM可插拔认证
PAM认证案例实践
SSH登录 有哪些隐患
不安全的网络环境
密码嗅探
键盘记录
恶意猜 解及攻击
账号枚举
暴力破解密码
提高 SHH的安全性
启用SSH黑名单、白名单
仅允许、仅拒绝
验证客户端密钥
客户端存私钥、服务器存公钥
其他控制手段
防火墙、TCP防护、PAM认证
yum install -y expect
#!/bin/bash
pass=root
newpass=root1
for IP in $(cat /root/bin/ip.list)
do
expect <<EOF
spawn ssh root@${IP} "echo $newpass" | passwd –stdin root"
expect "(yes/no)?" {
send "yes\r"
expect "password:"
send "${pass}\r"
} "password:" { send "${pass}\r" }
expect eof
EOF
done
sshd基本安全配置
配置文件/etc/ssh/sshd_config
Port 22 修改端口号默认为22
Protocol 2
ListenAddress 192.168.100.100
PermitRootLogin no 是否允许root用户登录
PermitEmptyPasswords no
StrictModes yes 检查用户相关环境信息,若不匹配拒绝登录
MaxAuthTries 6 最大的尝试次数
MaxSessions 10 最大的会话连接数
UseDNS no 取消DNS反记录
LoginGraceTime 2m 在输入密码的时间默认2分钟
sshd黑/白名单配置
配置文件/etc/ssh/sshd_config
DenyUsers USER1 USER2 ..
AllowUsers USER1HOST USER2 ..
DenyGroups GROUP1 GROUP2 ..
AllowGroups GROUP1 GROUP2 ..
#for I in {1..254}
do
echo –e "192.168.100.$i\ser$i.test.com" >>/etc/hosts
done
sshd的登录验证方式
口令验证
检查登录用户的口令是否一致
密钥验证
检查客户端私钥与服务器上的公钥是否匹配
PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_Keys 公钥库:存放授权客户机的公钥文本
SSH无密码登录
使用工具ssh-keygen生成SSH密钥对
可以手动指定加密算法-t rsa 或 –t dsa
若不指定,默认采用RSA加密
#ssh-keygen
id_rsa id_rsa.pub
#ssh-copy-id –i root@192.168.100.100
vim authorized_keys 删除你定义的一行
cat .ssh/known_hosts
提高OpenSSH服务安全
基本安全策略——禁止root、禁止空口令
为SSH访问配置"仅允许"策略
分别实现密钥验证倒入、免密码登入、禁用密码验证
为私密加密码用
先生成 密钥ssh-keygen
ssh-copy-id –i IP地址
ssh-agent
将出的ssh-agent输出的信息执行一次
ssh-add
ssh IP地址
TCP Wrappers防护
通用的保护机制
统一的保护策略
多种TCP服务共用,提高效率
作用
方式一:由tcpd或xinetd提供统一保护
超级服务器xinetd
方式二:各服务独自调用libwrap.so模块
典型服务:vsftpd、sshd、xinetd
ldd `which sshd vsftpd `|grep wrap
防护规则存放在
/etc/hosts.allow
/etc/hosts.deny
策略应用规律
先检查hosts.allow,有匹配则允许
否则再检查hosts.deny,有匹配则拒绝
若两文件中均无匹配,默认为允许
规则格式
服务列表:客户机列表
ALL为所有
vim /etc/hosts.deny
vsftpd:ALL
DenyHosts阻止SSH攻击
安装及使用请参照README.txt
dneyhosts.cfg配置要点
SECURE_LOG=/var/log/secure
HOSTS_DENY=/etc/hosts.deny
PURGE_DENY=2h 2小时
BLOCK_SERVICE=sshd 服务名
DENY_THRESHOLD_INVALID=3 无效账户尝试登陆次数
DENY_THRESHOLD_VALID=5 有效账户尝试登陆次数
DENY_THRESHOLD_ROOT=2 ROOT用户尝试登陆次数
tar xf DenyHosts-2.6.tar.gz
cd DenyHosts-2.6
python setup.py install
cd /usr/share/denyhosts/
cp denyhosts.cfg-dist denyhosts.cfg //建立配置文件
cp daemon-control-dist daemon-control //建立控制脚本
chmod 700 daemon-control
ln -sf /usr/share/denyhosts/daemon-control /etc/init.d/denyhosts
chkconfig --add denyhosts
[root@localhost init.d]# grep -Ev "^#|^$" /usr/share/denyhosts/denyhosts.cfg
############ THESE SETTINGS ARE REQUIRED ############
SECURE_LOG = /var/log/secure
HOSTS_DENY = /etc/hosts.deny
PURGE_DENY = 4h //清除超过4小时的封锁条目
BLOCK_SERVICE = sshd //保护sshd服务
DENY_THRESHOLD_INVALID = 5 //无效用户登录失败5次后封客户机IP
DENY_THRESHOLD_VALID = 10 //有效用户失败10次后封客户机IP
DENY_THRESHOLD_ROOT = 1
DENY_THRESHOLD_RESTRICTED = 1
WORK_DIR = /usr/share/denyhosts/data
SUSPICIOUS_LOGIN_REPORT_ALLOWED_HOSTS=YES
HOSTNAME_LOOKUP=YES
LOCK_FILE = /var/lock/subsys/denyhosts
############ THESE SETTINGS ARE OPTIONAL ############
ADMIN_EMAIL = root@admin.com //邮件告警设置(可远)
SMTP_HOST = localhost
SMTP_PORT = 25
SMTP_FROM = DenyHosts <nobody@localhost>
SMTP_SUBJECT = DenyHosts Report
AGE_RESET_VALID=5d
AGE_RESET_ROOT=25d
AGE_RESET_RESTRICTED=25d
AGE_RESET_INVALID=10d
######### THESE SETTINGS ARE SPECIFIC TO DAEMON MODE ##########
DAEMON_LOG = /var/log/denyhosts
DAEMON_SLEEP = 30s
DAEMON_PURGE = 1h
######### THESE SETTINGS ARE SPECIFIC TO ##########
######### DAEMON SYNCHRONIZATION ##########
启动服务
/etc/init.d/denyhosts start
查看日志
tailf /var/log/secure
查看hosts.deny文件
tailf /etc/hosts.deny
[root@localhost init.d]# tail -1 /etc/hosts.deny
sshd: 192.168.100.1
PAM可插拔认证
关于用户认证
如何识别真正的用户
如何控制合法用户对资源的访问
应用如何降低认证开发成本
Pluggable Authentication Modules
1995年,由sun公司最好初提出
应用》》接口》》模块
三A认证
Authentication:身份认证 你是认证
Authorization:授权 你能干什么
Audit:审计 你干了什么
配置文件/etc/pam.d/
查看/etc/pam.d/su
account required pam_nologin.so
第一列是认证类型,可用的选项有:
account:执行基于用户管理的非认证行为操作。典型的,它可以限制用户的登录时间、可用的系统资源
auth:这个模块提供了验证用户的两个方面。首先,它认证用户是他声称的那个人(比如:密码验证);其次,它赋予用户组成员身份或其他权限。
password:当用户修改密码时,需要这个模块。
session:当赋予用户某些服务之前或之后,要执行哪些操作。例如:用户在访问数据执行的日志操作
第二列是控制方式,可用选项有:
required:检查结果失败,最终一定会失败,但是仍然检查后续项
requisite:与required类似。只不过该项检查失败,立即停止后续检查项
sufficient:该项检查成功,立即通过,不再检查后项。如果该检查失败,也不意味着最好终会失败
optional:可选
include:包含另一个文件 的内容
第三列是调用的模块,这些模块位于/lib64/security/目录下
vim /etc/pam.d/su
auth sufficient pam_rootok.so 将该行注释,su到普通用户需要密码
# Uncomment the following line to implicitly trust users in the "wheel" group.
#auth sufficient pam_wheel.so trust use_uid 去除该行注释,若是wheel组里的用户,直接su可切换到ROOT,且无需密码
# Uncomment the following line to require a user to be in the "wheel" group.
#auth required pam_wheel.so use_uid 去除该行注释,只有wheel组里的用户可以su到ROOT
限制用户登录终端
/etc/security/access.conf
: jack : tty2
/etc/pam.d/login
account required pam_access.so 注意顺序
限制对系统资源的访问
配置login,启用pam_limits.so模块
配置limits.conf访问策略