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,用于反向域名解析,因此称为反向域名。
- 根域名服务器:最高层次的域名服务器,也是最重要的域名服务器。所有的根域名服务器都知道所有的顶级域名服务器的域名和IP地址。不管是哪一个本地域名服务器,若要对因特网上任何一个域名进行解析,只要自己无法解析,就首先求助根域名服务器。所以根域名服务器是最重要的域名服务器。假定所有的根域名服务器都瘫痪了,那么整个DNS系统就无法工作。需要注意的是,在很多情况下,根域名服务器并不直接把待查询的域名直接解析出IP地址,而是告诉本地域名服务器下一步应当找哪一个顶级域名服务器进行查询。
现如今全球一共投放13个根服务器
根服务器主要用来管理互联网的主目录,全世界只有13台。1个为主根服务器,放置在美国。其余12个均为辅根服务器,其中9个放置在美国,欧洲2个,位于英国和瑞典,亚洲1个,位于日本。所有根服务器均由美国政府授权的互联网域名与号码分配机构ICANN统一管理,负责全球互联网域名根服务
器、域名体系和IP地址等的管理。 这13台根服务器可以指挥Firefox或互联网 Explorer这样的Web浏览器和电子邮件程序控制互联网通信。换句话说——攻击整个因特网最有力、最直接,也是最致命的方法恐怕就是攻击根域名服务器了。
在与现有IPv4根服务器体系架构充分兼容基础上,由我国下一代互联网国家工程中心领衔发起的“雪人计划”于2016年在美国、日本、印度、俄罗斯、德国、法国等全球16个国家完成25台IPv6(互联网协议第六版)根服务器架设,事实上形成了13台原有根加25台IPv6根的新格局,为建立多边、民主、透明
的国际互联网治理体系打下坚实基础。中国部署了其中的4台,由1台主根服务器和3台辅根服务器组成,打破了中国过去没有根服务器的困境。
- 顶级域名服务器:负责管理在该顶级域名服务器注册的二级域名。
- 权限域名服务器:负责一个“区”的域名服务器。
- 本地域名服务器:本地域名服务器不属于域名服务器的层次结构,但是它对域名系统非常重要。当一个主机发出DNS查询请求时,这个查询请求报文就发送给本地域名服务器。
- 主从DNS服务器:为了提高域名服务器的可靠性,DNS域名服务器都把数据复制到几个域名服务器来保存,其中的一个就是主DNS服务器(Master name server),负责解析至少一个域。其他的是辅助(从)DNS服务器(Slave name server):负责解析至少一个域,是主DNS服务器的辅助。当主域名服务器出故障时,辅助域名服务器可以保证DNS的查询工作不会中断。主域名服务器定期把数据复制到辅助域名服务器中,而更改数据只能在主域名服务器中进行。这样就保证了数据的一致性。
- 缓存DNS服务器:不负责解析域,只是缓存域名解析的结果。
DNS域名解析的过程
> 1、在浏览器中输入www . qq .com 域名,操作系统会先检查自己本地的hosts文件是否有这个网址映射关系,如果有,就先调用这个IP地址映射,完成域名解析。
> 2、如果hosts里没有这个域名的映射,则查找本地DNS解析器缓存,是否有这个网址映射关系,如果有,直接返回,完成域名解析。
> 3、如果hosts与本地DNS解析器缓存都没有相应的网址映射关系,首先会找TCP/IP参数中设置的首选DNS服务器,在此我们叫它本地DNS服务器,此服务器收到查询时,如果要查询的域名,包含在本地配置区域资源中,则返回解析结果给客户机,完成域名解析,此解析具有权威性。
> 4、如果要查询的域名,不由本地DNS服务器区域解析,但该服务器已缓存了此网址映射关系,则调用这个IP地址映射,完成域名解析,此解析不具有权威性。
>
> 5、如果本地DNS服务器本地区域文件与缓存解析都失效,则根据本地DNS服务器的设置(是否设置转发器)进行查询,如果未用转发模式,本地DNS就把请求发至13台根DNS,根DNS服务器收到请求后会判断这个域名(.com)是谁来授权管理,并会返回一个负责该顶级域名服务器的一个IP。本地DNS服务器
> 收到IP信息后,将会联系负责.com域的这台服务器。这台负责.com域的服务器收到请求后,如果自己无法解析,它就会找一个管理qq.com的DNS服务器地址给本地DNS服务器。当本地DNS服务器收到这个地址后,就会找qq.com域服务器,重复上面的动作,进行查询,直至找到www . qq .com主机。
> 6、如果用的是转发模式,本地DNS服务器就会把请求转发至上一级DNS服务器,由上一级服务器进行解析,上一级服务器如果不能解析,或找根DNS或把请求转至上上级,以此循环。找到最后把结果返回给本地DNS服务器,由此DNS服务器再返回给客户机。
> 注:从客户端到本地DNS服务器是属于递归查询,而DNS服务器之间使用的交互查询就是迭代查询。
> 114.114.114.114是国内移动、电信和联通通用的DNS,手机和电脑端都可以使用,干净无广告,解析成功率相对来说更高,国内用户使用的比较多,而且速度相对快、稳定,是国内用户上网常用的DNS。
> 8.8.8.8是GOOGLE公司提供的DNS,该地址是全球通用的,相对来说,更适合国外以及访问国外网站的用户使用。
FQDN:完全限定域名 最后加个.表示根域
DNS服务器配置
```bash
提供DNS服务的软件叫bind,服务名是named。
[root@localhost ~]# yum install bind -y
[root@localhost ~]# rpm -ql bind
/etc/named.conf # bind主配置文件
/var/named/slaves # 从dns服务器文件夹
[root@localhost ~]# vim /etc/named.conf
options {
#定义监听端口,如果所有地址都监听,则只写端口
listen-on port 53 { 127.0.0.1; };
listen-on-v6 port 53 { ::1; };
#定义数据文件目录
directory "/var/named";
#只允许本地主机进行查询
allow-query { localhost; };
};
#定义区域
zone "." IN {
type hint;
file "named.ca";
};
```
实验1:配置DNS正向解析
```bash
[root@localhost ~]# vim /etc/named.conf主配置文件
options {
#监听端口为53,大括号内数据内容可以为any
listen-on port 53 { 172.24.8.128; };
directory "/var/named";
};
zone "baidu.com" IN {
type master;
file "named.baidu.com";
};
没有file里的配置文件,需要自己创建
复制标准文件到新文件中
此外还要更改电脑dns为192.168.168.100因为不知道用的是哪个dns服务器
```bash
[root@localhost ~]# vim /var/named/named.baidu.com
$TTL 1D
@ IN SOA @ admin.baidu.com. ( 0 1D 1H 1W 3H )
IN NS ns.baidu.com.
IN MX 10 mail.baidu.com.
ns IN A 172.24.8.128
mail IN A 172.24.8.128
www IN A 172.24.8.128
ftp IN CNAME www
[root@localhost ~]# systemctl restart named
[root@localhost ~]# systemctl disable firewalld --now
```
```bash
#客户端测试
host [-a] FQDN [server]
nslookup [FQDN] [server]
dig [options] FQDN [@server]
options:+trace代表从.开始追踪;-t type查询的数据主要有MX、NS、SOA、A等类型;-x查询反解信
息
[root@localhost ~]# host www.baidu.com 172.24.8.128
[root@localhost ~]# nslookup www.baidu.com 172.24.8.128
[root@localhost ~]# dig -t A www.baidu.com @172.24.8.128
实验2:反向解析
```bash
[root@localhost ~]# vim /etc/named.conf
zone "8.24.172.in-addr.arpa" IN {
type master;
file "named.172.24.8";
};
#反向区域文件
[root@localhost ~]# vim /var/named/named.172.24.8
$TTL 1D
@ IN SOA ns.baidu.com. admin.baidu.com. ( 0 1D 1H 1W 3H )
IN NS ns.baidu.com.
128 IN PTR ns.baidu.com.
128 IN PTR www.baidu.com.
128 IN PTR mail.baidu.com.
128 IN PTR ftp.baidu.com.
#反解需要注意:主机名尽量使用完整的FQDN,即要写上“.”
```
```bash
#客户端测试
[root@localhost ~]# host 172.24.8.128 172.24.8.128
[root@localhost ~]# nslookup 172.24.8.128 172.24.8.128
[root@localhost ~]# dig -x 172.24.8.128 @172.24.8.128
防火墙
1、什么是防火墙
防火墙:防火墙是位于内部网和外部网之间的屏障,它按照系统管理员预先定义好的规则来控制数据包的进出。
防火墙又可以分为硬件防火墙与软件防火墙。硬件防火墙是由厂商设计好的主机硬件,这台硬件防火墙的操作系统主要以提供数据包数据的过滤机制为主,并将其他不必要的功能拿掉。软件防火墙就是保护系统网络安全的一套软件(或称为机制),例如Netfilter与TCP Wrappers都可以称为软件防火墙。这儿主要介绍linux系统本身提供的软件防火墙的功能,那就是Netfilter,即数据包过滤机制。
数据包过滤,也就是分析进入主机的网络数据包,将数据包的头部数据提取出来进行分析,以决定该连接为放行或抵挡的机制。由于这种方式可以直接分析数据包头部数据,包括硬件地址,软件地址,TCP、UDP、ICMP等数据包的信息都可以进行过滤分析,因此用途非常广泛(主要分析OSI七层协议的2、3、4层)。由此可知,linux的Netfilter机制可以进行的分析工作有:
- 拒绝让Internet的数据包进入主机的某些端口;
- 拒绝让某些来源ip的数据包进入;
- 拒绝让带有某些特殊标志(flag)的数据包进入,最常拒绝的就是带有SYN的主动连接的标志了;
- 分析硬件地址(MAC)来决定连接与否。
虽然Netfilter防火墙可以做到这么多事情,不过,某些情况下,它并不能保证我们的网络一定就很安全。例如:
- 防火墙并不能有效阻挡病毒或木马程序。(假设主机开放了www服务,防火墙的设置是一定要将www服务的port开放给client端的。假设www服务器软件有漏洞,或者请求www服务的数据包本身就是病毒的一部分时,防火墙是阻止不了的)
- 防火墙对于内部LAN的攻击无能为力(防火墙对于内部的规则设置通常比较少,所以就很容易造成内部员工对于网络无用或滥用的情况)
netfilter这个数据包过滤机制是由linux内核内建的,不同的内核版本使用的设置防火墙策略的软件不一样,在红帽7系统中firewalld服务取代了iptables服务,但其实iptables服务与firewalld服务它们都只是用来定义防火墙策略的“防火墙管理工具”而已,他们的作用都是用于维护规则,而真正使用规则干活的是内核的netfilter。
firewall-cmd命令的参数说明如下:
| 参数 | 作用 |
| ----------------------------- | ---------------------------------------------------- |
| --get-default-zone | 查询默认的区域名称 |
| --set-default-zone=<区域名称> | 设置默认的区域,使其永久生效 |
| --get-zones | 显示可用的区域 |
| --get-services | 显示预先定义的服务 |
| --get-active-zones | 显示当前正在使用的区域与网卡名称 |
| --add-source= | 将源自此IP或子网的流量导向指定的区域 |
| --remove-source= | 不再将源自此IP或子网的流量导向某个指定区域 |
| --list-all | 显示当前区域的网卡配置参数、资源、端口以及服务等信息 |
| --list-all-zones | 显示所有区域的网卡配置参数、资源、端口以及服务等信息 |
| --add-service=<服务名> | 设置默认区域允许该服务的流量 |
| --add-port=<端口号/协议> | 设置默认区域允许该端口的流量 |
| --remove-service=<服务名> | 设置默认区域不再允许该服务的流量 |
| --remove-port=<端口号/协议> | 设置默认区域不再允许该端口的流量 |
| --reload | 让“永久生效”的配置规则立即生效,并覆盖当前的配置规则 |
| --panic-on | 开启应急状况模式 |
| --panic-off | 关闭应急状况模式 |
```bash
[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。
```
```bash
#禁止某个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" to-port="80"'