1、SSH端口转发
-
远程端口转发
实验过程
准备三个主机,并检查三个主机的防火墙是否关闭,selinux是否禁用,然后将邮件服务器的主机的配置文件更改为下图所示
打开邮件服务器的配置文件/etc/postfix/main.cf
在邮件服务器上拒绝来自107机器的连接,模拟现实中的防火墙
[root@centos6 ~]#iptables -A INPUT -s 172.18.21.107 -j REJECT
[root@centos6 app]#ssh -R 9527:172.18.21.106:25 -Nf 172.18.21.107
[root@centos6 app]#ss -nt ---发现ssh客户端已经连接到远程的ssh服务器
State Recv-Q Send-Q Local Address:Port Peer Address:Port
ESTAB 0 0 172.18.21.6:58720 172.18.21.107:22
ESTAB 0 64 172.18.21.6:22 172.18.252.32:57431
[root@centos7 app]#ss -nt ---发现ssh客户端和服务器已经建立好隧
道
State Recv-Q Send-Q Local Address:Port Peer Address:Port
ESTAB 0 52 172.18.21.107:22 172.18.252.32:56505
ESTAB 0 0 172.18.21.107:22 172.18.21.6:58720
[root@centos7 app]#telnet 127.0.0.1 9527 ---连接本机的9527端口,就可以和远程的邮件服务器相连
Trying 127.0.0.1...
Connected to 127.0.0.1.
Escape character is '^]'.
220 centos6.magedu.com ESMTP Postfix
[root@centos6 ~]#ss -nt ---发现是中间的ssh客户端连接到了邮件服务器
State Recv-Q Send-Q Local Address:Port Peer Address:Port
ESTAB 0 0 172.18.21.106:25 172.18.21.6:48522
ESTAB 0 64 172.18.21.106:22 172.18.252.32:56112
可以给邮件服务器发一封邮件如下图
在邮件服务器切换到zhang用户,然后输入mail就可以看到邮件了。
-
动态端口转发
实验
在c机器上搭建一个http服务,并且防火墙拒绝a去访问
在A上执行如下命令
[root@centos7 app]#ssh -D 1080 172.18.21.6 ----172.18.21.6为B的ip地址,1080端口是在A上打开的
Last login: Tue Sep 12 19:58:26 2017 from 172.18.252.32
然后在a的图形界面上对filefox(火狐浏览器)进行如下图设置
这样就可以穿过防火墙去连接C了,也可以在字符界面下执行如下命令去访问C
[root@centos7 app]#ssh -D 1080 172.18.21.6 -Nf
[root@centos7 app]#ss -nt
State Recv-Q Send-Q Local Address:Port Peer Address:Port
ESTAB 0 52 172.18.21.107:22 172.18.252.32:56505
ESTAB 0 0 172.18.21.107:54478 172.18.21.6:22
ESTAB 0 0 172.18.21.107:22 172.18.21.6:58720
[root@centos7 app]#curl --socks5 127.0.0.1:1080 http://172.18.21.106
welcome to haerbing
当用firefox访问internet时,本机的1080端口做为代理服务器,firefox的访问请求被转发到sshserver上,由sshserver替之访问internet。
2、ssh服务器的配置文件
[root@centos7 app]#cd /etc/ssh
[root@centos7 ssh]#ls ---这个目录下存放的是服务器各种算法的公
钥和私钥,以及客户端和服务器端的配置文件,公钥和私钥用于连接
时,客户端对服务器端进行身份验证,连接时输入yes,客户端会得到
服务器端的公钥,保存到当前用户的家目录.ssh/known_hosts
文件中,下次连接时先用公钥加密数据传给服务器,如果服务器能够
解开,证明是想要连接的服务器
moduli ssh_host_ecdsa_key ssh_host_ed25519_key.pub
ssh_config ssh_host_ecdsa_key.pub ssh_host_rsa_key
sshd_config ssh_host_ed25519_key ssh_host_rsa_key.pub
ssh服务器端的配置文件为/etc/ssh/sshd_config
Port
为了避免被攻击建议把端口号改掉,默认是22端口
ListenAddress ip
本机的哪个ip地址允许监听22端口,建议这一项改一下。不要所有的地址
LoginGraceTime 2m
连接时两分钟一直不输入密码就退出
PermitRootLogin yes
允许root账号直接连接,建议改为no,改为no后只有普通用户可以连接,但可以su切换为root
StrictModes yes
检查文件的各种属性,权限等
MaxAuthTries 6
如果密码输错3次就退出,是6的一半
MaxSessions 10 同一个连接最大会话
比如用xshell连接后,用复制的方式打开十个终端,就不能再打开了。
PubkeyAuthentication yes
允许基于key验证
PermitEmptyPasswords no
允许空口令验证
PasswordAuthentication yes
基于密码验证,如果关掉只能基于key的验证
GatewayPorts no
启用网关,启用之后就相当于自己是网关,跟自己同一个网段的主机都可以连到本主机,也可以通过本主机去连接到外面的网络
ClientAliveInterval(单位:秒)
连上去之后什么也不干,多长时间断开
ClientAliveCountMax(默认3)
探测次数。连上什么也不干,次数乘以上面的时间,才是真正断开的时间。
UseDNS yes
启用DNS。建议改为no,提高连接速度,不然会把地址方向解析,但由于没有配置dns,解析半天解析不出来才让连接
GSSAPIAuthentication yes 提高速度可改为no
GSSAPI认证,建议改为no,提高连接速度
MaxStartups未认证连接最大值,默认值10
用户个数到达10个就开始拒绝30%,按比例拒绝,到达60个就全拒绝,控制用户连接,最大只能连接60个用户
Banner /path/file
连接时候的提示信息,可以后面跟一个文件,然后编辑这个文件中的内容,就可做为连接提示信息
限制用户登录的办法
AllowUsers user1 user2 user3 --表示允许远程主机以本机的哪个用户的身份登录本主机
DenyUsers ---表示不允许远程主机用本机的哪个用户的身份登录本主机
AllowGroups ---表示允许远程主机以本机哪个组里的用户的身份登录本主机
DenyGroups
具体的解释可以查看帮助man /etc/ssh/sshd_config
135 #Match User anoncvs
136 # X11Forwarding no
137 # AllowTcpForwarding no
138 # ForceCommand cvs server
139 AllowUsers zheng ---在配置文件的最后加上一行就可以了,
表示只允许远程主机以zheng的身份登录本主机,所以远程主机在连
接的时候要知道zheng的密码才能连接到本主机
- ssh服务的最佳实践
禁止使用默认端口
禁止使用protocol version 1
限制可登录用户
设定空闲会话超时时长
利用防火墙设置ssh访问策略
仅监听特定的IP地址
基于口令认证时,使用强密码策略
tr -dc A-Za-z0-9_ < /dev/urandom| head -c 30| xargs
使用基于密钥的认证
禁止使用空密码
禁止root用户直接登录
限制ssh的访问频度和并发在线数
做好日志,经常分析
ssh的日志文件是/var/log/secure,每一次连接日志文件都会有记录。
3、编译安装dropbear示例
ssh协议的另一个实现:dropbear
1、查看是否安装开发包组,如果没有安装就安装
2、解压缩dropbear-2017.75.tar.bz2文件
3、进入dropbear-2017.75
4、cat README cat INSTALL 查看一下服务的信息和安装信息
5、 ./configure --help 查看一下如何执行这个脚本
6、 ./configure --prefix=/app 执行configure脚本
7、 yum install zlib-devel ---执行过程报错,需要安装这个包文件
8、./configure --prefix=/app ---继续执行configure脚本
9、make PROGRAMS="dropbear dbclient dropbearkey dropbearconvert scp"
10、 make PROGRAMS="dropbear dbclient dropbearkey dropbearconvert scp" install
到此安装过程就结束了,下面就是安装私钥和验证服务
11、cd /app/bin ./dropbearkey -t rsa -f dropbear_rsa_host_key---安
装私钥和公钥,这个和sshd服务一样,在/etc/ssh/目录一下也有公钥和私钥。
12、cd /app/sbin ./dropbear -E -p 2222 ---开启这个服务,并指定
端口为2222,-E选项是执行的时候如果报错会在屏幕上显示
13、发现出错,Failed loading /etc/dropbear/dropbear_rsa_host_key ---找不到钥匙
14、 mkdir /etc/dropbear ---创建一个目录
ln -s /app/bin/dropbear_rsa_host_key /etc/dropbear/dropbear_rsa_host_key ---创建一个软连接指向指向
存放钥匙的文件
15、./dropbear -E -p 2222 ---再次执行就可以了,在远程用ssh 172.18.21.107 -p 2222就可以连接到本主机了
16、cd/app bin/ ./dbclient 172.18.21.106 ----验证一下客户端的命
令,发现也可以连接到远程主机
4、AIDE
•AIDE(Adevanced Intrusion Detection Environment)
(高级入侵检测环境)是一个入侵检测工具,主要用途是检查文件的完整性,审计计算机上的那些文件被更改过了。
•AIDE能够构造一个指定文件的数据库,它使用aide.conf作为其配置文件。AIDE数据库能够保存文件的各种属性,包括:权限(permission)、索引节点序号(inode number)、所属用户(user)、所属用户组(group)、文件大小、最后修改时间(mtime)、创建时间(ctime)、最后访问时间(atime)、增加的大小以及连接数。AIDE还能够使用下列算法:sha1、md5、rmd160、tiger,以密文形式建立每个文件的校验码或散列号,也就是哈希运算,用来判断文件的内容是否被更改。
•这个数据库不应该保存那些经常变动的文件信息,例如:日志文件、邮件、/proc文件系统、用户起始目录以及临时目录。
示例
[root@centos7 app]#rpm -q aide
package aide is not installed
[root@centos7 app]#yum install aide
[root@centos7 app]#rpm -ql aide ---查看一下这个软件包都生成了哪些文件
/etc/aide.conf ---配置文件
/usr/sbin/aide ---主程序文件
/var/lib/aide ----数据库文件
/var/log/aide ---日志文件
[root@centos7 app]#cp /etc/fstab f1
[root@centos7 app]#cp /etc/fstab f2
[root@centos7 app]#cp /etc/fstab f3
[root@centos7 app]#ls ---复制三个文件,下步实验时只监控f1和f2文件,f3文件不监控
f1 f2 f3
[root@centos7 app]#vim /etc/aide.conf ---进入这个文件会发现有很
多默认的设置,这里为了实验方便,把默认的都删除了,自己写了一
个设置,指定监控/app目录的mon这些特性,但不监控f3文件
mon = p+u+g+sha512+m+s+b
/app mon
!/app/f3
[root@centos7 app]#aide --help ---查看一下用法
[root@centos7 app]#aide -i ---初始化数据库,也就是生成数据库
[root@centos7 app]#cd /var/lib/aide/
[root@centos7 aide]#ls ---发现数据库文件已经生成
aide.db.new.gz
[root@centos7 aide]#mv aide.db.new.gz aide.db.gz ---要把数据库文件名改成aide.db.gz,才能使用
[root@centos7 aide]#aide -C ---检查文件是否监控的文件是否发生变化和数据库进行对比
AIDE, version 0.15.1
### All files match AIDE database. Looks okay!
[root@centos7 app]#chown zhang f1
[root@centos7 app]#echo 1 > f2
[root@centos7 app]#aide -C
AIDE 0.15.1 found differences between database and filesystem!!
Start timestamp: 2017-09-13 11:13:19
Summary:
Total number of files: 4
Added files: 0
Removed files: 0
Changed files: 2
---------------------------------------------------
Changed files:
---------------------------------------------------
changed: /app/f1
changed: /app/f2
---------------------------------------------------
Detailed information about changes:
---------------------------------------------------
File: /app/f1
Uid : 0 , 1000
File: /app/f2
Size : 595 , 2
Mtime : 2017-09-13 10:55:20 , 2017-09-13 11:13:16
SHA512 : spFcC7zJqC72A03MBygd2sAHLu6W82le , Ortmd680rFfAylgo/ZT52IbCbOWajOYO
[root@centos7 app]#aide -u --更新数据库
[root@centos7 app]#cd /var/lib/aide/
[root@centos7 aide]#ls ---发现又新生成了一个数据库文件,把原
来的删除,把新生成的文件改名后就可以使用了
aide.db.gz aide.db.new.gz
对于没有监控的f3文件,确检查不出来。
aide是检查文件完整性的一个很好的工具,对于那些不改动的文件或目录都可以用aide去监控,比如/usr/bin和/usr/sbin下的二进制程序
5、sudo 授权指定用户在指定主机上运行某些命令
1、 简介
su切换身份:su –l username –c 'command' 切换到某个用户执行命令再切换回原来用户
sudo
•来自sudo包
•man 5 sudoers
•sudo能够授权指定用户在指定主机上运行某些命令。如果未授权用户尝试使用sudo,会提示联系管理员
•sudo可以提供日志,记录每个用户使用sudo操作
•sudo为系统管理员提供配置文件,允许系统管理员集中地管理用户的使用权限和使用的主机
•sudo使用时间戳文件来完成类似“检票”的系统,默认存活期为5分钟的“入场券”,也就是过五分钟再执行sudo,授权某个用户执行哪个命令的的时候又要输密码验证,5分钟之内如果输过一次就不需要再输入了。
•通过visudo命令编辑配置文件,具有语法检查功能,但默认是用vi打开的,没有颜色,可以使用export EDITOR=vim来让其使用vim编辑。如果要长期有效保存到/etc/profile.d目录下的一个文件中。
visudo –c 检查语法
2、配置文件
配置文件:/etc/sudoers, /etc/sudoers.d/,可以把设置放到/etc/sudoers.d/目录下,自己创建一个文件,格式和/etc/sudoers的相同就可以,和/etc/crontab用法类似。
时间戳文件:/var/db/sudo
日志文件:/var/log/secure
配置文件支持使用通配符glob:
?:任意单一字符
*:匹配任意长度字符
[wxc]:匹配其中一个字符
[!wxc]:除了这三个字符的其它字符
\x : 转义
[[alpha]] :字母示例:/bin/ls [[alpha]]*
3、授权规则格式
用户 登入主机=(代表用户) 命令
示例:
wang ALL=(ALL) ALL 表示授权wang用户在所有主机,代表所有人可以执行任何操作
格式说明:
user: 运行命令者的身份
host: 通过哪些主机
(runas):以哪个用户的身份
command: 运行哪些命令
4、别名
Users和runas:
username ----wang zhang root
#uid ---0uid表示root用户
%group_name
%#gid ---%1000gid表示gid为1000的用户
user_alias|runas_alias ---别名
host:
ip或hostname
network(/netmask)
host_alias
command:
command name
directory ---只能指执行特定文件夹下的所有程序
sudoedit ---授权用户去更改sudo策略,也就是可以改sudo的配置文件,用户在用的时候执行的命令是sudoedit /etc/sudoers或者sudoedit /etc/sudoers.d/test
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 ---授权wheel组里的用户能够代表任何人在不输入口令的前提下执行所有操作
示例2
User_Alias NETADMIN= netuser1,netuser2
Cmnd_Alias NETCMD = /usr/sbin/ip
NETADMIN ALL=(root)NETCMD
示例3
User_Alias SYSADER=wang,mage,%admins
User_Alias DISKADER=tom
Host_Alias SERS=www.magedu.com,172.16.0.0/24
Runas_Alias OP=root
Cmnd_Alias SYDCMD=/bin/chown,/bin/chmod
Cmnd_Alias DSKCMD=/sbin/parted,/sbin/fdisk
SYSADER SERS= SYDCMD,DSKCMD 主机名后面=没有写表示代表所有人
DISKADER ALL=(OP) DSKCMD
示例4
User_Alias ADMINUSER = adminuser1,adminuser2
Cmnd_Alias ADMINCMD = /usr/sbin/useradd, /usr/sbin/usermod, /usr/bin/passwd[a-zA-Z]*,!/usr/bin/passwdroot
ADMINUSER ALL=(root) NOPASSWD:ADMINCMD,PASSWD:/usr/sbin/userdel ---表示执行前者操作时不用输入口令,执行后者操作时要输入口令
示例5
Defaults:wang runas_default=tom ---表示不写-u代替谁时,wang用户默认代替的是tom用户执行什么操作
wang ALL=(tom,jerry) ALL ---授权wang用户可以代替两个人执行所有操作,但不写-u时默认代替的是tom
示例6
wang 192.168.175.136,192.168.175.138=(root) /usr/sbin/,!/usr/sbin/useradd
示例7
wang ALL=(ALL) /bin/cat /var/log/messages*
这种写法有个问题,就是wang用户可以用sudo cat /var/log/messages /etc/shadow,为了出现这种情况。可以写成如下格式
wang ALL=(ALL) /bin/cat /var/log/messages*,!/bin/cat /var/log/messages *
5、sudo命令
ls -l /usr/bin/sudo
sudo –i –u wang切换身份
sudo[-u user] COMMAND
-V 显示版本信息等配置信息
-u user 默认为root
-l,ll列出用户在主机上可用的和被禁止的命令
-v 再延长密码有效期限5分钟,更新时间戳
-k 清除时间戳(1970-01-01),下次需要重新输密码
-K 与-k类似,还要删除时间戳文件
-b 在后台执行指令
-p 改变询问密码的提示符号
示例:-p "password on %h for user %p:"
[zheng@centos7 ~]$sudo -p "password on %h for user %p:" cat /etc/shadow
password on centos7 for user zheng:
注意:这些命令都是在切换身份之后,被授权的用户执行的命令。
实验
[root@centos7 sbin]#su - zheng
Last login: Wed Sep 13 09:44:09 CST 2017 on pts/0
[zheng@centos7 ~]$su -l root -c 'cat /etc/shadow'
[root@centos7 profile.d]#visudo ---执行这个命令,默认就会打
开/etc/sudoers文件,并且如果编写的时候有语法错误,在保存的时
候会有提示,进行如下编辑
zheng ALL=(ALL) /bin/mount /dev/sr0/ /mnt/cdrom, /usr/bin/unmout
[root@centos7 profile.d]#visudo -c ---检查一下语法没有错误,用
vim打开这个配置文件时是只读的,可以用wq!强制保存,也可以用
这条命令检查语法错误
/etc/sudoers: parsed OK
[zheng@centos7 ~]$sudo mount /dev/sr0 /mnt/cdrom/ ---发现授权
的时候是严格匹配的,多一个/都执行不了
[sudo] password for zheng:
Sorry, user zheng is not allowed to execute '/bin/mount /dev/sr0 /mnt/cdrom' as root on centos7.magedu.com.
[zheng@centos7 ~]$sudo mount /dev/sr0/ /mnt/cdrom
[sudo] password for zheng:
mount: /dev/sr0 is write-protected, mounting read-only
[root@centos7 bin]#ll /usr/bin/ /bin -d ---这个两个文件是软连接的关系
lrwxrwxrwx. 1 root root 7 Jul 14 11:16 /bin -> usr/bin
dr-xr-xr-x. 2 root root 49152 Sep 11 16:36 /usr/bin/
[root@centos7 profile.d]#cd /etc/sudoers.d/ ---进入这个目录下,创
建一个自己的文件,也可以授权用户,但格式要和/etc/sudoers相同
[root@centos7 sudoers.d]#ls ---默认是个空目录
[root@centos7 sudoers.d]#vim test ---创建test文件,并编辑如下
zheng 172.18.21.107=(tom) /bin/cat /etc/shadow
[root@centos7 sudoers.d]#visudo -f test ---编辑完也可以用visudo
命令打开进行编辑,但要加上-f
zheng 172.18.21.107=(tom) /bin/cat /etc/shadow
[root@centos7 bin]#setfacl -m u:tom:r /etc/shadow ---给tom用户设置一个acl权限,使其可以访问shadow文件
[root@centos7 bin]#getfacl /etc/shadow
getfacl: Removing leading '/' from absolute path names
# file: etc/shadow
# owner: root
# group: root
user::r--
user:tom:r-- ---设置成功
group::---
mask::r--
other::---
[root@centos7 bin]#su - zheng
Last login: Wed Sep 13 14:34:09 CST 2017 on pts/1
[zheng@centos7 ~]$sudo -u tom cat /etc/shadow ---可以看这个文件了
[root@centos7 sudoers.d]#visudo -f test ---设置如下授权
User_Alias NETADMIN = zheng, tom : DBA = zheng
Cmnd_Alias NETCMD = /usr/sbin/ip, /usr/sbin/ifconfig
NETADMIN ALL=(ALL) NOPASSWD:NETCMD
DBA ALL=(ALL) NOPASSWD:/bin/cat /etc/shadow
[root@centos7 sudoers.d]#visudo -c ---检查一下,要求更改权限,
因为前面创建的时候使用vim创建的,所以权限不是要求的权限,如
果用visudo test,权限就不用改了
/etc/sudoers: parsed OK
/etc/sudoers.d/test: bad permissions, should be mode 0440
[root@centos7 sudoers.d]#chmod 0440 test
[root@centos7 sudoers.d]#visudo -c
/etc/sudoers: parsed OK
/etc/sudoers.d/test: parsed OK
执行都是成功的
[root@centos7 sudoers.d]#visudo -f test
Defaults:zheng runas_default=tom ---表示不用指定,默认zheng用户代表的就是tom去执行操作
zheng ALL=(ALL) /bin/cat /var/log/messages*,!/bin/cat /var/log/messages* *
[zheng@centos7 ~]$sudo cat /var/log/messages /etc/shadow
Sorry, user zheng is not allowed to execute '/bin/cat /var/log/messages /etc/shadow' as tom on centos7.magedu.com.
这样就可以避免看shadow文件了
[root@centos7 zheng]#visudo -f /etc/sudoers.d/test
zheng ALL=(ALL) sudoedit ---授权zheng用户能够编辑/etc/sudoers文件和/etc/sudoers.d/test文件
[zheng@centos7 ~]$sudoedit /etc/sudoers.d/test
zheng ALL=(ALL) sudoedit
6、TCP_Wrappers介绍
1、介绍
工作在第四层(传输层)的TCP协议
对有状态连接的特定服务进行安全检测并实现访问控制
以库文件形式实现
某进程是否接受libwrap的控制取决于发起此进程的程序在编译时是否针对libwrap进行编译的
判断服务程序是否能够由tcp_wrapper进行访问控制的方法:
[root@centos7 zheng]#which sshd ---二进制程序名,而不是
服务名
/usr/sbin/sshd
[root@centos7 zheng]#ldd /usr/sbin/sshd |grep "libwrap.so"
libwrap.so.0 => /lib64/libwrap.so.0 (0x00007f2a8273e000)
[root@centos7 zheng]#strings /usr/sbin/sshd |grep "libwrap.so"
libwrap.so.0
[root@centos7 zheng]#ldd `which vsftpd`|grep "libwrap.so" ---受控制
libwrap.so.0 => /lib64/libwrap.so.0 (0x00007fc7f941a000)
[root@centos7 zheng]#ldd `which httpd`|grep "libwrap.so" ---不受控制
总结:有些服务是受tcp_ wrappers控制,有些不受控制,比如http服务就不受控制。
2、TCP_Wrappers的使用
配置文件:/etc/hosts.allow, /etc/hosts.deny
帮助参考:man 5 hosts_access,man 5 hosts_options
检查顺序:hosts.allow,hosts.deny(默认允许)
注意:一旦hosts.allow规则匹配,直接生效,将不再继续,如果不匹配就看hosts.deny,如果都不匹配,默认是允许的。
基本语法:
daemon_list@hostIP: client_list[ :options:option… ]
[email protected]: 172.18.21.106
如果放到hosts.deny文件里,表示拒绝IP地址为172.18.21.106的主机去访问ip地址为172.18.21.107的主机的sshd服务
的107的ip地址
Daemon_list格式
单个应用程序的二进制文件名,而非服务名,例如vsftpd,intelnetd
[root@centos7 zheng]#rpm -ql telnet-server ---比如telnet服务来自
于telnet-server软件包
/usr/lib/systemd/system/telnet.socket ---服务名,开启或者关闭服
务的时候可以用systemctl start telnet.socket
/usr/lib/systemd/system/[email protected]
/usr/sbin/in.telnetd ---应用程序的二进制文件名,开启或者关闭服
务时也可直接运行这个文件,其实用systemctl可以管理这个服务是因
为在/usr/lib/systemd/system目录或者在/etc/systemd/system/目录下
有对应的服务unit文件,而centos6中是在/etc/init.d目录下有很多服务
脚本,使服务受service管理。
/usr/share/man/man5/issue.net.5.gz
/usr/share/man/man8/in.telnetd.8.gz
/usr/share/man/man8/telnetd.8.gz
以逗号或空格分隔的应用程序文件名列表,如:sshd,vsftpd
[email protected],vsftpd: ALL
如果放到hosts.deny文件里,表示拒绝所有外部主机去访问我的ssh
服务的172.18.0.107的地址,访问我的vsftpd服务的所有ip地址。
ALL表示所有接受tcp_wrapper控制的服务程序
主机有多个IP,可用@hostIP来实现控制
如:[email protected]
客户端Client_list格式
以逗号或空格分隔的客户端列表
基于IP地址:192.168.10.1 192.168.1.
基于主机名:www.magedu.com .magedu.com 较少用
基于网络/掩码:192.168.0.0/255.255.255.0
基于net/prefixlen: 192.168.1.0/24(CentOS7)
---注意CIDR表示法只能centos7中使用
基于网络组(NIS 域):@mynetwork
内置ACL:ALL,LOCAL,KNOWN,UNKNOWN,PARANOID
ALL:表示所有的
LOCAL:主机名不带点的就匹配
KNOWN:名字可以解析成ip地址的就匹配
UNKNOWN:名字不可以解析成ip地址的就匹配
PARANOID:正向解析和反向解析不对应的就匹配,正向解析把名字解析成ip地址后反向解析把ip地址解析成名字后,跟前面的名字不对应的就匹配
EXCEPT用法:
示例
vsftpd: 172.16. EXCEPT 172.16.100.0/24 EXCEPT 172.16.100.1
如果放到hosts.deny文件里,表示拒绝172.16这个网段的主机连接到
我的vsftpd服务,除了172.16.100.0/24这个网段不拒绝,但
172.16.100.1这个ip地址又拒绝
示例:只允许192.168.1.0/24的网段主机访问sshd服务
/etc/hosts.allow
sshd: 192.168.1.
/etc/hosts.deny
sshd:ALL
示例:只允许192.168.1.0/24的网段主机访问telnet和vsftpd服务
/etc/hosts.allow
vsftpd,in.telnetd: 192.168.1.
/etc/host.deny
vsftpd,in.telnetd: ALL
示例:拒绝172.18.21这个网段的主机去访问我主机的sshd服务,但如果一个主机有两个IP地址,一个是192.168.25.0/24网段,一个是172.18.0.0/16网段,那这个主机还是会连接到我的主机。
/etc/host.deny
sshd: 172.18.21.
3、[:options]选项:
帮助:man 5 hosts_options
deny 主要用在/etc/hosts.allow定义“拒绝”规则
如:vsftpd: 172.16. :deny
allow 主要用在/etc/hosts.deny定义“允许”规则
如:vsftpd:172.16. :allow
spawn 启动一个外部程序完成执行的操作
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
需要注意的是这里date后要加两个百分号,并且用冒号也要转义
twist 实际动作是拒绝访问,使用指定的操作替换当前服务,标准I/O和ERROR发送到客户端,默认至/dev/null
vsftpd: 172.16. :twist /bin/echo “"connection prohibited"
只要加选项twist无论放到哪个文件里都表示拒绝的意思,拒绝的同时会给客户端发送消息