根据红帽RHEL7官方文档对centos7进行技术剖析(三)

Author by :xxbAndy
Blog:http://my.oschina.net/xxbAndy/blog
QQ:371990778


第一章:高级网络配置
1.虚拟网卡的添加
ifconfig eth0:1 10.0.0.2 netmask 255.255.255.0 临时添加虚拟网卡
永久保存虚拟网卡,必须在配置文件中写ifcfg-eth0/1
//注意:NetworkManager 是不支持桥接和虚拟接口。但是在centos7中NetworkManager工具完美的兼容了/etc/sysconfig/network-scripts/下的网络配置文件,并且支持了bond和桥接网络。

2.网络接口的配置-bonding
使用bonding 内核模块和成为通道绑定接口的特殊网络接口将多个网络接口绑定到一个通道
主动备份配置
模式0平衡轮循:将两块网卡合为一起,在所有slave中传输包,端口为之和
模式1主动备份:一次只能使用一个slave接口,如果接口出现故障,另外一个接管
模式2容错模式:可以防止局域网的网络风暴
(1)建立绑定接口bond
vim /etc/sysconfig/network-scripts/ifcfg-bond0
 DEVICE=bond0
 ONBOOT=yes
 BOOTPROTO=none
 IPADDR=192.168.0.57
 NETMASK=255.255.25.0
 GATEWAY=192.168.0.253
 BONDING_OPTS="mode=1 miimon=50"   模式1 50毫秒换接口
vim /etc/sysconfig/network-scripts/ifcfg-eth0/1
DEVICE=eth0/1
ONBOOT=yes
SLAVE=yes
BOOTPROTO=none
MASTER=bond0
USERCTL=no

//配置系统加载bonding模块
vim /etc/modprobe.d/bonding.conf             
 alias bond0 bonging
//附加slave接口到bond0
vim /etc/rc.d/rc.local
ifenslave bond0 eth0 eth1

重启网卡(service network restart /systemctl restart network)

修改内核参数
watch /proc/net/bonding/bond0

测试:使用ifdown/up eth0/1 查看bond0使用的网卡接口

3. 网络接口禁止ping(内核中的文件,但是开启后就会失效---修改sysctl)
内核功能参数(内核启动参数在/boot)
echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all    //只是暂时生效
sysctl -p 查看已经生效的配置,让配置文件中的配置立即生效
sysctl -a 查看可以修改的配置
sysctl -w  修改立即生效  ,让配置中没有的配置立即生效
sysctl -e 让
添加到/etc/sysctl.conf  sysctl -p 立即生效


4.静态路由的配置
ip route show 显示系统路由表
启用内核路由功能:sysctl -e net.ipv4.ip_forward=1
//临时修改静态路由配置
ip route add 10.0.0.0/24 via 192.168.0.22
ip route add 192.168.0.0/24 dev eth0
ip route add default via 192.168.0.253 dev eth0 (给本机添加默认路由)

[root@desktop Desktop]# ip route show
10.0.0.0/24 via 192.168.0.22 dev eth0
192.168.0.0/24 dev eth0  proto kernel  scope link  src 192.168.0.22
169.254.0.0/16 dev eth0  scope link  metric 1002

//永久静态路由修改配置
vim /etc/sysconfig/network-scripts/route-eth0
ADDRESS0=10.0.0.0               因为可以添加多条路由,因此从0开始
NETMASK0=255.255.255.0
GATEWAY0=192.168.0.22
ip route del 10.0.0.0/24 via 192.168.0.22   //删除静态路由
注意; 还必须得删除配置文件哦


第二章:红帽虚拟化的使用
virt-manager
虚拟机的远程安装 可以用ssh -X 192.168.0.22
virt-install --vnc --vncport=7000 --vnclisten=192.168.0.22(宿主机) --prompt
远程交互式安装虚拟机

然后可以使用其他主机vncviewer 192.168.0.22:7000 远程安装!

第三章:squid代理服务器

简介:流行的代理服务器和Web缓存服务器,从作为网页服务器的前置cache服务器缓存相关请求来提高Web服务器的速度,到为一组人共享网络资源而缓存万维网,域名系统和其他网络搜索,到通过过滤流量帮助网络安全,到局域网通过代理上网。
优点:
对于Web用户来说,Squid是一个高性能的代理缓存服务器,可以加快内部网浏览Internet的速度,提高客户机的访问命中率。Squid用一个单独的、非模块化的、I/O驱动的进程来处理所有的客户端请求。
    Squid的另一个优越性在于它使用访问控制清单(ACL)和访问权限清单(ARL)。访问控制清单和访问权限清单通过阻止特定的网络连接来减少潜在的Internet非法连接,可以使用这些清单来确保内部网的主机无法访问有威胁的或不适宜的站点

都是作为缓冲服务器,但是有两种,并且几种方式
正向代理
a.标准的代理缓冲服务器
  一个标准的代理缓冲服务被用于缓存静态的网页(例如:html文件和图片文件等)到本地网络上的一台主机上(即代理服务器)。当被缓存的页面被第二次访问的时候,浏览器将直接从本地代理服务器那里获取请求数据而不再向原web站点请求数据。这样就节省了宝贵的网络带宽,而且提高了访问速度。但是,要想实现这种方式,必须在每一个内部主机的浏览器上明确指明代理服务器的IP地址和端口号。客户端上网时,每次都把请求送给代理服务器处理,代理服务器根据请求确定是否连接到远程web服务器获取数据。如果在本地缓冲区有目标文件,则直接将文件传给用户即可。如果没有的话则先取回文件,先在本地保存一份缓冲,然后将文件发给客户端浏览器。
b.  透明代理缓冲服务器
透明代理缓冲服务和标准代理服务器的功能完全相同。但是,代理操作对客户端的浏览器是透明的(即不需指明代理服务器的IP和端口)。透明代理服务器阻断网络通信,并且过滤出访问外部的HTTP(80端口)流量。如果客户端的请求在本地有缓冲则将缓冲的数据直接发给用户,如果在本地没有缓冲则向远程web服务器发出请求,其余操作和标准的代理服务器完全相同。对于Linux操作系统来说,透明代理使用Iptables或者Ipchains实现。因为不需要对浏览器作任何设置,所以,透明代理对于ISP(Internet服务器提供商)特别有用。


反向代理:
 a.  反向代理缓冲服务器
  反向代理是和前两种代理完全不同的一种代理服务。使用它可以降低原始WEB服务器的负载。反向代理服务器承担了对原始WEB服务器的静态页面的请求,防止原始服务器过载。它位于本地WEB服务器和Internet之间,处理所有对WEB服务器的请求,组织了WEB服务器和Internet的直接通信。如果互联网用户请求的页面在代理服务器上有缓冲的话,代理服务器直接将缓冲内容发送给用户。如果没有缓冲则先向WEB服务器发出请求,取回数据,本地缓存后再发送给用户。这种方式通过降低了向WEB服务器的请求数从而降低了WEB服务器的负载。

正向代理加速(一个可以访问外网,一个属于局域网)
squid的功能:在企业中减少网络压力,直接从缓存中提取你所要访问的内容

标准的代理缓冲服务器:
配置网络环境:
1.添加新网卡,在udev中删除相关的网卡设备标识,然后重新启动主机。
添加网卡成功!
[root@localhost network-scripts]# cat ifcfg-eth1  (内网私有)
DEVICE=eth1
IPADDR=20.0.0.1                                   内网访问外网的网关
NETMASK=255.255.255.0
ONBOOT=yes
BOOTPROTO=none

[root@localhost network-scripts]# cat ifcfg-eth0    真实网卡(通向外网)
DEVICE=eth0
IPADDR=192.168.0.75
NETMASK=255.255.255.0
ONBOOT=yes
BOOTPROTO=none
GATEWAY=192.168.0.253
DNS1=192.168.0.253

