首页 > 运维类 > LINUX运维 > 防火墙IPTABLES

949

浏览

0

评论

防火墙IPTABLES

作者:stephen | 分类:LINUX运维 | 标签:

iptables概述:
netfilter/iptables : IP信息包过滤系统,它实际上由两个组件netfilter 和 iptables 组成。
netfilter/iptables 关系:
netfilter 组件也称为内核空间(kernelspace),是内核的一部分,由一些信息包过滤表组成,这些表包含内核用来控制信息包过滤处理的规则集。
iptables 组件是一种工具,也称为用户空间(userspace),它使插入、修改和除去信息包过滤表中的规则变得容易。
netfilter/iptables 后期简称为:iptables。 iptables是基于内核的防火墙,功能非常强大,iptables内置了filter,nat和mangle三张表。所有规则配置后,立即生效,不需要重启服务。

三张表介绍:
filter负责过滤数据包,包括的规则链有,input,output和forward;
nat则涉及到网络地址转换,包括的规则链有,prerouting,postrouting和output;
mangle表则主要应用在修改数据包内容上,用来做流量整形的,给数据包打个标识,默认的规则链有:INPUT,OUTPUT、 forward,POSTROUTING,PREROUTING;

五个链:
input匹配目标IP是本机的数据包,
output 出口数据包 , 一般不在此链上做配置
forward匹配流经本机的数据包,
prerouting用来修改目的地址,用来做DNAT 。如:把内网中的80端口映射到路由器外网端口上
postrouting用来修改源地址用来做SNAT。 如:内网通过路由器NAT转换功能实现内网PC机通过一个公网IP地址上网。
总结:iptables三个表,5个链接,结构如图:
在这里插入图片描述
Raw [rɔ:]表:用于处理异常,包括的规则链有,prerouting,output; 一般使用不到。

查看raw表中的内容:

[root@localhost ~]# iptables -t raw -L Chain PREROUTING (policy ACCEPT) target     prot opt source               destination          PREROUTING_direct  all  --  anywhere             anywhere             PREROUTING_ZONES_SOURCE  all  --  anywhere             anywhere             PREROUTING_ZONES  all  --  anywhere             anywhere             Chain OUTPUT (policy ACCEPT) target     prot opt source               destination          OUTPUT_direct  all  --  anywhere             anywhere             Chain OUTPUT_direct (1 references) target     prot opt source               destination          Chain PREROUTING_ZONES (1 references) target     prot opt source               destination          PRE_public  all  --  anywhere             anywhere            [goto]  PRE_public  all  --  anywhere             anywhere            [goto]  Chain PREROUTING_ZONES_SOURCE (1 references) target     prot opt source               destination          Chain PREROUTING_direct (1 references) target     prot opt source               destination          Chain PRE_public (2 references) target     prot opt source               destination          PRE_public_log  all  --  anywhere             anywhere             PRE_public_deny  all  --  anywhere             anywhere             PRE_public_allow  all  --  anywhere             anywhere             Chain PRE_public_allow (1 references) target     prot opt source               destination          Chain PRE_public_deny (1 references) target     prot opt source               destination          Chain PRE_public_log (1 references) target     prot opt source               destination    123456789101112131415161718192021222324252627282930313233343536373839

表->链->规则

Iptables过滤封包流程
在这里插入图片描述
–>PREROUTING–>[ROUTE]–>FORWARD–>POSTROUTING–>
mangle | mangle ^ mangle
nat | filter | nat
| |
| |
v |
INPUT OUTPUT
| mangle ^ mangle
| filter | nat
v ---------------->local------------>| filter

总结: 整体数据包分两类: 1、发给防火墙本身的数据包 ;2、需要经过防火墙的数据包
① 当一个数据包进入网卡时,它首先进入PREROUTING链,内核根据数据包目的IP判断是否需要转送出去。
② 如果数据包就是进入本机的,它就会沿着图向下移动,到达INPUT链。数据包到了INPUT链后,任何进程都会收到它。
本机上运行的程序可以发送数据包,这些数据包会经过OUTPUT链,然后到达POSTROUTING链输出。
③ 如果数据包是要转发出去的,且内核允许转发,数据包就会如图所示向右移动,经过FORWARD链,然后到达POSTROUTING链输出。

在这里插入图片描述

