DNS: 域名解析,BIND: Berkeley Internet Name Domain SSL/TLS: http-->https, OpenSSL, CA, Digital Certificate, PKI HTTP: HTTP协议,Apache, LAMP, Nginx(Engine X), LNMP(LEMP), MySQL, PHP, varnish CDN: DNS(View), varnish File Server: NFS、SMB/CIFS、FTP Netfilter: iptables (filter, nat, mangle, raw)、tcp wrapper NSSwitch: framework, platform, PAM: SMTP/POP3/IMAP4: Mail Server SELinux: Security Enhanced Linux C2-->SELinux-->B1 MySQL: DNS: Domain Name Service 域名:www.magedu.com(主机名,FQDN:Full Qualified Domain Name, 完全限定域名) DNS:名称解析,Name Resolving 名称转换(背后有查询过程,数据库) FQDN<-->IP 172.16.0.1 www.magedu.com. 172.16.0.2 mail.magedu.com. nsswitch: hosts: files dns file: /etc/hosts dns: DNS stub resolver: 名称解析器 ping www.magedu.com hosts: IPADDR FQDN Ailases 172.16.0.1 www.magedu.com www A --> D hosts 1、周期性任务 2、Server, Server 1KW 3、分布式数据库 IANA: IP, FQDN ftp: hosts ICANN: TLD: 组织域:.com, .org, .net, .cc 国家域: .cn, .tw, .hk, .iq, .ir, .jp 反向域: IP-->FQDN 反向:IP-->FQDN 正向:FQDN-->IP IP-->FQDN: FQDN-->IP: www.magedu.com. IP1 查询: 递归:只发出一次请求 迭代:发出多次请求 解析: 正向:FQDN-->IP 反向:IP-->FQDN 两段式:递归,迭代 DNS:分布式数据库 上级仅知道其直接下级; 下级只知道根的位置; DNS服务器: 接受本地客户查询请求(递归) 外部客户端请求:请求权威答案 肯定答案:TTL 否定答案:TTL 外部客户端请求:非权威答案 DNS服务器类型 主DNS服务器: 数据修改 辅助DNS服务器:请求数据同步 serial number refresh retry expire nagative answer TTL 缓存DNS服务器 转发器 数据库中的,每一个条目称作一个资源记录(Resource Record, RR) 资源记录的格式: TTL 600; NAME [TTL] IN RRT VALUE www.magedu.com. IN A 1.1.1.1 1.1.1.1 IN PTR www.magedu.com. 资源记录类型: SOA(Start Of Authority): ZONE NAME TTL IN SOA FQDN ADMINISTRATOR_MAILBOX ( serial number refresh retry expire na ttl ) 时间单位:M(分钟)、H(小时)、D(天)、W(周),默认单位是秒 邮箱格式:admin@magedu.com -写为-> admin.magedu.com magedu.com. 600 IN SOA ns1.magedu.com. admin.magedu.com. ( 2013040101 1H 5M 1W 1D ) NS(Name Server): ZONE NAME --> FQDN magedu.com. 600 IN NS ns1.magedu.com. magedu.com. 600 IN NS ns2.magedu.com. ns1.magedu.com. 600 IN A 1.1.1.2 ns2.magedu.com. 600 IN A 1.1.1.5 MX(Mail eXchanger): ZONE NAME --> FQDN ZONE NAME TTL IN MX pri VALUE 优先级:0-99,数字越小级别越高 magedu.com. 600 IN MX 10 mail.magedu.com. mail.magedu.com. 600 IN A 1.1.1.3 A(address): FQDN-->IPv4 AAAA:FQDN-->IPv6 PTR(pointer):IP-->FQDN CNAME(Canonical NAME): FQDN-->FQDN www2.magedu.com. IN CNAME www.magedu.com. TXT CHAOS SRV 域:Domain 区域:Zone .com magedu.com. IN NS ns.magedu.com. ns.magedu.com. IN A 192.168.0.10 magedu.com. 192.168.0.0/24 www 192.168.0.1 mail 192.168.0.2, MX 建立两个区域文件: 正向区域文件 magedu.com. IN SOA www.maged.com. IN A 192.168.0.1 简写为: www IN A 192.168.0.1 反向区域文件: 0.168.192.in-addr.arpa. IN SOA 1.0.168.192.in-addr.arpa. IN PTR www.magedu.com. 1 IN PTR www.magedu.com. 区域传送的类型: 完全区域传送: axfr 增量区域传送:ixfr 区域类型: 主区域:master 从区域:slave 提示区域:hint 转发区域:forward .com. magedu.com. DNS资源记录类型及意义: SOA:起始授权记录 NS:名称服务器 MX:邮件交换器 CNAME:别名记录 A:FQDN-->IPv4 AAAA: FQDN-->IPv6 PTR:IP-->FQDN 递归:请求一次 迭代:请求多次,参考答案 DNS服务器类型: 主 辅助 缓存 转发器 ZONE DOMAIN SOA: mageedu.com 172.16.100.0/24 ns 172.16.100.1 www 172.16.100.1, 172.16.100.3 mail 172.16.100.2 ftp www DNS:BIND Berkeley Internet Name Domain ISC bind97: /etc/named.conf BIND进程的工作属性 区域的定义 /etc/rndc.key rndc: Remote Name Domain Controller 密钥文件 配置信息:/etc/rndc.conf /var/named/ 区域数据文件 /etc/rc.d/init.d/named {start|stop|restart|status|reload} 二进制程序:named bind-chroot: 默认:named 用户:named 组:named /var/named/chroot/ etc/named.conf etc/rdnc.key sbin/named var/named/ 缓存-->主-->从 named-checkconfig name-checkzone dig: Domain Information Gropher DNS: 监听的协议及端口: 53/udp 53/tcp 953/tcp, rndc SOCKET: 套接字 IP:PORT C/S: Client/Server 172.16.100.1:53 192.168.0.13 192.168.0.12:53 172.16.100.1:53 0.0.0.0:53 区域: zone "ZONE NAME" IN { type {master|slave|hint|forward}; }; 主区域: file "区域数据文件"; 从区域: file "区域数据文件"; masters { master1_ip; }; 临时性地关闭SELinux: # getenforce Enforcing # setenforce 0 # setenforce 1 永久关闭: # vim /etc/selinux/config dig -t RT NAME @IP dig -t NS mageedu.com dig -x IP: 根据IP查找FQDN host -t RT NAME: 查询名称的解析结果 nslookup: 交互式 nslookup> server IP set q=RT NAME 100.16.172.in-addr.arpa BIND, named, DNS named: named.named resoving: 数据文件 IP-->FQDN ZONE NAME --> NS, MX 查询:stub resolver 递归 缓存功能: DNS RT $TTL 宏 $ORIGIN mageedu.com. $GENERATE NAME [TTL] IN RT VALUE SOA: @ IN SOA MASTER_NS_SERVER_FQDN ADMIN_MAILBOX ( ) NS: @ IN NS NS_SERVER_FQDN MX: @ IN MX pri MX_SERVER_FQDN A AAAA PTR CNAME Alias IN CNAME FQDN named: /usr/sbin/named SOCKET IP:PORT tcp udp 被打开 /etc/named.conf /etc/rc.d/init.d/functions /etc/rc.d/init.d/named /etc/sysconfig/named service named start bind named, named bind97 dig: aa: Authority Answer 泛域解析: *.mageedu.com. IN A axfr: 完全区域传送 ixfr:增量区域传送 区域: 主、从 rndc: 正向区域: SUB_ZONE_NAME IN NS NSSERVER_SUB_ZONE_NAME NSSERVER_SUB_ZONE_NAME IN A IP .com mageedu.com. IN NS ns1.mageedu.com. IN NS ns2.mageedu.com. ns1.mageedu.com. IN A 172.16.100.1 ns2.magedu.com. IN A 172.16.100.2 dig -t A www.baidu.com @172.16.100.1 . .com .com magedu.com. mageedu.com. fin.mageedu.com. IN NS ns1.fin.mageedu.com. fin.mageedu.com. IN NS ns2.fin.mageedu.com. ns1.fin.mageedu.com. IN A 172.16.100.8 ns2.fin.mageedu.com. IN A 172.16.100.9 market.mageedu.com. IN NS ns1.market.mageedu.com. ns1.market.mageedu.com. IN A 172.16.100.108 forward {only|first} forwarders {}; zone "ZONE_NAME" IN { type forward; }; allow-recursion {}; allow-query {}; allow-transfer {}; axfr ixfr allow-query { 172.16.0.0/16; 127.0.0.0/8; 10.0.0.0/8; } acl ACL_NAME { 172.16.0.0/16; 127.0.0.0/8; }; acl innet { 172.16.0.0/16; 127.0.0.0/8; }; allow-query { innet; }; none; any; view VIEW_NAME { }; view VIEW_NAME { }; 所有的区域都必须定义在视图中 zone "." IN catagory: 日志源 查询 区域传送 可以通过catagory自定义日志来源 channel: 日志保存位置 syslog file: 自定义保存日志信息的文件 logging { }; queryperf : 压力测试 DHCP: Dynamic Host Configuration Protocol <-- bootp TCP/IP IPADDR NETMASK GATEWAY DNS Client--> DHCPDISCOVER DHCPOFFER <-- Server Client--> DCHPREQUEST DCHPACK <-- Server Client--> DHCPREQUEST DHCPACK <-- Server UDP: 67/udp 68/udp HTTP: HyperText Transfer Protocol: 超文本传输协议 超链接: Web: http/0.9: 仅纯文本(超链接), ASCII, HTML:HyperText Mark Language