2.编写网卡配置文件
安装squid软件:
配置squid服务
 squid配置文件,从上到下读取,匹配则通过,
 所以,先允许后拒绝。
  acl okclient src 20.0.0.0/24
  http_access allow okclient
 打开缓存目录
  cache_dir ufs /var/spool/squid 100 16 256
把外网的文件放在squid的缓存目录,内网主机借助缓存文件访问外网256个缓存子目录,最大100M

启动squid服务,查看端口
查看缓存目录的以及目录和二级目录
3.修改内网使用praxy代理
在代理设置代理网关和端口。20.0.0.1
设置内网IP:               不需用网关    
DEVICE=eth0
ONBOOT=yes
BOOTPROTO=none
IPADDR=20.0.0.88
NETMASK=255.255.255.0

4.拒绝访问特定站点:

修改配置squid配置文件
acl badnet dstdomain www.qq.com
http_access deny badnet  最好放在刚才的allow前面,自己理解去
 注意:squid重启比较慢,可以直接reload加载配置文件

注意:localnet后面包含了很多ip,所以啊,deny必须放在合适的位置才能生效

在squid的文档中查找其他的应用:禁止http访问。。。。。
/usr/share/doc/squid-3.1.10/squid.conf.documented
注意:使用了代理服务器后,使用那个关闭后只能关闭internet选项才能上网

 

5.CDN反向代理加速
curl -I www.qq.com  查看自己访问的额是那个服务器
使用ssh不快的时候可以加/etc/hosts
假使一个是本地缓存,另外一个是真正的服务器
思考:反响代理和正向代理的区别(好像是加速的人不一样啊)
重新安装squid
配置文件,允许所有人访问;修改端口为80.

解决硬盘读取速度的瓶颈:
要使系统当中读取速度不受硬盘的影响,可以将文件挂载在内存当中
一般在/dev/shm都是挂载在内存上的目录
可以分别在/dev/shm和/mnt下截取大文件,查看速度


继续安装配置squid
http_access allow all
http_port 80 vhost
cache_peer 192.168.0.57 parent 80 0 no-query originserver

其中57主机作为web服务器,squid服务器只作为一个缓存服务器
icp端口,用来通知备用squid的
在squid中需要在端口加vhost
Memcached(缓存系统)自动推送,主服务器自动向squid缓存推送更新文件。

6.squid 负载均衡(基于域名的负载均衡)
squid'代理主机一定注意自己的解析
客户端必须得有域名的解析
两个web后端,提供服务
用squid做负载
http_port 80 vhost vport
cache_peer 192.168.0.57 parent 80 0 no-query originserver name=a round-robin
cache_peer 192.168.0.73 parent 80 0 no-query originserver name=b round-robin
cache_peer_domain a b www.xxb.com
在客户端要能够解析到www.xxb.com


感悟:淘宝和新浪的薪资标准,从访问的速度上就可以看出,理解到

 


第四章:DNS环境的搭建
[root@master125 ~]# yum install bind -y    安装DNS环境。
1.构建缓存DNS