总结: 整体数据包分两类: 1、发给防火墙本身的数据包 ;2、需要经过防火墙的数据包
注意:规则的次序非常关键,谁的规则越严格,应该放的越靠前,而检查规则的时候,是按照从上往下的方式进行检查的。

Iptables部署
Iptables是逻辑性比较强的服务,所以一个一个的疏通

安装

–关闭firewall

[root@localhost ~]# systemctl stop firewalld.service   #停止firewalld [root@localhost ~]# systemctl enable firewalld.service  #禁止firewalld开机自启 12

–安装安装iptables防火墙

[root@localhost ~]# yum -y install iptables [root@localhost ~]# yum install iptables-services [root@localhost ~]# ls /etc/sysconfig/iptables /etc/sysconfig/iptables 启动服务 [root@localhost ~]# systemctl start iptables.service [root@localhost ~]# systemctl enable iptables.service 1234567

在这里插入图片描述
iptables语法总结:
在这里插入图片描述
iptables命令使用方法
iptables [-t 要操作的表]
<操作命令>
[要操作的链]
[规则号码]
[匹配条件]
[-j 匹配到以后的动作]

操作命令(-A、-I、-D、-P、-F)
查看命令(-[vnx]L)

-A <链名> APPEND,追加一条规则(放到最后)
例如:
iptables -t filter -A INPUT -j DROP #拒绝所有人访问服务器
在 filter 表的 INPUT 链里追加一条规则(作为最后一条规则)
匹配所有访问本机 IP 的数据包,匹配到的丢弃

-I <链名> [规则号码] INSERT,插入一条规则
例如:
iptables -I INPUT -j DROP
在 filter 表的 INPUT 链里插入一条规则(插入成第 1 条)
iptables -I INPUT 3 -j DROP
在 filter 表的 INPUT 链里插入一条规则(插入成第 3 条)
注意: 1、-t filter 可不写,不写则自动默认是 filter 表
2、-I 链名 [规则号码],如果不写规则号码,则默认是 1
3、确保规则号码 ≤ (已有规则数 + 1),否则报错
-R num:Replays替换/修改第几条规则
格式:iptables –t filter -R INPUT 3 ………… 修改filter的INPUT链第三条规则

-D <链名> <规则号码 | 具体规则内容> DELETE,删除一条规则

[root@localhost ~]# iptables -L Chain INPUT (policy ACCEPT) target     prot opt source               destination          ACCEPT     all  --  anywhere             anywhere             state RELATED,ESTABLISHED ACCEPT     icmp --  anywhere             anywhere             ACCEPT     all  --  anywhere             anywhere             ACCEPT     tcp  --  anywhere             anywhere             state NEW tcp dpt:ssh REJECT     all  --  anywhere             anywhere             reject-with icmp-host-prohibited Chain FORWARD (policy ACCEPT) target     prot opt source               destination          REJECT     all  --  anywhere             anywhere             reject-with icmp-host-prohibited Chain OUTPUT (policy ACCEPT) target     prot opt source               destination  123456789101112131415
[root@localhost ~]# iptables -I INPUT 3 -j DROP 1
[root@localhost ~]# iptables -L    #查看默认规则是ACCEPT Chain INPUT (policy ACCEPT) target     prot opt source               destination          ACCEPT     all  --  anywhere             anywhere             state RELATED,ESTABLISHED ACCEPT     icmp --  anywhere             anywhere             DROP       all  --  anywhere             anywhere             DROP       all  --  anywhere             anywhere             ACCEPT     all  --  anywhere             anywhere             ACCEPT     tcp  --  anywhere             anywhere             state NEW tcp dpt:ssh REJECT     all  --  anywhere             anywhere             reject-with icmp-host-prohibited Chain FORWARD (policy ACCEPT) target     prot opt source               destination          REJECT     all  --  anywhere             anywhere             reject-with icmp-host-prohibited Chain OUTPUT (policy ACCEPT) target     prot opt source               destination         1234567891011121314151617

iptables -D INPUT 1(按号码匹配)

删除 filter 表 INPUT 链中的第1条规则(不管它的内容是什么)
iptables -D INPUT -s 10.10.101.5 -j DROP(按内容匹配)

删除 filter 表 INPUT 链中内容为“-s 10.10.101.5 -j DROP”的规则
(不管其位置在哪里)