Title

Browser: 客户端 1.1.1.1: web, a.html 2.2.2.2: web, a.html URI: Uniform Resource Indentifier, 全局范围内 统一:路径格式上的统一 URL:Uniform Resource Locator protocol://HOST:port/path/to/file http://www.magedu.com/download/linux.tar.gz web资源:http://www.magedu.com/logo.gif 多个资源很可能被整合为一个html文档 web对象: HTTP方法: GET http/1.0: PUT, POST, DELETE, HEAD MIME: Multipurpose Internet Mail Extension, 多用途互联网邮件扩展 SMTP: Simple Mail Transmission Protocol, 纯文本 MIME: 将非文本数据在传输前重新编码为文本格式,接收方能够用相反的方式将其重新还原为原来的格式,还能够调用相应的程序来打开此文件 Base64 协议首部: image/jpeg 动态效果 Java, Applet, JRE 动态网页:服务器端存储的文档非HTML格式,而是编程语言开发的脚本,脚本接受参数之后在服务器运行一次,运行完成之后会生成HTML格式的文档,把生成的文档发给客户端; web: index.php web --> procotol --> php (运行index.php) http index.html: 引用N个web对象:URL 动态网页:包含静态内容和动态内容 动态内容部分才需运行 缓存: URL:http://www.magedu.com/2.html HTTP报文:请求报文,响应报文 请求报文语法: 响应报文语法: 状态代码: 1xx: 纯信息 2xx: “成功”类的信息 (200, 201, 202) 3xx:重定向类的信息 (301, 302, 304) 4xx: 客户端错误类的信息 (404) 5xx:服务器端错误类的信息 请求报文: GET / HTTP/1.1 Host: www.magedu.com Connection: keep-alive 响应报文: HTTP/1.1 200 OK X-Powered-By: PHP/5.2.17 Vary: Accept-Encoding,Cookie,User-Agent Cache-Control: max-age=3, must-revalidate Content-Encoding: gzip Content-Length: 6931 上面两个报文的第一行通常称作报文“起始行(start line)”;后面的标签格式的内容称作首部域(Header field),每个首部域都由名称(name)和值(value)组成,中间用逗号分隔。另外,响应报文通常还有一个称作Body的信息主体,即响应给客户端的内容。 Web服务器的主要操作 1、 建立连接——接受或拒绝客户端连接请求; 2、 接收请求——通过网络读取HTTP请求报文; 3、 处理请求——解析请求报文并做出相应的动作; 4、 访问资源——访问请求报文中相关的资源; 5、 构建响应——使用正确的首部生成HTTP响应报文; 6、 发送响应——向客户端发送生成的响应报文; 7、 记录日志——当已经完成的HTTP事务记录进日志文件; 5s: 10 image, 3 css, 5html 18资源 http, tcp: 三次握手,四次断开 http/1.1: 增强了缓存的功能 长连接 www.netcraft.com Web服务器处理并发连接请求的架构方式 1、单线程web服务器(Single-threaded web servers) 此种架构方式中,web服务器一次处理一个请求,结束后读取并处理下一个请求。在某请求处理过程中,其它所有的请求将被忽略,因此,在并发请求较多的场景中将会出现严重的必能问题。 2、多进程/多线程web服务器 此种架构方式中,web服务器生成多个进程或线程并行处理多个用户请求,进程或线程可以按需或事先生成。有的web服务器应用程序为每个用户请求生成一个单独的进程或线程来进行响应,不过,一旦并发请求数量达到成千上万时,多个同时运行的进程或线程将会消耗大量的系统资源。 3、I/O多路复用web服务器 为了能够支持更多的并发用户请求,越来越多的web服务器正在采用多种复用的架构——同步监控所有的连接请求的活动状态,当一个连接的状态发生改变时(如数据准备完毕或发生某错误),将为其执行一系列特定操作;在操作完成后,此连接将重新变回暂时的稳定态并返回至打开的连接列表中,直到下一次的状态改变。由于其多路复用的特性,进程或线程不会被空闲的连接所占用,因而可以提供高效的工作模式。 4、多路复用多线程web服务器 将多进程和多路复用的功能结合起来形成的web服务器架构,其避免了让一个进程服务于过多的用户请求,并能充分利用多CPU主机所提供的计算能力。 代理 Web代理服务器工作于web客户端和web服务器之间,它负责接收来自于客户端的http请求,并将其转发至对应的服务;而后接收来自于服务端的响应,并将响应报文回送至客户端。 apache: 17, NCSA, httpd A Patchy Server = apache FSF: GNU, GPL ASF: Apache Software Foundation web: httpd Tomcat Hadoop www.apache.org web: http://httpd.apache.org httpd: Web Server, Open Source 2.2, 2.4, 2.0, 1.3 httpd: 事先创建进程 按需维持适当的进程 模块块设计,核心比较小,各种功能都模块添加(包括php) 支持运行配置,支持单独编译模块 支持多种方式的虚拟主机配置 Socket IP:Port 虚拟主机: 基于IP的虚拟主机; 基于端口的虚拟主机; 基于域名的虚拟主机; protocol://HOST:PORT/path/to/source Method URL version header body GET /download/linux.tar.bz2 HTTP/1.0 Host: www.magedu.com 支持https协议 (mod_ssl) 支持用户认证 支持基于IP或主机名的ACL 支持每目录的访问控制 支持URL重写,/image/a.jpeg, /bbs/images/abc.jpeg RedHat(httpd): rpm包: 源码编译 httpd: SELinux(事先让其处于permssive, disabled) httpd: /usr/sbin/httpd(MPM: prefork) httpd: root, root (master process) httpd: apche, apache (worker process) /etc/rc.d/init.d/httpd Port: (80/tcp), (ssl: 443/tcp) /etc/httpd: 工作根目录,相当于程序安装目录 /etc/httpd/conf: 配置文件目录 主配置文件:httpd.conf /etc/httpd/conf.d/*.conf /etc/httpd/modules: 模块目录 /etc/httpd/logs --> /var/log/httpd: 日志目录 日志文件有两类:访问日志access_log,错误日志:err_log /var/www/ html cgi-bin cgi: Common Gateway Interface Client --> httpd (index.cgi) --> Spawn Process (index.cgi) --> httpd --> Client perl, python, java, (Servlet, JSP), php fastcgi: 程序:指令和数据 数据,数据库服务 httpd: directive value 指令不区分字符大小写 value则根据需要有可能要区分 MPM: Multi Path Modules mpm_winnt prefork (一个请求用一个进程响应) worker (一个请求用一个线程响应, (启动多个进程,每个进程生成多个线程)) event (一个进程处理多个请求) URL路径跟本地文件系统路径不是一码事儿, URL是相对于DocumentRoot的路径而言的。 Options None: 不支持任何选项 Indexes: 允许索引目录 FollowSynLinks: 允许访问符号链接指向的原文件 Includes: 允许执行服务端包含(SSI) ExecCGI: 允许运行CGI脚本 All: 支持所有选项 Order:用于定义基于主机的访问功能的,IP,网络地址或主机定义访问控制机制 Order allow,deny allow from deny from 192.168.0.0/24 地址的表示方式: IP network/netmask HOSTNAME: www.a.com DOMAINNAME: magedu.com Partial IP: 172.16, 172.16.0.0/16 Order deny,allow Deny from 192.168.0.0/24 192.168.0.1, 172.16.100.177 elinks http://172.16.100.1 -dump -source AuthType Basic AuthName "Restricted Files" AuthUserFile /usr/local/apache/passwd/passwords Require user marion Group File Syntax: GroupName: rbowen dpitts sungo rshersey AuthType Basic AuthName "By Invitation Only" # Optional line: AuthBasicProvider file AuthUserFile /usr/local/apache/passwd/passwords AuthGroupFile /usr/local/apache/passwd/groups Require group GroupName Require valid-user AuthName "Private" AuthType Basic AuthBasicProvider dbm AuthDBMUserFile /www/passwords/passwd.dbm Require valid-user tom http://172.16.100.1/~tom/ PV: Page View,每天的页面访问量 UV: User View, 每天的独立IP访问量 /web/html /www/forum bbs http://172.16.100.1/bbs/images/logo.jpeg 定义网站文档目录 访问选项:options 基于主机的访问控制 基于用户或组的访问控制 用户个人站点 错误日志 日志格式 访问日志 PV UV 路径别名 CGI 虚拟主机 Apache的指令: Listen [IP:]PORT MPM: MultiPath Modules prefork: 一个请求用一个进程处理,稳定性好、大并发场景下消耗资源较多; worker:每个请求用一个线程处理(启动一定数量的进程,每个进程生成一定数量的线程) event:每个进程处理多个请求,基于事件来实现 (apache 2.2测试) mpm_winnt httpd, httpd.worker, httpd.event /etc/sysconfig/httpd prework StartServers MinSpareServers MaxSpareServers MaxClients ServerLimit MaxRequestsPerChild ErrorLog LogLevel LogFormat combined common CustomLog 路径别名: Alias /URL "local_path" User Group CGI: Common Gateway Interface, 通用网关接口,协议 网页内容:动态内容,静态内容 静态内容: .jpeg .gif .png .html .css 动态内容: 编程语言写好程序-->执行一次,生成处理结果,经过html格式化后的文本 echo "