options {
//      listen-on port 53 { 127.0.0.1; };
//      listen-on-v6 port 53 { ::1; };
        directory       "/var/named";
        dump-file       "/var/named/data/cache_dump.db";
        statistics-file "/var/named/data/named_stats.txt";
        memstatistics-file "/var/named/data/named_mem_stats.txt";
//      allow-query     { localhost; };
 forwarders      { 172.25.254.250; }; 反转DNS(真实)


 dnssec-validation no;

[root@master125 ~]# systemctl restart named
重启服务。
在客户端设置DNS,使用域名
访问主机,首先,主机会从本地/etc/hosts文件查询,如果有记录就会返回,没有记录就会像125的DNS主机(缓存DNS)上查询,如果125主机没有记录,就会去250(下一个DNS)上面查询,并且将查询结果缓存到125主机上。这样就实现了125下的所有主机通过125上网了。。。

 

2.简单DNS正向解析的环境搭建
(主配置文件/etc/resov.conf中需要可以取消掉forwarders)


[root@master125 ~]# vim /etc/named.rfc1912.zones   配置需要维护的域
zone "xxbandy.com" IN {
        type master;
        file "xxbandy.com";
        allow-update { none; };
};

[root@master125 named]# cp -p /var/named/named.localhost /var/named/xxbandy.com

[root@master125 named]# vim /var/named/xxbandy.com
$TTL 1D
@       IN SOA  dns.xxbandy.com. echo.xxbandy.com. (
                                        0       ; serial
                                        1D      ; refresh
                                        1H      ; retry
                                        1W      ; expire
                                        3H )    ; minimum
        NS      dns.xxbandy.com.
dns     A       172.25.254.125
bbs     A       172.25.254.126
news    A       172.25.254.127
www     A       172.25.254.128
hello   A       172.25.254.129

[root@master125 named]# systemctl restart named
[root@master125 named]# ping www.xxbandy.com
PING www.xxbandy.com (172.25.254.128) 56(84) bytes of data.
64 bytes from 172.25.254.128: icmp_seq=1 ttl=64 time=2.24 ms

[root@master125 named]# dig www.xxbandy.com

; <<>> DiG 9.9.4-RedHat-9.9.4-14.el7 <<>> www.xxbandy.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 56091
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 2

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;www.xxbandy.com.  IN A

;; ANSWER SECTION:
www.xxbandy.com. 86400 IN A 172.25.254.128

;; AUTHORITY SECTION:
xxbandy.com.  86400 IN NS dns.xxbandy.com.

;; ADDITIONAL SECTION:
dns.xxbandy.com. 86400 IN A 172.25.254.125

;; Query time: 3 msec
;; SERVER: 172.25.254.125#53(172.25.254.125)
;; WHEN: Mon Jan 26 11:32:52 CST 2015
;; MSG SIZE  rcvd: 94


注意:防火墙(iptables)的影响是灰常重要滴呦,否则客户端是不能访问到你所搭建的DNS服务的。


3.简单反向解析(PTR记录)的环境搭建

[root@master125 named]# vim /etc/named.rfc1912.zones
zone "254.25.172.in-addr.arpa" IN {
        type master;
        file "xxbandy.ptr";
        allow-update { none; };
};
[root@master125 named]# cp -p /var/named/named.loopback /var/named/xxbandy.ptr

[root@master125 named]# vim /var/named/xxbandy.ptr
$TTL 1D
@       IN SOA  dns.xxbandy.com echo.xxbandy.com. (
                                        0       ; serial
                                        1D      ; refresh
                                        1H      ; retry
                                        1W      ; expire
                                        3H )    ; minimum
        NS      dns.xxbandy.com.
        A       172.25.254.125
124     PTR     dns.xxbandy.com.
125     PTR     dns.xxbanwwdy.com.
126     PTR     dns.xxb123.com.
127     PTR     dns.xxb.com.
128     PTR     dns.andy.com.
129     PTR     dns.hello.com.


[root@master125 named]# systemctl restart named
[root@master125 named]# dig -x 172.25.254.126

; <<>> DiG 9.9.4-RedHat-9.9.4-14.el7 <<>> -x 172.25.254.126
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 9124
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 2

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;126.254.25.172.in-addr.arpa. IN PTR

;; ANSWER SECTION:
126.254.25.172.in-addr.arpa. 86400 IN PTR dns.xxb123.com.

;; AUTHORITY SECTION:
254.25.172.in-addr.arpa. 86400 IN NS dns.xxbandy.com.

;; ADDITIONAL SECTION:
dns.xxbandy.com. 86400 IN A 172.25.254.125

;; Query time: 0 msec
;; SERVER: 172.25.254.125#53(172.25.254.125)
;; WHEN: Mon Jan 26 11:47:34 CST 2015
;; MSG SIZE  rcvd: 126


4.DNS双向解析

 

5.辅助DNS搭建
辅助的添加指定:
zone "xxbandy.com" IN {
        type slave;
        masters { 172.25.254.125; };
        file "slaves/xxbandy.com";
        allow-update { none; };
};

 

主DNS的修改:
zone "xxbandy.com" IN {
        type master;
        file "xxbandy.com";
        allow-update { none; };
 allow-transfer { 172.25.254.196; };
 also-notify { 172.25.254.196; };
};


重启两个DNS的named服务,此时发现辅助196主机中的/var/named/slaves中生成域文件.
(注意:selinux的影响是很大很大滴)

6.客户端更新DNS
首先在DNS服务器端进行修改参数
# vim /etc/named.rfc1912.zones
    modify:
 allow-update { 172.25.254.254;};
重启服务

#nsupdate
>server 172.25.254.125
>update add lala.xxbandy.com 86400 A 172.25.254.244
>send
>quit

注意;master中的防火墙,selinux以及权限的影响
第一次更新可能会出现问题,因为要在DNS主机生成一个xxbandy.com.jnl的文件,但是/var/named 默认对named用户不可写。(修改权限后进行重启服务)

客户端更新成功后会在DNS主机里的xxbandy.com.jnl文件写进更新的信息。服务重启后会加载到xxbandy.com里面。

7.使用key更新DNS
仅允许有KEY文件的主机进行更新。
7.1key的制作
# dnssec-keygen -a HMAC-MD5 -b 128 -n HOST xxb
Kxxb.+157+57928   生成的key

#cat  Kxxb.+157+57928.key 查看key秘钥

#cp /etc/rndc.key -p /etc/xxb.key
#vim /etc/xxb.key
key xxb {  指定key的名字
        algorithm hmac-md5;
        secret "Jq8ndMbhTPa2Ecz6P4u4GA=="; 修改key
};

//将key文件导入dns配置文件
修改域文件
vim named.rfc1912.zones
  allow-update { key xxb ;};
修改主配置文件,导入key
vim named.conf
  include “/etc/xxb.key”;
重启dns服务器   成功则配置完毕
//注意:只要是dns下的配置文件,大多都是要以named身份运行的,勤看日志哦
然后将生成的key文件远程拷贝到客户端。

注意:dns的key更新在6里面对时间的问题要求是很严格滴
(需要更新时间哦)
客户端key更新:
##nsupdate -k Kxxb.+157+39653.private
>server 192.168.0.75  //DNS服务器
>update  add xue.example.com 86400 A 192.168.0.22
>send
>quit
注意:若果更新出现问题,注意查看dns主机的日志信息。


DDNS
ddns(dhcp+dns)  花生壳,动态域名解析
DDNS是将用户的动态IP地址映射到一个固定的域名解析服务上,用户每次连接网络的时候客户端程序就会通过信息传递把该主机的动态IP地址传送给位于服务商主机上的服务器程序,服务器程序负、责提供DNS服务并实现动态域名解析


1.前提:先配置基本的dncp和bind服务,然后
修改两方的配置文件,整合dns和dncp
echo > /var/tail/message 清空日志
2. dns的key更新
create key:
dnssec-keygen -a HMAC-md5 -b 128 -n HOST  key-name
cat %^&%^&.private/.key
cp -p rndc.key key-name.key
vim key-name.key 修改名字和加密字符串
配置named.conf
vim named.conf //include "/etc/xxb.key"
vim named.rfrc1217.zones // allow-update { key xxb;};
//注意:一定让named目录可写
测试dns的key更新,拷贝钥匙文件
##nsupdate -k 私钥

3.将key整合到dhcp
man 5 dhcpd.conf 查看添加dhcp 到zones
允许dns更新dncp
修改dhcp配置:
vim dhcpd.conf
ddns-update-style interim;   // tail /var/lib/dhcpd/dhcpd.leases 查看dhcp租用
key xxb {                   //xxb 为dns验证文件
         algorithm hmac-md5;
         secret UESJCvqtWk/tEdfGZz865A==;  //生成的验证
       };

       zone xxbandy.com {
         primary 192.168.2.22;
         key xxb;
       }

4.客户端修改(客户端有固定的主机名,比如cacti.example.com)
删除dhcp里的eth-0文件
vim /etc/dhcp/dhcpd.conf
send fqdn.fqdn "cacti.example.com.";
send fqdn.encoded on;
send fqdn.server-update on;


测试:重启dns和dhcp服务器
 在客户端一直dig cacti.example.com 会发现,ip不固定,但是主机名cacti.example.com是固定的

 

ddns组网原理
C/S结构:
DDNS客户端:需要动态更新域名和IP地址对应关系的设备。Internet用户通常通过域名访问提供应用层服务的服务器,如HTTP、FTP服务器。为了保证IP地址变化时,仍然可以通过域名访问这些服务器,当服务器的IP地址发生变化时,它们将作为DDNS客户端,向DDNS服务器发送更新域名和IP地址对应关系的DDNS更新请求。
DDNS服务器:负责通知DNS服务器动态更新域名和IP地址之间的对应关系。接收到DDNS客户端的更新请求后,DDNS服务器通知DNS服务器重新建立域名和IP地址之间的对应关系。从而保证即使DDNS客户端的IP地址改变,Internet用户仍然可以通过同样的域名访问DDNS客户端。


“好像是后端有个ddns,然后让web服务器放在(所谓的客户端)而其他用户访问这个客户端域名是固定的”

第五章:GPG文件加密
//一:使用DnuPG加密文件:
加密是一种可保护在系统上存储或者通过网络传输的数据免受损坏的技术,用来验证来自特定人员的数据是否经过修改,可以维护数据的机密性。
几种加密方式:kerbers(使用对称加密【基于作为共享密钥的密码】验证用户身份)
           TLS/SSL(保护网络服务)或LUKS(保护块设备上的文件系统)
            GPG用于文件的加密(原理类似银行用的优盾)
原理:服务端生成公/私钥,将死公钥到给客户端,客户端将文件加密导入服务端
gpg选项:
删除密钥:gpg --delete-secret-keys keyname
生成密钥对:gpg --gen-key
列出公钥:gpg --list-keys
[root@desktop .ssh]# gpg --list-keys
/root/.gnupg/pubring.gpg
------------------------
pub   2048R/E2E76909 2014-03-22
uid                  westos (hello) <[email protected]>
sub   2048R/FC052B9F 2014-03-22
导出公钥:
[root@desktop .ssh]# gpg -a -o pub.key --export E2E76909
将公钥传到客户端
[root@desktop .ssh]# scp pub.key 192.168.0.24:/mnt/

在客户端导出公钥
[root@www mnt]# gpg --import pub.key
gpg: key E2E76909: public key "westos (hello) <[email protected]>" imported
gpg: Total number processed: 1
gpg:               imported: 1  (RSA: 1)
查看下公钥id
[root@www mnt]# gpg --list-keys
[root@www mnt]# gpg --encrypt --armor -r E2E76909 hello  //对文件hello进行加密生成.asc文件
上传到服务器端:
[root@www mnt]# scp hello.asc 192.168.0.132:/mnt

在服务器端进行解密查看文件内容
[root@desktop mnt]# gpg --decrypt hello.asc

//二:yum插件管理
   1:软件插件管理
 yum install yum-plugin-verify
rpm -K 软件包  用来校验软件包是否被人修改

屏蔽软件包
yum install  yum-plugin-versionlock -y
vim /etc/yum/pluginconf.d/versionlock.list
epoch:httpd-2.2.15-15.el6_2.1.x86_64
vim yum.conf   屏蔽某一类软件
exclude=*.i686
  
    2: 软件包构建
2.1.构建rpm包
若要构建RPM包,首先必须确定内部版本规则文件或spec文件,spec文件是包含关于如何构建可安装的RPM软件包的信息的文本文件。
rpm -qlp 软件包  查看软件包安装的目录文件。。。
(软件安装的路径,以及各种安装参数)
软件安装rpm-build -y
简单构建一个命令脚本,执行系统命令hello
首先创建一个脚本,然后做成一个压缩包
编写.spec文件,来修改声明包的各种属性以及安装!
最后,构建rpm包
rpmbuild -ba filename.spec  (可能会出现报错哦)
//将软件压缩包和spec文件放到SOURCES和SPECS里面
2.2.发布rpm软件包
创建yum存储库
yum install createrepo -y
cp *.rpm /mnt
cd /mnt
createrepo .

mkdir -p /var/ftp/pub/repo/Packages
cp *.rpm /var/ftp/pub/repo/Packages
createrepo -v /var/ftp/pub/repo/
配置yum
baseurl=file:///var/ftp/pub/repo

//三: 网络端口检测
netstat -antlp  本机监控

nmap 远程监控
-sP  ping响应
-sT tcp
-sU udp

tcpdump软件
tcpdump
wireshark抓包工具
检测网络端口
netstat -tulnp
-t – tcp 协议或开放 TCP 端口
 -u – udp 协议或开放 UDP 端口
 -l – 仅侦听端口,而非活动、已建立的连接
 -n – 按编号而非名称显示主机和端口
 -p – 显示控制端口的本地进程

检测远程服务
A 表示检测os
nmap 实用程序是一个端口扫描器,可探测远程系统并显示关于哪些端口处于开放状态的信息。这可帮助您
确定是否有意外服务正在运行或您管理的系统上是否有可用端口。
[root@server1 ~]# nmap -A -sT server1
                      系统
nmap 选项:
-sP – 执行 ping 扫描,以确定响应 ICMP ping 请求的主机
 -sT – 执行 TCP 连接扫描
 -sU – 执行 UDP 扫描(可能需要很长时间)
 -p – 限制到特定端口,这对于 UDP 扫描尤其有用
 -A – 启用 OS 检测和版本检测、脚本扫描和跟踪路由
 -v – 详细(使用多个 -v 使其更加详细

Avahi服务,零配置网络(不通过网卡),Avahi 可实施 Zeroconf (零配置网络)服务。 Zeroconf 允许位于同一广播域中的计算机进行通信和发现
彼此的服务,而无需静态联网、 DHCP 或其他明确配置。
一般不安全,把它禁掉
[root@server55 ~]# chkconfig avahi-daemon --list
avahi-daemon    0:off 1:off 2:off 3:on 4:on 5:on 6:off
[root@server55 ~]# chkconfig avahi-daemon off

捕获和分析网络通信
一个是简单有强大的 tcpdump (只捕获封包),另一个是 Wireshark 实用程序(可
捕获并解析网络通信,以进行更深入的分析)
列出所有可用捕获接口:
# tcpdump -D
捕获所有 SSH 网络通信:
# tcpdump -nn -l -s 2000 -w packets -i eth0 'port 22'
1. -nn = 显示为数值的所有内容(包括端口和协议)
2. -l = 对文件执行行缓冲
3. -s snap_len = 要输出的每个封包的最大字节数
4. -w filename = 要写入输出的文件
5. -i interface = 要捕获的接口
6. filter = 用于过滤封包的关键字和逻辑运算符(如‘ host desktopX.example.com and port 25’

注意:wireshark 必须在dvd.repo下载
通过 wireshark 分析网络封包
启动 httpd 服务
# service httpd start

确定端口 80 的状态:
# netstat -tulnp |grep ':80'

扫描特定端口 80 :
# nmap -sT serverX

使用 tcpdump 捕获 HTTP 封包:
# tcpdump -nn -l -s 2048 -w /tmp/http.dump -i eth0 'port 80' &

打开浏览器访问 http 服务:
# firefox http://serverX.example.com &

停止 tcpdump :
# killall tcpdump

安装 wireshark-gnome 软件包,并分析 tcpdump 捕获文件:
# yum install -y wireshark-gnome
# wireshark /tmp/http.dump

 

 

 


//四: NTP服务
修改ntp.conf
server 127.127.1.0
/etc/init.d/ntpd restart
ntpq -p      查看系统主板时间(前面有*就可以了)
然后ntp服务器就搭建好了
测试:
在客户端ntp.conf 中编写
server 192.168.0.22 ibrust (上面ntp服务的主机)
/etc/init.d/ntpd restart
/etc/init.d/ntpdate restart
ntpq -p 查看当前的ntp服务器是谁
date 发现时间同步了

//五章:日志同步服务
问题:在企业中管理其他服务器,可以直接将日志自动推送到一个日志服务器上面
服务器修改:
修改/etc/rsyslog.conf文件
$ModLoad imudp    //取消注释,使用udp协议传输日志
$UDPServerRun 514
/etc/init.d/rsyslog  restart

客户端修改:
修改/etc/rsyslog.conf文件
*.*                                     @192.168.0.22   
udp一个@
tcp两个@
重启日志服务

测试:logger xxb
在服务器端发现日志

//五:网络存储iscsi存储
数据库的备份(可以对一个目录进行备份,使用bacula备份软件
)
mysqldump -u root -pwestos emial > /mnt/email.sql
数据恢复 mysql emial < email.sql
数据库中的文件一般是存在/var/lib/mysql
问题:当企业集群到一定程度的时候会将数据专门存放在固定的存储上,以实现共享
因而保证数据的安全可靠性。

解决办法:iscsi网络存储的搭建
服务器端软件:scsi-target
客户端软件:iscsi-initartor-utils
主配置文件:/etc/tgt/targets.conf
/etc/init.d/tgtd restart

客户端访问:
iscsiadm -m discovery -t st -p 192.168.0.22
iscsiadm -m mode -T target-name -p 192.168.0.22 -l(-u) 登录(推出)

//无密码访问
主机之间无密码访问
ssh-keygen 生成密钥对,一致enter
ssh-copy-id -i &&&.pub [email protected]
实现访问无密码
必要时需要修改(/etc/ssh/sshd_config)


第六章:samba服务共享
//selinx 开启
软件安装:samba-common samba-client samba
samba用户必须是系统用户哦
给系统用户samba的权限以及密码:smbpasswd -a username  增加samba用户
登录:smbclient //IP/dir -U username
              -L 显示当前共享的信息

修改selinux值(selinux如果是enforcing不能查看家目录和上传)
samba文件上传
[root@www xxb]# getsebool -a | grep samba
[root@www xxb]# setsebool -P samba_enable_home_dirs on
上传只能用!s显示的文件以及目录
主配置文件/etc/samba/smb.conf
安全级别=share/user

pdbedit -L 查看当前samba用户
selinux对samba的影响
注意://
//新建的共享目录必须修selinux的samba_share的属性
[root@www samba]# yum whatprovides */semanage
semanage 命令用来永久修改sebool值
chcon -R 用来短时间修改sebool值
semanage fcontext -l  显示安全上下文
semanage fcontext -a -t samba_share_t '/share(/.*)?'
restorecon -RvvF /share/

仍然上传不了,目录权限的问题
[root@www company]# ll -d /company/
drwxr-xr-x. 5 root root 4096 Mar 19 07:47 /company/
方式1.将目录权限改为775
方式2.
samba用户上传默认使用nobody,因此可以只用nobody或者相关的用户访问就行
可以使用acl,限制特定用户访问
setfacl -m u:nobody:rwx /company
setfacl -m u:hello:rwx /company
对共享目录使用acl权限
acl的线性比较好,也就是说比较连续,稳定。

主配置文件中的public选项用来指定用户是否可以直接访问
注意:安全级别share和user的区别
browseable = no 可以对用户隐藏部分文件。14257571

write list =@westos

admin users =  xxb   设置管理账户,将此用户在samba中提升为root用户
smbpasswd -a username


案例:
用samba管理一个集团
将各个部分的信息共享出来,
但是总部可以看到所有的信息,而其他部分只能看到并且修改自己的目录browseable
可以互相浏览其他人的文件
mkdir /company
mkdir /company/caiwu
mkdir /company/xiaoshou
mkdir /company/hello
在共享的时候可以将第一个目录设置browserable=no
然后可以给后面的每个共享目录增加用户设置
valid user = CW
valid user = XS
valid user = HE


第七章:nfs网络共享服务
# yum install nfs-utils -y
# /etc/init.d/nfs restart
        不能重启服务,必须先安装rpcbind并且开启(因为nfs服务是需用rpc远程调用来启动的)

# yum install rpcbind -y
# /etc/init.d/rpcbind restart   RPC服务必须先启动
# /etc/init.d/nfs restart

NFS服务器端配置:
# vim /etc/exports (/mnt  *(rw,no_root_squash))
# exportfs -rv
  exporting *:/mnt
 
# showmount -e 192.168.0.11
Export list for 192.168.0.11:
/mnt *
# iptables -F  当共享机链接不上关掉防火墙
注意:selinux以及iptables都会影响服务的正常使用


客户端:
# showmount -e 192.168.0.11
Export list for 192.168.0.11:
/mnt 192.168.0.0/24
# mount 192.168.0.11:/mnt /mnt
# touch /mnt/xxb
touch: cannot touch `xxb': Read-only file system     加rw权限(在服务机的/etc/exports上增加)
touch: cannot touch `xxb': Permission denied         修改nfs-server上/mnt的可写权限
# touch xxb
# ll
-rw-r--r-- 1 nfsnobody nfsnobody     0 Dec 23 01:53 xxb      (用户是其他所以777)
怎样让共享机的用户不改仍然是root
首先增加(no_root_aquash)
如果还不行
在共享机上添加,因为默认是版本4,有的是3
[root@server73 ~]# mount -o vers=3 192.168.0.11:/mnt /mnt/
[root@server73 ~]# cd /mnt/
[root@server73 mnt]# touch xub

怎样绑定端口,让防火墙更好的监控
# rpcinfo -p   查看nfs的网络端口
# /etc/init.d/nfs restart     都成功重启
# rpcinfo -p                     发现端口都是动态的

# vim /etc/sysconfig/nfs    修改tcp,udp,和mount端口
[root@server73 ~]# rpcinfo -p
 100021    1   udp   3500  nlockmgr
    100021    3   udp   3500  nlockmgr
    100021    4   udp   3500  nlockmgr
    100021    1   tcp   3000  nlockmgr
    100021    3   tcp   3000  nlockmgr
    100021    4   tcp   3000  nlockmgr
    100005    1   udp   4000  mountd
    100005    1   tcp   4000  mountd
    100005    2   udp   4000  mountd
    100005    2   tcp   4000  mountd
    100005    3   udp   4000  mountd
    100005    3   tcp   4000  mountd


#yum install autofs -y
安装自动挂载文件系统:
# vim /etc/auto.master   增加/mnt   /etc/auto.mnt
# vim /etc/auto.mnt         pub   192.168.0.11:/mnt
# /etc/init.d/autofs restart
挂载的真实文件就是#mount 192.168.0.11:/mnt /mnt/pub


查看某个服务的配置文件
/etc/sysconfig/autofs  //修改默认自动挂载时间

第八章:网络知识以及磁盘加密
1.网络知识
使用nat方式上网,当上网数据大时候,会造成一定的堵塞(因为nat的方式会使网络造成多个路由)
因此一般使用的是桥接方式上网
snat
dnat
ip addr show eth0 显示当前设备信息
ip -s link show eth0
vim  /etc/hosts  编写本地解析文件,类似于DNS
vim /etc/resolv.conf  添加DNS服务器地址
注意:DNS服务器的原理,默认先从本地hosts文件检测域名解析,如果没有在去DNS主机寻找。(可以修改/etc/nsswitch.conf文件来改变优先顺序)
nameserver   要查询名称服务器的IP,可以最多指定三个(192.168.0.254)
search      尝试使用较短的主机名的域名列表(example.com)
注意:网络配置工具和文件配置网络是冲突的,两者不能同时启用
tracroute 查看路由状态

网络桥接模式
首先必须得会配置网卡文件
vim /etc/sysconfig/network-scripts/ifcfg-interface
两种分配模式:
 1.dhcp   自动获取IP和DNS
    DEVICE=eth0
    BOOTPROTO=dhcp
    ONBOOT=yes  
 2.static
    DEVICE=eth0
    BOOTPROTO=none | static
    ONBOOT=yes
    IPADDR=192.168.0.X
    NETMASK=255.255.255.0
    GATEWAY=192.168.0.254
    DNS1=192.168.0.254
配置桥接端口:
编写vim /etc/sysconfig/network-scripts/ifcfg-br0
可以复制修改哦
DEVICE=eth0
BRIDGE=br0
BOOTPROTO=none
ONBOOT=YES
编写br0
    DEVICE=br0
    BOOTPROTO=none | static
    TYPE=Bridge
    ONBOOT=yes
    IPADDR=192.168.0.X
    NETMASK=255.255.255.0
    GATEWAY=192.168.0.254
    DNS1=192.168.0.254


注意:brctl show 的命令使用啊
当重新添加网卡,但是不识别的时候可以修改:/etc/udev/rules.d/70-present-net.rules


2.对分区进行加密
文件系统一下的加密很难破解
加密分区当分区破解后,数据也会破坏的(加密在文件系统底层)
1.新建一个分区,先不要格式化,使用crypt加密,并且设置密码
cryptsetup luksFormat /dev/vdsX
使用大写YES
添加密码后加密成功,但是这个时候会枷锁,不能读写
2.打开设备
cryptsetup luksOpen /dev/vdsX disk    会将加密卷解锁为/dev/mapper/disk
ll /dev/mapper/disk   查看设备的信息

注意:现在进行格式化必须格式化加密底层的东西
3.格式化加密设备          
mkfs.ext4 /dev/mapper/disk    在解密的卷上创建ext4文件系统
mount /dev/mapper/disk /xxb
现在可以进行读写设备
umount /dev/mapper/disk
4.关闭锁子
cryptsetup luksClose disk
完成整个加密解密过程

注意:当lucks加密,但是没开锁的时候,你不知的是否加密了
可以使用直接挂载尝试一下
最好不要直接格式化分区啊,否则很么都没有了啊(安全性就达到了,试问谁会为了数据去把东西格式化 啊)
应用实例:(比如U盾,就是用来加密的,因为银行的服务器是安全的,只有用户的东西需要)

不想加密了,就直接删除分区吧

5.永久挂载加密分区
1>编写/etc/fstab文件
/dev/mapper/name(disk)   /xxb   ext4  defaults 1 2
2>编写加密文件/etc/crypttab
name(disk)   /dev/sdbN(/dev/sdb1)   none(/etc/cryptpasswd)
                                   注意,解锁密码文件如果不写,开机会提示输入密码
3>创建秘密文件(注意:确保文件归root所有,并且模式为600)
echo westos > /etc/cryptpasswd
chown root /etc/cryptpasswd
chmod 600 /etc/cryptpasswd
cryptsetup luksAddKey /dev/sdb1 /etc/cryptpasswd   输入密码

6.管理swap分区以及逻辑分区的建立与管理(LVM是在执行init初始化的时候激活的)
1>创建lvm
/dev/sda5
pv : pvcreate /dev/sdbN
vg : vgcreate  vgxxb /dev/sdbN
lv : lvcreate  -L 500M -n lvxxb vgxxb
mkfs.ext4 /dev/vgxxb/lvxxb
使用lvm装虚拟机,做一个base主机
使用快照备份虚拟机,lvcreate -L 500M -n vm1 -s /dev/vgxxb/lvxxb


mount /dev/vgxxb/lvxxb /mnt
2>拉伸lvxxb(拉伸后文件系统不会立即识别,需要通知)
lvextend -L 1024M /dev/vgxxb/lvxxb 扩展到10024m
resize2fs /dev/vgxxb/lvxxb     扩展文件系统
3>拼接vg
fdisk -cul /dev/sdb
vgextend vg0 /dev/sdbN+1
lvextend -L 1536M /dev/vg0/lv0(/dev/vgxxb/lvxxb)
resize2fs /dev/vg0/lv0

4>缩减文件系统(先缩减文件系统--缩减lv)
resize2fs /dev/vg0/lv0 30M  缩减到30M
(e2fsck -f /dev/vg0/lv0   检测缩减)
lvreduce -L 30M /dev/vg0/lv0   缩减lv
pvmove /dev/sdb5 /dev/sdb6   把5的东西移到6上
删除5
vgreduce vg0 /dev/sdb5   缩减vg
vgremove vg0
pvremove /dev/sdb5       删除设备

7.建立快照
7.1把lvm挂载到一个目录,写自己的东西
然后卸载,准备做一个快照、
做快照的大小是依照需要改动的大小而设置的
lvcreate -L 10M -n /dev/vg0/lv0-bak -s /dev/vg0
lvdisplay /dev/vg0/lv0 (/dev/vg0/lv0-backup) 查看快照与之前的关系
修改原先的lvm,其实修改的是你的快照
快照是有生命周期的
先挂载一下原始设备,
先网原始设备里面dd if=/dev/vda of=/xxb/bigfile bs=1M count=5
无论修改的是原始的文件还是快照,都会写在快照里面,如果快照撑爆以后,会将修改内容
保存在原始文件里面
7.2使用快照建立虚拟机
删除lvm快照
使用一个大的lvm新建虚拟机


第九章:linux下的iptables以及xinetd超级守护进程
1. xinetd 超级守护进程访问
telnet访问只能限制为普通用户访问(一般只用来做测试)
vim /etc/xinetd.conf   主配置文件
     no_access  不允许访问
    only_from    只允许访问
    cps  = 2 5      防止DDOS攻击(同时间2个,5秒后继续访问)
    instances   =10   最大链接数
    per_source  = 2   每个地址限制链接访问

//思考,文件的权限是拒绝大于允许,所以一般允许放在前面啊(没有守护进程和子进程的权限大小)

2. tcpwraper    
ldd /usr/sbin/sshd  查看是否支持tcpwraper模块
      libwrap.so.0 => /lib64/libwrap.so.0   


支持这个模块的sshd in.telnetd
由两个文件控制    //权限貌似是先允许后拒绝
vi /etc/host.allow
 in.telnetd,sshd:192.168.0. :spawn echo `date` from %c to %s >> /var/log/warn
vi /etc/hosts.deny
 sshd:192.168.0.   EXCEPT 192.168.0.11  //拒绝当前网段访问sshd,只允许11

//一般在deny里 ALL:ALL
// access 允许个别,并且做一个记录
man 5 hosts.allow

//服务一般要考率的权限问题:selinux iptables xinetd tcpwraper

 

3.iptables火墙策略
iptables的策略是保存在内存的,因开机就会失效,因此,写好策略必须将之保存
// service iptables save
iptables -F   清空iptables策略
iptables -nL  查看策略(可以查看对端口和地址的限制)
iptables-L    查看策略(显示的是对服务的策略)
iptables 是在内核上面保存的
filter 表  (inout  forward  output )
nat 表  (output  postrouting//snat  prerouting//dnat) nat表不经过内核(完全由farword转发)
在filter链中内网访问路由的output是经过内核的,而访问外网时的output是不经过内核的,只是起到传输数据的作用
snat是在内网通过路由访问外网的时候在外网卡做的一个改变源地址的POSTROUTING
dnat实在外网通过路由访问内网的时候在外网卡做的改变目标目标地址的PREROUTING

火墙策略默认是写在filter表中的,-t指定策略表
#iptables (-t filter) -A INPUT -s 192.168.0.75 -p tcp --dport 22 -j REJECT
# iptables -A INPUT -i lo -j ACCEPT  通过回还进入本机
# iptables -A INPUT -p tcp --dport 22 -j ACCEPT
# iptables -A INPUT -p tcp --dport 53 -j ACCEPT
# iptables -A INPUT -j REJECT

iptables -D INPUT 1  删除input链的第一条规则
iptables -R INPUT ......修改策略
iptables  -I   INPUT n(数字)  插入规则
iptables -N 添加一个表
iptables -E 修改表的名称
iptables -X 删除一个表
iptables -P INPUT DROP/ACCEPT   对整个链进行操作

//几个常用的iptables实例:
1.将本地80端口的请求转发到8080端口:
iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-ports 8080
2.如果需要本机也能访问,则需要配置OUTPUT链;
iptables -t nat -A OUTPUT  -p tcp -d 127.0.0.1 --dport 80 -j REDIRECT --to-ports 8080
3.将本地80端口的请求全部转发到10.0.0.22:80
echo 1 > /proc/sys/net/ipv4/ip_forward
iptables -t nat -A PREROUTING -p tcp --dport 80 -j DNAT --to 10.0.0.22:80
iptables -t nat -A POSTROUTING -j MASQUERADE
4.禁止ping入,允许ping 10.0.0.0/24网段ping入
iptables -A INPUT -p icmp --icmp-type 8 -s 10.0.0.0/24 -j ACCEPT
iptables -A INPUT -p icmp --icmp-type 8 -j REJECT


//问题
当访问次数多了,就会出现瓶颈,怎样减少读取火墙呢?
将iptables策略写成当已经是链接过的直接accept
部分没有链接过的accept
//但是换一角度思考,如果这个策略保存了,可能开机的时候某些服务将不能启动
//将脚本直接写在/etc/rc.local  开机自动执行   (不影响开机)
//加载ftp的跟踪链接

//系统的优化,iptables在开机的启动顺序。决定了它的加载位置
modprobe -r nf_nat_ftp  删除内核模块
modprobe  nf_nat_ftp     加载内核模块
lsmod | grep nf_nat_ftp   查看加载的模块

vim /mnt/firewall
 #!/bin/bash
 modprobe -a nf_nat_ftp
 iptables -F
 iptables -A INPUT -i lo -j ACCEPT
 iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
 iptables -A INPUT -m state --state NEW -p tcp --dport 21 -j ACCEPT
 iptables -A INPUT -m state --state NEW -p tcp --dport 22 -j ACCEPT
 iptables -A INPUT -m state --state NEW -p tcp --dport 53 -j ACCEPT
 iptables -A INPUT -m state --state NEW -p tcp --dport 80 -j ACCEPT
 iptables -A INPUT -m state --state NEW -j REJECT
chmod u+x /mnt/firewall
vim /etc/rc.local
     /mnt/firewall  开机后执行脚本

注意:在防火墙策略中,DNAT和SNAT的重要性在互联网中是经常需要使用到的。。。相当滴重要啊
//企业实现访问
5.路由转发功能
5.1 内网访问外网(在路由器后端配置postrouting SNAT)
路由器(双网卡,eth0192.168.0.57 eth1 10.0.0.22)//注意,其实内网是可以和57通信的
echo 1 > /proc/sys/net/ipv4/ip_forward
sysctl -p  立即生效   //-o 表示从eth0出去
iptables -t nat -A POSTROUTING -o eth0 -j SNAT --to-source 192.168.0.57
内网以10.0.0.22为网关的主机就可以通过路由器主机上网了(网关设置为10.0.0.22)

5.2 外网访问内网资源(在路由器前端配置prerouting DNAT)
同样,必须开启内核的转发功能   //-i 表示从eth0进来
iptables -t nat -A prerouting -i eth0 -j DNAT --to-dest 10.0.0.2
开启内网(10.0.0.2)主机的httpd服务
用户访问192.168.0.57主机,会访问到内网的服务主机(10.0.0.2)


第十章:邮件系统的搭建
邮件服务是Internet上最常用的服务,它占据了Internet90%的流量,可见它的普遍性和重要性。

我们常见的相关邮件服务的协议有:
1. smtp
工作在tcp的25号端口,主要用于发送和接收邮件,有smtp和smtpd进程之分。smtp用于发送邮件,smtpd用于接受邮件。而通常情况下,无论是microsoft的系统还是linux系统,系统本身自带的有smtp服务,故我们可以在pc上通过outlookexpress和web发送邮件。
2,IMAP,POP3
IMAP工作在tcp的143端口,pop3工作在tcp的110端口,用于用户查看和下载邮件
3,S/MIME
多用途互联网邮件扩展,是一个互联网标准,它扩展了电子邮件标准,使其能够支持非ASCII字符、二进制格式附件等多种格式的邮件
 
而邮件服务又是比较复杂的一份服务,下面我们先了解一下邮件服务的几个名词:
//1,MUA:邮件用户代理
功能:用户编写邮件,然后自动发送给smtp服务器和查看邮件。
我们通常用这些软件来实现此功能mutt,OE(microsoft),Foxmail(国人开发),Thunderbird(雷鸟),evalution
// 2,MTA:邮件传输代理
功能:用于接收邮件(作为smtpd服务器使用)
我们通常用这些软件来实现此功能:sendmail(最古老,在软件设计上有缺陷;仍然用的比较多),qmail,postfix(功能强大,主要用于替代sendmail),exim,exchange(依赖于AD,这个只能用于windows平台),Lotus Notes Domono(价格昂贵)
3,MDA:邮件投递协议
功能:将MTA接收到的邮件,投递到对应的用户的邮箱。
我们通常用这些软件来实现此功能procmail,maildrop
4,MRA:邮件检索代理
功能:用户下载查看邮件(pop3或是IMAP服务)
我们通常用这些软件来实现此功能:cyrus-imap,courier-imap,dovecot
 
通常我们使用发邮件和收邮件,是要输入用户名和密码的,而认证通过什么实现呢?
cyrus-sasl:简单认证安全层,依赖courier-authlib这个库可以实现msyql和LDAP的认证
 
而邮件服务的工作过程简单阐述为:
用户使用用户名和密码通过认证之后,通过MUA写好邮件,然后通过本机的smtp客户端发送给本地域指定的邮件服务器,管理本地域的邮件服务器通过运行的MTA来接收邮件;如果是发往本域的邮件,则通过MDA投递到对应用户的邮箱中,如果是发往其它的域,则进行中继,通过管理本地域的邮件服务器的smtp客户端发给管理目标域的邮件服务器,管理目标域的邮件服务器执行相同的操作。而当邮件到达目的地点,接收邮件的用户通过通过认证之后,就可以利用MRA在邮件服务器上查看和下载邮件,整个过程结束。

//第一节:mysql的安装域配置
1. mysql的安装管理
flush privileges   刷新数据库

备份与还原数据库文件
mysqldump -u root -pwestos westos > /mnt/westos.sql
mysql -u root -pwestos westos < /mnt/westos.sql
给数据库远程授权:
grant select on westos.* to username@IP/域名 identified by 'passwd'
                                  @'%'  //表示所有远程
mysqladmin -u root -pwestos password xxxx

mysq忘记密码修改,首先关闭服务,
mysqld_safe --skip-grant-table&  进入mysqld的单用户,打入后台
mysql直接进入,修改mysql库中的user表。
update user set Password=password('westos') where User='root';
注意:和数据库相关的程序呢一般会在mysql数据库中的user表中。


fg 查看单用户进程,然后将所有进程kill -9

2. 使用php-myadmin管理mysql
需要web界面显示(你懂得哦?!)//目录的位置要放在正确的位置哦

php和mysql的链接问题php-mysql
安装好后将目录的文件修改
cp -p config.sample.ini.php config.ini.php
service httpd  restart
service mysqld restart
测试管理:
http://IP/phpMyAdmin

第二节:搭建简单邮件服务(发邮件)
3.邮件smtp(postfix服务)    //MTA 邮件传输代理
默认postfix客户端是可以发邮件的!
发送邮件:mail mail-address
查看邮件队列:mailq
postqueue -f/-p    查看刷新
邮件投递端口:25
MTA种类:sendmail qmail postfix
查看mta:alternatives --display mta
切换mta:alternatives --config mta
//注意啊,时刻注意自己的端口冲突
修改postfix配置,让能收发邮件
主配置文件:main.cf
(邮件转达,弄成自己的哦???)
//测试发邮件(利用外地主机测试 )
ehlo hello 和telnet打招呼
mail from:westo@xxb。com
rcpt to:[email protected]
data (输入正文).结尾
//
使用postfix收发信息完成!

4邮件辅助功能(别名,地址伪装。。。)
vim /etc/aliases(虚拟: 真实用户)  //给虚拟用户发实际到了真实用户
  admin:    :include:/etc/postfix/users   //群发邮件
vim /etc/postfix/users  
   [email protected]
   [email protected]
  
postalias /etc/aliases 加载别名文件
mail -u username  //虚拟邮件用户

5.访问控制限制:
postconf -d 查看邮件所有默认配置
postconf -d | grep smtpd_client
//拒绝客户端1.
postconf -e "smtpd_client_restrictions = check_client_access hash:/etc/postfix/access"
postmap /etc/postfix/access
vi access  (192.168.0.22 REJECT)    //拒绝22主机登录(telnet模拟的客户端)
postmap access   //必须生成access.bd 否则不生效的
service postfix restart
//拒绝个别邮箱发送2.
postconf -d | grep sender
postconf -e "smtpd_sender_restrictions = check_sender_access hash:/etc/postfix/sender"
vim sender  ([email protected] REJECT)
postmap sender
service postfix restart
//注意 啊,只是拒绝xxb发信,但是收新还是正常的
//拒绝接受3.
postconf -e "smtpd_recipient_restrictions = check_recipient_access hash:/etc/postfix/bad, permit_mynetworks, reject_unauth_destination"
vim bad  ([email protected])
postmap bad
//现在发现xxb也不能接受了
本地邮件用命令测试接受邮件

第三节:安装邮件接收服务110(pop3) 和143(imap)
5.邮件查看下载 dovecot  //MUA邮件用户代理
mutt 邮件客户端
yum install dovecot mutt -y
vim dovecot.conf
  disable_plaintext_auth = no
  protocols = imap pop3 lmtp
vim 10-mail.conf
mail_location = mbox:~/mail:INBOX=/var/mail/%u

测试:mutt -f pop://[email protected]  第一次申请邮箱需要生成邮箱目录
tail -f /var/log/maillog    邮件日志
//可能是 /var/mail/xue的权限不一样
//红帽6.4 在做mutt的 时候用户权限需要手动修改。


第四节:企业邮箱原理:
邮箱服务器:用户注册邮箱,会在邮件服务器上生成一个用户名和密码,存在数据库中,当用户激活后,将在服务器端生生成自己的邮箱。而每次登录用户就是通过在mysql后端查找相应信息的。
然而每个邮箱都是有固定大小的,这就是固定的磁盘配额。
//其实,当用户申请邮箱的时候是没有存放邮件地址的,登验证后会自动生成
6. mysql的链接(postfix 和mysql构建基本m邮件框架)
postconf -a 支持认证
postconf -m 支持插件

//完整搭建邮件系统
postfix 的完整安装配置
useradd -u 777 email
postconf -d | grep virtual
postconf -e "virtual_mailbox_base = /home/email"
postconf -e "virtual_gid_maps = static:777"
postconf -e "virtual_uid_maps = static:777"

开启数据库mysql
使用phpMyAdmin创建一个一个邮件数据库文件:
emial数据库中创建一个email表,用来存放邮箱信息的(用户密码和邮箱),并且授权
grant all on email.postfix to postfix@localhost identified by "postfix"
用postfix用户测试,没问题

添加相关的邮箱信息:
[root@cacti mail]# postconf -e "virtual_alias_maps = mysql:/etc/postfix/mailuser.cf"
[root@cacti mail]# postconf -e "virtual_mailbox_domains = mysql:/etc/postfix/maildomain.cf"
[root@cacti mail]# postconf -e "virtual_mailbox_maps = mysql:/etc/postfix/mailbox.cf"
//编写三个文件/etc/postfix/mailuser.cf  /etc/postfix/maildomain.cf /etc/postfix/mailbox.cf
host = localhost
user = postfix
password = postfix                               //##数据库的授权用户以及密码
dbname = email
table = postfix
select_field = username//domain//mailbox        ##注意:必须和数据库中的一样
where_field = username//domain//username

[root@cacti mail]# postmap -q "[email protected]" mysql:/etc/postfix/mailuser.cf
[email protected]
[root@cacti mail]# postmap -q "[email protected]" mysql:/etc/postfix/mailbox.cf
wetos.com/xxb/
[root@cacti mail]# postmap -q "westos.com" mysql:/etc/postfix/maildomain.cf
westos.com
基本框架搭建成功:
测试:mail [email protected]
邮件地址在/home/email/westos.com/xxb

//自己新加的:在数据库中新加邮件用户,修改远程授权,修改邮箱信息文件
至此,构建了mysql+dovecot+httpd的邮件体系

7.使用devocot创建相关的邮件管理、认证
管理邮件:
//vim 10-mail.conf  
mail_location = maildir:/home/email/%d/%n   管理所有的邮件用户
first_valid_uid = 777
//vim 10-auth.conf  
!include auth-sql.conf.ext    打开认证
//cat auth-sql.conf.ext   需要下面这个文件
//find / -name dovecot-sql.conf.ext
//cp /usr/share/doc/dovecot-2.0.9/example-config/dovecot-sql.conf.ext /etc/dovecot/
//vim dovecot-sql.conf.ext  修改5个
driver = mysql
connect = host=localhost dbname=email user=postfix password=postfix
default_pass_scheme = PLAIN
password_query = \
  SELECT username, domain, password \   //注意,数据库这块必须得是(usernamedomanpassword)
  FROM postfix WHERE username = '%u' AND domain = '%d'
user_query = SELECT mailbox, 777 AS uid, 777 AS gid FROM postfix WHERE username = '%u'
//service dovecot restart
 
模拟客户端测试:
telnet 192.168.0.57 110 发现登不上去
 思考,将dovecot 与mysql链接之后出现问题的
//yum install dovecot-mysql -y
[oot@www home]# telnet 192.168.0.57 110   测试成功
Trying 192.168.0.57...
Connected to 192.168.0.57.
Escape character is '^]'.
+OK Dovecot ready.
user [email protected]   //使用用户登录
+OK
pass westos           //登录密码验证
+OK Logged in.
list
+OK 0 messages:
.
quit
+OK Logging out.
Connection closed by foreign host.

待续:;;

使用雷鸟客户端进行测试:

 


1.将本地邮件域名加入DNS的MX记录文件
维护一个邮件域(优先级越小首先执行)
dig -t mx westos.com
vim /var/named/chroot/etc/named.rfc1912.zones
 zone "westos.com" IN {
         type master;
         file "westos.com";
         allow-update { none; };
 };
vim /var/named/westos.com
 $TTL 1D
 @       IN SOA  cacti.westos.com. rname.invalid. (
                                        0       ; serial
                                        1D      ; refresh
                                        1H      ; retry
                                        1W      ; expire
                                        3H )    ; minimum
         NS      cacti.westos.com.
 cacti   A       192.168.0.57
 westos.com.     MX  5   192.168.1.57.      编写一个mx邮件域

作用:就是将之前搭建的邮件服务器mta绑定一个特定的邮件域,所有人发的信息都在这个域里面

//搭建一个邮件服务器,并且维护一个邮件域

 

第十一章:mysql数据库的基本操作
mysql(mariadb)
==========
注意:在Centos7中,默认使用的是mariadb数据库,但是内核其实还是mysql的内核。。
yum install mysql mysql-server

mysqladmin -uroot -predhat password westos   修改本地mysql root密码
mysqladmin -uroot -predhat -h 192.168.0.188 password westos 修改远程192.168.0.188 mysql服务器 root密码
 
mysql_secure_installation     第一次安装mysql以后通过这条命令可以对mysql进行设置

mysql -uroot -predhat      从本机登录mysql数据库

show databases;       显示数据库
use mysql;       进入数据库
show tables;       显示数据库中的表
desc user;       查看user表的数据结构

select host.user,password from user;    查询user表中的host,user,password字段


create database westos;      创建westos数据库
use westos;       
create table linux(      创建表,username,password字段
username varchar(15) not null,
password varchar(15) not null
);
select * from mysql.user;     查询mysql库下的user表中的所以

show tables;
desc linux;

insert into linux values ('user1','passwd1');    在linux表中插入值为username = user1,password = password1
update linux set password=password('passwd2') where username=user1; 更新linux表中user1 的密码为password2
delete from linux where username=user1;     删除linux表中user1的所以内容


grant select on  *.* to user1@localhost identified by 'passwd1'; 授权user1 密码为passwd1  并且只能在本地 查询数据库的所以内容
grant all on mysql.* to user2@'%' identified by 'passwd2';  授权user2 密码为passwd2  可以从远程任意主机登录mysql 并且可以对mysql数据库任意操作


备份
/var/lib/mysql
mysqldump -uroot -predhat mysql > mysql.bak 备份mysql库到mysql.bak

mysql -uroot -predhat westos < mysql.bak 恢复mysql.bak 到westos库

mysql 密码恢复
/etc/init.d/mysqld stop

mysqld_safe --skip-grant-tables &     跳过grant-tables授权表  不需要认证登录本地mysql数据库

update mysql.user set password=password('westos') where user='root'; 更新mysql.user 表中条件为root用户的密码为加密westos

/etc/init.d/mysql restart
centos7中(systemctl restart mariadb)


phpmyadmin
yum install php php-mysql httpd mysql mysql-server

tar jxf phpmyadmin-*.tar.bz2 -C /var/www/html
mv phpmyadmin phpadmin
cp config.sample.inc.php config.inc.php
vim config.inc.php
add
$cfg['blowfish_secret'] = 'test';

/etc/init.d/httpd start
http://192.168.0.188/phpadmin

 

你可能感兴趣的:(根据红帽RHEL7官方文档对centos7进行技术剖析(三))