注意:
1、若规则列表中有多条相同的规则时,按内容匹配只删除序号最小的一条
2、按号码匹配删除时,确保规则号码 ≤ 已有规则数,否则报错
3、按内容匹配删除时,确保规则存在,否则报错

-P <链名> <动作> POLICY,设置某个链的默认规则
iptables -P INPUT DROP
设置 filter 表 INPUT 链的默认规则是 DROP

 [root@localhost ~]# iptables -L    #查看已经变为DROP Chain INPUT (policy DROP) 12

注意:
当数据包没有被规则列表里的任何规则匹配到时,按此默认规则处理。动作前面不能加 –j,这也是唯一一种匹配动作前面不加 –j 的情况。

-F [链名] FLUSH,清空规则
例如:
添加规则:.

[root@localhost ~]# iptables -t filter -A INPUT -j DROP   #拒绝所有人访问服务器,慎重执行,执行之后远程链接会断掉,无法连 [root@localhost ~]#iptables -F INPUT   #清除INPUT链上的规则 [root@localhost ~]#iptables -F    #清除filter表中所有链上的规则 [root@localhost ~]#iptables -t nat -F  #清空NAT表中    所有链上的规则 [root@localhost ~]#iptables -t nat -F PREROUTING  #清空NAT表中  PREROUTING链上的规则 12345

注意:
1、-F 仅仅是清空链中规则,并不影响 -P 设置的默认规则。 需要手动改:

[root@localhost ~]# iptables -P INPUT ACCEPT 1

2、-P 设置了 DROP 后,使用 -F 一定要小心!!!
##在生产环境中,使用-P DROP 这条规则,一定要小心,设置之前最好配置下面两个任务计划,否则容易把自己drop掉,链接不上远程主机。

       配置crontab : */15 * * * *  iptables -P INPUT ACCEPT */15 * * * *  iptables –F 123

3、如果不写链名,默认清空某表里所有链里的所有规则
-Z 将封包计数器归零
iptables -Z INPUT

-L [链名] LIST,列出规则
v:显示详细信息,包括每条规则的匹配包数量和匹配字节数
x:在 v 的基础上,禁止自动单位换算(K、M)
n:只显示 IP 地址和端口号码,不显示域名和服务名称
–line-number 可以查看到规则号

例如:
iptables -L
粗略列出 filter 表所有链及所有规则
iptables -t nat -vnL
用详细方式列出 nat 表所有链的所有规则,只显示 IP 地址和端口号
iptables -t nat -vxnL PREROUTING
用详细方式列出 nat 表 PREROUTING 链的所有规则以及详细数字,不反解
互动: iptables -L -n 可以执行成功
iptables -Ln 是否可以执行成功?

匹配条件
流入、流出接口(-i、-o)
来源、目的地址(-s、-d)
协议类型 (-p)
来源、目的端口(–sport、–dport)

按网络接口匹配

-i <匹配数据进入的网络接口> #此参数主要应用于nat表,例如目标地址转换
例如:
-i eth0
匹配是否从网络接口 eth0 进来
-i ppp0
匹配是否从网络接口 ppp0 进来
-o 匹配数据流出的网络接口
例如:
-o eth0
-o ppp0

按来源目的地址匹配

-s <匹配来源地址>
可以是 IP、 网段、域名,也可空(任何地址)

例如:
iptables -L
粗略列出 filter 表所有链及所有规则
iptables -t nat -vnL
用详细方式列出 nat 表所有链的所有规则,只显示 IP 地址和端口号
iptables -t nat -vxnL PREROUTING
用详细方式列出 nat 表 PREROUTING 链的所有规则以及详细数字,不反解
互动: iptables -L -n 可以执行成功
iptables -Ln 是否可以执行成功?

匹配条件
流入、流出接口(-i、-o)
来源、目的地址(-s、-d)
协议类型 (-p)
来源、目的端口(–sport、–dport)

按网络接口匹配

-i <匹配数据进入的网络接口> #此参数主要应用于nat表,例如目标地址转换
例如:
-i eth0
匹配是否从网络接口 eth0 进来
-i ppp0
匹配是否从网络接口 ppp0 进来
-o 匹配数据流出的网络接口
例如:
-o eth0
-o ppp0

按来源目的地址匹配

-s <匹配来源地址>
可以是 IP、 网段、域名,也可空(任何地址)

例如:
-p tcp
-p udp
-p icmp --icmp-type 类型
ping: type 8 pong: type 0