Hellow world

" 加密/解密,证书原理,制作, 脚本完成自动化证书制作 SSH和OpenSSH, vsftpd DNS & BIND (CDN) Web(http协议,httpd(LAMP), nginx(LNMP), squid) iptables (firewall) layer7 postfix () NFS, samba SELinux TCP/IP: 安全 A--》B 机密性:明文传输(ftp, http, smtp, telnet) 完整性:10 (100) 身份验正: 机密性:plaintext --> 转换规则 --> ciphertext ciphertext --> 转换规则 --> plaintext 转换算法:密钥 对称加密:算法 数据完整性:A-->B Eve 单向加密算法:提取数据特征码 输入一样:输出必然相同 雪崩效应:输入的微小改变,将会引起结果的巨大改变 定长输出:无论原始数据是多在,结果大小都是相同的 不可逆:无法根据特征码还原原来的数据 A: plaintext:footprint --> B E: plaintext2:footprint2 --> B A: plaintext:(footprint) --> B 协商生成密码:密钥交换(Internet Key Exchange, IKE) Diffie-Hellman协议: A --> B p, g (大素数,生成数) A: x B: y A: g^x%p --> B B: g^y%p --> A g, p, g^x%p, g^y%p A: (g^y%p)^x=g^yx%p B: (g^x%p)^y=g^xy%p 密钥交换算法 g=2 p=7 x=2 y=3 公钥加密算法:非对称加密算法 密钥对: 公钥:p 私钥:s 发送方用自己的私钥加密数据,可以实现身份验正 发送方用对方的公钥加密数据,可以保证数据机密性 公钥加密算法很少用来加密数据:速度太慢 PKI: Public Key Infrastructure CA: Certificate Authority x509, pkcs12 x509: 公钥及期有效期限 证书的合法拥有者 证书该如何被使用 CA的信息 CA签名的校验码 PKI: TLS/SSL:x509 PKI: OpenGPG TLS/SSL Handshake 对称加密: DES:Data Encrption Standard, 56bit 3DES: AES:Advanced AES192, AES256, AES512 Blowfish openssl gpg 单向加密: MD4 MD5 SHA1 SHA192, SHA256, SHA384 CRC-32 公钥加密:(加密/签名) 身份认证(数字签名) 数据加密 密钥交换 RSA: 加密、签名 DSA:签名 ElGamal OpenSSL: SSL的开源实现 libcrypto: 加密库 libssl: TLS/SSL的实现 基于会话的、实现了身份认证、数据机密性和会话完整性的TLS/SSL库、 openssl: 多用途命令行工具 实现私有证书颁发机构 子命令: openssl实现私有CA: 1、生成一对密钥 2、生成自签署证书 openssl genrsa -out /PATH/TO/KEYFILENAME NUMBITS openssl rsa -in /PATH/TO/KEYFILENAME -pubout CA服务器: 1、vim /etc/pki/tls/openssl.cnf dir=/etc/pki/CA 2、cd /etc/pki/CA # make certs newcerts crl # touch index.txt # echo 01 > serial 3、自签证书 # (umask 077; openssl genrsa -out private/cakey.pem 2048) # openssl req -x509 -new -key private/cakey.pem -out cacert.pem -days 3650 证书申请方: 1、为某服务生成密钥: # cd /etc/vsfptd/ # mkdir ssl # cd ssl # (umask 077; openssl genrsa 1024 > vsftpd.key) # openssl req -new -key vsftpd.key -out vsftpd.csr 2、将此请求通过某方式传递给CA服务器 3、CA签署证书(在CA服务器上操作) # openssl ca -in vsftpd.csr -out vsftpd.crt -days N OpenSSL: 1、创建CA 自己生成一对密钥; 生成自签证书; 2、客户端 生成一对密钥; 生成证书颁发请求, .csr; 将请求发给CA; 3、CA端 签署此证书; 传送给客户端; OpenSSL: TLS/SSL, (libcryto, libssl, openssl), TLS PKI OpenSSH: telnet, TCP/23, 远程登录 认证明文 数据传输明文 ssh: Secure SHell, TCP/22 C/S ssh --> SSH OpenSSH(开源) ssh v1, v2 客户端: Linux: ssh Windows: putty, SecureCRT(), SSHSecureShellClient, Xmanager 服务器端: sshd openssh (ssh, sshd) ssh --> telnet sshd: 主机密钥 netstat -r -n -t: tcp connections -u: udp connections -l: listening -p: process ssh (ssh_config) sshd (sshd_config) /etc/ssh ssh: ssh -l USERNAME REMOTE_HOST ['command'] ssh USERNAME@REMOTE_HOST -p port -X -Y 基于密钥的认证: 一台主机为客户端(基于某个用户实现): 1、生成一对密钥 ssh-keygen -t {rsa|dsa} -f /path/to/keyfile -N 'password' 2、将公钥传输至服务器端某用户的家目录下的.ssh/authorized_keys文件中 使用文件传输工具传输(ssh-copy-id, scp) ssh-copy-id -i /path/to/pubkey USERNAME@REMOTE_HOST 3、测试登录 scp: 基于ssh的远程复制命令,可以实现在主机之间传输数据 scp [options] SRC DEST -r -p -a REMOTE_MACHINE USERNAME@HOSTNAME:/path/to/somefile 总结: 1、密码应该经常换且足够复杂; 2、使用非默认端口; 3、限制登录客户地址; 4、禁止管理直接登录; 5、仅允许有限制用户登录; 6、使用基于密钥的认证; 7、禁止使用版本1 嵌入式系统专用的ssh软件 dropbear PKI A --> B: 证书:(主机,用户) 用户信息,公钥 颁发者的信息,签名 证书有效期限 A发送方: 1、计算数据的特征码(单向加密); 2、用自己的私钥加密特征码,并附加在数据后面; 3、生成一个临时对称密钥; 4、用此密钥结合某算法加密数据及加密后的特征码; 5、对接收方的公钥加密此对称密钥,并附加加密后的数据后面; 6、发送至接收方; B接收方: 1、用自己的私钥解密加密的对称密钥; 2、用对称密钥解密数据; 3、用对方的公钥解密加密的特征码; 4、用同样的算法计算数据的特征码,并与解密而来的特征码进行比较; A --> B: openssl libcrypto libssl openssl SSL: Secure Socket Layer, SSLv2, SSLv3 TLS:Transport Layer Security, TLSv1 SSL: S --> C C --> S: SSL会话; C <--> S: 协商 S --> C:发送证书至客户端 C: C --> S: S --> C OpenSSH, dropbear: SSH: Secure SHell C/S: sshd ssh Windows: putty, SecureCRT, Xmanager sshd: /etc/ssh/sshd_config ssh: /etc/ssh/ssh_config 主机密钥: v2: RSA DSA SSH: 基于口令 基于密钥 dropbear:ssh组件 ./configure make make install #!/bin/bash # chkconfig: 2345 50 49 # description: dropbear ssh service # Author: RSAKEY=/etc/dropbear/dropbear_rsa_host_key DSSKEY=/etc/dropbear/dropbear_dss_host_key DORPBEAR=/usr/local/sbin/dropbear DROPBEARKEY=/usr/local/bin/dropbearkey PORT=22 ADDRESS=0.0.0.0 LOCKFILE=/var/lock/subsys/dropbear PIDFILE=/var/run/dropbear.pid creatersakey() { if [ ! -f $RSAKEY ]; then $DROPBEARKEY -t rsa -s 2048 -f $RSAKEY fi } createdsskey() { if [ ! -f $DSSKEY ]; then $DROPBEARKEY -t dss -f $DSSKEY fi } start() { creatersakey; createdsskey; if [ ! -f $LOCKFILE ]; then $DROPBEAR -p $ADDRESS:$PORT RETVAL=$? fi if [ $RETVAL -eq 0 ]; then touch $LOCKFILE echo "Strat dropbear ............................[ OK ]" fi } stop() { if [ -f $LOCKFILE ]; then killall dropbear RETVAL=$? fi if [ $RETVAL -eq 0 ]; then rm -f $LOCKFILE $PIDFILE echo "Stop dropbear ...........................[ OK ]" else echo "Stop dropbear .......................[ failed ]" fi } status() { if [ -f $LOCKFILE ];then echo "dropbear is running..." else echo "dropbear is stopped..." fi } case $1 in start) start ;; stop) stop ;; restart) stop sleep 1 start ;; status) status ;; *) echo "Usage: dropbear {start|stop|restart|staus}" exit 1 ;; esac OpenSSL: PKI: CA VPN: 建立连接 接收请求 处理请求 访问资源 构建响应 发送响应 记录日志 Web日志: 错误日志 ErrorLog 访问日志 CustomLog /etc/httpd/conf/httpd.conf /etc/httpd/conf.d/*.conf DocumentRoot Listen IP:port Listen 80 Listen 8080 Listen 172.16.100.1:80 /etc/init.d/httpd --> /etc/sysconfig/httpd MPM: apache 2.2 prefork worker apache 2.4: mpm可以做为动态模块使用 KeepAlive KeepAliveTimeout APACHE的认证: 基于IP Order allow,deny Allow from 1.1.1.1 Allow Deny 基于用户 基本认证 摘要认证 虚拟主机 HTTPS PHP+MySQL apache虚拟主机: apache: 服务器,Host, 物理主机 虚拟主机: apache服务: 服务于多个不同的站点: apache: 中心主机 虚拟主机 基于IP IP1:80 IP2:80 基于端口 IP:80 IP:8080 基于域名 IP:80 主机名不同 www.magedu.com www.a.org www2.a.org www.b.net apache 2.2 NameVirtualHost apache 2.4 ServerName ServerAlias DocumentRoot /www/a.org/ Option AllowOverride Alias ErrorLog CustomLog ScriptAlias /www/test/ www.a.org/images/ CGI: Common Gateway Interface 得先取消中心主机,注释中心主机的DocumentRoot即可。 虚拟主机的定义: 基于IP,HOST的写法 HOST IP1:80 IP2:80 基于端口: HOST IP:80 IP:8080 基于域名: *:80 ServerName 不同 d.gov 172.16.100.177 设定默认虚拟主机 DocumentRoot /www/default80 # ... DocumentRoot /www/default # ... SetHandler server-status Order Deny,Allow Deny from all Allow from .foo.com 博客作业: http的路径别名、虚拟主机、用户认证、SSL的实现过程。 练习: 建立httpd服务器(基于编译的方式进行),要求: 1)提供两个基于名称的虚拟主机: (a)www1.magedu.com,页面文件目录为/web/vhosts/www1;错误日志为/var/log/httpd/www1.err,访问日志为/var/log/httpd/www1.access; (b)www2.magedu.com,页面文件目录为/web/vhosts/www2;错误日志为/var/log/httpd/www2.err,访问日志为/var/log/httpd/www2.access; (c)为两个虚拟主机建立各自的主页文件index.html,内容分别为其对应的主机名; (d)通过www1.magedu.com/status输出httpd工作状态相关信息,且只允许提供帐号密码才能访问(status:status); 2)www1主机仅允许172.16.0.0/16网络中的客户机访问;www2主机可以被所有主机访问; 为上题中的第2个虚拟主机提供https服务,使得用户可以通过https安全的访问此web站点; (1)要求使用证书认证,证书中要求使用的国家(CN)、州(Henan)、城市(Zhengzhou)和组织(MageEdu); (2)设置部门为TECH,主机名为www2.magedu.com,邮件为admin@magedu.com; (3)此服务禁止来自于192.168.1.0/24网络中的主机访问; 虚拟主机: IP,PORT, HOSTNAME NameVirtualHost PHP is Hypertext Preprocessor 超文本预处理器 bash: 词法分析 语法分析 生成执行路径 opcode: 操作码 php解释型,php php php source code --> 编译成二进制 --> 执行二进制格式 Zend : opcode 关于PHP 一、PHP简介 PHP是通用服务器端脚本编程语言,其主要用于web开发以实现动态web页面,它也是最早实现将脚本嵌入HTML源码文档中的服务器端脚本语言之一。同时,php还提供了一个命令行接口,因此,其也可以在大多数系统上作为一个独立的shell来使用。 Rasmus Lerdorf于1994年开始开发PHP,它是初是一组被Rasmus Lerdorf称作“Personal Home Page Tool” 的Perl脚本, 这些脚本可以用于显示作者的简历并记录用户对其网站的访问。后来,Rasmus Lerdorf使用C语言将这些Perl脚本重写为CGI程序,还为其增加了运行Web forms的能力以及与数据库交互的特性,并将其重命名为“Personal Home Page/Forms Interpreter”或“PHP/FI”。此时,PHP/FI已经可以用于开发简单的动态web程序了,这即是PHP 1.0。1995年6月,Rasmus Lerdorf把它的PHP发布于comp.infosystems.www.authoring.cgi Usenet讨论组,从此PHP开始走进人们的视野。1997年,其2.0版本发布。 1997年,两名以色列程序员Zeev Suraski和Andi Gutmans重写的PHP的分析器(parser)成为PHP发展到3.0的基础,而且从此将PHP重命名为PHP: Hypertext Preprocessor。此后,这两名程序员开始重写整个PHP核心,并于1999年发布了Zend Engine 1.0,这也意味着PHP 4.0的诞生。2004年7月,Zend Engine 2.0发布,由此也将PHP带入了PHP5时代。PHP5包含了许多重要的新特性,如增强的面向对象编程的支持、支持PDO(PHP Data Objects)扩展机制以及一系列对PHP性能的改进。 二、PHP Zend Engine Zend Engine是开源的、PHP脚本语言的解释器,它最早是由以色列理工学院(Technion)的学生Andi Gutmans和Zeev Suraski所开发,Zend也正是此二人名字的合称。后来两人联合创立了Zend Technologies公司。 Zend Engine 1.0于1999年随PHP 4发布,由C语言开发且经过高度优化,并能够做为PHP的后端模块使用。Zend Engine为PHP提供了内存和资源管理的功能以及其它的一些标准服务,其高性能、可靠性和可扩展性在促进PHP成为一种流行的语言方面发挥了重要作用。 Zend Engine的出现将PHP代码的处理过程分成了两个阶段:首先是分析PHP代码并将其转换为称作Zend opcode的二进制格式(类似Java的字节码),并将其存储于内存中;第二阶段是使用Zend Engine去执行这些转换后的Opcode。 三、PHP的Opcode Opcode是一种PHP脚本编译后的中间语言,就像Java的ByteCode,或者.NET的MSL。PHP执行PHP脚本代码一般会经过如下4个步骤(确切的来说,应该是PHP的语言引擎Zend): 1、Scanning(Lexing) —— 将PHP代码转换为语言片段(Tokens) 2、Parsing —— 将Tokens转换成简单而有意义的表达式 3、Compilation —— 将表达式编译成Opocdes 4、Execution —— 顺次执行Opcodes,每次一条,从而实现PHP脚本的功能 四、php的加速器 基于PHP的特殊扩展机制如opcode缓存扩展也可以将opcode缓存于php的共享内存中,从而可以让同一段代码的后续重复执行时跳过编译阶段以提高性能。由此也可以看出,这些加速器并非真正提高了opcode的运行速度,而仅是通过分析opcode后并将它们重新排列以达到快速执行的目的。 常见的php加速器有: 1、APC (Alternative PHP Cache) 遵循PHP License的开源框架,PHP opcode缓存加速器,目前的版本不适用于PHP 5.4。项目地址,http://pecl.php.net/package/APC。 2、eAccelerator 源于Turck MMCache,早期的版本包含了一个PHP encoder和PHP loader,目前encoder已经不在支持。项目地址, http://eaccelerator.net/。 3、XCache 快速而且稳定的PHP opcode缓存,经过严格测试且被大量用于生产环境。项目地址,http://xcache.lighttpd.net/ 4、Zend Optimizer和Zend Guard Loader Zend Optimizer并非一个opcode加速器,它是由Zend Technologies为PHP5.2及以前的版本提供的一个免费、闭源的PHP扩展,其能够运行由Zend Guard生成的加密的PHP代码或模糊代码。 而Zend Guard Loader则是专为PHP5.3提供的类似于Zend Optimizer功能的扩展。项目地址,http://www.zend.com/en/products/guard/runtime-decoders 5、NuSphere PhpExpress NuSphere的一款开源PHP加速器,它支持装载通过NuSphere PHP Encoder编码的PHP程序文件,并能够实现对常规PHP文件的执行加速。项目地址,http://www.nusphere.com/products/phpexpress.htm 五、PHP源码目录结构 PHP的源码在结构上非常清晰。其代码根目录中主要包含了一些说明文件以及设计方案,并提供了如下子目录: 1、build —— 顾名思义,这里主要放置一些跟源码编译相关的文件,比如开始构建之前的buildconf脚本及一些检查环境的脚本等。 2、ext —— 官方的扩展目录,包括了绝大多数PHP的函数的定义和实现,如array系列,pdo系列,spl系列等函数的实现。 个人开发的扩展在测试时也可以放到这个目录,以方便测试等。 3、main —— 这里存放的就是PHP最为核心的文件了,是实现PHP的基础设施,这里和Zend引擎不一样,Zend引擎主要实现语言最核心的语言运行环境。 4、Zend —— Zend引擎的实现目录,比如脚本的词法语法解析,opcode的执行以及扩展机制的实现等等。 5、pear —— PHP 扩展与应用仓库,包含PEAR的核心文件。 6、sapi —— 包含了各种服务器抽象层的代码,例如apache的mod_php,cgi,fastcgi以及fpm等等接口。 7、TSRM —— PHP的线程安全是构建在TSRM库之上的,PHP实现中常见的*G宏通常是对TSRM的封装,TSRM(Thread Safe Resource Manager)线程安全资源管理器。 8、tests —— PHP的测试脚本集合,包含PHP各项功能的测试文件。 9、win32 —— 这个目录主要包括Windows平台相关的一些实现,比如sokcet的实现在Windows下和*Nix平台就不太一样,同时也包括了Windows下编译PHP相关的脚本。 HTML test.sh #!/bin/bash date 嵌入式web开发语言 index.php apache+php CGI Module FastCGI Nginx+fpm [abc] fdsafds [fdaf] fd RDBMS: 1、数据库创建、删除除 2、创建表、删除表、修改表 3、索引的创建、删除 4、用户和权限 5、数据增、删、改 6、查询 DML:Data Manapulate Language: 数据操作语言 INSERT, REPLACE, UPDATE, DELETE DDL:Data Defination Lanuage: 数据定义语言 CREATE, ALTER, DROP DCL:Data Control Language: 数据控制语言 GRANT, REVOKE SELECT RDBMS: egreSQL Oracle, Sybase, Infomix, SQL Server, DB2 MySQL, PostgreSQL, pgsql, EnterpriseDB MySQL, SQL, MySQL AB 去IOE: IBM, Oralce, EMC Oracle, IBM, SUN-->MySQL BEA: WebLogic PepoleSoft OpenOffice LibreOffice MariaDB MySQL --> Percona 反关系模型:NoSQL MongoDB Redis HBase DBMS: 数据管理独立性; 有效地完成数据存取; 数据完整性和安全性; 数据集中管理; 并发存储与故障恢复; 减少应用程序开发时间; SQL: ANSI sql86, sql89, sql92, sql99 DDL, DML, DCL MySQL: Community Edtion Enterprise Edtion 软件包格式: 软件包管理器特有的格式 rpm包,.exe格式等 通用二进制格式 源程序 RHEL 5.8 (32bit) mysql, mysql-server MySQL的RPM包 LAMP: MySQL 通用二进制 mysql, mysql-server 二进制程序 mysql -u USERNAME -p -h MYSER_SERVER -h 127.0.0.1 Linux: socket Windows: memory mysql客户端: 交互式模式 批处理模式 执行mysql脚本 交互式模式中的命令类别: 客户端命令 服务器端命令 都必须使用语句结束符,默认为分号; SQL接口: Oracle, PL/SQL SQL Server, T-SQL 用户:USERNAME@HOST mysqld tcp/3306, mysql, mysql RDBMS: /var/lib/mysql/ 初始化: 关系数据库对象: 库 表 索引 视图 约束 存储过程 存储函数 触发器 游标 用户 权限 事务 表: 行,列 表:实体 行: row 列:field, column 字段名称,数据类型,类型修饰(限制) 字符 CHAR(n) VARCHAR(n) BINARY(n) VARBINARY(n) TEXT(n) BLOB(n) 数值 精确数值 整型 TINYINT SMALLINT MEDIUMINT INT BIGINT 修饰符:UNSIGNED,无符号 NOT NULL 十进制 DECIMAL 近似数值 浮点型 FLOAT DOUBLE 日期时间 DATE TIME DATETIME STAMP 布尔 内置:ENUM, SET DDL CREATE ALTER DROP DML INSERT UPDATE DELETE DCL GRANT REVOKE 创建数据库 CREATE DATABASE db_name; CREATE DATABASE [IF NOT EXISTS] db_name; DROP DATABASE [IF EXISTS] db_name; 创建表 CREATE TABLE tb_name(col1,col2,...); 查看库中的表:SHOW TABLES FROM db_name; 查看表的结构:DESC tb_name; 删除表:DROP TABLE tb_name; 修改表: ALTER TABLE tb_name MODIFY CHANGE ADD DROP DML: INSERT INTO tb_name (col1,col2,...) VALUES|VALUE ('STRING', NUM,...); INSERT INTO tb_name (col1,col2,...) VALUES|VALUE ('STRING', NUM,...),('STRING',NUM,...); UPDATE tb_name SET column=value WHERE DELETE FROM tb_name WHERE CONDITION; 选择: SELECT 字段 FROM tb_name WHERE CONDITION *: 所有字段 WHERE:没有条件表示显示所有行; 创建用户: CREATE USER 'USERNAME'@'HOST' [IDENTIFIED BY 'PASSWORD']; DROP USER 'USERNAME'@'HOST'; HOST: IP: HOSTNAME: NETWORK: 通配符 _:匹配任意单个字符, 172.16.0._ %:匹配任意字符; jerry@'%' DCL: GRANT pri1,pri2,... ON DB_NAME.TB_NAME TO 'USERNAME'@'HOST' [IDENTIFIED BY 'PASSWORD']; REVOKE pri1,pri2,... ON DB_NAME.TB_NAME FROM 'USERNAME'@'HOST'; 查看用户的授权:SHOW GRANTS FOR 'USERNAME'@'HOST'; ALL PRIVILEGES 选择和投影 MySQL基础操作练习(所属的库叫做testdb): 新建如下表(包括结构和内容): ID Name Age Gender Course 1 Ling Huchong 24 Male Hamogong 2 Huang Rong 19 Female Chilian Shenzhang 3 Lu Wushaung 18 Female Jiuyang Shenggong 4 Zhu Ziliu 52 Male Pixie Jianfa 5 Chen Jialuo 22 Male Xianglong Shiba Zhang 2、完成如下操作 (1)找出性别为女性的所有人; (2)找出年龄大于20的所有人; (3)修改Zhu Ziliu的Course为Kuihua Baodian; (4)删除年龄小于等于19岁的所有人; (5)创建此表及所属的库; (6)授权给testuser对testdb库有所有访问权限; mysql> FLUSH PRIVILEGES; 为用户设定密码: 1、mysql>SET PASSWORD FOR 'USERNAME'@'HOST'=PASSWORD('password'); 2、# mysqladmin -uUSERNAME -hHOST -p password 'password' 3、mysql> UPDATE user SET Password=PASSWORD('password') WHERE USER='root' AND Host='127.0.0.1'; AND OR NOT 图形客户端: 1、phpMyAdmin 2、Workbench 3、MySQL Front 4、Navicat for MySQL 5、Toad 单层结构 二层结构 三层结构 练习: apache2.2 + php53 + mysql平台 1、创建7个基于域名的虚拟主机;分别用于安装phpwind、discuz、phpbb、drupal、joomla、wordpress和phpMyAdmin; 2、设定phpMyAdmin仅使用https,不允许通过http访问; DDL,DML,DCL 库、表、索引、视图、存储过程、存储函数、触发器、用户、游标、约束(键,码)、事件调度器(Event Scheduler) 事务、权限 DDL: CREATE ALTER DROP DML: INSERT INTO UPDATE DELETE SELECT DCL: GRANT REVOKE Field: Col_Name Col_Defination 数据类型 修饰符 User CHAR(20) NOT NULL, UNSIGNED:无符号, 8bit: 0-255, -128 127 数据类型: 字符型 定长: CHAR() BINARY() 变长 VARCHAR() VARBINARY() 数值型 精确 INT DECIMAL 近似 FLOAT DOUBLE 日期时间型 DATE TIME DATETIME STAMP PHP:脚本编程语言,php解释器 WebApp:面向对象的特性 Zend: 第一段:词法分析、语法分析、编译为Opcode; opcode放置于内存中 第二段:执行opcode; PHP 缓存器: APC eAccelerator XCache PHP解释器-->MySQL, 如何交互? bash: a.sh php53-mysql httpd+php: CGI Module FastCGI/fpm LAMP: httpd php53 php53-mysql mysql-server 编译配置LAMP: Linux, Apache, MySQL, PHP(Python, Perl) Apache: ASF(apache软件基金会), httpd, tomcat, cloudware httpd: 2.4.4 php: 5.4.13 MySQL: 5.6.10 (rpm, 通用二进制, 源码) httpd --> MySQL --> php --> XCache httpd apr: Apache Portable Runtime apr-util apr-iconv rpm包: /bin, /sbin, /usr/bin, /usr/sbin /lib, /usr/lib /etc /usr/share/{doc,man} 编译安装: /usr/local/ bin, sbin lib etc share/{doc,man} /usr/local/apr/ bin, sbin, lib, includes, etc, share/man apr --> apr-util --> httpd --> MySQL MySQL:配置文件格式, 集中式配置文件,可以为多个程序提供配置 [mysql] fdaf [mysqld] dfa [client] fda /etc/my.cnf --> /etc/mysql/my.cnf --> $BASEDIR/my.cnf --> ~/.my.cnf MySQL服务器维护了两类变量: 服务器变量: 定义MySQL服务器运行特性 SHOW GLOBAL VARIABLES [LIKE 'STRING']; 状态变量: 保存了MySQL服务器运行统计数据 SHOW GLOBAL STATUS [LIKE 'STRING'] MySQL通配符: _:任意单个字符 %:任意长度的任意字符 php53-mbstring MPM: prefork, worker, event 模块化方式使用MPM # yum -y install pcre-devel # tar xf apr-1.4.6.tar.bz2 # cd apr-1.4.6 # ./configure --prefix=/usr/local/apr # make # make install # tar xf apr-util-1.4.1.tar.bz2 # cd apr-util-1.4.1 # ./configure --prefix=/usr/local/apr-util --with-apr=/usr/local/apr # make # make install # tar xf httpd-2.4.4.tar.bz2 # cd httpd-2.4.4 # ./configure --prefix=/usr/local/apache --sysconfdir=/etc/httpd --enable-so --enable-rewirte --enable-ssl --enable-cgi --enable-cgid --enable-modules=most --enable-mods-shared=most --enable-mpms-shared=all --with-apr=/usr/local/apr --with-apr-util=/usr/local/apr-util # make # make install php连接mysql并获取数据测试: "; } mysql_close(); ?> LAMP: phpMyAdmin 论坛: discuz phpwind phpbb CMS: drupal joomla LAMP wordpress: 个人博客系统 httpd 2.4新特性: 1、MPM可于运行时装载; --enable-mpms-shared=all --with-mpm=event 2、Event MPM 3、异步读写 4、在每模块及每目录上指定日志级别; 5、每请求配置;, , ; 6、增强的表达式分析器; 7、毫秒级的KeepAlive Timeout; 8、基于域名的虚拟主机不再需要NameVirtualHost指令; 9、降低了内存占用; 10、支持在配置文件中使用自定义变量; --enable-modules=most 新增加的模块: mod_proxy_fcgi mod_proxy_scgi mod_proxy_express mod_remoteip mod_session mod_ratelimit mod_request 等等; 对于基于IP的访问控制 Order allow,deny allow from all 2.4中不再支持此方法 2.4使用Require user Require user USERNAME Require group GRPNAME Require ip IPADDR Require not ip IPADDR IP NETWORK/NETMASK NETWORK/LENGTH NET 172.16.0.0/255.255.0.0 = 172.16.0.0/16 = 172.16 Require host HOSTNAME HOSTNAME DOMAIN www.magedu.com .magedu.com 允许所有主机访问: Require all granted 拒绝所有主机访问: Require all deny php支持扩展功能: xcache 垃圾回收器 压力测试工具: ab http_load webbench siege 使用ab命令测试apache服务器性能: -c concurrency:一次性发起的请求个数,默认为1; -i:测试时使用HEAD方法,默认为GET; -k:启用HTTP长连接请求方式; -n requests:发起的模拟请求个数;默认为1个;请求数要大于等于并发连接数; -q:静默模式,在请求数大于150个时不输出请求完成百分比; 输出结果: Time taken for tests:从第一个请求连接建立到收到最后一个请求的响应报文结束所经历的时长; Complete requests:成功的请求数; -f protocol:指定请求时使用的协议,SSLv2、SSLv3、TLSv1或者ALL fcgi(fpm): Web: cookie, session 共享,URL, --enable-rewrite Mail Server: SMTP: Simple Mail Tansfer Protocol ESMTP: Extended POP3: Post Office Protocol IMAP4: Internet Mail Access Protocol UUCP: Unix to Unix CoPy Unix主机复制文件的协议 SMTP:(25/tcp) C/S Server Client smtpd, smtp(sendmail) 北 --> 上 Open Relay: 开放式中继 SASL: Simple Authintication Secure Layer, 简单认证安全层 WebMail LDAP: Lightweight Directory Access Protocol MySQL: 虚拟用户:仅用于访问某服务的数字标识; 用户:字符串,凭证 MTA:邮件传输代理,SMTP服务器 sendmail, UUCP 单体结构,SUID,配置文件语法(m4编写) qmail postfix:模块化设计,安全,跟sendmail兼容,效率高 exim: MTA Exchange (Windows, 异步消息协作平台) SASL: v2 cyrus-sasl courier-authlib MDA: procmail maildrop MRA: (pop3, imap4) cyrus-imap dovecot MUA: Outlook Express, Outlook Foxmail Thunderbird Evolution mutt(文本界面) Webmail: Openwebmail squirrelmail Extmail(Extman) EMOS, CentOS Postfix + SASL (courier-authlib) + MySQL Dovecot + MySQL Extmail + Extman + httpd postfix: rpm smtps pop3s imaps 明文传输:smtp --> SMTPS pop3S postfix的配置文件: postfix模块化: master: /etc/postfix/master.cf mail: /etc/postfix/main.cf 参数 = 值: 参数必须写在行的绝对行首,以空白开头的行被认为是上一行的延续 postconf: 配置postfix -d: 显示默认的配置 -n: 修改了的配置 -m: 显示支持的查找表类型 -A: 显示支持的SASL客户端插件类型 -e PARMATER=VALUE: 更改某参数配置信息,并保存至main.cf文件中 smtp状态码: 1xx: 纯信息 2xx: 正确 3xx: 上一步操作尚未完成,需要继续补充 4xx: 暂时性错误 5xx: 永久性错误 smtp协议命令: helo (smtp协议) ehlo (esmtp协议) mail from: rcpt to: alias: 邮件别名 abc@magedu.com: postmaster@magedu.com /etc/aliases --> hash --> /etc/aliases.db # newaliases postfix默认把本机的IP地址所在的网段识别为本地网络,并且为之中继邮件; SMTP --> SMTPS ESMTP POP3: 邮局协议 IMAP4: Internet Mail Access Protocol SASL: Simple Authentication Secure Layer v1, v2 MDA: 邮件投递代理 procmail, maildrop MUA: mutt, mail tom@a.org --> c.com (MX) --> jerry@b.net (mail.b.net) Mail Relay: MTA: sendmail, qmail, postfix, exim Postfix: 模块化设计, master(/etc/postfix/master.cf) (/etc/postfix/main.cf) postconf -d -n -m -A: 客户端支持的SASL插件类型 -a: 服务器端支持的SASL插件类型 -e PARA=VALUE SMTP: helo mail from rcpt to data . quit MX: mail.magedu.com root@mail.magedu.com ==> root@magedu.com 邮件地址伪装 允许使用$PARAMETER引用相应参数的值 MRA: cyrus-imap, dovecot dovecot依赖mysql客户端 pop3: 110/tcp imap4: 143/tcp 以明文方式工作。 dove支持四种协议:pop3, imap4, pops, imaps 配置文件:/etc/dovecot.conf 有SASL认证能力 邮箱格式: mbox:一个文件存储所有邮件; maildir: 一个文件存储一封邮件,所有邮件存储在一个目录中; /etc/rc.d/init.d/dovecot postfix + SASL 用户认证 1、启动sasl,启动sasl服务 /etc/rc.d/init.d/saslauthd /etc/sysconfig/saslauthd saslauthd -v: 显示当前主机saslauthd服务所支持的认证机制,默认为pam smtp: connection: smtpd_client_restrictions = check_client_access hash:/etc/postfix/access helo: smtpd_helo_restrictions = check_helo_access mysql:/etc/postfix/mysql_user mail from: smtpd_sender_restrictions = rcpt to: smtpd_recipient_restrictions = data: smtpd_data_restrictions = mail from: obama@ a.com /etc/aliases --> /etc/aliases.db 查找表: 访问控制文件 /etc/postfix/access --> hash格式 --> /etc/postfix/access.db obama@aol.com reject microsoft.com OK a@magedu.com hadoop@magedu.com mynetworks 127.0.0.0/8 SASL认证: postfix: smtpd_client /lib64, /lib dovecot RHEL 6.3 Development Tools Server Platform Development Desktop Platform Development MySQL: rpm: mysql-server mysql-devel RHEL自身的提供的rpm包: 头文件:/usr/include/ 库文件:/lib, /usr/lib 第三方的rpm包: /usr/local, /opt 头文件:/usr/include, /usr/local/include 库文件:/usr/local/lib /etc/ld.so.conf /etc/ld.so.conf.d/local.conf mutt -f PROTOCOL://username@magedu.com@172.16.100.1 虚拟域 postifx, sasl, httpd, openssl-devel SASL: cyrus-sasl 服务脚本:saslauthd Postfix --> /usr/lib/sasl2/smtpd.conf pwcheck_method: saslauthd mech_list: PLAIN LOGIN httpd: 虚拟主机, 多个站点 中心主机:site 邮件服务器, 域名,admin@magedu.com 物理服务器: 一台服务器为多个域收发邮件 mydestination = mydomain = a.org, b.net, c.com, ab.com, 使用查找表 myorigin = 虚拟域: 用户别名: 用户帐号:虚拟用户 自怜: 虚拟用户: Maildir: /var/mailbox/ Suexec: apache, httpd User Group httpd(apache,apache) --> cgi(postfix,postfix): postfix+sasl+dovecot, dovecot , pop3, imap4 ssl smtps原理 caller: postfix + sasl + courier-authlib + MySQL(实现了虚拟用户、虚拟域) + dovecot + Webmail {extmail(extmain)} tom, jerry mageedu@126.com linuxedu@foxmail.com ssl: SMTP, POP3, IMAP4 plaintext: 纯文本 http --> https (ssl/tls) smtp --> smtps, 25 --> 465 S/MIME Security USER<-->USER 用户证书: mail, hash(finger print), OpenSSL, GPG(PGP) GNU Privacy Guard PGP: PKI: CA pop3s: 995/tcp imaps: 993/tcp SSL: 会话加密 S/MIME https: openssl s_client -connect SERVER:PORT -CAfile /path/to/CA_CERT 协议报文分析器: sniffer: 商业工具 tcpdump, wireshark(GUI), tshark(CLI) tcpdump [options] 过滤条件 获取报文的条件: ip src host 172.16.100.1 tcp src or dst port 21 udp dst port 53 tcp src or dst port 21 AND src host 172.16.100.1 tcp port 21 AND host 172.16.100.1 tcpdump的语法: tcpdump [options] [Protocol] [Direction] [Host(s)] [Value] [Logical Operations] [Other expression] Protocol(协议): Values(取值): ether, fddi, ip, arp, rarp, decnet, lat, sca, moprc, mopdl, tcp and udp. If no protocol is specified, all the protocols are used. Direction(流向): Values(取值): src, dst, src and dst, src or dst If no source or destination is specified, the "src or dst" keywords are applied. (默认是src or dst) For example, "host 10.2.2.2" is equivalent to "src or dst host 10.2.2.2". Host(s)(主机): Values(替代关键字): net, port, host, portrange. If no host(s) is specified, the "host" keyword is used. 默认如果此段没有指定关键字,默认即host。 For example, "src 10.1.1.1" is equivalent to "src host 10.1.1.1". Logical Operations: (1) AND and or && (2) OR or or || (3) EXCEPT not or ! 常用选项: -i any : Listen on all interfaces just to see if you're seeing any traffic. -n : Don't resolve hostnames. -nn : Don't resolve hostnames or port names. -X : Show the packet's contents in both hex and ASCII. -XX : Same as -X, but also shows the ethernet header. -v, -vv, -vvv : Increase the amount of packet information you get back. -c # : Only get x number of packets and then stop. -s : Define the snaplength (size) of the capture in bytes. Use -s0 to get everything, unless you are intentionally capturing less. -S : Print absolute sequence numbers. -e : Get the ethernet header as well. -q : Show less protocol information. -E : Decrypt IPSEC traffic by providing an encryption key. -A :Display Captured Packets in ASCII -w /path/to/some_file : Capture the packets and write into a file -r /path/from/some_file : Reading the packets from a saved file -tttt : Capture packets with proper readable timestamp ip host 172.16.100.1 ip src host 172.16.100.1 ip dst host 172.16.100.1 ip src and dst host 172.16.100.1 tcp src port 110 关闭OpenRelay RBL: Realtime Black List 实时黑名单 内容过滤器: APACHE: Spamassassin Perl: 垃圾邮件分拣器 特征码 病毒邮件: clamav: 开源杀毒软件 病毒邮件服务器网关 呼叫器:caller, MIMEDefang, Mailscanner, Amavisd-new amavisd-new: spamassassin, clamav perl: CPAN 我未曾见过一个早起、勤奋、谨慎、诚实的人抱怨命运不好! ——富兰克林 iptables/netfilter pop3s: 995/tcp smtps: 465/tcp Name Resolve: Username --> UID, Group-->GID, Service Name --> PORT, Hostname --> IP Username --> UID: /etc/passwd Hostname --> IP: DNS, /etc/hosts Service Name --> Ports: /etc/services, MySQL: services,ports 只要有一种数据存储格式:解析库,不同解析库需要不同查询方式 nsswitch S/MIME Openssl, GPG(PGP) maildrop: MDA, Courier, 邮件投递 FTP:File Transfer Protocol 21/tcp: 文件共享服务:应用层,ftp NFS: Network File System (RPC: Remote Procedure Call, 远程过程调用) Samba: CIFS/SMB FTP: tcp, 两个连接 命令连接,控制连接:21/tcp 数据连接: 主动模式:20/tcp 被动模式:端口随机 数据传输模式(自动模式): 二进制: 文本: ftp server --> ftp client This is a test file. --> 结构化数据 半结构化数据 非结构化数据 文本,二进制 html, mp3, jpeg 服务器端程序: wu-ftpd: vsftpd: Very Secure ftp Daemon proftpd: pureftpd Filezilla Serv-U 客户端程序: CLI: ftp lftp GUI: gftpd FlashFXP Cuteftp Filezilla vsftpd: /etc/vsftpd: 配置文件目录 /etc/init.d/vsftpd: 服务脚本 /usr/sbin/vsftpd: 主程序 基于PAM实现用户认证: /etc/pam.d/* /lib/security/* /lib64/security/* 支持虚拟用户 vsftpd: (ftp, ftp) /var/ftp:ftp服务根目录 上传和下载: mail: ftp: 系统用户 匿名用户 --> 系统用户: anonymous_enable 系统用户: local_enable 虚拟用户 --> 系统用户 /var/ftp: ftp用户的家目录 匿名用户访问目录 chroot: 禁锢用户于其家目录中 系统用户: write_enable=YES: 上传文件 文件服务权限:文件系统权限*文件共享权限 守护进程: 独立守护:适用于访问量大,用户在线时间长的用户 瞬时守护 由xinetd代为管理 vsftpd: max_clients=# max_per_ip=# 安全通信方式: ftps: ftp+ssl/tls sftp: OpenSSH, SubSystem, sftp(SSH) vsftpd: PAM(手动定义配置文件) 匿名 本地 虚拟用户 MySQL: VSFTPD, users : Name,Password /etc/vsftpd/vusers: --> db_load USERNAME PASSWORD db4-utils postconf -m