马哥linux课程学习资料(手写)_第1页
马哥linux课程学习资料(手写)_第2页
马哥linux课程学习资料(手写)_第3页
马哥linux课程学习资料(手写)_第4页
马哥linux课程学习资料(手写)_第5页
已阅读5页,还剩58页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

目录马哥linux学习资料 2第一章awk基础 21.1print 21.2printf 21.3输出重定向 31.4awk 3第二章Cacti 72.1snmp 72.2RRDTool 82.3Cacti 11第三章软件包管理 14第四章企业常用防火墙iptables相关原理详解 174.1防火墙的类型: 174.2防火墙的功能: 174.3iptables用法 184.4自定义链 224.5限定链接速率 244.6限定连接数 244.7网卡的源地址转发模拟 25第五章LinuxShell学习 265.1bash变量类别: 265.2本地变量 265.3环境变量 275.3特殊变量 285.4命令替换 285.5变量保存 285.6命令别名 295.7shell脚本 295.8标准输入/输出 305.9重定向 305.10管道 315.11正则表达式 315.12用户管理 335.13用户权限 365.14文件权限 365.15用户切换 375.16算术运算 385.17逻辑运算 39第六章DNS服务器 406.1DNS软件 406.2配置DNS服务器正向解析 416.3配置DNS服务器反向解析 44第七章MYSQL 477.1概论 477.2MySQL安装 487.3vsftpd 517.4mysqladmin 547.5DevelopingWithMySQL 567.6实验环境搭建 567.8配置主从服务器: 57第八章linux启动过程 598.1启动流程 59马哥linux学习资料第一章awk基础1.1printprint的使用格式:printitem1,item2,….要点:各项目自己使用逗号隔开,而输出时则以空白字符分隔;输出的item可以为字符串或者数值,当前记录的字段(如$1)、变量或者awk的表达式;数值会先转换为字符串,而后再输出;print的命令后面的item可以省略,此时其功能相当于print$0,因此,如果想输出空白行,则需要使用print“”;例子:#awk‘BEGIN{print“lineone\nlinetwo\nlinethree”}’awk–F:‘{print$1,$2}’/etc/passwd内置变量:ORS(outputrecordsepatator)OFS(outputfieldseparator)FS:fieldseparator,默认是空白字符;RS:Recordseparator,默认是换行字符;NR:Thenumberofinputrecords,awk命令所处理记录数:如果有多个文件,这个数目会把处理的多个文件中行统一计数;NF:NumberofField,当前记录的field个数;FNR:与NR不同的是,FNR用于记录正处理的行是当前这一文件中被总共处理的行数;ARGV:数组,保存命令行本身这个字符串,如awk’{print$0}’a.txtb.txt这个命令中,ARGV[0]保存awk,ARGV[1]保存a.txt;ARGC:awk命令的参数的个数;1.2printfprint命令的使用格式: printfformat,item1,item2,….要点:与其print命令的最大不同是,printf需要指定format;format用于指定后面的每个item的输出格式;printf语句不会自动打印换行符;format格式的指示符都以%开头,后跟一个字符;如下: %c:显示字符的ASCII码: %d,%i:十进制整数: %e,%E:科学计数法显示数值; %f:显示浮点数; %g,%G:以科学计数法的格式或浮点数的格式显示数值; %s:显示字符串 %u:无符号整数 %%:显示%自身修饰符:N:显示宽度;-:做对齐+:显示数值符号例子: #awk–F:‘{printf“%-15s%\n”,$1,$3}’/ect/passwd1.3输出重定向 printitems>output-file printitems>>output-file特殊文件描述符: /dev/stdin:标准输入 /dev/stdout:标准输出 /dev/stderr:错误输出 /dev/df/N:某特定文件描述符,如/dev/stdin就相当于/dev/fd/0;例子 awk–F:‘{printf“%-15s%i\n”,$1,$3>“/dev/stderr”}’/etc/passwd1.4awkawk的使用格式:awk[options]‘script’file1,file2,….awk[options]‘PATTERN{action}’file1,file2,….-F:1、算术操作符:-x:负值+x:转换为数值x^y:x**y:次方x*y:x+y:x-y:x%y:2、字符串操作符:只有一个,而且不用写出来,用于实现字符串连接:3、赋值操作符:=、+=、-=、*=、/=、%=、^=、**=++、--需要注意的是,如果某模式为=号,此时使用/=/可能会有语法错误,应该为/[=]/代替4、布尔值 awk中,任何非0值或非空字符串都为真,反之就为假;5、比较操作符:x<y、x<=y、x>y、x>=y、x==y、x!=y、x~y、x!~y6、表达式间的逻辑关系:&&、||7、条件表达式selector?if-true-exp:if-false-exp$A>$B?echo$A:echo$B8、行数调用function_name(para1,para2)9、awk的模式:awk‘program’input-file1input-file2….其中的program为:pattern{action}pattern{action}….常见的模式类型:Regexp:正则表达式,格式为/regularexpression/expression:表达式,其中值非0或为空字符时满足条件,如:$1~/foo/或$1==”magedu”,用运算符~(匹配)和~!(不匹配)Ranges:指定的匹配范围,格式为pat1,pat2BEGIN/END:特殊模式,仅在awk命令执行前运行一次或结束前运行一次Empty(空模式):匹配任意输入行;常见的Action有:ExpressionsControlstatementsCompoundstatementsInputstatementsOutputstatements/正则表达式/:使用通配符的扩展集关系表达式:可以用下面运算符表中的关系符进行操作,可以是字符串或者数值的比较多,如$2>$1选择第二个字段比第一个字段长的行。awk–F:‘$3>=500{print$1}’/ect/passwdawk–F:‘$3>=500{print$1,$3}’/ect/passwdawk–F:‘$3>=500{printf“%-15s%s\n”,$1,$3}’/ect/passwdawk–F:‘$3>=500{print“UsernameUID”;printf“%-15s%s”,$1,$3}’/ect/passwd模式匹配表达式:模式,模式:指定一个行的范围,该语法不能包括BEGIN和END模式BEGIN:让用户指定在第一条输入记录被处理之前说发生的动作,通常可在这里设置全局变量。END:让用户在最后一条输入记录被读取之后发生的动作awk–F:‘BEGIN{print“UsernameUID”}{printf“%-15s%s”,$1,$3}’/ect/passwdawk–F:‘BEGIN{print“UsernameUID”}{printf“%-15s%s”,$1,$3}END{print“Over}’/ect/passwdawk‘BEGIN{print“a”“b”}’awk–vFS=:‘{print$1}’/etc/passwdawk‘BEGIN{FS=”:”}{print$1}’/ect/passwd例子:vima.txtwelcometoredhatlinux.howareyou?awk‘{print$1}’a.txtdf–hdf–h|awk‘{print$1}’df–hP|awk‘{print$1}’awk‘{print$1}’/etc/passwdawk–F:‘{print$1}’/etc/passwdawk–F:‘{print$1,$7}’/etc/passwdawk–F:‘{print$NF}’/etc/passwdawk‘{print$NF}’a.txtawk–vFS=:‘{print$NF}’/etc/passwdawk‘{print$1$2}’a.txtawk‘{print$1,$2}’a.txtawk-vOFS=:’{print$1,$2}’a.txtawk‘{printf“%-10s,%s\n”,$1,$2}’a.txtawk‘{printf“%-10s%s\n”,$1,$2}’a.txtawk‘BEGIN{print“a”“b”}’awk–F:‘$1~/^root/{print$3,$4,$NF}’/ect/passwdawk–F:‘$1!~/^root/{print$3,$4,$NF}’/ect/passwdawk–F:‘/bash/{print$0}’/etc/passwdawk–F:‘/bash/{print$1}’/etc/passwd控制语句if-else语法:if(condition)(then-body)else{[else-body]}例子:awk–F:‘{if($1==”root”)print$1,“admin”;elseprint$1,”CommonUser”}’/ect/passwdawk–F:‘{if($1==”root”)printf“%-15s:%s\n”,$1,”Admin”;elseprintf“%-15s:%s\n”,$1,“CommonUser”}’/ect/passwdawk–F:-vsum=0‘{if($3>=500)sum++}END{printsum}’/ect/passwdwhile语法:while(condition){statements1;statements2;……}awk–F:‘{i=1;while(I<=3){print$1;i++}}’/ect/passwdawk–F:‘$1!~/root/{i=1;while(i<=4){print$1;i++}}’/ect/passwdawk–F:‘$1!~/root/{i=1;while(i<=NF){print$1;i+=2}}’/ect/passwdawk–F:‘$1!~/root/{i=2;while(i<=NF){print$1;i+=2}}’/ect/passwddo-while语法:do{statements1;statements2;……}while(condition)awk–F:‘{i=1;do{print$i;i++}while(i<=3)}’/etc/passwdfor语法:for(variableassignment;condition;iterationprocess){statements1;statements2;…}awk–F:‘{for(i=1;i<=3;i++)print$1}’/ect/passwdawk–F:‘{for(i=1;i<=NF;i+=2)print$i}’/ect/passwd for循环还可以用来遍历数组元素: 语法:for(iinarray){statements1;statements2;……} awk–F:‘$NF!~/^$/{BASH[$NF]++}END{for(AinBASH){printf“%15s:%i\n”,A,BASH[A]}}’/ect/passwdcase语法:seitch(expression){caseVALUEor/ERGEXP/:statements1;statements2;…defaultstatements0}break和continue常用于循环或case语句中next提前结束对本行文本的处理,并接着处理下一行awk内置变量:FS:fieldseparator,默认是空白字符;RS:Recordseparator,默认是换行字符;NR:Thenumberofinputrecords,awk命令所处理记录数:如果有多个文件,这个数目会把处理的多个文件中行统一计数;NF:NumberofField,当前记录的field个数;FNR:与NR不同的是,FNR用于记录正处理的行是当前这一文件中被总共处理的行数;ARGV:数组,保存命令行本身这个字符串,如awk’{print$0}’a.txtb.txt这个命令中,ARGV[0]保存awk,ARGV[1]保存a.txt;ARGC:awk命令的参数的个数;forIin{0..10}printA[$i]for(AinARRAY){printARRAY[A]}awk‘BEGIN{A[“m”]=”hello”;A[“n”]=”world”;for(BinA)printA[B]}’awk中使用数组array[index-expression]index-expression可以使用任意字符串,需要注意的是,如果某数据组元素事项不存在,那么在应用其时,awk会自动创建此元素并初始化为空串;因此,要判断某数据组中是否存在某元素,需要使用indexinarray的方式。要遍历数组中的每一个元素,需要使用如下的特殊结构:for(varinarray){statement1,…}其中,var用于引用数组下标。例子:netstat–n|awk‘/^tcp/{++S[$NF]}END{for(ainS)printa,S[a]}’netstat–ant|grep“LISTEN”|wc–lnetstat–ant|awk‘$1~/tcp/{S[$NF]++}END{for(AinS)printA,S[A]}’netstat–ant|awk‘$1~/tcp/{S[$NF]++}END{for(AinS)printf“%10s:%s\n”,A,S[A]}’awk–F:‘$NF!~/^$/{SHELL[$NF]++}END{for(AinSHELL)printA,SHELL[A]}’/etc/passwdawk‘{IP[$1]++}END{for(AinIP)printA,IP[A]}’/usr/local/apach/logs/access_log每出现一被/^tcp/模式匹配到的行,数组S[$NF]就加一,NF为当前匹配的行的最后一个字段,此处用其值作为数组S的元素索引;awk‘{count[$1]++};END{for(urlincounts)printcounts[url],url}’/var/log/httpd/access_log用法与上一个例子相同,用于统计日志文件中IP地址的访问量awk‘BEGIN{A[x]=”hello”;A[y]=”world”;printA[x],A[y]}’awk的内置函数split(string,array[,fieldsep[,seps]])功能:将string表示的字符串以filedsep为分隔符进行分割,并将分隔后的结果保存至array为名的数组中netstat–ant|awk‘/:80/{split($5,clients,”:”);IP[client[1]]++}END{for(iinIP){printIP[i],i}}’|sort–rn|head-50将netstat查询结果的第五列开始以:为分隔符开始切割,切割的结果保存在client数组中,并累计。length([string])功能:返回string字符串中字符的个数substr(string,start[,length])功能:取string字符串中的子串,从start开始,取length个,start从1开始计数;system(command)功能:执行系统command并将结果访问至awk命令systime()功能:取系统当前时间awk[options]‘PATTERN{cation}’input_file第二章Cacti2.1snmpnet-snmp(Agent)net-snmp-utils(NMS:command)rpm–qlnet/etc/inid.d/snmpdstartnetstat–unlpsnmpwalk–v2c–cpubliclocalhosthostsnmpwalk–v2c–cpubliclocalhostls/usr/share/snmp/mibsvim/etc/snmp/snmp.conflessSNMPv2-MIB.txtsnmpget–v2c–cpubliclocalhostHOST-RESOURCES-MIB::hrSystemUptime.0lessTCP-MIB.txtvim/ect/snmp/snmp.conf--添加TCP的MIB/etc/init.d/snmpdrestartsnmpwalk–v2c–cpubliclocalhosttcpsnmpwalk–v2c–cpubliclocalhosttcp|grepestablished|wc–lvim/etc/snmp/snmp.conf/etc/init.d/snmpdrestartsnmpwalk–v2c–cmypublictcpsnmpnetstat–v2c–cmypublic–Ca–Cptcp返回主机所有的TCP端口或者服务snmpnetstat–v2c–cmypublic–Can–Cptcpsnmpwalk-v2c-cpublic5HOST-RESOURCES-MIB::hrSWRunName|awk-vNF=\"'{print$4}'chkconfigsnmpdon2.2RRDToolRRD:PDP:PrimaryDataPointRRA:RoundRobinArchiveCDP:ConsolidationDataPointrrd文件:DS:(DataSource)数据源tool2.2.1RRD创建文件格式:rrdtoolcreatetest.rrd--step5DS:testds:GAUGE:8:0:URRA:AVERAGE:0.5:1:17280RRA:AVERAGE:0.5:10:3456RRA:AVERAGE:0.5:100:1210ls–lrrdtoolinfotest.rrd2.2.2RRD提供数据格式:rrdtool{update|updatev}filename[--template|-tds-name[:ds-name]...][--]N|timestamp:value[:value...]filename--template|-tds-name[:ds-name]...rrdtoolcreatetest.rrdDS:ds1DS:ds2rrdtoolupdatetest.rrdN:30:40rrdtoolupdatetest.rrd–tds2:ds140:30rrdtoolupdatetest.rrdN:$RANDOMrrdtoolfetchtest.rrdAVERAGEnan表示unkonwvimgenval.sh#!/bin/bashwhiletrue;do rrdtoolupdatetest.rrdN:$RANDOM sleep5donechmod+xgenval.sh./genval.shrrdtoolfetch--r5test.rrdAVERAGErrdtoolfetch--r50test.rrdAVERAGErrdtoolfetch--r500test.rrdAVERAGErrdtoolfetch--r10test.rrdAVERAGE和5s是一样的2.2.3RRD绘图格式:rrdtoolgraph|graphyfilename[option...][datadefinition..][datacalculation...][variabledefinition...][graphelement...][ptinrelement...]filename为生成图片的名称[-s|--starttime][-e|--endtime][-S|--stepseconds][-t|--titlestring][-v|--veritical-labelstring][-w|--widthpixels][-h|--heightpixels][-j|--only-graph][-D|--full-size-mode][-u|--upper-limitvalue][-l|--lower-limitvalue][-r|--rigid][-A|--alt-autoscale][-J|--alt-autoscale-min][-M|--alt-autoscale-max][-N|--no-gridfit]X-Axis[-x|--x-gridGTM:GST:MTM:MST:LTM:LST:LPR:LFM]GTM:GST 基准网格线(灰色线)MTM:MST 主网格线(红色线)LTM:LST 横轴网格线每隔多久显示一次LPR:LFM 显示日期时间[-x|--x-gridnone]e.g:--x-gridMINUTE:10:HOUR:1:HOUR:4:0:%X横轴基准网格线为10分钟,主网格线为1个小时,每4个小时打印一次日期时间Y-Axis[-y|--y-gridgridstep:labelfactor][-y|--y-gridnone][-Y|--alt-y-grid]2.3.4RRD获取数据DEF:vname=rrdfile:ds-name:CF[:step=step][:strat=time][:end=time]CDEF:vname=RPNexpressionVDEF:vanme=RPNexpressionLINE[width]:value[#color][:legend][:STACK][:dashes[=on_s[,off_s[,on_s,off_s]...]][:dash-offset=offser]]AREA:value[#color][:legend][:STACK]]rrdtoolgrapha.png–step5–s[starttime]–tTest–vvtestDEF:vtest=/root/test.rrd:testds:AVERAGELINE1:vtest#ff0000:”testline”rrdtoolgrapha.png–step50–s[starttime]–tTest–vvtestDEF:vtest=/root/test.rrd:testds:AVERAGELINE1:vtest#ff0000:”testline”rrdtoolgraphb.png–s[starttime]–tTest–vvtestDEF:vtest=/root/test.rrd:testds:AVERAGE:step=5DEF:vtest=/root/test.rrd:testds:AVERAGE:step=50LINE1:vtest#ff0000:”5_testline”LINE2:vtest#00ff00:”50_testline”完整的例子:rrdtoolcreatemysql.rrd--step3DS:myselect:COUNTER:5:0:URRA:AVERAGE:0.5:1:28800RRA:AVERAGE:0.5:10:2880RRA:MAX:0.5:10:2880RRA:LAST:0.5:10:2880mysql–e“SHOWGLOBALSTATUSLIKE‘com_select’”mysql--batch–e“SHOWGLOBALSTATUSLIKE‘com_select’”mysql--batch–e“SHOWGLOBALSTATUSLIKE‘com_select’”|awk‘/Com_select/|print$2}’vimgetselect.sh#!/bin/bashwhiletrue;do SELECT=`mysql--batch–e“SHOWGLOBALSTATUSLIKE‘com_select’”|awk‘/Com_select/|print$2}’` rrdtoolupdatemysql.rrdN:$SELECTsleep3donebash–xgetselect.shmysql–uroot–pshowdatabase;createdatabasetestdb;createtabletb1(IDINTUNSIGNEDNotNULLAUTO_INCREMENTPRIMARYKEY,NAMECHAR(50)NOTNULL)\qviminsert.sh#!/bin/bashforIin{1..20000};do mysql–e“INSERTINTOtestdb.tb1(NAME)VALUES(‘stu$I’)” mysql–e“SELECT*FROMtestdb.tb1”&>/dev/nulldonebash–xinsert.shrrdtoolfetch–r5mysql.rrdAVERAGErrdtoolfetch–r30mysql.rrdAVERAGErrdtoolfetch–r5mysql.rrdMAXrrdtoolfetch–r5mysql.rrdLASTrrdtoolgraphmysql.png–s[starttime]–t“mysqlselect”–v“select/3s”DEF:select3=mysql.rrd:myselect:AVERAGE:step=3LINE1:select3#ff0000:”SELECT”rrdtoolgraphmysql.png–s[starttime]–t“mysqlselect”–v“select/30s”DEF:select30=mysql.rrd:myselect:AVERAGE:step=30LINE1:select30#ff0000:”SELECT”rrdtoolgraphmysql.png–s[starttime]–t“mysqlselect”–v“select/3s”DEF:select3=mysql.rrd:myselect:AVERAGE:step=3DEF:max3=mysql.rrd:myselect:MAX:step=3DEF:last3=mysql.rrd:myselect:LAST:step=3LINE1:select3#ff0000:”SELECT”LINE2:max3#ff0000:”SELECT”LINE3:last3#ff0000:”SELECT”GPRINT:max3:MAX:”MAXIMUM\:%6.21f”GPRINT:last3:LAST:”CURRENT\:%10.21f”GPRINT:select3:AVERAGE:”AVERAGE\:%6.21f”2.3Cactirrdtoolcreate周期性执行能够取得数据的命令,并将取回的数据保存至rrd文件中利用rrdtool绘图展示php开发网页程序 LAMP,LNMP --enable-sockets插件机制 thold模板 图像模板 数据模板 主机模板路径:默认安装路径:/var/www/html/cacti默认web访问路径:http://IP/cacti例子(其他路径配置): 新添加路径:/web/vhosts/cacti web访问路径: 修改配置文件: vi/etc/httpd/conf/httpd.conf <VirtualHost*:80> ServerName DocumentRoot/web/vhosts/cacti <Directory“/web/vhosts/cacti”> optionsIndexes AllowOverridenone Requireallgranted </Directory> ErrorLog“logs/cacti-error_log” CustomLog“logs/cacti-access_log”common </VirtualHost>tarxfcacti-0.8.8a.tar.gz–c/web/vhostscd/web/vhostls–lln–svcacti-0.8.8acacti/etc/inid.d/httpdrestartcdcactils–lmysqladmincreatecactidb创建数据库在此管理员没有密码mysqlcactidb<cacti.sqlmysql–e“GRANTALLONcactidb.*TOcactiuser@localhostIDENTIFIEDBY‘cactiuser’” 创建cactiuser用户,密码是cactiusermysqladminflush-privilegesmysql–ucactiuser–pshowdatabase;\qcdincludeviconfig.php$url_path=“/”使用根目录useraddcactiuserchown–Rcactiuser:cactiuserrra/log安装cacti: 输入IP地址: Next>> Next>> Finish UserLogin UserName:admin Password:admin 登陆之后修改密码:123456收集方法:数据收集方法 数据查询: xml格式数据收集方法 数据输入方法: 命令或者脚本 脚本: 只需要制定如何获取数据,并且获取到的数据经过处理后要按规定输出 TAG:dataTAG:data input:30 output:40 poller.php–-指定脚本执行周期单线程 spine 指定脚本执行周期多线程创建周期性计划:方法1:echo‘*/5****/usr/bin/php/web/vhost/cacti/pooler.php&>/dev/null’>/var/spool/cron/cactiuser*/5**** 每隔5分钟执行一次/usr/bin/php php的执行文件默认路径为/usr/bin/php/web/vhost/cacti/pooler.php pooler.php路径/var/spool/cron/cactiuser 给cactiuser用户创建一个周期性计划 方法2:crontab–ucactiuser–e */5****/usr/bin/php/web/vhost/cacti/pooler.php&>/dev/null手动执行一次 su–cactiuser /usr/bin/php/web/vhost/cacti/pooler.php特殊问题: vi/ect/php.ini data.timezone=Asia/Shanghai servicehttpdrestart cd/web/vhosts/cacti/log ls tailcacti.log ls../rra date hwclock–s date date07251627122012年7月25日16:27创建脚本: vitcpxonn.sh #!/bin/bash #$1:hostnameorIP #$2:snmpcomminity SNMPNETSTAT=/usr/bin/snmpnetstat $SNMPNETSTAT–v2c–c$2–Can–Cptcp$1--end chmod+xtcpconn.sh ./tcpconn.sh02public vitcpxonn.sh--脚本添加新的功能 ESTABLISHED=‘$SNMPNETSTAT–v2c–c$2–Can–Cptcp$1|grep–i‘established’|wc–l’ echo–n“established:$ESTABLISHED” end cptcpconn.sh/web/vhosts/cacti/scripts/添加脚本: ConsoleCollectionMethodsDataInputMethodsadd Name: SNMP-tcpconnections InputType: Script/Command InputString: /bin/bash<path_cacti>/scripts/tcpconn.sh<hostname><snmp_community> Create OutputFieldsadd Field[Output]: established FriendlyName: TCPEstablished UpdateRRDFile: 打钩 Create DataTemplatesadd Name: SNMP-TCPconnections DataSource第三章软件包管理 软件包的组成: 二进制程序 配置文件 组成方式: 单文件 将主配置文件切割成为多个小文件,并放置于某个目录中 etc/profile,/etc/profile.d/* etc/pam.conf,/etc/pam.d/* etc/yum.conf,/etc/yum.conf.d/* 单文件,在内部风格为多个片段 库文件(二进制,可执行): 静态库 动态库 帮助文件 手册页 文档(/usr/share/doc)linux:GNU/Linux Kernel Application N种功能 编译进了大多数常用飞功能 源程序: 编辑应用程序存放的位置: 二进制程序 /bin,/sbin:自身启动 /usr/bin,/usr/sbin:系统功能 /usr/local/bin,/usr/local/sbin:系统的补充功能 库文件: /lib,/usr/lib /etc/ld.so.conf/etc/ld.so.conf/*.conf 置文件: /etc /etc/httpd/ /usr/local/etc 帮助文件: /usr/share/man /etc/man.config /usr/share/doc 库:功能模块 start():函数,功能,function头文件:/usr/include 一个代码片段,能完成某独立功能,并可以被其他程序所调用一个操作系统的组成部分:Kernel,glibc,app软件管理管理: 安装、卸载、升级、查询、检验依赖关系:zyx windows系统依赖关系使用的是注册表 linux系统yum、apt-getdebian: 应用程序: 二进制、库、配置文件、帮助文件 dpkgapt-get 数据库 每一个软件安装生成的文件的相关信息 deb格式RedHat(rpm) RedhatPackageManager:RPM .rpm 标准的软件管理格式: SUSE硬件架构: x86、x64、powerpc、sparc、arm二进制程序:有格式,特定于某硬件平台(编译器自身会在软件编译时对软件在特定平台上进行优化)rpm格式的软件包如何命名: name-version-release.arch.rpm 子包:name-subname-version-release.arch.rpm version:(例如2.1.3) major(整体格局等)、minor(新功能)、release(bug等) x8632bit i386、i486、i586、i686一个软件包未来在管理上的方便,在制作成rpm包的时候,可以分为多个功能相对独立的rpm包: name-version :主包 name-subname-version :子包 name-devel-version :库文件,头文件等依赖关系: xyza+bc 自动判断依赖关系,又能自动解决依赖关系的软件管理工具 yum:yellowdogupdatemodifierlinux上软件包的安装途径:rpm包rpm命令、yum命令源码包编译安装编译好的二进制压缩包,解压后配置使用MySql、MongoDB、fetionrpm命令: 安装 rpm–ivhpackage1package2... 卸载 rpm–epackage_name1package_name2... 程序 rpm–q 升级 rpm–U|-Fpackage1package2... 校验 rpm–vpackage_name1package_name2...rpm包中包含的内容 要安装的文件 要执行的脚本:pre、post、preun、postun安装:(依赖的东西叫capacity) rpm–i -v -h --test --nodeps 忽略依赖关系 --replacepkgs 替换性的安装 --force 强行安装(无视冲突)卸载:xy rpm–epackage_name --nodeps升级:oldnew;newold rpm -F:oldnew无old,则不new -U:oldnew无old,则安装new -v -h注意:内核不应该升级安装,内核允许多版本并存,可以直接安装多个不同版本的内核 --oldpackage:降级查询: rpm–qpackage_name rpm–qa|greppackage_name 所有rpm rpm–qipackage_name第四章企业常用防火墙iptables相关原理详解4.1防火墙的类型: 包过滤型防火墙:(IP/TCP) 简单包过滤、带状态检查包过滤(连接状态) 简单包过滤 带状态检测包过滤:连接状态 应用层网关防火墙:(对特定的应用层协议做检查) 硬件: Netscreen、checkpoint linux内核: TCP/IP:网络子系统 打开linux系统转发功能:/proc/sys/net/ipv4/ip_forward linux路由表查看:route–n、netstat–rn ipfw linuxkernel2.0 ipchains linuxkernel2.2 iptables linuxkernel2.4以后 iptables:用户空间工具 编写规则: netfilter 内核中,框架(framework) hookfunction 规则链input、output、forward、prerouting、postrouting 源地址转换:SNAT --在即将出去的网卡地址做转换 目标地址转换:DNAT --在刚刚进来的网卡地址做转换 端口地址转换:PNAT --4.2防火墙的功能: filter 过滤 nat 转换 mangle 修改 raw数据包过滤匹配流程:转发数据流向: 到本机 PreroutingInput 转发 PreroutingForwardPostrouting 由本机发出 OutputPostroutingtable:raw Prerouting、Outputmangle Prerouting、Input、Output、Forward、Postroutingnat Prerouting、Output、Postroutingfilter Input、Output、ForwardPreroutingInputForwardOutputPostroutingrawyesyesmangleyesyesyesyesyesnatyesyesyesfilteryesyesyes过滤: 匹配条件 netfilter,检查模块 拓展模块 处理动作 Accept Drop,Reject4.3iptables用法 iptables[-tTABLE]COMMANDCHAIN[CRETIRIA]–jACTION -t后跟的table:rawmanglenatfilter[默认] COMMAND:对链或者对链中的规则进行管理操作 链中规则: -A 在链中最后添加一条新的规则 -I# 插入一条规则,#表示插入为第几条 -R# 替换第几条规则 -D# 删除第几条规则或者–DCRETAERIA删除链中规则链: -N 新建一个自定义链 -X 删除一个自定义的空链 -E 重命名一条自定义链 -F 清空指定链,如果不指定链,就会清空整个表中的链 -P 设置链的默认策略 -Z 置零(每条规则,包括默认策略都有两个计算器,一个是被本规则匹配到的所有数据包的个数,另一个是被本规则匹配到的所有数据包的大小之和) -L 查看 -v --详细 -vv --更加详细 --line-munbers 行号 -x --显示精确值 -n --不要对地址或者名称做反解【显示数字地址】ipatbes: 服务脚本:/ect/rc.d/init.d/iptables 脚本配置文件:/ect/sysconfig/iptables-config 规则保存位置:/etc/sysconfig/iptables serviceiptables{status|start|stop|restart|save} ls/ect/rc.d/init.d … iptables … ls/ect/sysconfig … iptables-config … serviceiptablesstatus cat/etc/sysconfig/iptables serviceiptabesstart touch/etc/sysconfig/iptables serviceiptabesstart iptabels–L–niptabels–Lraw–niptabels–Lnat–niptabels–Lmanagle–niptabels–Lraw–n-v 匹配条件: 通用匹配: -s --源地址 -d --目标地址 IP NETWORK/MASK ! -p{icmp|tcp|udp} --协议 -iIN_INTERFACE --指定流入接口 -oOUT_INTERFACE --指定流出接口 -jTARGET ACCEPT DROP REJECT REDIRECT DNAT SNAT MASQUERADE LOG 扩展匹配: 隐式扩展 -ptcp --sportPORT[-PORT2] --dportPORT[-PORT2] --tcp-flagsSYN,ACK,RST,FINSYN(=--syn ) -pudp --sportPORT[-PORT2] --dportPORT[-PORT2] -picmp --icmp-type 0:echo-reply 响应 8:echo-request 请求 显示扩展 netfilter扩展模块引入的扩展,用于扩展匹配条件,通常需要额外专用选项来定义 -mstate --用于实现链接的姿态检测 --state NEW,ESTABLISHED, RELATED[例如fdp],INVALID[无效的] -mmultiport --source-ports --destination-ports --ports rpm–qliptables……/lib/iptables/libipt_state.so 扩展state模块……/lib/iptables/libipt_mutiport --扩展mutiport模块……. iptabes–tfilter–AINPUT–s/16–picmp–-icmp-type8–jDROP 不允许/16网段的用户ping本机 iptables–tfilter–L–n …… target port opt source destination DROP icmp -- /16 /0 icmptype8 …… iptables–tfilter–L–n-viptabes–tfilter–AINPUT–s/16–d–picmp–-icmp-type0–jDROP 不允许本机[]ping/16主机没有响应iptables–tfilter–DINPUT2 --删除filter表的第二条规则iptables–AINPUT–s!/16–d–ptcp–dport80–jDROP --让除了/16的主机访问:80端口iptables–L–niptabels–tfilter–FINPUTiptabels–L–niptables–F --清除所有的规则iptables–tfilter–AINPUT–d–ptcp–dport22–jACCEPT--让所有机器的ssh访问iptables–tfilter–AOUTPUT–s–ptcp–sport22–jACCEPTiptables–L–niptables–tfilter–PINPUTDROPiptables–tfilter–POUTPUTDROPiptables–L–n–v将除了22端口都Drop掉iptables–AINPUT–d–picmp–-icmp-type8–jACCEPTiptables–AOUTPUT–s–picmp–-icmp-type0–jACCEPT现在别人可以ping通自己iptables–AINPUT–s–picmp–-icmp-type8–jACCEPTiptables–AOUTPUT–d–picmp–-icmp-type0–jACCEPT现在可让自己ping别人iptables–Fiptable–L–niptables–tfilter–AINPUT–d–ptcp--dport22–mstate--stateNEW,ESTABLISHED–jACCEPTiptables–tfilter–AOUTPUT–s–ptcp--sport22–mstate--stateESTABLISHED-jACCEPTiptables–PINPUTDROPiptables–POUTPUTDROPiptables–L–n-v不让本机建立任何新的ssh请求iptables–tfilter–AINPUT–d–ptcp--dport80–mstate--stateNEW,ESTABLISHED–jACCEPTiptables–tfilter–AOUTPUT–s–ptcp--sport80–mstate--stateESTABLISHED-jACCEPT不让本机建立任何新的80端口请求对语句进行优化[将OUTPUT请求的两条语句合并为一条]:iptables–AOUTPUT–s–mstate--stateESTABLISHED–jACCEPTiptables–DOUTPUT1 --删除第一条规则,但是第二条会自动变成第一条iptables–DOUTPUT1 --删除第一条规则,此时才算删除干净了iptables–L–niptables–AINPUT–d–picmp--icmp-type8–jACCEPTiptables–L–n让别人可以ping通自己对80和22端口合并iptables–IINPUT1–d–ptcp–mmultiport–destination-ports80,22–mstate–stateNEW,ESTABLISHED–jACCEPTiptables–DINPUT2iptables–DINPUT2elinks–dump不能本机连接自己4.4自定义链创建: iptables–NNAME删除: iptables–XNAME置零: Iptables–ZNAMEiptables–Ncome_iniptables–L–n-viptables–Xcome_iniptables–L–n–viptables–ZINPUTiptables–L–n–viptables–AINPUT–d–ptcp--dport80–jACCEPTiptables–L–n–viptables–ZINPUTiptables–L–n–vnetstat–tnlpservicehttpdstartsetenforce0servicehttpdstartiptables–AINPUT–ilo–jACCEPTiptables–AOUTPUT–olo–jACCEPT让localhost对localhost本地访问ACCEPTTCP被动打开:LISTEN,SYN_RECV,ESTABLISHED主动打开:SYN_SENT,ESTABLISHED主动关闭:FIN_WAIT1,FIN_WAIT2,CLOSING,TIME_WAIT,CLOSED被动关闭:CLOSE_WAIT,LAST_ACK,CLOSED,LISTENiptables–Nclean_iniptables–Aclean_in–d55–picmp–jDROPiptables–Aclean_in–d55–picmpjDROPiptables–Aclean_in–ptcp!–syn–mstate–stateNEW–jDROPiptables–Aclean_in–ptcp--tcp-flagsALLALL–jDROPiptanles–Aclean_in–ptcp--tcp-flagsALLNONE–jDROPiptables–Aclean_in–d–jRETURN --跳出clean_in链iptables–AINPUT–d–jclean_in --跳到clean_in链上iptables–AINPUT–ilo–jACCEPTiptables–AOUTPUT–olo–jACCEPTiptables–AINPUT–ieth0–mmultiport–ptcp--dports53,113,135,137,139,445,-jDROPiptables–AINPUT–ieth0–mmultiport–pudp--dports53,113,135,137,139,445,-jDROPiptables–AINPUT–ieth0–pudp--dport1026–jDROPiptables–AINPUT–ieth0–mmultiport–ptcp--dport1433,4899–jDROPiptables–AINPUT–picmp–mlimit–limit10/second–jACCEPTiptables–AINPUT!--syn–ptcp–mstate–stateNEW–jDROPiptables–AINPUT–ptcp--tcp-flagsALLALL–jDROPiptables–AINPUT–ptcp--tcp-flagsALLNONE–jDROPiptables–AINPUT–picmp–d55–jDROPiptables–AINPUT–picmp–d55–jDROP4.5限定链接速率显示扩展(续)/lib/iptables -mlimit 3/s,1000 --limit3/min --limit-burst3000iptables–AINPUT–ieth0–d–picmp--icmp-type8–mlimit--limit5/minute--limit-burst8–jACCEPTiptables–AINPUT–ieth0–d–picmp--icmp-type8–jDROPiptables–IINPUT1–ieth0–d–ptcp--dport22–mstate–stateESTABLISHED–jACCEPTiptables–IINPUT2–ieth0–d–ptcp--dport22–mlimit--limit2/minute--limit-burst2–mstate--stateNEW–jACCEPT这两条可以写成一条命令iptables–IINPUT1–ieth0–d–ptcp--dport22–mlimit--limit2/minute--limit-burst2–mstate--stateNEW,ESTABLISHED–jACCEPTiptables–IINPUT3–ieth0–d–ptcp--dport22–jDROP对SSH的访问值限定4.6限定连接数 /lib/iptables -mconnlimit [!] --connlimit-aboven --多于n个表示满足条件,表示应该不允许的个数 -miprage --src-rangeip-ip --dst-rangeip-ip -mmac --mac-sourceXX:XX:XX:XX:XX:XX -mstring --algo[kmp|bm] --string“STRING” iptables–IOUTPUT

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论