按来源目的端口匹配
–sport <匹配源端口>
可以是个别端口,可以是端口范围
例如:
–sport 1000 匹配源端口是 1000 的数据包
–sport 1000:3000 匹配源端口是 1000-3000 的数据包(含1000、3000)
–sport :3000 匹配源端口是 3000 以下的数据包(含 3000)
–sport 1000: 匹配源端口是 1000 以上的数据包(含 1000)
–dport <匹配目的端口>
可以是个别端口,可以是端口范围
例如:
–dport 80 匹配目的端口是 80 的数据包
–dport 6000:8000 匹配目的端口是 6000-8000 的数据包(含6000、8000)
–dport :3000 匹配目的端口是 3000 以下的数据包(含 3000)
–dport 1000: 匹配目的端口是 1000 以上的数据包(含 1000)
注意:–sport 和 --dport 必须配合 -p 参数使用

匹配应用举例
1、端口匹配

[root@localhost ~]#iptables -p udp --dport 53 1

匹配网络中目的端口是 53 的 UDP 协议数据包
2、地址匹配

[root@localhost ~]#iptables -s 10.1.0.0/24 -d 172.17.0.0/16 1

匹配来自 10.1.0.0/24 去往 172.17.0.0/16 的所有数据包
3、端口和地址联合匹配

[root@localhost ~]#iptables -s 192.168.0.1 -d www.abc.com -p tcp --dport 80 1

匹配来自 10.10.100.181,去往 www.abc.com 的 80 端口的 TCP 协议数据包
在这里插入图片描述
注意:
1、–sport、–dport 必须联合 -p 使用,必须指明协议类型是什么
2、条件写的越多,匹配越细致,匹配范围越小

4 动作(处理方式)

ACCEPT
DROP
SNAT
DNAT
MASQUERADE

-j ACCEPT
通过,允许数据包通过本链而不拦截它
例如:

   [root@localhost ~]# iptables -A INPUT -j ACCEPT 1
允许所有访问本机 IP 的数据包通过 1

-j DROP
丢弃,阻止数据包通过本链而丢弃它

例如:

[root@localhost ~]#iptables -A FORWARD -s 192.168.80.39 -j DROP 1
 阻止来源地址为 192.168.80.39 的数据包通过本机 1

-j SNAT --to IP[-IP][:端口-端口](nat 表的 POSTROUTING 链)
源地址转换,SNAT 支持转换为单 IP,也支持转换到 IP 地址池(一组连续的 IP 地址)
例如:

[root@localhost ~]# ptables -t nat -A POSTROUTING -s 192.168.0.0/24 -j SNAT --to 1.1.1.1 1

#将内网 192.168.0.0/24 的原地址修改为 1.1.1.1,用于 NAT

[root@localhost ~]# iptables -t nat -A POSTROUTING -s 192.168.0.0/24  -j SNAT --to 1.1.1.1-1.1.1.10 1

同上,只不过修改成一个地址池里的 IP
-j DNAT --to IP[-IP][:端口-端口](nat 表的 PREROUTING 链)
目的地址转换,DNAT 支持转换为单 IP,也支持转换到 IP 地址池
(一组连续的 IP 地址)
例如:

表达方式1:把从 eth0 进来的要访问 TCP/80 的数据包目的地址改为 192.168.0.1.

[root@localhost ~]#iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j DNAT --to 192.168.0.1 1

表达方式2:

[root@localhost ~]# iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 81 -j DNAT --to 192.168.0.1:81 1

表达方式3:把从 eth0 进来的要访问 TCP/80 的数据包目的地址改为 192.168.0.1-192.169.1.10

[root@localhost ~]# iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j DNAT --to 192.168.0.1-192.169.0.10 1

-j MASQUERADE 伪装
动态源地址转换(动态 IP 的情况下使用)

[root@localhost ~]#iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -o eth0 -j MASQUERADE 1

将源地址是 192.168.0.0/24 的数据包进行地址伪装,转换成eth0上的IP地址。eth0为路由器外网出口IP地址

附加模块
按包状态匹配 (state)
按来源 MAC 匹配(mac)
按包速率匹配 (limit)
多端口匹配 (multiport)

