一。TCP WRAPPERS
1.TCP WRAPPERS的作用是什么?
保护服务器的一些服务,可以限制客户端访问这些服务。
TCP WRAPPERS支持那些服务?判断一个服务是否支持TCP WRAPPERS的保护有那些方法?
查看该服务是否加载libwrap,查看该服务是不是基于xinetd服务。
ssh ,vsftpd,telnet,http(不支持wrap模块)ipop3
2.检查服务是否支持被TCP WRAPPERS保护
3、防护规则存放在
/etc/hosts.allow
/etc/hosts.deny
策略应用规律
先检查hosts.allow,有匹配则允许
否则再检查hosts.deny,有匹配则拒绝
若两文件中均无匹配,默认为允许
4、规则的格式
服务列表:客户机列表
关于客户机地址
可使用通配符 ? 和 *
网段地址,如 192.168.4.
或者192.168.4.0/255.255.255.0
区域地址,如 .tarena.com
5、例:
仅允许以下客户机访问VSFTPD
网段:192.168.4.0/24
IP范围:192.168.7.1-192.168.7.20
客户端进行测试,客户端的IP是192.168.1.0网段的,查看是否可以访问vsftpd服务。
二。denyhosts
denyhosts是python语言程序,借用tcp_wrapper程序来进行主机防护。作用:防止暴力破解服务器用户密码。
1.解压软件包,安装denyhosts软件,默认是安装到/usr/share/denyhosts目录
2.配置
相关参数解释:
############ THESE SETTINGS ARE REQUIRED ############
SECURE_LOG = /var/log/secure
HOSTS_DENY = /etc/hosts.deny
PURGE_DENY = 1w #过多久后清除已经禁止的,其中w代表周,d代表天,h代表小时,s代表秒,m代表分钟
BLOCK_SERVICE = sshd
DENY_THRESHOLD_INVALID = 3 #允许无效用户失败的次数
DENY_THRESHOLD_VALID = 5 #允许普通用户登陆失败的次数
DENY_THRESHOLD_ROOT = 5 #允许root登陆失败的次数
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 = [email protected] #若有ip被禁用发邮件通知
SMTP_HOST = localhost
SMTP_PORT = 25
SMTP_FROM = DenyHosts <192.168.0.1@localhost>
SMTP_SUBJECT = DenyHosts Report
AGE_RESET_VALID=1d #有效用户登录失败计数归零的时间
AGE_RESET_ROOT=1d #root用户登录失败计数归零的时间
AGE_RESET_RESTRICTED=1d
AGE_RESET_INVALID=10d #无效用户登录失败计数归零的时间
######### THESE SETTINGS ARE SPECIFIC TO DAEMON MODE ##########
DAEMON_LOG = /var/log/denyhosts
DAEMON_SLEEP = 30s
DAEMON_PURGE = 1h
设置启动脚本
设置开机启动
3.启动服务,出现一下错误,解决的方案。
4. denyhos使用
如果不想让主机拒绝某一个ip,做法如下sshd: 192.168.1.40 #允许192.168.1.40访问该主机的ssh服务
客户端进行测试
如果想拒绝某一个ip同样使用vi /etc/hosts.deny添加就Ok
客户端进行测试
三。PAM可插拔身份认证模块
1.PAM配置文件存放目录位置。
2.PAM模块存放的目录位置
3.配置文件的内容如下
第一列是认证类型,可用的选项有:
account: 执行基于用户管理的非认证行为操作。典型的,它可以限制用户的登陆时间、可用的系统资源。
auth: 这个模块提供了验证用户的两个方面。首先,它认证用户是他声称的那个人(比如用密码验证);其次,它赋予用户组成员身份或其他权限。
password: 当用户修改密码时,需要这个模块。
session: 当赋予用户某些服务之前或之后,要执行哪些操作。例如用户在访问数据时执行写日志操作。
第二列是控制方式,可用的选项有:
required: 检查结果失败,最终一定会失败,但是仍然检查后续项
requisite: 与required类似。只不过该项检查失败,立即停止后续检查项。
sufficient: 该项检查成功,立即通过,不再检查后续项。如果该项检查失败,也不意味着最终会失败。
optional: 可选
include: 包含另一个文件的内容
第三列是调用的模块,这些模块位于/lib64/security/目录下
4.模块对应查找的文档。
5.以su为例子,对pam模块进行分析
(1)root用户可以不输入密码就切换成其他用户,原因是pam_rootok.so模块是判断当前用户UID是否是0(也就是root用户),那么就直接返回成功(sufficient是充分条件),给pam_rootok.so模块行添加注释后,进行测试。
pam_rootok.so模块行添加注释后,测试发现root用户切换到其他用户的时候也需要输入密码,正确输入密码后可以登录。
(2)如果一个用户是wheel组的成员,那么,该用户可以直接执行su,而不用输入密码:pam_whell.so模块是只要用户输入whell组,那么就满足条件,可以执行该操作。
pam_whell.so模块行去掉注释行
测试
(3)只有wheel组的成员才可以切换成root用户
required是一个必要条件,不是充分条件,lj是wheel组的,但是切换到root用户还是要输入密码。
tom不是 wheel组的,而且required是一个必要条件,所以tom用户切换到root用户即使输入正确的密码提示也是错误。
6.例二:禁止tom从tty2登陆
不管是切换成为tom,还是以tom身份登陆,都被禁止。
7.例三:只允许tom用户打开两个文件
查看/etc/pam.d/system-auth中包含
session required pam_limits.so
# vim /etc/security/limits.conf ,尾部增加
tom hard nofile 2
测试
8.例四:创建文件/etc/vsftpd/ftpgrps,该文件中的组不能访问ftp
验证,tom登陆ftp,登陆不成功,检查/var/log/secure日志
查看日志