第三十五天、 自主学习提前笑傲总结:
- tcpdump -i eth0 -nn -X port 21 2.非对称加密:A PA, SA ; B PB, SB --> 例如A向B发送数据,所以数据到B后需要用B的私钥进行解密,所以A加密过程使用的是B公开的公钥;同理,数据双向返回后,B发往A的数据需要A来解密使用的是A的私钥,所以B端发送数据使用的是A的公钥进行加密!! --> 第二种,就是为了确认数据的来源是否可靠准确:A发送数据到B,B事先有A的公钥,A用私钥对数据进行加密后,B可用A的公钥进行解密,从而推断数据来源准确性(理论上)
3.rpc远程进程调用程序 ,客户端通过调用rpc获取指定服务的随机端口,再去访问 4.$0在shell中表示参数第一个即命令 5、在不重启服务的情况下重读配置文件 kill -1 pid killall -1 pname :都是通过信号的方式重读、终端、激活、告知 6、还是要注意在特定目录下手动实现一些命令实现的方式时,selinux的安全上下文是一个值得注意的问题 7.systemctl daemon-reload ... systemctl reload service CentOS6 : service servicename reload 在不重启服务的情况下重新加载服务配置文件
8.使用socket文件的方式,非独立运行服务,收到systemd监听 -->centos7 9.centos7中对于文件也进行了监控-->selinux,所以通过命令如passwd修改过的文件没有标签,selinux此时没有检测,当下次进入时无法通过密码登陆
***10.生产环境案例:当通过监控或者其他手段发现某目录(/usr/sbin或/usr/bin等存放大量二进制程序文件)下的所有文件md5值都发生了变化,思考二进制文件遭到破坏或者破解,遭到黑客攻击,考虑其他文件同样可能遭到破坏:木马病毒等破坏性程序依旧在系统上运行,即使将正确的文件拷贝也没有任何意义,应该及时将数据文件全部拷贝出来做备份,然后重装稳定的操作系统,保护数据是优先策略 :1.在沟通能断网的前提下马上切断被黑服务器的外网(即停掉网卡,),然后根据不同的服务进行相关数据的备份(冷静思考如数据库则备份数据库数据;web服务则备份像nginx的配置文件以及数据文件;文件共享服务的共享文件等!)
Centos5:串行启动
/etc/rc.d/rcX.d/SxxDaemon
Centos6:有关联的服务串行启动。无关联的并行。network httpd rpc(111) nfs
Centos7:全部并行。
SysV Xinted
Systemd
init /etc/inittab /etc/rc.d/rc /etc/rc.d/rcX.d /etc/rc.d/rc.sysinit
systemd /usr/lib/systemd/system 每个服务最主要的启动脚本设置,类似于之前的/etc/init.d/
当前启动: Centos6及之前:service(/etc/init.d) daemon start Centos7: systemctl start daemon1[.service] [daemon2[.service]]
当前关闭: Centos6及之前:service(/etc/init.d) daemon stop Centos7: systemctl stop daemon1[.service] [daemon2[.service]]
当前重启 Centos6及之前:service(/etc/init.d) daemon restart Centos7: systemctl restart daemon1[.service] [daemon2[.service]]
当前状态 Centos6及之前:service(/etc/init.d) daemon status Centos7: systemctl status daemon1[.service] [daemon2[.service]]
条件式重启:若原本是关闭,则忽略重启请求 Centos6及之前:service(/etc/init.d) daemon condrestart Centos7: systemctl try-restart daemon1[.service] [daemon2[.service]]
重载或重启服务:先加载,再启动 systemctl reload-or-restart name.service 重载或条件式重启服务: systemctl reload-or-try-restart name.service
systemctl list-units -t service [-a 显示所有,不加只显示激活的]
systemctl list-unit-files -t service 查看开机自启动的服务 chkconfig --list
init rc.d/rcX.d service chkconfig kill
切换运行级别 systemctl isolate name.target
RHCE第一道考试题,必须准确详细记住并操作: Centos7破解root口令:
按e进入编辑内核,在Linux16行尾添加 rd.break ,即在解开镜像文件的时候中断,所以并不挂载真正的根文 件系统,所以 ctrl + x进入后,此时根还是只读挂载模式,
所以首先要准确知道自己操作系统的根分区是挂载在哪个文件系统上的
1.mount 查看挂在情况(如/dev/sda2 -->/sysroot) 此时表示进入后根分区实际是挂载在/sysroot文件系统下,所以意味着要切根;
2.mount -o remount,rw /sysroot 因为通过上一步查看得知目前的根是以只读的方式挂载的;
3.chroot /sysroot;
4.passwd root ; 因为使用命令方式修改密码在selinux开启的状态下不能被标识,所以修改后的密码文件是没有selinux标签的?,所以要 :
5.touch /.autorelabel ;exit
Centos7修复:修改任何配置文件或者是服务文件、系统文件都必须一定要提前备份 A 1.grub2-mkconfig -o /boot/grub/grub.cfg ; 修复其他损失文件 grub2-install /dev/sda rpm2cpio ... |cpio -id
2.如果删除boot ,手动输入 insmod xfs, root=(hd0,1) 直接指定系统的根分区 ; mount光盘, rpm -ivh kernel.... --force 重新加载安装内核、生成镜像文件
3.内核5.5操作系统之前版本的可以使用编译一个c程序,提权 -->有时间研究一下原理逻辑
B.加密算法、
4.telnet-server 端口23,telnet是xineted管理服务,所以启动方式 /etc/init.d/xineted restart ,,telnet 默认拒绝root用户 ftp21 , 5.无法从指纹重新生成数据,单向不可逆,理论不可反向破解
6.哈希算法-单向散列不可逆; sha1sum、 md5sum校验文件的md5值是否变化(内容变,md5值变):使用相同的算法得出的的摘要长度一定相等,但是不同数据摘要一定不一样! 1.对源文件或者下载文件进行哈希值校验 2.重点优化加密: key(data+Sa(hash(data)))+Pb(key) :key是对称加密即会话密钥session_key,对对称加密加密 ,对称密钥加密解密快,优化原理,对大数据内容只使用了一次公钥加密数字签名,之前先使用哈希算法对数据加密,然后使用私钥对哈希值数字签名,最后再加一个使用对方公钥数字签名后的口令key 3.生产环境思考原理:例如使用sha512sum等算法将哈希值保存在一个统一的文件中,此后使用工具或者监控等手段进行比对以确认数据是否发生变化 sha512sum f1.log >> hash.txt (自动化实现后续) md5sum | sha512sum --check hash.txt -->返回 hash.txt ok 意味着正常
rpm -V(大写V) 包或安装后的命令 :底层使用的原理就是md5sum在安装时将每个文件的hash值存放在rpm数据库中,使用此命令时就是与数据库中的hash值进行比对:T表示mtime, S表示内容,5就是md5;没有S5即内容没有变化
find /etc/sysconfig/ -type f |xargs sha512sum - :使用此方式实现简单批量统计在此算法下的哈希值 find ... |xargs cmd ...
*** 注意:使用find的目的就是将文件的绝对路径存放在hash值的文件中,这样在使用sha512sum或者其他校验命令的时候就不用考虑在哪个当前目录下了!!
第三十七天 7.一个十六进制的数等于4位的二进制 8.DH加密:生成会话密钥即密钥交换协议,即用来传送对称加密密钥:对称加密第一次传送是明文,否则无法解密 A:整数a, 大素数 p 私有 x B: 整数a, 大素数 p 私有 y
A: a^x%p 得到的值发送给B --> B [(a^x%p)^y]%p = a^(xy)%p B: a^y%p 得到的值发送给A --> A [(a^y%p)^x]%p = a^(xy)%p
8.使用gpg --gen-key生成非对称加密钥匙对: 使用对方公钥加密前必须对数据进行备份,防止加密失误或者忘记密码导致数据丢失 gpg -e 加密 (encrypt) 公钥加密,,私钥签名 gpg -d 解密 (deciphering) gpp -k 查看公钥 gpg -K 查看私钥 以此来理解非对称加密的应用过程 (rm 一定要谨慎使用); gpg版本不同,导出导入公钥的时候不正确!! --export 如果不指定具体公钥就全部导出 ***gpg -a --export 十六进制keyid > file 具体指定key导出
必须是使用用户单独登录,不能使用su切换再使用gpg --gen-key
ssl/tls协议:国际标准加密和身份认证协议 openssl passwd -1 -salt 盐一样,密码一样
(cmd &)丢到后台另开shell ; {cmd ;}在当前shell下 (umask 077; ...生成私钥) --针对一次性,在生成密钥对的时候为了确保权限安全而使用单独开启umask!
DH: Alice a=5,p23,x=6 bob a=5,p23,y=15 A:(5^6)%23=8 B:(5^15)%23=19
A:(19^6)%23=2 B:(8^15)%23=2
A (Pa Sa Pb) B(Pb Sb Pa) C(Pa Pb Sc Pc) Pa Sa Pb Sb a -> b Pb(data)--> Sb|Pb(data) > data
b -> a Pa(data) --> Sa|Pa(data) > data
1G des 2G 加密要1分钟 解密要8分钟 1G rsa 1G 加密要4分钟 解密需要64小时
A->B
Pb[Sa(data)]
Pb{data+Sa[hash(data)]}
key{data+Sa[hash(data)]}+Pb(key)
[root@nanyibo etc]# find /etc/sysconfig/ -type f -exec sha512sum {} ; > /app/all.sha512
S file Size differs
M Mode differs (includes permissions and file type)
5 digest (formerly MD5 sum) differs
D Device major/minor number mismatch
L readLink(2) path mismatch
U User ownership differs
G Group ownership differs
T mTime differs
P caPabilities differ
liubei guanyu guanyu -> liubei
严重注意:任何情况下都不要删除服务文件或者系统文件: 任何一个文件丢失都有可能是致命的 比如 gpg S.gpg-agent 7.***gpg:重要的实际应用,生产环境个人应用多 :centos5和centos6可以互传,centos7不可以 注意: 1.导出公钥 gpg -a --export [ID] > key 2.centos5\6等版本的操作系统上使用gpg生成密钥的时候,建议是在本地机器上操作,并且必须频繁晃动鼠标或者打键盘
liubei: gpg --gen-key 使用gpg生成密钥对;导出公钥到liubei.pub ; 将公钥传送到关羽主机
gpg --list-keys
gpg --export -r 十六进制Keyid > liubei.pub 必须使用 >
scp -p liubei.pub root@remoteip:/home/guanyu/
gpg -o letter -d letter.gpg
guanyu: 接收公钥并导入liubei.pub公钥; 使用 gpg --import liubei.pub gpg --list-keys; gpg -k ; gpg -K == gpg --list-secret-keys gpg --verify file.gpg :使用对方公钥对对方加密文件进行签名认证 echo "jinzhou lost" > letter gpg -e -r liubeikey letter -->自动生成加密后文件letter.gpg scp letter.gpg root@remoteip:/home/liubei
liubei: gpg -o letter -d letter.gpg 解密后的文件以及选项必须在前面
删除公钥 gpg --delete-key liubeikey 删除私钥 gpg --delete-secret-key liubeikey
rpm -K 软件包名 签名检测
8.SSL/TLS
9、重点:部署CA中心,访问CA中心:
1.注意:证书就是公钥(加密申请、签名生成、回传)
10、ssh -t ttylocal ttyremote :# 通过伪装ttylocal终端的方式来连接ttyremote主机,类似×××
创建CA 1.根据ca数字证书的默认配置文件来实现:/etc/pki/tls/*
1.touch /etc/pki/CA/index.txt 生成证书索引数据库文件; echo 00 or 01 >/etc/pki/CA/serial 指定第一个颁发证书的序列号 2.生成私钥 [root@ca CA]# (umask 066;openssl genrsa -out private/cakey.pem -des3 2048) #因为申请证书数字签名需要私钥,私钥不能被其他人或组有任何权限,所以在当前shell下另开shell环境对当前操作执行,修改umask ( &) ; { ;}不能剥离shell
3.生成公钥(证书) [root@ca CA]# openssl req -new -x509 -key private/cakey.pem -out cacert.pem -days 10950 1.req表示申请证书文件 ,genrsa生成密钥; 2.-x509选项表示自签名证书 2.有个印象,在后面的集群学习中会用到将私钥和证书合并到一个文件中:cat cakey.pem cacert.pem > all.pem (文件合并简单实用)
WEB申请证书 1.生成私租 :只要自己不是CA中心,证书命名以及位置存放不依赖/etc/pki/tls/openssl.cnf,只有是CA签发中心才会依赖此配置的限制要求; 但是不能乱放的原因依赖selinux对文件的期望值! [root@web CA]# (umask 066;openssl genrsa -out private/app.key 2048)
2.生成CSR请求文件(基于私钥生成的公钥数字证书请求文件) [root@web CA]# openssl req -new -key private/app.key -out app.csr
3.将CSR发送给CA [root@web CA]# scp app.csr root@172.18.250.224:/etc/pki/CA
4.在CA将CSR签成证书 [root@ca CA]# openssl ca -in app.csr -out certs/app.crt -days 365
5.CA将证书发送WEB [root@ca CA]# scp certs/app.crt root@172.18.250.245:/etc/pki/CA
6.重点再理解并使用对称加密、非对称加密、单向散列(hash)结合使用;DH算法-->生成会话密钥(公式理解熟记,协商内容,以及后续通信数据的继续加密方式非对称);
ssl/tls : openssl开源项目实现, 分两个阶段 1.握手阶段,实际实现客户端和服务器端互相验证身份(利用数字证书进行身份认证),并协商通信中使用的安全参数、密码套件、以及主密钥,后续通信使用的所有密钥都是通过MasterSecret生成。
2.应用阶段:通信中使用双方握手阶段协商好的密钥进行加密通信。
7.小细节;ssh远程登录时不指明连接用户时使用的是本地当前用户进行连接,如果远程服务器没有此用户,永远连接失败(拒绝) 8.软件、工具都是基于底层原理实现,必须ansible软件实现大批量统一管理执行,前提是完成ssh-keygen基于key的验证,后续使用软件可以批量直接执行相关操作; 以此总结:必须熟练掌握原理、核心基础知识,通过此知识去搜索并使用相关工具、软件实现高效工作
使用shell脚本格式 #!/bin/bash user=$1 remotehost=$2 password=$3 expect << EOF spawn ssh-copy-id -i ~/.ssh/xxx.pub $user@$remotehost :实践应该场景复制公钥Key: spawn ssh-copy-id -i ~/.ssh/xxx.pub $1@$2 ,进行脚本变种来实现ssh基于key验证的前期自动化工作,后续进行自动化 expect { "yes/no" { send "yes\n" ;exp_continue } "password" { send "$password\n" } } expect "]#" { send "useradd liubei\n" } expect "]#" { send "echo redhat|passwd --stdin liubei\n" } send "exit\n" expect eof EOF
#构建文件格式, ip user password ,使用awk取相应字段值保存在变量中,并使用以上脚本进行调用赋值变量,借助循环实现大批量不同主机不同密码的读取登录实现,为基于ssh key验证做自动化准备 #或者在安装系统的时候自制脚本,实现将公钥写入到系统用户家目录下authorized_keys
9.并行运维工具pssh(提供多种功能命令) :学习以此来基于原理查找合适工具(包)和软件 -->×××,到国外技术网站寻求更好更高级的技术知识和工具 10.ssh端口转发之远程转发-利用隧道反向穿透,fcn也可实现 ;防火墙有自动链路检测机制,能够通过防火墙出内网访问外网,也就能从外网穿防火墙回来 1.在无需更改防火墙的或者没有更改防火墙职权的情况下,通过此远程端口转发实现反向穿透; 2.假如防火墙规则规定内网只能通过80去访问外网,那么就思考将远程sshd服务器的端口改为80,在使用远程端口转发命令时,要明确指定-p serverIP:80,指明端口为80
11.涉及服务配置以及各种重要数据文件修改等,必须 cp 备份: cp file1{,.bak} -->复制之后的文件是 file1.bak 注意:举例如apache服务、DNS(named)服务都是在安装的时候根据rpm -q --scripts安装脚本生成非交互式登录的用户和组,在复制的时候使用cp -a file{,.bak}保留相关元数据
12.提前编写脚本,实现发现连接异常失败ip并使用防火墙规则禁用:最好是配合计划任务实现
检查防火墙的策略重复问题,如果已经存在,应该不再添加:在awk中对即将要封掉的ip进行判断是否再次添加到防火墙
#!/bin/bash
while true;do
awk '/Failed password/{print $(NF-3)}' /var/log/secure |awk '{ip[$1]++}END{for(i in ip){if(ip[i]>=10){system("iptables -A INPUT -s "i" -j REJECT")system("echo Time: date +%F-%T
IP:"i" Num:" ip[i]" Rjected Log:/var/log/rejected.log")system("echo Time: date +%F-%T
IP:"i" Num:"ip[i]" Rejected! >>/var/log/rejected.log")}}}'
sleep 5m
done
第三十八天、 附加信息:详细了解Linux用户空间、内核空间
重要习惯:涉及要服务等重要配置文件更改必须先备份
1.ssh -x图形化协议,在本地开启一个图形化,比如进行oracle等复杂安装与配置的软件,目标必须安装 "Destop" "x windows sysem" 2.ssh-keygen --> ~/.ssh/id_rsa id_rsa.pub 基于ssh key验证 ssh-copy-id -i key.pub 3.xshell开启图像化支持:新建->隧道->主机->开启x11-xmanager 4.rsync -av #注意在使用rsync srouce remote@xxxx: 源目录如果不加结束“/"表示复制整个目录到目标主机,如果加"/"表示复制目录下的文件 5修改完grub.cfg 后必须执行grub2-mkcofnig -o /boot/grub/grub.cfg 6.配置yum配置文件的时候,必须要注意指定仓库路径的时候repodata目录在哪就指定到哪 7.谨记关于telnet此类非独立服务,由xineted管理,所以安装完成后chkconfig telnet on ; 重启/etc/init.d/xineted服务 文件 /etc/xineted.d/..
二、端口转发 1.重点理解反向穿透,在跳板机上执行命令 ssh -R #结合老王视频进行原理渗透
ssh -b
XSHELL
SSH协议作用在二、三、四层 ; DNS作用在七层 ; TCP/IP结构体系概括七层为四层
使用密钥登录ssh ssh-keygen ssh-copy-id -i id_rsa.pub root@centos7 ssh-keygen -i -f Identity.pub >> .ssh/authorized_keys
重设私钥签名时的密码 ssh-keygen -p
scp filename username@ip[hostname]:/remotepath scp username@ip[hostname]:/remotepath/filename /localpath -r :递归 -p :保持文件的原属性 -q :静默 -P :指定远程主机监听的端口,当默认端口修改后通常指定
rsync (increment 增量式) :rsync在复制时,源目录如果不加/以结束,表示将整个目录复制到远程,否则表示 将目录下的其他子目录或者文件复制到远程 rsync -av /etc remote:/dir :比scp更快,增量复制,注意权限和链接以及属性
实用技术: 利用pssh在多台主机上执行脚本 :配合利用自己编写的指定网段搜索在线主机的方式、nmap全网搜索在线主机的方式使用正则将主机ip保存到指定文件 1.写脚本 2.传脚本 :要执行的脚本必须事先在对应的远程主机上 3.将文件发往多台主机 pscp.pssh -A -h ip.txt /app/installftp.sh /app 3.执行脚本 pssh -A -h ip.txt -i "/app/installftp.sh" -H指定单台主机ip pssh .. -p -i :开启多进程的方式,可以配合 & 放入后台更快执行 4.从多台远程主机拷文件到本地:适应于配合以计划任务实现多服务器收集信息于本地
pslurp -A -h /app/ip.txt -L /app /etc/passwd . :注意最后的.可以换成从远程主机拷贝下来的文件的重新命名,但是必须写
端口转发 :跳板机都充当了客户端和服务端,走的流量最终是目标服务协议类型;利用的都是ssh安全的隧道协议;不安全的可以考虑利用安全的隧道协议进行保障安全 注意telnet非独立安全协议服务,受到xineted管理,重启/etc/xinetd.d/
本地端口转发: centos7: ssh -L 9527:centos5:23 -Nf centos6 ssh -L 9527:centos5:23 -fN centos6 -N 不开启远程shell登录,配合-f后台运行,释放前端 -g网关 :开启网关的能力后,其他与本地机器在同一网段的能够访问本机的都可以通过本机9527进行最终实现转发到目标服务器,但是前面的链接走的不是ssh安全隧道,是不安全的
远程端口转发->反向穿透 ,如外网不能访问内网,但是内网可以访问外网的ssh服务,利用角色互换的原理配合防火墙能出去连接即可自动识别返回的机制,实现远程端口转发; 命令执行是在跳板机上, [root@ca ~]# ssh -R 9527:centos5:23 -fN centos6 说明:此时实际本地客户端是centos6,跳板机是centos7,最终访问内网目标服务器是centos5; 因为防火墙原因centos6和centos7角色互换,在内网服务器centos7上发起命令,指定端口9527,centos6客户端相当于是跳板机即sshsever
动态端口转发:不需要指定远程主机,通过外部可以与之连接访问的服务器作为跳板机,以指定本地机器的任意端口作为代理服务器从而转发请求到sshsever将替之访问internet Dynamcli动态
ssh -fND 8080 root@sshserver :以centos7为例还要在本地服务器上进行设置:打开浏览器->preferences->advanced->network->Manual proxy ->socks ip port 例如 127.0.0.1 8080,因为此时做代理的是本机上的指定端口作为代理,由本机监听访问,由远程跳板机做转发替代连接到目标主机
在Linux上命令行测试(前提设置好浏览器proxy socket): curl --socks5 127.0.0.1:1080 http://www.qq.com
X 协议转发 (图形化协议转发)
所有图形化应用程序都是X客户程序; 能够通过Tcp/IP链接远程x服务器; 数据没有加密,可以通过ssh安全隧道协议进行
- vim /etc/sshd_config : Xllforwording yes X11DisplayOffset 10 X11UseLocalhost yes 2.xshell需要配置 隧道 :勾选X11转发 xmanager ,本地已经安装过了xmanager ssh -X user@x.x.x.x gedit
ssh服务配置文件选项 :严重注意,任何时候都不能删除系统文件或者服务重要文件,必须事先全部部分,rm慎用
** 总结:ssh 服务项配置 listenaddress port :智能作用,此监听Ip可以通过浏览器进行远程安装操作系统
1.PermitRootLogin yes :如果改为no,只有在使用其他用户su - 切换到root可以ssh连接,否则不能直连
2.AllowUsers\DenyUsers配置选项同时存在且存在相同用户时,DenyUsers生效 :都可以手动写到服务配置文件最后,
注意:AllowUsers白名单设置如果没有root可以拒绝root登录ssh , !!
AllowGroups\DenyGroups
AllowUsers与DenyUsers同时有相同对象时,可以应该在允许一个组的所有成员,除了此组中的某个用户~合理利用
3.使用awk编写脚本对/var/log/secure进行安全扫描,将异常ip、多次失败ip循环发现扔到防火墙策略中
4.编译安装dropbear简述:学习举一反三,1.cat README ; cat INSTALL(重点:安装引导、编译、编译安装) ; ./configure --help ,查看安装时可以重新定义的选项参数; a.开发编译环境包组的提前准备; 如果编译过程失败,查看具体失败原因比如缺失什么,如果需要重新安装,安装后需要清理编译 make clean ,然后重新编译
b.编译安装完成后,对于每一个需要执行的命令或者执行程序,都可以通过 cmd --help的方式来查看获取帮助信息 c.默认执行自带的客户端程序时如果默认找寻的文件路径不是当前安装要使用的,考虑使用软件连接的方式来实现 ln -s /usr/local/bin/dbclient /usr/bin/dbclient :这样在执行时默认找寻/usr/bin/dbclient时就会指向/usr/local/bin/dbclient真实客户端所在(类似快捷方式) d.编译安装后的卸载程序,实际上就是rm -rf 程序所在的目录包括其他一些安装目录和文件,记得将创建的软连接也一并删除 e.参考默认配置或者服务其他成熟配置文件时,新建的配置文件在使用cp时需要注意权限保持一致等问题: cp -p f.安装系统重新编译一次内核,将自定义系统初始化脚本模块化调用;或者放在远程或者http
重点应用;作业.提前编写脚本,实现发现连接异常失败ip并使用防火墙规则禁用:最好是配合计划任务实现
1、检查防火墙的策略重复问题,如果已经存在,应该不再添加:在awk中对即将要封掉的ip进行判断是否再次添加到防火墙
2、判断必须是10分钟内出现的超过一定次数的才可以被禁掉 :考虑跨年、日期;使用date +%s方式并结合${date:n:m}方式截取变量的指定字符串
3.cat file |while read -r lines ;do ... done
***实用性软件应用:安装防暴力破解ssh密码验证的登录的工具 fail2ban --> python编写的实用性工具
#ssh日志文件:/var/log/secure
unset_ip () { unset i unset j unset k unset a unset ip unset uip unset b unset c unset d unset iptables_repeat unset unset_ip #rm -f /var/log/tmpip.log } iptables_repeat (){
#专项检测INPUT链规则
iptables -L INPUT |grep "$1" &> /dev/null
if [ $? -eq 0 ];then
#echo 1
return 1
fi
}
cat /var/log/secure |awk '/Failed password/{print $1,$2,$3,$(NF-3)}' |while read -r -a records;do echo "$(date -d "${records[0]} ${records[1]} ${records[2]}" +%s) ${records[3]}" >> /var/log/tmpip.log
#临时文件的格式就是:timestamp ip
done
export -f iptables_repeat
awk '{ip[$2][$1]++}
END{for(i in ip ){
for(j in ip[i]){
#此处为了避免同一个epoch秒时间戳与下面每两个不同epoch时间出现重复统计满足条件的ip以及所在记录,需要将此条件下的记录从ip[i]数组删除
if(ip[i][j] >= 2){uip[i];delete ip[i][j]}
for (k in ip[i])
if ((j!=k) && sqrt((j-k)*(j-k)) <= 1200 ) b[i][j]++
}
}
for(p in b){
for(s in ip[p]){
if(b[i][j] >= 2) uip[i]
}
}
for(u in uip) {
#"iptables_repeat "u|getline rc;print rc;
#if(rc == 1){printf "%s is already rejected in iptables\n",u}
#调用函数,根据return返回值保存在result进行判断当前防火墙INPUT策略是否已经已经存在此ip
system("iptables -A INPUT -s "u" -j REJECT");printf "%s is rejected in iptables!\n",u
}
"secure_log.sh" 97L, 3313C 61,4-25 68%
cat /var/log/secure |awk '/Failed password/{print $1,$2,$3,$(NF-3)}' |while read -r -a records;do echo "$(date -d "${records[0]} ${records[1]} ${rec
ords[2]}" +%s) ${records[3]}" >> /var/log/tmpip.log
#临时文件的格式就是:timestamp ip
done
#区别于上面的使用,此为二维数组:awk并不支持二维数组的存储,key值实际上是以\034作为分割符 a[2,4] --> 2\0344 awk ' { a[$1,$2]++; } END{ for(i in a) { split(i,idx,SUBSEP); #下面三项分别表示二维数组的i,j和a[i,j] print idx[1], idx[2], a[idx[1], idx[2]]; } }' data
5.AIDE : 高级入侵检测环境,利用数据库更新读写分离校验各种自定属性 -->配合计划任务实现定时定期收集检测目标信息做判断
echo $PATH |tr -s ":" "\n"
自定义编写一个假的程序脚本,替换原命令或者程序脚本,但是可以运行时指向原命令(先将原真实脚本移除或者移动到其他目录)
rsyslog服务:在误删除/var/log/secure后对应的重启此日志服务和其他需要重启的服务,生成并记录日志
sudo:
1.进行修改配置文件不建议直接在主配置文件下; 2.授权的命令必须要格式一致,多一个"/"都会出错; 3.运行时必须使用sudo
为方便使用visudo 打开自定义的配置有自动加亮等特点 使用 export EDITOR=vim
2.系统管理员的身份实际依据的是uid=0
2.visudo -f /etc/sudoers.d/xx ; 切换用户后必须使用 sudo cmd ; centos5不支持扩展配置文件
3.%group 一旦某组授权了,其中的用户可以使用
4.使用pssh将自定义的sudo授权文件推送给多台主机,在各自服务器上进行修改并使用,不建议使用nfs,会出现用户发生更改等诸多问题~nfsnobody!!
5.将文件发往多台主机 pscp.pssh -A -h ip.txt /etc/sudoers.d/file /etc/sudoers.d/
liubei x.x.x.x=(ALL) cmd绝对路径: 在实际推送到多台远程主机的时候,不同主机根据会在读取执行相关sudo扩展配置文件时候根据自身ip和配置文件的授权主机对应各自的实际授权进行执行特定的权限命令
6.sudo以时间戳文件的方式记录5分钟免试密码 , sudo ... 5mins ip a a x.x.x.x/24 dev ens33 ; ip a d x.x.x.x/24 dev ens33
***sudo要慎用,考虑清楚 :sudo文件格式是什么,就只能授权格式是什么,授权任何一个命令都必须要谨慎思考 7.必须注意:授权passwd必须最后加 ! /usr/sbin/passwd root 要谨慎使用 ; 对 su 命令进行严格限制 !/bin/su root, !/bin/su - ,!/bin/su , useradd -o -u 0 ,此时又创建了一个0id的超级用户,所以,要限制useradd不能使用选项,固定创建普通用户
8.sudo -v 相当于 以root touch了 /var/db/sudo下的时间戳文件,所以运行后会即刻更新时间戳,5分钟内一直不需要输入密码 sudo -k 强制下次输入密码
8.重中之重:比如授权su ,那么必须要考虑 su - su su root su - root ,
9.防暴力破解ssh密码验证登录python软件; fail2ban ; 系统自带高级入侵检测环境 AIDE
TCPWriter
tcp 三次握手,四次挥手 ; udp 无连接状态,快
1.必须支持调用libwrap库 2、对于已经连接成功的或者执行成功的,不会给予生效
PAM:统一认证框架机制: 服务程序本身不再进行认证,将由PAM机制认证、授权、session等
1.login:我们认为就是登陆tty,即本机登录 ; 其他伪终端为 /dev/pts/..
2.因为如果有普通用户可以登录,就可以su root,所以禁止远程登录root包括su 方式 ;/etc/pam.d/remote、su --> requited pamsecuretty.so
[root@magedu(CentOS7) 2018-04-12 pam.d]# su - liubei
Last login: Tue Apr 10 14:03:37 CST 2018 on pts/1
[liubei@magedu(CentOS7) 2018-04-12 ~]$ su - root
Password:
su: Authentication failure 根据这个提示进行判断认证问题
3.pam_limits.so默认一次请求打开最大的文件描述符(socket) 1024 ulimit -n 2028 :掌握ulimit选项 注意:进程在运行时必须是要以某一个用户的身份去执行,所以限制用户自身的资源使用权限就可以限制所有以此身份运行的进程!!!
(fail2ban 防暴力破解)
运维自动化安装: 考虑深入完善初始化脚本、系统整体流程
***重要回顾深入1.TCP/IP协议栈相关知识与研究
1.定制初始化脚本:比如公钥放入、通常配置 :安装到设置网卡自启动后ctrl+f2可以查Ip ip a s 2./boot不能在逻辑卷
3.** anaconda kickstart 4.通过安装system-config-kickstart生成的anaconda_config文件必须将yum仓库的id配置为 [development] centos5中必须是[base] centos6中随意 5.centos7中在自动化安装autofs包后需要手动启动,可以考虑在安装脚本中实现 systemctl enable autofs :因为自动安装完reboot参数,需要将服务设置为开机自启动 在没有dhcp服务动态分配Ip以及没有手动设置ip的时候,在tab安装界面时,手动输入 ip=x.x.x.x netmask=255.255.255.0(与本地仅主机ip在同一个网段) ks=ftp://... 1.最好自己搭建dhcp服务器 2.如果将网络配置信息手动配置到ks文件中,可以先使用system-config-kickstart图形配置,然后获取模板文件进行参考 3.ls -1 /dev/sr* >> /etc/fstab pwd >> /etc/fstab
DHCP: 和客户端应该是在一个网段中,路由器用来隔离广播域; dhcp要想启动成功为请求客户端动态分配ip,首先需要监听在一张具有静态配置ip的网卡上提供服务
1.grep dhcp /etc/services 67server端,68client端口 UDP 2./etc/dhcp/dhcp.leases:单独设置各个租约 arp -an :可以查看以缓存的mac和ip 2.必须注意:对于dhcp服务要工作在的网卡上必须配置静态ip等信息,针对到准确网卡
3.如果开启selinux,必须时刻注意每个文件的标签,来回拷贝和移动会改变
4.yum provides "file" 反向查看包 5.检查配置文件语法 :service dhcpd configtest :centos7不使用
dropbear安装 1.下载dropbear-XXXX.XX.tar.bz2 2../configure --prefix=/app/dropbear --sysconfdir=/etc/dropbear 3.make PROGRAMS="dropbear dbclient dropbearkey dropbearconvert scp" 4.make PROGRAMS="dropbear dbclient dropbearkey dropbearconvert scp" install 5.mkdir /etc/dropbear 6.dropbearkey -t rsa -f /etc/dropbear/dropbear_rsa_host_key 7.dropbear -p 2222
练习:授权hr可以任意切换用户,而不用输入原密码,但不能切换到root
aide
sudo
/etc/sudoers /etc/sudoers.d/filename
liubei ALL(ALL) command1[,command2]
tcpwrappers
第四十天
iptables -A INPUT -s centos6 -p tcp --dport 22 -j ACCEPT iptables -A INPUT -p tcp --dport 22 -j REJECT
hosts.allow hosts.deny
sshd:192.168.0.6 sshd:192.168.0.0/24:deny
pam
实现禁止用root登录telnet,同时用telnet登录普通用户也不能su到root下 [root@ca pam.d]# vim /etc/pam.d/remote [root@ca pam.d]# vim /etc/pam.d/su auth required pam_securetty.so
自动化运维之系统安装
annaconda 手工 kickstart system-config-kickstart 如果需要在工具中选择安装包,则repo文件的repoid要为以下值: rhel5:base rhel6:随意 rhel7:development
手工制作引导光盘: [root@centos6 ~]# mkisofs -R -J -T -v --no-emul-boot --boot-load-size 4 --boot-info-table -V "Centos 6.9 7.4 Magedu boot" -b isolinux/isolinux.bin -c isolinux/boot.cat -o /root/centos_magedu.iso /app/myiso/
制作全功能的ISO 1. [root@centos6 app]# mkdir -p /app/fulliso
[root@centos6 fulliso]# cp -r /var/www/html/centos/6/* .
[root@centos6 6]# cd /var/www/html/centos/6; cp .discinfo .treeinfo /app/fulliso/
[root@centos6 fulliso]# find -name TRANS.TBL -exec rm -rf {} ;
[root@centos6 fulliso]# rm repodata/ -rf [root@centos6 fulliso]# mkdir repodata [root@centos6 fulliso]# cp /var/www/html/centos/6/repodata/43d8fd068164b0f042845474d6a22262798b9f0d1f49ad1bf9f95b953089777d-c6-x86_64-comps.xml repodata/
[root@centos6 fulliso]# createrepo -g repodata/43d8fd068164b0f042845474d6a22262798b9f0d1f49ad1bf9f95b953089777d-c6-x86_64-comps.xml ./ Spawning worker 0 with 3240 pkgs
[root@centos6 fulliso]# vim isolinux/isolinux.cfg default vesamenu.c32 #prompt 1 timeout 600
display boot.msg
menu background splash.jpg menu title Welcome to CentOS 6.9 AutoMatic Install! menu color border 0 #ffffffff #00000000 menu color sel 7 #ffffffff #ff000000 menu color title 0 #ffffffff #00000000 menu color tabmsg 0 #ffffffff #00000000 menu color unsel 0 #ffffffff #00000000 menu color hotsel 0 #ff000000 #ffffffff menu color hotkey 7 #ffffffff #ff000000 menu color scrollbar 0 #ffffffff #00000000
label mini menu label ^Install an Mini system kernel vmlinuz append initrd=initrd.img ks=cdrom:/ks6-mini.cfg label desktop menu label Install an ^Desktop system kernel vmlinuz append initrd=initrd.img ks=cdrom:/ks6-desktop.cfg label manual menu label ^Manual Install or upgrade an existing system kernel vmlinuz append initrd=initrd.img label rescue menu label ^Rescue installed system kernel vmlinuz append initrd=initrd.img rescue label local menu default menu label Boot from ^local drive localboot 0xffff
[root@centos6 fulliso]# cp /var/ftp/pub/ks* /app/fulliso/
[root@centos6 fulliso]# mkisofs -R -J -T -v --no-emul-boot --boot-load-size 4 --boot-info-table -V "Centos 6.9 Autoinstall DVD" -b isolinux/isolinux.bin -c isolinux/boot.cat -o /root/centos_auto_dvd.iso /app/fulliso/
[root@centos6 fulliso]# sz centos_auto_dvd.iso
dhcp
option domain-name "magedu.com"; option domain-name-servers 114.114.114.114, 8.8.8.8; default-lease-time 6000; max-lease-time 7200; log-facility local7; subnet 172.24.0.0 netmask 255.255.0.0 { range 172.24.1.1 172.24.255.254; option routers 172.24.0.254; } host zhangsan { hardware ethernet 00:0c:29:5e:0f:2e; fixed-address 172.24.0.100; }
实验:基于网络PXE自动化安装CENTOS7
小知识记录:关于centos6下如果作为yum源仓库的话,搭建基于pxe自动化安装Linux ,那么光盘的自动挂载方式:cd /misc/cd 下,然后随意执行df就可以自动挂载,要有autofs服务启动支持最终将/dev/sr*光驱自动挂载--> /etc/fstab
1.安装前准备:关闭防火墙和SELINUX,DHCP服务工作的网卡设置静态 2.安装HTTPD yum -y install httpd cd /var/www/html/ mkdir centos/{5,6,7}
3.将pxeLinux自动化安装服务器本地的各系统光盘设置为开机自动挂载:光盘的挂在文件系统类型为 iso9660 vim /etc/fstab /dev/sr0 /var/www/html/centos/5 iso9660 defaults 0 0 /dev/sr1 /var/www/html/centos/6 iso9660 defaults 0 0 /dev/sr2 /var/www/html/centos/7 iso9660 defaults 0 0
4.kickstart文件 :重点注意:1.在centos7、centos6里面都可以使用(需要先安装) system-config-kickstart命令生成模板再修改; 2.centos7系统在此配置安装后执行脚本构建yum源必须是[development]id,centos5中必须是[base]id ; 网卡配置生效期初最好是一块主网卡即可 #platform=x86, AMD64, or Intel EM64T #version=DEVEL #Install OS instead of upgrade install #Keyboard layouts keyboard 'us' #Root password rootpw --iscrypted $1$SL6DIN0P$x.AbjumUWqIWTsVKmzxXP1 #Use network installation url --url="http://192.168.77.254/centos/7" #System language lang en_US #Firewall configuration firewall --disabled #System authorization information auth --useshadow --passalgo=sha512 #Use text mode install text firstboot --disable #SELinux configuration selinux --disabled
#Network information
network --bootproto=dhcp --device=ens33
#Reboot after installation
reboot
#System timezone
timezone Asia/Shanghai --nontp
#System bootloader configuration
#bootloader --location=none
bootloader --append=" crashkernel=auto" --location=mbr --boot-drive=sda
#Clear the Master Boot Record
zerombr
#Partition clearing information
clearpart --all --initlabel
#Disk partitioning information
part / --fstype="xfs" --size=20480
part /boot --fstype="xfs" --size=300
part /app --fstype="xfs" --size=10240
part swap --fstype="swap" --size=2048
%packages
@^minimal
@core
kexec-tools
autofs
vim
%end
%post
rm -rf /etc/yum.repos.d/*
wget -P /etc/yum.repos.d/ http://192.168.77.254/centos/magedu.repo #wget网络下载文件并重定向到指定目录 wget -P dpt目录 下载源
mkdir /root/.ssh
chmod 700 /root/.ssh
cat > /root/.ssh/authorized_keys << EOF
ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAIEAkWzkFu1tufL7goP7h4UCNOTJRbSqxwqn+ibTE9tZYXW2kZ/T3PMkVxH+q30Mf46mcVpvhXdER7jnPN4Pq2UcLh8aEBdzgttVTQJOSs1M3jCCDc75M1TvX7s36+uAJ4srauO/yfXSX7MilVdL9NbDjsWyh7FF1Duqz5RWGzL/5t8=
EOF
chmod 600 /root/.ssh/authorized_keys
%end
5.配置TFTP服务 1.安装软件搭建服务需要注意客户端和服务端程序的安装问题: yum search .. ; yum provides 文件名-->找包; rpm -ql 包;
- /etc/init.d/并没有发现tftp服务,所有可以判断为非独立服务,受到xineted管理(修改主配置文件disabled为no并重启xineted服务;或者不修改tftp配置文件,使用下列方式受到systemd管理) 2.更改完/etc/xinetd.d/tftp文件后,可以通过chkconfig --list 查看是on还是off,还是未显示 [root@pxe7 ~]# yum install -y tftp-server [root@pxe7 ~]# systemctl start tftp.socket ; systemctl start tftp.service [root@pxe7 ~]# systemctl enable tftp.socket ; systemctl enable tftp.service
6.配置DHCP服务 1.需要注意,在配置dhcpd.conf中子网subnet部分时,分配地址时一定不要把自身的ip分配,需要绕过; 2.配置过程中必须注意灵活观察应用标准语法:{a;b;c;} [root@pxe7 ~]# cp /usr/share/doc/dhcp-4.2.5/dhcpd.conf.example /etc/dhcp/dhcpd.conf
option domain-name "magedu.com";
option domain-name-servers 192.168.77.254;
default-lease-time 3600;
max-lease-time 7200;
log-facility local7;
subnet 192.168.77.0 netmask 255.255.255.0 {
range 192.168.77.2 192.168.77.253;
option routers 192.168.77.254;
next-server 192.168.77.254;
filename "pxelinux.0";
}
host fantasia {
hardware ethernet 08:00:07:26:c0:a5;
fixed-address fantasia.fugue.com;
}
[root@pxe7 ~]# systemctl start dhcpd [root@pxe7 ~]# systemctl enable dhcpd
7.准备PXE相关文件 [root@pxe7 ~]# yum -y install syslinux [root@pxe7 ~]# cd /var/lib/tftpboot/ [root@pxe7 ~]# cp /var/www/html/centos/7/isolinux/{vmlinuz,initrd.img} . [root@pxe7 ~]# cp /usr/share/syslinux/{pxelinux.0,menu.c32} . [root@pxe7 ~]# mkdir pxelinux.cfg
8.制作启动菜单文件 :这里需要注意,启发思维,根据所从光盘或其他地方拷贝到/var/lib/tftpboot/pxelinux.cfg/default后,根据源文件的内容,必须将无需用到的项都删除,留下default菜单和标题头等,以及最重要的label 引导菜单配置项即可 [root@pxe7 ~]# cp /var/www/html/centos/7/isolinux/isolinux.cfg pxelinux.cfg/default default menu.c32 timeout 600 menu title CentOS Linux 7 PXE Install
label mini
menu label Auto Install CentOS 7 ^Mini
kernel vmlinuz
append initrd=initrd.img ks=http://192.168.77.254/ksdir/ks7-mini.cfg
label desktop
menu label Auto Install CentOS 7 ^Desktop
kernel vmlinuz
append initrd=initrd.img ks=http://192.168.77.254/ksdir/ks7-desktop.cfg
label linux
menu label Manual ^Install CentOS 7
kernel vmlinuz
append initrd=initrd.img
label local
menu default
menu label Boot from ^local drive
localboot 0xffff
menu end
实验:在centos7实现PXE安装centos6和centos7
1.分别准备Centos6和Centos7的yum源 /dev/sr2 8490330 8490330 0 100% /var/www/html/centos/7 /dev/sr1 3878870 3878870 0 100% /var/www/html/centos/6 /dev/sr0 2935370 2935370 0 100% /var/www/html/centos/5
2.分别为6,7 各准备一个kickstart文件 [root@pxe7 isolinux]# cd /var/www/html/ksdir/ [root@pxe7 ksdir]# ls ks6-desktop.cfg ks6-mini.cfg ks7-desktop.cfg ks7-mini.cfg
3.分别为6,7准备各自的内核及ramdisk文件 [root@pxe7 ~]# tree /var/lib/tftpboot/centos* /var/lib/tftpboot/centos6 ├── initrd.img └── vmlinuz /var/lib/tftpboot/centos7 ├── initrd.img └── vmlinuz
0 directories, 4 files
4.准备启动菜单 default menu.c32 timeout 600 menu title CentOS Linux 7 PXE Install
label 6mini
menu label Auto Install CentOS 6 ^Mini
kernel centos6/vmlinuz
append initrd=centos6/initrd.img ks=http://192.168.77.254/ksdir/ks6-mini.cfg
label 6desktop
menu label Auto Install CentOS 6 ^Desktop
kernel centos6/vmlinuz #注意因为根据配置文件自动找到/var/lib/tftpboot/,所以目录前不加"/"
append initrd=centos6/initrd.img ks=http://192.168.77.254/ksdir/ks6-desktop.cfg
label 7mini
menu label Auto Install CentOS 7 ^Mini
kernel centos7/vmlinuz
append initrd=centos7/initrd.img ks=http://192.168.77.254/ksdir/ks7-mini.cfg
label 7desktop
menu label Auto Install CentOS 7 ^Desktop
kernel centos7/vmlinuz
append initrd=centos7/initrd.img ks=http://192.168.77.254/ksdir/ks7-desktop.cfg
label linux
menu label Manual ^Install CentOS 7
kernel vmlinuz
append initrd=initrd.img
label local
menu default
menu label Boot from ^local drive
localboot 0xffff
menu end
5.客户端服务器想要通过网络连接到pxelinux自动化安装部署服务器,需要开机bios选择网络启动搜寻
实验个人总结: 1.其中实验过程中耗时解决一个自动化安装过程中的问题是,安装centos7与安装centos6时所需要的内存空间一样都是设置的1024G,但是PXE自动安装时centos6可以成功,centos7却一直失败:通过反复实验确定实验流程、服务流程、源、网络通信都没有问题,原因是安装实质是复制过程,而centos7因集成度高,initramfs以及vmlinuz的代码和数据都远大于centos6,所以centos7安装所需要的最低内存最好设在2000M上(物理内存和虚拟内存),这要必须区别于笼统的考虑硬盘空间问题; 2.思考系统工作原理,内核内存空间和用户空间问题; 3.selinux和防火墙如果开启下的安全策略设置问题
作业:在centos7上实验用PXE安装5,6,7