按包状态匹配 (state)
-m state --state 状态
状态:NEW、RELATED、ESTABLISHED、INVALID
NEW:有别于 tcp 的 syn #如果我们发送一个流的初始化包,状态就会在OUTPUT链 里被设置为NEW,当我们收到回应的包时,状态就会在PREROUTING链里被设置为ESTABLISHED。如果第一个包不是本地产生的,那就会在PREROUTING链里被设置为NEW状 态。
ESTABLISHED:连接态
RELATED:衍生态,与 conntrack 关联(FTP)
INVALID:不能被识别属于哪个连接或没有任何状态

例如:

[root@localhost ~]#iptables -A INPUT -m state --state RELATED,ESTABLISHED  -j ACCEPT 1

四个状态:
在这里插入图片描述
这些状态可以一起使用,以便匹配数据包。这可以使我们的防火墙非常强壮和有效。以前,我们经常打 开1024以上的所有端口来放行应答的数据。现在,有了状态机制,就不需再这样了。因为我们可以只开放那些有应答数据的端口,其他的都可以关闭。这样就安全多了。

按来源 MAC 匹配(mac)
-m mac --mac-source MAC
匹配某个 MAC 地址
例如:

[root@localhost ~]# iptables -A FORWARD -m mac --mac-source xx:xx:xx:xx:xx:xx -j DROP 1

阻断来自某 MAC 地址的数据包,通过本机
注意:
报文经过路由后,数据包中原有的 mac 信息会被替换,所以在路由后的 iptables 中使用 mac 模块是没有意义的
按包速率匹配 (limit)
-m limit --limit 匹配速率 [–burst 缓冲数量]
用一定速率去匹配数据包
例如:

[root@localhost ~]#iptables -A FORWARD -d 192.168.0.1 -m limit --limit 50/s  -j ACCEPT [root@localhost ~]# iptables -A FORWARD -d 192.168.0.1 -j DROP 12

注意:
limit 英语上看是限制的意思,但实际上只是按一定速率去匹配而已,50/s表示1秒中转发50个数据包,要想限制的话后面要再跟一条 DROP

多端口匹配 (multiport)

-m multiport <–sports|–dports|–ports> 端口1[,端口2,…,端口n]
一次性匹配多个端口,可以区分源端口,目的端口或不指定端口
例如:

 [root@localhost ~]# iptables -A INPUT -p tcp -m multiport --dports  21,22,25,80,110 -j ACCEPT 1

注意:
必须与 -p 参数一起使用

保存:service iptables save

配置VSFTP服务器主动模式IPTABLES规则:

iptables配置FTP的主动和被动模式
FTP协议有两种工作方式:PORT方式和PASV方式,中文意思为主动式和被动式。
Port模式:ftp server:tcp 21 <------client:dynamic ftp server:tcp 20 ------>client:dynamic
Pasv模式:ftp server:tcp 21 <----client:dynamic ftp server:tcp dynamic <----client:dynamic

PORT(主动)方式的连接过程是:客户端向服务器的FTP端口(默认是21)发送连接请求,服务器接受连接,建立一条命令链路。当需要传送数据时,客户 端在命令链路上用PORT命令告诉服务器:“我打开了XXXX端口,你过来连接我”。于是服务器从20端口向客户端的XXXX端口发送连接请求,建立一条 数据链路来传送数据。 PASV(被动)方式的连接过程是:客户端向服务器的FTP端口(默认是21)发送连接请求,服务器接受连接,建立一条命令链路。当需要传送数据时,服务 器在命令链路上用PASV命令告诉客户端:“我打开了XXXX端口,你过来连接我”。于是客户端向服务器的XXXX端口发送连接请求,建立一条数据链路来 传送数据。 12

1、开放20、21端口:

  # iptables -A INPUT -p tcp --dport 21 -j ACCEPT    
  # iptables -A INPUT -p tcp --dport 20 -j ACCEPT 12
[root@localhost ~]# iptables -A INPUT -i lo -j ACCEPT #默认情况一般服务与本机通讯以127.0.0.1来通讯的。 
[root@localhost ~]# iptables -A INPUT -p tcp -m multiport --dports 21,22,80 -j ACCEPT  
[root@localhost ~]# iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT  
[root@localhost ~]# iptables  -A INPUT -p icmp -j ACCEPT    #允许其他机器 ping 本机 1234

被动模式 connect_from_port_20=NO

https://www.frozentux.net/iptables-tutorial/cn/iptables-tutorial-cn-1.1.19.html#STATEMACHINEINTRODUCTION 1

