DNS和iptables

发布时间 2023-04-07 16:21:57作者: ——浮生——

DNS服务

DNS:Domain Name System 域名系统,应用层协议,是互联网的一项服务。它作为将域名和IP地址相互 映射的一个分布式数据库,能够使人更方便地访问互联网,基于C/S架构,服务器端:53/udp, 53/tcp

DNS服务工作过程

1.客户端向本地DNS服务器发出域名解析请求

2.本地DNS服务器查询缓存,查询到就返回,如果没查询到就将请求发送给根服务器,根服务器返回给本地DNS服务器一个查询域服务器的地址

3.本地服务器向上次返回DNS服务器地址发送域名解析请求,DNS服务器查询记录,得到结果返回给本地服务器,没有结果返回下级DNS服务器地址,重复以上动作直到获得结果

4.本地服务器将结果保存到缓存,并返回给客户端

DNS服务器主从实现

主服务器配置
[root@centos7 ~]# vim /etc/named.conf
// listen-on port 53 { 127.0.0.1; };
// allow-query     { localhost; };
options {
	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";
	recursing-file  "/var/named/data/named.recursing";
	secroots-file   "/var/named/data/named.secroots";
[root@centos7 ~]# vim /etc/named.rfc1912.zones
zone "magedu.org" IN {
	type master;
	file "magedu.org.zone";
};
[root@centos7 ~]# cp -p /var/named/named.localhost /var/named/magedu.org.zone
[root@centos7 ~]# vim /var/named/magedu.org.zone
$TTL 1D
@       IN SOA master   admin.magedu.org. (
                                        1       ; serial  #每次配置变动时需修改此处值
                                        1D      ; refresh
                                        1H      ; retry
                                        1W      ; expire
                                        3H )    ; minimum
        NS      master
        NS      slave
master  A       10.0.0.27
slave   A       10.0.0.37
www     A       10.0.0.47
[root@centos7 ~]# rndc reload  #非第一次启动加载配置
[root@centos7 ~]# systemctl start named.service  第一次启动
从服务器配置
vim /etc/named.conf
options {
// 		listen-on port 53 { 127.0.0.1; };
// 		allow-query     { localhost; };
        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";
        recursing-file  "/var/named/data/named.recursing";
        secroots-file   "/var/named/data/named.secroots";
        allow-transfer { 10.0.0.27;};
vim /etc/named.rfc1912.zones
zone "magedu.org" IN {
        type slave;
        masters { 10.0.0.27;};
        file "slaves/magedu.org.slave";
};
[root@centos7 ~]# rndc reload  #非第一次启动加载配置
[root@centos7 ~]# systemctl start named.service  第一次启动
测试结果
[root@centos7 ~]# dig www.magedu.org

; <<>> DiG 9.11.4-P2-RedHat-9.11.4-26.P2.el7 <<>> www.magedu.org
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 34607
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 2, ADDITIONAL: 3

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

;; ANSWER SECTION:
www.magedu.org.		86400	IN	A	10.0.0.47

;; AUTHORITY SECTION:
magedu.org.		86400	IN	NS	slave.magedu.org.
magedu.org.		86400	IN	NS	master.magedu.org.

;; ADDITIONAL SECTION:
master.magedu.org.	86400	IN	A	10.0.0.27
slave.magedu.org.	86400	IN	A	10.0.0.37

;; Query time: 0 msec
;; SERVER: 10.0.0.27#53(10.0.0.27)
;; WHEN: Sat Jun 25 14:28:13 CST 2022
;; MSG SIZE  rcvd: 132

[root@centos7 ~]# dig www.magedu.org

; <<>> DiG 9.11.4-P2-RedHat-9.11.4-26.P2.el7 <<>> www.magedu.org
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 55553
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 2

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

;; ANSWER SECTION:
www.magedu.org.		86400	IN	A	10.0.0.47

;; AUTHORITY SECTION:
magedu.org.		86400	IN	NS	master.magedu.org.

;; ADDITIONAL SECTION:
master.magedu.org.	86400	IN	A	10.0.0.27

;; Query time: 1 msec
;; SERVER: 10.0.0.37#53(10.0.0.37)
;; WHEN: Sat Jun 25 14:28:24 CST 2022
;; MSG SIZE  rcvd: 96

子域委派

父域ip:10.0.0.27
子域ip:10.0.0.37
www.magedu.org  10.0.0.47
www.hn.magedu.org  10.0.0.57
父域配置
[root@centos7 ~]# vim /etc/named.conf
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";
        recursing-file  "/var/named/data/named.recursing";
        secroots-file   "/var/named/data/named.secroots";
//      allow-query     { localhost; };

        dnssec-enable yes;
        dnssec-validation yes;
        
[root@centos7 ~]# vim /etc/named.rfc1912.zones
zone "magedu.org" IN {
        type master;
        file "magedu.org.zone";
};
[root@centos7 ~]# vim /var/named/magedu.org.zone
$TTL 1D
@       IN SOA  master admin.magedu.org. (
                                        0       ; serial
                                        1D      ; refresh
                                        1H      ; retry
                                        1W      ; expire
                                        3H )    ; minimum
        NS      master
hn      NS      hns
master  A       10.0.0.27
hns     A       10.0.0.37
www     A       10.0.0.47

子域配置
[root@centos7 ~]# vim /etc/named.conf
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";
        recursing-file  "/var/named/data/named.recursing";
        secroots-file   "/var/named/data/named.secroots";
//      allow-query     { localhost; };
        allow-transfer { none;};
[root@centos7 ~]# vim /etc/named.rfc1912.zones
zone "hn.magedu.org" IN {
        type master;
        file "hn.magedu.org.zone";
};
[root@centos7 ~]# vim /var/named/hn.magedu.org.zone
$TTL 1D
@       IN SOA  master admin.magedu.org. (
                                        0       ; serial
                                        1D      ; refresh
                                        1H      ; retry
                                        1W      ; expire
                                        3H )    ; minimum
        NS      master
master  A       10.0.0.37
www     A       10.0.0.57

客户端测试:
[root@centos7 ~]# dig www.magedu.org

; <<>> DiG 9.11.4-P2-RedHat-9.11.4-26.P2.el7 <<>> www.magedu.org
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 46407
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 2

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

;; ANSWER SECTION:
www.magedu.org.		86400	IN	A	10.0.0.47

;; AUTHORITY SECTION:
magedu.org.		86400	IN	NS	master.magedu.org.

;; ADDITIONAL SECTION:
master.magedu.org.	86400	IN	A	10.0.0.27

;; Query time: 0 msec
;; SERVER: 10.0.0.27#53(10.0.0.27)
;; WHEN: Sat Jun 25 20:53:41 CST 2022
;; MSG SIZE  rcvd: 96

[root@centos7 ~]# dig www.hn.magedu.org

; <<>> DiG 9.11.4-P2-RedHat-9.11.4-26.P2.el7 <<>> www.hn.magedu.org
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 1190
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 2

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;www.hn.magedu.org.		IN	A

;; ANSWER SECTION:
www.hn.magedu.org.	85941	IN	A	10.0.0.57

;; AUTHORITY SECTION:
hn.magedu.org.		86400	IN	NS	hns.magedu.org.

;; ADDITIONAL SECTION:
hns.magedu.org.		86400	IN	A	10.0.0.37

;; Query time: 0 msec
;; SERVER: 10.0.0.27#53(10.0.0.27)
;; WHEN: Sat Jun 25 20:53:43 CST 2022
;; MSG SIZE  rcvd: 96

智能DNS实现

ACL:把一个或多个地址归并为一个集合,并通过一个统一的名称调用
注意:只能先定义后使用;因此一般定义在配置文件中,处于options的前面
View:视图,将ACL和区域数据库实现对应关系,以实现智能DNS
一个bind服务器可定义多个view,每个view中可定义一个或多个zone
每个view用来匹配一组客户端
多个view内可能需要对同一个区域进行解析,但使用不同的区域解析库文件
注意:
一旦启用了view,所有的zone都只能定义在view中
仅在允许递归请求的客户端所在view中定义根区域
客户端请求到达时,是自上而下检查每个view所服务的客户端列表

DNS地址:10.0.0.27/24 172.16.0.0.8/16
客户端地址:10.0.0.17/24 172.16.0.6/16
服务器地址:10.0.0.47/24 172.16.0.7/16
[root@centos7 ~]# vim /etc/named.conf 
acl beijing {
	10.0.0.0/24;
};
acl shanghai {
	172.16.0.0/16;
};
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";
	recursing-file  "/var/named/data/named.recursing";
	secroots-file   "/var/named/data/named.secroots";
//	allow-query     { localhost; };
//	allow-transfer	{ 10.0.0.37;};

	recursion yes;

	dnssec-enable yes;
	dnssec-validation yes;

	/* Path to ISC DLV key */
	bindkeys-file "/etc/named.root.key";

	managed-keys-directory "/var/named/dynamic";

	pid-file "/run/named/named.pid";
	session-keyfile "/run/named/session.key";
};

logging {
        channel default_debug {
                file "data/named.run";
                severity dynamic;
        };
};

view beijingview {
	match-clients { beijing; };
	include "/etc/named.rfc1912.zones.bj";
};
view shanghaiview {
	match-clients { shanghai; };
	include "/etc/named.rfc1912.zones.sh";
};
include "/etc/named.root.key";



[root@centos7 ~]# vim /etc/named.rfc1912.zones.bj
zone "." IN {
        type hint;
        file "named.ca";
};

zone "magedu.org" IN {
        type master;
        file "magedu.org.zone.bj";
};

[root@centos7 ~]# vim /etc/named.rfc1912.zones.sh 
zone "." IN {
        type hint;
        file "named.ca";
};

zone "magedu.org" IN {
        type master;
        file "magedu.org.zone.sh";
};
[root@centos7 ~]# vim /var/named/magedu.org.zone.bj 
$TTL 1D
@       IN SOA  master admin.magedu.org. (
                                        0       ; serial
                                        1D      ; refresh
                                        1H      ; retry
                                        1W      ; expire
                                        3H )    ; minimum
        NS      master
master  A       10.0.0.27
www     A       10.0.0.47

[root@centos7 ~]# vim /var/named/magedu.org.zone.sh
$TTL 1D
@       IN SOA  master admin.magedu.org. (
                                        0       ; serial
                                        1D      ; refresh
                                        1H      ; retry
                                        1W      ; expire
                                        3H )    ; minimum
        NS      master
master  A       10.0.0.27
www     A       172.16.0.7
测试:
[root@centos7 ~]# dig www.magedu.org @10.0.0.27

; <<>> DiG 9.11.4-P2-RedHat-9.11.4-26.P2.el7 <<>> www.magedu.org @10.0.0.27
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 44533
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 2

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

;; ANSWER SECTION:
www.magedu.org.		86400	IN	A	10.0.0.47

;; AUTHORITY SECTION:
magedu.org.		86400	IN	NS	master.magedu.org.

;; ADDITIONAL SECTION:
master.magedu.org.	86400	IN	A	10.0.0.27

;; Query time: 0 msec
;; SERVER: 10.0.0.27#53(10.0.0.27)
;; WHEN: Sat Jun 25 21:53:39 CST 2022
;; MSG SIZE  rcvd: 96

[root@centos7 ~]# dig  www.magedu.org @172.16.0.8

; <<>> DiG 9.11.4-P2-RedHat-9.11.4-26.P2.el7 <<>> www.magedu.org @172.16.0.8
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 64022
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 2

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

;; ANSWER SECTION:
www.magedu.org.		86400	IN	A	172.16.0.7

;; AUTHORITY SECTION:
magedu.org.		86400	IN	NS	master.magedu.org.

;; ADDITIONAL SECTION:
master.magedu.org.	86400	IN	A	10.0.0.27

;; Query time: 0 msec
;; SERVER: 172.16.0.8#53(172.16.0.8)
;; WHEN: Sat Jun 25 21:53:40 CST 2022
;; MSG SIZE  rcvd: 96

防火墙

安全技术

1 安全技术

入侵检测系统(Intrusion Detection Systems):特点是不阻断任何网络访问,量化、定位来自内 外网络的威胁情况,主要以提供报警和事后监督为主,提供有针对性的指导措施和安全决策依据,类 似于监控系统一般采用旁路部署方式

入侵防御系统(Intrusion Prevention System):以透明模式工作,分析数据包的内容如:溢出攻 击、拒绝服务攻击、木马、蠕虫、系统漏洞等进行准确的分析判断,在判定为攻击行为后立即予以 阻断,主动而有效的保护网络的安全,一般采用在线部署方式

防火墙( FireWall ):隔离功能,工作在网络或主机边缘,对进出网络或主机的数据包基于一定的 规则检查,并在匹配某规则时由规则定义的行为进行处理的一组功能的组件,基本上的实现都是默 认情况下关闭所有的通过型访问,只开放允许访问的策略,会将希望外网访问的主机放在DMZ (demilitarized zone)网络中.

Linux防火墙是由Netfilter组件提供的,Netfilter工作在内核空间,集成在linux内核中

防火墙工具iptables

iptables简介

Netfilter在内核中选取五个位置放了五个hook(勾子) function(INPUT、OUTPUT、FORWARD、 PREROUTING、POSTROUTING),而这五个hook function向用户开放,用户可以通过一个命令工具 (iptables)向其写入规则

三种报文流向
流入本机:PREROUTING --> INPUT-->用户空间进程
流出本机:用户空间进程 -->OUTPUT--> POSTROUTING
转发:PREROUTING --> FORWARD --> POSTROUTING

iptables由五个表table和五个链chain以及一些规则组成
五个内置链chain:
INPUT,OUTPUT,FORWARD,PREROUTING,POSTROUTING

五个表table:filter、nat、mangle、raw、security
filter:过滤规则表,根据预定义的规则过滤符合条件的数据包,默认表
nat:network address translation 地址转换规则表
mangle:修改数据标记位规则表
raw:关闭启用的连接跟踪机制,加快封包穿越防火墙速度
security:用于强制访问控制(MAC)网络规则,由Linux安全模块(如SELinux)实现

优先级由高到低的顺序为:security -->raw-->mangle-->nat-->filter

数据传输过程:

1.当一个数据包进入网卡时,数据包首先进入PREROUTING链,内核根据数据包目的IP判断是否需要转送出去

2.如果数据包是进入本机的,数据包就会移动到达INPUT链。数据包到达INPUT链后, 任何进程都会收到它。本机上运行的程序可以发送数据包,这些数据包经过OUTPUT链,然后到达POSTROUTING链输出

3.如果数据包是要转发出去的,且内核允许转发,数据包就会向右移动,经过FORWARD链,然后到 达POSTROUTING链输出

iptables 规则组成
规则rule:根据规则的匹配条件尝试匹配报文,对匹配成功的报文根据规则定义的处理动作作出处理, 规则在链接上的次序即为其检查时的生效次序
匹配条件:默认为与条件,同时满足 基本匹配:IP,端口,TCP的Flags(SYN,ACK等)
扩展匹配:通过复杂高级功能匹配
处理动作:称为target,跳转目标
内建处理动作:ACCEPT,DROP,REJECT,SNAT,DNAT,MASQUERADE,MARK,LOG...
自定义处理动作:自定义chain,利用分类管理复杂情形
规则要添加在链上,才生效;
添加在自定义链上不会自动生效
白名单:只有指定的特定主机可以访问,其它全拒绝
黑名单:只有指定的特定主机拒绝访问,其它全允许,默认方式

iptables用法

iptables命令格式:

	iptables  [-t table]  SUBCOMMAND  chain  [-m matchname [per-match-options]]  -j targetname [per-target-options]
	1、-t table:指定表
		raw, mangle, nat, [filter]默认 
	2、SUBCOMMAND:子命令 
	链管理类:
		-N:new, 自定义一条新的规则链 
		-E:重命名自定义链;引用计数不为0的自定义链不能够被重命名,也不能被删除 
		-X:delete,删除自定义的空的规则链 
		-P:Policy,设置默认策略;对filter表中的链而言,其默认策略有:ACCEPT:接受, DROP:丢弃 
	查看类:
		-L:list, 列出指定鏈上的所有规则,本选项须置后 
		-n:numberic,以数字格式显示地址和端口号 
		-v:verbose,详细信息 
	规则管理类:
		-A:append,追加 
		-I:insert, 插入,要指明插入至的规则编号,默认为第一条 
		-D:delete,删除   
			(1) 指明规则序号   
			(2) 指明规则本身 
		-R:replace,替换指定链上的指定规则编号 
		-F:flush,清空指定的规则链 
		-Z:zero,置零   iptables的每条规则都有两个计数器 
			(1) 匹配到的报文的个数
			(2) 匹配到的所有报文的大小之和
	chain: 
		PREROUTING,INPUT,FORWARD,OUTPUT,POSTROUTING 
	匹配条件 
		基本:通用的,PARAMETERS 
		扩展:需加载模块,MATCH EXTENTIONS 
	处理动作
		-j targetname [per-target-options]
		简单动作: 
			ACCEPT 
			DROP

		扩展动作:
			REJECT:--reject-with:icmp-port-unreachable默认 
			RETURN:返回调用链 
			REDIRECT:端口重定向 
			LOG:记录日志,dmesg 
			MARK:做防火墙标记 
			DNAT:目标地址转换 
			SNAT:源地址转换 
			MASQUERADE:地址伪装 自定义链

iptables 匹配条件

​ iptables 基本匹配条件

	基本匹配条件:无需加载模块,由iptables/netfilter自行提供
	[!] -s, --source address[/mask][,...]:源IP地址或者不连续的IP地址 
	[!] -d, --destination address[/mask][,...]:目标IP地址或者不连续的IP地址 
	[!] -p, --protocol protocol:指定协议,可使用数字如0(all) 
		protocol: tcp, udp, icmp, icmpv6, udplite,esp, ah, sctp, mh or“all“   参看:/etc/protocols 
	[!] -i, --in-interface name:报文流入的接口;只能应用于数据报文流入环节,只应用于INPUT、 FORWARD、PREROUTING链 
	[!] -o, --out-interface name:报文流出的接口;只能应用于数据报文流出的环节,只应用于 FORWARD、OUTPUT、POSTROUTING链 

​ iptables 扩展匹配条件

	扩展匹配条件:需要加载扩展模块(/usr/lib64/xtables/*.so),方可生效 扩展模块的查看帮助 :man iptables-extensions 
	扩展匹配条件:
		隐式扩展 
		显式扩展 
	隐式扩展 iptables 在使用-p选项指明了特定的协议时,无需再用-m选项指明扩展模块的扩展机制,不需要手动加载扩展模块 
	tcp 协议的扩展选项 
		[!] --source-port, --sport port[:port]:匹配报文源端口,可为端口连续范围 
		[!] --destination-port,--dport port[:port]:匹配报文目标端口,可为连续范围 
		[!] --tcp-flags mask comp     
		mask 需检查的标志位列表,用,分隔 , 例如 SYN,ACK,FIN,RST     
		comp 在mask列表中必须为1的标志位列表,无指定则必须为0,用,分隔tcp协议的扩展选项
	范例: 
		--tcp-flags SYN,ACK,FIN,RST SYN 表示要检查的标志位为SYN,ACK,FIN,RST四个,其中SYN必 须为1,余下的必须为0,
	第一次握手 --tcp-flags SYN,ACK,FIN,RST SYN,ACK 
	第二次握手 
	#错误包 
		--tcp-flags ALL ALL   
		--tcp_flags ALL NONE
		[!] --syn:用于匹配第一次握手, 相当于:--tcp-flags SYN,ACK,FIN,RST SYN
	udp 协议的扩展选项 
		[!] --source-port, --sport port[:port]:匹配报文的源端口或端口范围 
		[!] --destination-port,--dport port[:port]:匹配报文的目标端口或端口范围
	icmp 协议的扩展选项
	     [!] --icmp-type {type[/code]|typename} type/code 
	     0/0   echo-reply icmp应答 
	     8/0   echo-request icmp请求
显式扩展及相关模块 
	显示扩展即必须使用-m选项指明要调用的扩展模块名称,需要手动加载扩展模块
	[-m matchname [per-match-options]]
	扩展模块的使用帮助: CentOS 7,8: man iptables-extensions CentOS 6: man iptables 
 multiport扩展 
	以离散方式定义多端口匹配,最多指定15个端口
	#指定多个源端口 
		[!] --source-ports,--sports port[,port|,port:port]... 
	# 指定多个目标端口 
		[!] --destination-ports,--dports port[,port|,port:port]... 
	#多个源或目标端 
		[!] --ports port[,port|,port:port]...
		
 connlimit扩展
	根据每客户端IP做并发连接数数量匹配 
	可防止Dos(Denial of Service,拒绝服务)攻击
	--connlimit-upto N #连接的数量小于等于N时匹配 
	--connlimit-above N #连接的数量大于N时匹配

 limit扩展
	基于收发报文的速率做匹配 , 令牌桶过滤器
	--limit-burst number #前多少个包不限制 
	--limit #[/second|/minute|/hour|/day] 

 state扩展 
	state 扩展模块,可以根据”连接追踪机制“去检查连接的状态,较耗资源 conntrack机制:追踪本机上的请求和响应之间的关系 状态类型: 
		NEW:新发出请求;连接追踪信息库中不存在此连接的相关信息条目,因此,将其识别为第一次发 出的请求 
		ESTABLISHED:NEW状态之后,连接追踪信息库中为其建立的条目失效之前期间内所进行的通信状态 
		RELATED:新发起的但与已有连接相关联的连接,如:ftp协议中的数据连接与命令连接之间的关 系 
		INVALID:无效的连接,如flag标记不正确 
		UNTRACKED:未进行追踪的连接,如:raw表中关闭追踪 

iptables规则保存

CentOS 7,8

​ iptables-save > /PATH/TO/SOME_RULES_FILE

CentOS 6

​ #将规则覆盖保存至/etc/sysconfig/iptables文件中 service iptables save

加载规则

CentOS 7,8 重新载入预存规则文件中规则:

​ iptables-restore < /PATH/FROM/SOME_RULES_FILE

​ iptables-restore选项

​ -n, --noflush:不清除原有规则

​ -t, --test:仅分析生成规则集,但不提交

CentOS 6:

​ #会自动从/etc/sysconfig/iptables 重新载入规则 service iptables restart

实现开机自动加载规则可将命令写入/etc/rc.d/rc.local

也可使用iptables.service服务实现规则的保存和加载

地址转换

NAT: network address translation,支持PREROUTING,INPUT,OUTPUT,POSTROUTING四个链
请求报文:修改源/目标IP,由定义如何修改
响应报文:修改源/目标IP,根据跟踪机制自动实现
NAT的实现分为下面类型:
SNAT:source NAT ,支持POSTROUTING, INPUT,让本地网络中的主机通过某一特定地址访问 外部网络,实现地址伪装,请求报文:修改源IP

格式:

iptables -t nat -A POSTROUTING -s LocalNET ! -d LocalNet -j SNAT --to-source ExtIP

​ DNAT:destination NAT 支持PREROUTING , OUTPUT,把本地网络中的主机上的某服务开放给外 部网络访问(发布服务和端口映射),但隐藏真实IP,请求报文:修改目标IP

格式:

ptables -t nat -A PREROUTING -d ExtIP -p tcp|udp --dport PORT -j DNAT --todestination InterSeverIP[:PORT]

PNAT: port nat,端口和IP都进行修改

注:SNAT,DNAT需要开启 ip_forward

[root@firewall ~]# vim /etc/sysctl.conf

net.ipv4.ip_forward=1

[root@firewall ~]# sysctl -p

REDIRECT 转发

REDIRECT,是NAT表的 target,通过改变目标IP和端口,将接受的包转发至同一个主机的不同端口,可 用于PREROUTING OUTPUT链

注意: 无需开启 ip_forward

​ iptables -t nat -A PREROUTING -d 172.16.100.10 -p tcp --dport 80 -j REDIRECT -- to-ports 8080

实现流量控制

外部主机:192.168.10.17
防火墙:192.168.10.27 10.0.0.27
内部主机:10.0.0.18


[root@centos7 ~]# echo 'net.ipv4.ip_forward = 1' >/etc/sysctl.conf 
[root@centos7 ~]# sysctl -p
net.ipv4.ip_forward = 1
实现外部到内部的禁ping,内部到外部不禁止
[root@centos7 ~]# iptables -A FORWARD -s 10.0.0.0/24 -p icmp --icmp-type 0 -j REJECT 
[root@centos7 ~]# iptables -A FORWARD -d 10.0.0.0/24 -p icmp --icmp-type 8 -j REJECT

[root@centos7 ~]# iptables -A FORWARD -d 10.0.0.0/24 -p icmp --icmp-type 0 -j ACCEPT 
[root@centos7 ~]# iptables -A FORWARD -s 10.0.0.0/24 -p icmp --icmp-type 8 -j ACCEPT 
[root@centos7 ~]# iptables -A FORWARD  -j REJECT

实现外到内的访问控制,内到外无影响
[root@centos7 ~]# iptables -A FORWARD -s 10.0.0.18 -p tcp --dport 80 -j ACCEPT 
[root@centos7 ~]# iptables -A FORWARD -d 10.0.0.18 -p tcp --sport 80 -j ACCEPT 
[root@centos7 ~]# iptables -A FORWARD  -j REJECT

[root@centos7 ~]# curl 10.0.0.18
curl: (7) Failed connect to 10.0.0.18:80; Connection refused
[root@localhost ~]# curl 192.168.10.17
192.168.10.17

实现持久化保存
[root@localhost ~]# iptables-save >/etc/sysconfig/iptables
或
[root@centos7 network-scripts]# systemctl enable --now iptables.service

实现SNAT

外部主机:192.168.10.17 无网关
防火墙:192.168.10.27 10.0.0.27
内部主机:10.0.0.18

[root@centos7 ~]# echo 'net.ipv4.ip_forward = 1' >/etc/sysctl.conf 
[root@centos7 ~]# sysctl -p
net.ipv4.ip_forward = 1
[root@centos7 ~]# iptables -t nat -A POSTROUTING -s 10.0.0.0/24 ! -d 10.0.0.0/24 -j MASQUERADE
[root@centos7 network-scripts]# iptables -t nat -vnL
Chain PREROUTING (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination         

Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination         

Chain OUTPUT (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination         

Chain POSTROUTING (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination         
    0     0 MASQUERADE  all  --  *      *       10.0.0.0/24         !10.0.0.0/24 
[root@centos7 ~]# curl 10.0.0.18
curl: (7) Failed to connect to 10.0.0.18: Network is unreachable
[root@localhost ~]# curl 192.168.10.17
192.168.10.17

实现持久化保存
[root@localhost ~]# iptables-save >/etc/sysconfig/iptables
或
[root@centos7 network-scripts]# systemctl enable --now iptables.service

实现DNAT

外部主机:192.168.10.17 无网关
防火墙:192.168.10.27 10.0.0.27
内部主机:10.0.0.28

防火墙配置
[root@centos7 ~]# iptables -t nat -A PREROUTING -d 192.168.10.17 -p tcp --dport 80 -j DNAT --to-destination 10.0.0.28
[root@centos7 network-scripts]# iptables -t nat -vnL
Chain PREROUTING (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination         
    1    60 DNAT       tcp  --  *      *       0.0.0.0/0            192.168.10.27        tcp dpt:80 to:10.0.0.18


测试
[root@centos7 ~]# curl 192.168.10.27
10.0.0.18

使用iptable实现: 放行ssh,telnet, ftp, web服务80端口,其他端口服务全部拒绝

[root@localhost ~]# iptables -A INPUT  -p tcp --dport 80 -j ACCEPT 
[root@localhost ~]# iptables -A INPUT  -p tcp --dport 21 -j ACCEPT 
[root@localhost ~]# iptables -A INPUT  -p tcp --dport 22 -j ACCEPT 
[root@localhost ~]# iptables -A INPUT  -p tcp --dport 23 -j ACCEPT 
[root@localhost ~]# iptables -A INPUT  -p tcp  -j REJECT

[root@localhost ~]# iptables -nL
Chain INPUT (policy ACCEPT)
target     prot opt source               destination         
ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0            tcp dpt:80
ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0            tcp dpt:21
ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0            tcp dpt:22
ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0            tcp dpt:23     
REJECT     tcp  --  0.0.0.0/0            0.0.0.0/0            reject-with icmp-port-unreachable