1、DNS简介
DNS ( Domain Name System )是互联网上的一项服务,它作为将域名和 IP 地址相互映射的一个分布式
数据库,能够使人更方便的访问互联网。
DNS 系统使用的是网络的查询,那么自然需要有监听的 port 。 DNS 使用的是 53 端口,
在 /etc/services (搜索 domain )这个文件中能看到。通常 DNS 是以 UDP 这个较快速的数据传输协议来查
询的,但是没有查询到完整的信息时,就会再次以 TCP 这个协议来重新查询。所以启动 DNS 时,会同时
启动 TCP 以及 UDP 的 port53 。
( 1 )因特网的域名结构
由于因特网的用户数量较多,所以因特网在命名时采用的是层次树状结构的命名方法。任何一个连接在
因特网上的主机或路由器,都有一个唯一的层次结构的名字,即域名 (domain name) 。 “ 域 ”(domain) 是
名字空间中一个可被管理的划分。
域名只是逻辑概念,并不代表计算机所在的物理地点。域名可分为三大类:
国家顶级域名:采用 ISO3166 的规定。如: cn 代表中国, us 代表美国, uk 代表英国,等等。国家域
名又常记为 ccTLD(country code top-level domains , cc 表示国家代码 contry-code) 。
通用顶级域名:最常见的通用顶级域名有 7 个,即: com( 公司企业 ) , net( 网络服务机构 ) , org( 非营
利组织 ) , int( 国际组织 ) , gov( 美国的政府部门 ) , mil( 美国的军事部门 ) 。
基础结构域名 (infrastructure domain) :这种顶级域名只有一个,即 arpa ,用于反向域名解析,因
此称为反向域名。
( 2 )域名服务器的类型划分
根据域名服务器起的作用,可以把域名服务器划分为以下类型:
根域名服务器:最高层次的域名服务器,也是最重要的域名服务器。
顶级域名服务器:负责管理在该顶级域名服务器注册的二级域名。
权限域名服务器:负责一个 “ 区 ” 的域名服务器。
本地域名服务器:本地域名服务器不属于域名服务器的层次结构,但是它对域名系统非常重要。当
一个主机发出 DNS 查询请求时,这个查询请求报文就发送给本地域名服务器。
主从 DNS 服务器:为了提高域名服务器的可靠性, DNS 域名服务器都把数据复制到几个域名服务器
来保存,其中的一个就是主 DNS 服务器( Master name server ),负责解析至少一个域。
缓存 DNS 服务器:不负责解析域,只是缓存域名解析的结果。
2、DNS域名解析的过程
DNS 解析方式
正向解析:将 FQDN----->IP
反向解析:将 IP----->FQDN
3、DNS服务器配置
搭建主从dns服务器实现正反向解析
主服务器IP地址:192.168.177.135/24
从服务器IP地址:192.168.177.132/24
主服务器:
1,关闭防火墙及selinux,并下载软件包:bind
[root@server ~]# systemctl stop firewalld
[root@server ~]# setenforce 0
[root@server ~]# yum install bind
2.修改配置文件:vim /etc/name.conf
(注意直接找到对应位置修改里面的信息即可)
3.创建资料解析数据文件 vim /var/named/named.baidu
vim /var/named/named.192
4重新启动服务systemctl restart named及本地测试:
从服务器:
1,关闭防火墙及selinux,并下载软件包:bind
[root@server ~]# systemctl stop firewalld
[root@server ~]# setenforce 0
[root@server ~]# yum install bind
2.修改配置文件:vim /etc/name.conf
3.重启服务:systemctl restart named
4.测试:
1、selinux的说明
SELinux 是 Security-Enhanced Linux 的缩写,意思是安全强化的 linux 。
2 、 selinux 的工作原理
SELinux 是通过 MAC 的方式来控制管理进程,它控制的主体是进程,而目标则是该进程能否读取的文件
资源。
主体( subject ):就是进程
目标( object ):被主体访问的资源,可以是文件、目录、端口等。
策略( policy ):由于进程与文件数量庞大,因此 SELinux 会依据某些服务来制定基本的访问安全策略。
这些策略内还会有详细的规则( rule )来指定不同的服务开放某些资源的访问与否。目前主要的策略
有:
targeted :针对网络服务限制较多,针对本机限制较少,是默认的策略;
strict :完整的 SELinux 限制,限制方面较为严格。
安全上下文( security context ):主体能不能访问目标除了策略指定外,主体与目标的安全上下文必须
一致才能够顺利访问。
最终文件的成功访问还是与文件系统的 rwx 权限设置有关 。
#查看文件的安全上下文
[root@localhost ~]# ls -Z
-rw-------. root root system_u:object_r:admin_home_t:s0 anaconda-ks.cfg
drwxr-xr-x. root root unconfined_u:object_r:admin_home_t:s0 home
[root@localhost ~]# ll -Zd /usr/sbin/httpd /var/www/html/
-rwxr-xr-x. root root system_u:object_r:httpd_exec_t:s0 /usr/sbin/httpd
drwxr-xr-x. root root system_u:object_r:httpd_sys_content_t:s0 /var/www/html/
以上两个文件的角色字段都是object_r,代表都是文件,/usr/sbin/httpd属于httpd_exec_t类
型,/var/www/html/则属于httpd_sys_content_t类型。
3 、 selinux 的启动、关闭与查看
( 1 ) SELinux 三种模式
enforcing :强制模式,代表 SELinux 正在运行中,开始限制 domain/type 。
permissive :宽容模式,代表 SELinux 正在运行中,不过仅会有警告信息并不会实际限制
domain /type的访问。
disabled :关闭, SELinux并没有实际运行
#查看目前的模式
[root@localhost ~]# getenforce
Enforcing
#查看目前的selinux使用的策略
[root@localhost ~]# sestatus
SELinux status: enabled # 是否启用selinux
SELinuxfs mount: /sys/fs/selinux #selinux的相关文件数据挂
载点
SELinux root directory: /etc/selinux
Loaded policy name: targeted #目前的策略
Current mode: enforcing
Mode from config file: enforcing
Policy MLS status: enabled
Policy deny_unknown status: allowed
Max kernel policy version: 31
#查看selinux的策略:
[root@localhost ~]# vim /etc/selinux/config
改变策略之后需要重新启动;
如果由enforcing或permissive改成disabled,或由disabled改为其它两个,也必须要重新启
动。
将selinux模式在enforcing和permissive之间切换的方法为:
setenforce 0 转换成permissive宽容模式
setenforce 1转换成enforcing强制模式
(2)修改安全上下文
chcon [-R] [-t type] [-u user] [-r role] 文件
-R:连同该目录下的子目录也同时修改;
-t:后面接安全上下文的类型字段;
-u:后面接身份识别;
-r:后面接角色
chcon [-R] --reference=范例文件 文件 将文件的安全上下文按照范例文件修改
restorecon [-Rv] 文件或目录
-R:连同子目录一起修改;
-v:将过程显示到屏幕上
restorecon怎么会知道每个目录记载的默认selinux type类型呢?因为系统将每个目录的默认
selinux type类型记录在/etc/selinux/targeted/contexts/目录内。但是该目录内有很多不同
的数据,所以我们可以用semanage这个命令的功能来查询与修改。
semanage {login|user|port|interface|fcontext|translation} -l
semanage fcontext -{a|d|m} [-frst] file_spec
-l为查询;
-a:增加一些目录的默认安全上下文的设置;
-m:修改;
-d:删除
4 、 selinux 对 linux 服务的影响
实验一:使用 web 服务演示安全上下文值的设定
#服务端的IP地址为172.24.8.130,服务端的设置如下:
[root@localhost ~]# systemctl disable firewalld --now
[root@localhost ~]# getenforce
Enforcing
[root@master-dns ~]# cat /etc/nginx/conf.d/test_ip.conf
server{
listen 192.168.168.100:80;
root /www/ip/100;
location / {}
}
server{
listen 192.168.168.200:80;
root /www/ip/200;
location / {}
}
[root@localhost ~]# mkdir -pv /www/ip/{100,200}
[root@localhost ~]# echo this is 100 > /www/ip/100/index.html
[root@localhost ~]# echo this is 200 > /www/ip/200/index.html
[root@localhost ~]# systemctl restart nginx
通过客户端测试,出现403状态码
#修改自定义目录的安全上下文的值:
[root@localhost ~]# chcon -t httpd_sys_content_t /www/ -R
也可以将自定义目录的安全上下文的值按照/var/www/html文件修改:
[root@localhost ~]# chcon -R --reference=/usr/share/nginx/html/index.html
/www
修改之后即可成功访问
实验二:使用 web服务端口的改变来演示端口的设定
[root@localhost ~]# vim /etc/httpd/conf.d/host.conf
[root@master-dns ~]# cat /etc/nginx/conf.d/test_port.conf
server {
listen 192.168.168.153:80;
root /www/port/80;
location / {}
}
server {
listen 192.168.168.153:10000;
root /www/port/10000;
location / {}
}
[root@localhost ~]# mkdir -pv /www/port/{80,10000}
[root@localhost ~]# echo the port is 80 > /www/port/80/index.html
[root@localhost ~]# echo the port is 10000 > /www/port/10000/index.html
[root@master-dns ~]# systemctl restart nginx
#服务重启失败,查看日志
[root@localhost ~]# tail -f /var/log/messages
#添加10000端口为服务端口:
[root@localhost ~]# semanage port -a -t http_port_t -p tcp 10000
[root@master-dns ~]# systemctl restart nginx
[root@master-dns ~]# curl 192.168.168.153:10000
the port is 10000
#测试可以访问成功
第八章 防火墙
1 、什么是防火墙
防火墙:防火墙是位于内部网和外部网之间的屏障,它按照系统管理员预先定义好的规则来控制数据包
的进出。
防火墙又可以分为硬件防火墙与软件防火墙。硬件防火墙是由厂商设计好的主机硬件,这台硬件防火墙
的操作系统主要以提供数据包数据的过滤机制为主,并将其他不必要的功能拿掉。软件防火墙就是保护
系统网络安全的一套软件(或称为机制)
防火墙分为iptables和firewalld,9的版本是firewalld,比较以前的版本是iptables
[root@localhost ~]# yum install iptables -y
[root@localhost ~]# systemctl stop firewalld
[root@localhost ~]# systemctl start iptables
[root@server ~]# iptables -F #清空所有的规则表,清空之后客户端可以访问ssh和http服务
iptables 命令可以根据流量的源地址、目的地址、传输协议、服务类型等信息进行匹配,一旦匹配成
功, iptables 就会根据策略规则所预设的动作来处理这些流量。
语法格式:iptables -t 表名 <-A/I/D/R> 规则链名 [规则号] <-i/o 网卡名> -p 协议名 <-s
源IP/源子网> --sport 源端口 <-d 目标IP/目标子网> --dport 目标端口 -j 动作
3、firewalld
( 1 ) firewalld 介绍
iptables service 首先对旧的防火墙规则进行了清空,然后重新完整地加载所有新的防火墙规则,而如果
配置了需要 reload 内核模块的话,过程背后还会包含卸载和重新加载内核模块的动作,而不幸的是,这
个动作很可能对运行中的系统产生额外的不良影响,特别是在网络非常繁忙的系统中。
如果我们把这种哪怕只修改一条规则也要进行所有规则的重新载入的模式称为静态防火墙的话,那么
firewalld 所提供的模式就可以叫做动态防火墙,它的出现就是为了解决这一问题,任何规则的变更都不
需要对整个防火墙规则列表进行重新加载,只需要将变更部分保存并更新即可 , 它具备对 IPv4 和 IPv6 防
火墙设置的支持。
相比于传统的防火墙管理工具, firewalld 支持动态更新技术并加入了区域的概念。区域就是 firewalld 预
先准备了几套防火墙策略集合(策略模板),用户可以选择不同的集合,从而实现防火墙策略之间的快
速切换。
firewalld 中常见的区域名称(默认为 public )以及相应的策略规则:
firewalld 默认提供的九个 zone 配置文件都保存在 “/usr/lib/firewalld/zones/” 目录下,分别为:
block.xml drop.xml home.xml public.xml work.xml dmz.xml external.xml
internal.xml trusted.xml
在 RHEL7 中, firewalld 服务是默认的防火墙配置管理工具,他拥有基于 CLI (命令行界面)和基于
GUI (图形用户界面)的两种管理方式。 firewall-config 和 firewall-cmd 是直接编辑 xml 文件,其中
firewall-config 是图形化工具, firewall-cmd 是命令行工具。
安装 firewalld 服务的软件:
[root@localhost ~]# rpm -qa | grep firewall
firewall-config-0.3.9-14.el7.noarch
firewalld-0.3.9-14.el7.noarch
[root@localhost ~]# systemctl stop iptables
[root@localhost ~]# systemctl restart firewalld
[root@localhost ~]# firewall-cmd --help #查看帮助
[root@localhost ~]# firewall-cmd --list-all #查看所有的规则
[root@localhost ~]#firewall-cmd --permanent --add-service=服务名
使用firewalld配置的防火墙策略默认为当前生效,会随着系统的重启而失效。如果想让策略一直存在,
就需要使用永久模式了,即在使用firewall-cmd命令设置防火墙策略时添加--permanent参数,这样
配置的防火墙策略就可以永久生效了,最后想要使用这种方式设置的策略生效,只能重启或者输入命令:
firewall-cmd --reload。
#禁止某个ip地址进行ssh访问,应该写成ip/32
#配置端口转发(在172.24.8.0网段的主机访问该服务器的5423端口将被转发到80端口)
[root@system1 ~]# firewall-cmd --permanent --add-rich-rule='rule
family="ipv4" source address="172.24.8.0/24" forward-port port="5423"
protocol="tcp" toport="80"'