如果不行:
上面还不行的话,再加载FTP额外模块:
modprobe ip_nat_ftp
modprobe ip_conntrack
modprobe ip_conntrack_ftp
在这里插入图片描述

常用规则:
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT

举例

使用iptables防火墙保护公司web服务器。
分析:这允许单服务器的防护。
弄清对外服务对象
书写规则
网络接口 lo 的处理
协议 + 端口的处理
状态监测的处理
具体配置如下:
web服务器端:10.10.100.178
客户端:10.10.100.181
如果有硬件防火墙:拓扑图:
在这里插入图片描述
配置web服务器端:10.10.100.178防火墙
配置之前,清空下已有的规则,防止规则冲突不生效

[root@localhost ~]#  iptables -A INPUT -i lo -j ACCEPT   #放行环回口所有数据 [root@localhost ~]# iptables -A INPUT -p tcp -m multiport --dports 22,80 -j ACCEPT 或  [root@localhost ~]# iptables -A INPUT -p tcp --dport 22 -j ACCEPT [root@localhost ~]#  iptables -A INPUT -p tcp --dport 80 -j ACCEPT [root@localhost ~]# iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT 123456

#允许已经建立tcp连接的包以及该连接相关的包通过。状态防火墙能识别TCP或者UDP会话。非状态防火墙只能根据端口识别,不能识别会话

[root@localhost ~]# iptables -P INPUT DROP 1

注:一般iptables,OUTPUT出口一般都放行,不需要在出口上做限制。这样允许服务器主动访问外网所有数据。
安装web服务

[root@localhost ~]# yum -y install httpd [root@localhost ~]# systemctl start httpd [root@localhost ~]# yum -y install vsftpd 123

在客户机181安装
[root@localhost ~]# yum install elinks -y

[root@localhost ~]# elinks 10.10.100.178
在这里插入图片描述

[root@localhost ~]# lftp 10.10.100.178 lftp 10.10.100.178:~> ls   #可以看到连接并断开了 `ls' at 0 [Connecting...] 123

服务端查看

[root@localhost ~]# iptables -L -n Chain INPUT (policy ACCEPT) target     prot opt source               destination          ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0            state RELATED,ESTABLISHED ACCEPT     icmp --  0.0.0.0/0            0.0.0.0/0            ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0            ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0            state NEW tcp dpt:22 REJECT     all  --  0.0.0.0/0            0.0.0.0/0            reject-with icmp-host-prohibited Chain FORWARD (policy ACCEPT) target     prot opt source               destination          REJECT     all  --  0.0.0.0/0            0.0.0.0/0            reject-with icmp-host-prohibited Chain OUTPUT (policy ACCEPT) target     prot opt source               destination          [root@localhost ~]# iptables -L Chain INPUT (policy ACCEPT) target     prot opt source               destination          ACCEPT     all  --  anywhere             anywhere             state RELATED,ESTABLISHED ACCEPT     icmp --  anywhere             anywhere             ACCEPT     all  --  anywhere             anywhere             ACCEPT     tcp  --  anywhere             anywhere             state NEW tcp dpt:ssh REJECT     all  --  anywhere             anywhere             reject-with icmp-host-prohibited Chain FORWARD (policy ACCEPT) target     prot opt source               destination          REJECT     all  --  anywhere             anywhere             reject-with icmp-host-prohibited Chain OUTPUT (policy ACCEPT) target     prot opt source               destination          123456789101112131415161718192021222324252627282930
[root@localhost ~]# iptables -F          #规则清空 [root@localhost ~]# iptables -L Chain INPUT (policy ACCEPT) target     prot opt source               destination          Chain FORWARD (policy ACCEPT) target     prot opt source               destination          Chain OUTPUT (policy ACCEPT) target     prot opt source               destination    12345678910

在这里插入图片描述
在这里插入图片描述

关于SNAT和DNAT的区别:

http://www.cnblogs.com/iceocean/articles/1616305.html

selinux概述
SELinux( Security Enhanced Linux 安全性增强的Linux),由美国国家安全局NSA(National Security Agency)开发,构建与Kernel之上,拥有灵活的强制性访问控制结构,主要用在提高Linux的安全性,提供强健的安全保证,可以防御未知攻击,据称相当于B1级的军事安全性能(信息安全评估标准)!
信息安全评估标准:4类(D,C,B,A),7个级别:D,C1,C2,B1,B2,B3,A
Selinux已经整合到了2.6的Kernel以上的版本中 uname -r
传统的Linux在没有Selinux保护的时候,倘若运行于之上的服务器被骇客攻陷,其服务器最高权限就可能随之丧失,但是倘若有了SElinux的保护,入侵的也只有服务本身,整个服务器的最高权限依然还健在!
一句话熟悉Selinux的作用:增强Linux系统安全性,一个例子:那么是我运行的Apache服务器被入侵,也只是入侵到了我httpd这个服务,可以把它禁锢到这里(相当于整个服务器运行了httpd,入侵了httpd而已),而系统的整个权限依然正常!

Selinux特点
1:MAC(Mandator Access Control) 对访问控制彻底化,对所有的文件,目录,端口的访问,都是基于策略设定的,这些策略都是由管理员设定的,一般用户无权限管理和更改
2:RBAC(Role Base Access Control) 对用户只赋予最小权限,对于用户来说,被划分一些role,即使是root用户,你要是不在sysadm_r里,也不能实行sysadm_t的管理操作
3:TE(Type Enforcement) 对进程只赋予最小运行权限,TE的概念在SElinux中非常重要,其特点是对文件赋予一个叫type的标签类型,对进程赋予一个叫domain的标签,可以规定某个标签进程只能执行某类文件,例如:
进程vim,只可以读标签为T1的文件
a.txt T1 b.txt T2

selinux 的执行模式
enforcing 强制模式,只要selinux不允许,就无法执行;
permissive 警告模式,你可以执行,但你所做事件全部记录;
disabled 关闭selinux

Selinux工作原理
在这里插入图片描述
Subject进程你要干嘛,你得问selinux, 那selinux去读一下数据库,按规则你不能执行或能执行。

[root@localhost ~]# rpm -qa | grep selinux selinux-policy-3.13.1-229.el7.noarch selinux-policy-targeted-3.13.1-229.el7.noarch libselinux-2.5-14.1.el7.x86_64 libselinux-python-2.5-14.1.el7.x86_64 libselinux-utils-2.5-14.1.el7.x86_64 123456
[root@localhost ~]# ls /etc/sysconfig/selinux     //配置文件位置 /etc/sysconfig/selinux [root@localhost ~]# getenforce             //查看当前selinux的运行状态 Enforcing [root@localhost ~]# vim /etc/sysconfig/selinux            //编辑selinux配置文件,启用selinux SELINUX=enforcing       #启用selinux,启用了Selinux需要重启系统,初次开启,需要更新文件标签,时间较久 123456

Selinux状态切换

[root@localhost ~]#  setenforce 0   #enforcing切换为permissive状态 [root@localhost ~]# getenforce Permissive [root@localhost ~]#  setenforce 1    #permissive切换为 enforcing [root@localhost ~]# getenforce Enforcing 123456

内核参数控制Selinux
关闭Selinux可以通过内核传递参数来控制
[root@localhost ~]#vim /boot/grub/grub.conf
……
kernel /vmlinuz-2.6.32-431.el6.x86_64 ro root=UUID=31f87693-32fa-4811-b5d4-7a5d35586f44 rd_NO_LUKS rd_NO_LVM.UTF-8 rd_NO_MD SYSFONT=latarcyrheb-sun16 crashkernel=128M KEYBOARDTYPE=pc KEYTABLE=us rd_NO_DM rhgb quiet selinux=0 #末尾添加selinux=0关闭selinux
……

或者在开机时编辑grub界面,给内核传递一个参数selinux=0 方法和进入单用户方式一样,不过是一次有效
在这里插入图片描述
上图,按E键,进入单用户模式
在这里插入图片描述
上图按E键,添加内核参数selinux=0
在这里插入图片描述
回车,按B键启动操作系统

 [root@localhost ~]# getenforce Disabled [root@localhost ~]# vim /etc/sysconfig/selinux …… SELINUX=enforcing       #配置文件还是启用的,所以内核控制生效,如果在grub.conf配置文件,永久生效,启动单用户模式配置,当次有效,重启selinux将启用 …… [root@localhost ~]# reboot      //重启会更新标签,是个”漫长”的过程 12345678

在这里插入图片描述


本文链接:https://www.stephenwxf.com/post/191.html
原创文章如转载请注明:转载自王显璠的个人博客谢谢!

Copyright Your stephenwxf.com Rights Reserved.