linux安全管理 windows的安全靠什么?
什么是防火墙? 硬件防火墙 软件防火墙
防火墙对数据封包取得方式来分类
可以分为 代理服务器 proxy 封包过滤机制 IP filter
防火墙有三大基础功能:
- 代理服务 是一种网络服务,通常架设在路由器上面,可以完整掌控局域网对外连接
- IP Filter 这种方式可以直接分析底层封包表头数据进行过滤,包括MAC地址,IP,TCP,UDP,ICMP等封包信息都可以进行过滤,用途非常广泛
- 状态监控包过滤 动态服务,内网主动访问外网的请求,外网回复是可以进来的
- 其他功能:L2-L7层防御,失陷主机检测,沙盒,waf等等 web专属防御 热点事件预警,鉴黄等等这些功能不是防火墙必须有的,甚至都是要花钱
- 红帽系列自带的firewall
- 红帽8是没有防火墙的图形化界面的,只能通过命令行来管理,我们也是可以安装红帽的防火墙图形化
- yum install -y firewall-config
- firewall-config 打开防火墙图形化界面
- linux系统中的这个防火墙是软件防火墙
- firewalld防火墙的区域:
- firewalld中常用的区域名称及默认策略规则:
区域 |
默认策略规则 |
trusted |
允许所有的数据包 |
home |
拒绝流入的流量,除非与流出的流量相关; 而如果流量与ssh、mdns、ipp-client、amba-client与dhcpv6-client服务相关,则允许流量 |
internal |
等同于home区域 |
work |
拒绝流入的流量,除非与流出的流量数相关;而如果流量与ssh、ipp-client与dhcpv6-client服务相关, 则允许流量 |
public |
拒绝流入的流量,除非与流出的流量相关;而如果流量与ssh、dhcpv6-client服务相关,则允许流量 |
external |
拒绝流入的流量,除非与流出的流量相关;而如果流量与ssh服务相关,则允许流量 |
dmz |
拒绝流入的流量,除非与流出的流量相关;而如果流量与ssh服务相关,则允许流量 |
block |
拒绝流入的流量,除非与流出的流量相关 |
drop |
拒绝流入的流量,除非与流出的流量相关 |
- 防火墙firewall有两个应用项:
- runtime 当前有效
- permanent 永久有效
SCTP (Stream Control Transmission Protocol)是一种传输协议,在TCP/IP协议栈中所处的位置和TCP、UDP类似,兼有TCP/UDP两者特征。SCTP是可以确保数据传输的,和TCP类似。
- 数据包拥塞控制协议(DCCP)是一个提供双向单播拥塞控制连接的不可靠数据包传输协议,它适合传输相当大的数据量的应用,并且能在时间线和可靠性上权衡。
- 终端管理工具 firewall-cmd命令的使用及作用:
参数 |
作用 |
--get-default-zone |
查询默认的区域名称 |
--set-default-zone=<区域名称> |
设置默认的区域,使其永久生效 |
--get-zones |
显示可用的区域 |
--get-services |
显示预先定义的服务 |
--get-active-zones |
显示当前正在使用的区域与网卡名称 |
--add-source= |
将源自此IP或子网的流量导向指定的区域 |
--remove-source= |
不再将源自此IP或子网的流量导向某个指定区域 |
--add-interface=<网卡名称> |
将源自该网卡的所有流量都导向某个指定区域 |
--change-interface=<网卡名称> |
将某个网卡与区域进行关联 |
--list-all |
显示当前区域的网卡配置参数、资源、端口以及服务等信息 |
--list-all-zones |
显示所有区域的网卡配置参数、资源、端口以及服务等信息 |
--add-service=<服务名> |
设置默认区域允许该服务的流量 |
--add-port=<端口号/协议> |
设置默认区域允许该端口的流量 |
--remove-service=<服务名> |
设置默认区域不再允许该服务的流量 |
--remove-port=<端口号/协议> |
设置默认区域不再允许该端口的流量 |
--reload |
让“永久生效”的配置规则立即生效,并覆盖当前的配置规则 |
--panic-on |
开启应急状况模式 |
--panic-off |
关闭应急状况模式 |
- 实例:
- 1.查看firewalld服务当前所使用的区域
- [root@localhost ~]# firewall-cmd --get-default-zonepublic
- 2.查询ens33网卡在firewalld服务中的区域
- [root@localhost ~]# firewall-cmd --get-zone-of-interface=ens33public
- 3.把firewalld服务中ens33网卡的默认区域修改为external,并在系统重启后生效。分别查看当前与永久模式下的区域名称
- [root@localhost ~]# firewall-cmd --permanent --zone=external --change-interface=ens33
- The interface is under control of NetworkManager, setting zone to 'external'. success
- [root@localhost ~]# firewall-cmd --permanent --get-zone-of-interface=ens33
- no zone
- [root@localhost ~]# firewall-cmd --get-zone-of-interface=ens33
- external
- 4.把firewalld服务的当前默认区域设置为public
- [root@localhost ~]# firewall-cmd --set-default-zone=public
- Warning: ZONE_ALREADY_SET: public success
- [root@localhost ~]# firewall-cmd --get-default-zone
- public
- 5.启动/关闭firewalld防火墙服务的应急状况模式,阻断一切网络连接(当远程控制服务器时请慎用)
- [root@localhost ~]# firewall-cmd --panic-on
- [root@localhost ~]# firewall-cmd --panic-off
- 6.查询public区域是否允许请求SSH和HTTPS协议的流量
- [root@localhost ~]# firewall-cmd --zone=public --query-service=ssh
- yes
- [root@localhost ~]# firewall-cmd --zone=public --query-service=https
- no
- 7.把firewalld服务中请求HTTPS协议的流量设置为永久允许,并立即生效
- [root@localhost ~]# firewall-cmd --zone=public --add-service=https
- success
- [root@localhost ~]# firewall-cmd --permanent --zone=public --add-service=https
- success
- [root@localhost ~]# firewall-cmd --reload
- success
- [root@localhost ~]# firewall-cmd --zone=public --query-service=httpsyes
- 8.把firewalld服务中请求HTTP协议的流量设置为永久拒绝,并立即生效
- [root@localhost ~]# firewall-cmd --zone=public --remove-service=https --permanent
- success
- [root@localhost ~]# firewall-cmd --reloadsuccess
- 9.把在firewalld服务中访问8080和8081端口的流量策略设置为允许,但仅限当前生效
- [root@localhost ~]# firewall-cmd --zone=public --add-port=8080-8081/tcp
- success
- [root@localhost ~]# firewall-cmd --zone=public --list-ports
- 8080-8081/tcp
- 10.把原本访问本机888端口的流量转发到22端口,要且求当前和长期均有效
- firewall-cmd --permanent --zone=<区域> --add-forward-port=port= <源端口号>:proto=<协议>:toport=<目标端口号>:toaddr=<目标IP地址>`
- [root@localhost ~]# firewall-cmd --permanent --zone=public
- --add-forward-port=port=888:proto=tcp:toport=22:toaddr=192.168.91.128
- success
- [c:\~]$ ssh root@192.168.91.128 888Connecting to 192.168.91.128:888...Connection established.To escape to local shell, press 'Ctrl+Alt+]'.Last login: Thu Apr 18 16:20:23 2019 from 192.168.91.1
- [root@localhost ~]#
- 11.firewalld中的富规则表示更细致、更详细的防火墙策略配置,它可以针对系统服务、端口号、源地址和目标地址等诸多信息进行更有针对性的策略配置。它的优先级在所有的防火墙策略中也是最高的。比如,我们可以在firewalld服务中配置一条富规则,使其拒绝192.168.91.0/24网段的所有用户访问本机的ssh服务(22端口)
- [root@localhost ~]# firewall-cmd --permanent --zone=public --add-rich-rule="rule \family="ipv4" \source address="192.168.91.0/24" \service name="ssh" \reject"
- success
- [root@localhost ~]# firewall-cmd --reload
- success
- [c:\~]$ ssh root@192.168.91.128Connecting to 192.168.91.128:22...Could not connect to '192.168.91.128' (port 22): Connection failed.
iptables
其实iptables服务并不是真正的防火墙,只是用来定义防火墙功能的防火墙管理工具,将定义好的规则交给内核里面的netfilter功能,即网络过滤器来读取,从而真正实现防火墙功能
iptables 抵挡封包的方式:
- 拒绝让internet 包进入linux主机的某些port
- 拒绝让某些来源ip封包进入
- 拒绝让带有某些flag标记的包进入
- 分析硬件地址mac来提供服务
- 五链
- iptables命令中设置了数据过滤或者是处理数据包的策略,叫做规则。将多个规则合成一个链,叫规则链,规则链则依据数据包位置不同分成5类
PREROUTING //在进行路由判断之前所要进行的规则(DNAT/REDIRECT)
INPUT //处理入站的数据包
OUTPUT //处理出站的数据包
FORWARD //处理转发的数据包
POSTROUTING //在进行路由判断之后所要进行的规则(SNAT/MASQUERADE)
- 四表:
iptables中的规则表是用于容纳规则链,规则表默认是允许状态的,那么规则链就是设置被禁止的规则,而反之如果规则表是禁止状态的,那么规则链就是设置被允许的规则。
raw表
确定是否对该数据包进行状态跟踪
mangle表
为数据包设置标记(较少使用)
nat表
修改数据包中的源、目标IP地址或端口
filter表
确定是否放行该数据包(过滤)
规则表的先后顺序:raw→mangle→nat→filter
规则链的先后顺序:
入站顺序
PREROUTING→INPUT
出站顺序
OUTPUT→POSTROUTING
转发顺序
PREROUTING→FORWARD→POSTROUTING
- iptables 命令中能常见的控制类型
- ACCEPT 允许通过
- LOG 记录日志,传递给下一条规则
- REJECT 拒绝通过,可以给提示
- DROP 直接丢弃,不给回应
- iptables的用法格式
- iptables [-t 表名] 选项 [链名] [条件] [-j 控制类型]
- iptables –[A|I 链] [-i|o 网络接口] [-p 协议] [-s 来源ip/网域] [-d 目标ip/网域] –j[ACCEPT|DROP]
参数 |
作用 |
-P |
设置默认策略:iptables -P INPUT (DROP|ACCEPT) |
-F |
清空规则链 |
-L |
查看规则链 |
-A |
在规则链的末尾加入新规则 |
-I num |
在规则链的头部加入新规则 |
-D num |
删除某一条规则 |
-s |
匹配来源地址IP/MASK,加叹号"!"表示除这个IP外。 |
-d |
匹配目标地址 |
-i 网卡名称 |
匹配从这块网卡流入的数据 |
-o 网卡名称 |
匹配从这块网卡流出的数据 |
-p |
匹配协议,如tcp,udp,icmp |
--dport num |
匹配目标端口号 |
--sport num |
匹配来源端口号 |
查看规则
[root@localhost ~]# iptables [-t tables] [-L] [-nv]
参数:
-t 后面接table,例如nat或filter,如果省略,默认显示filter
-L 列出目前的table的规则
-n 不进行IP与主机名的反查,显示信息的速度会快很多
-v 列出更多的信息,包括封包数,相关网络接口等
删除规则
[root@localhost ~]# iptables [-t tables] [-FXZ]
参数:
-F 清除所有的规则
-X 清除所有自定义规则
-Z 将计数与流量统计清零
默认策略修改
[root@localhost ~]# iptables [-t tables] -P [链名] [ACCEPT/DROP]
- 案例1:
- [root@localhost ~]# iptables -A INPUT -i lo -j ACCEPT
- # 所有的来自 lo 这个网口的封包,都予以接受
- [root@localhost ~]# iptables -A INPUT -s 192.168.1.200 -j ACCEPT
- # 目标来自 192.168.1.200 这个 IP 的封包都予以接受
- [root@localhost ~]# iptables -A INPUT -s 192.168.1.0/24 -j ACCEPT
- [root@localhost ~]# iptables -A INPUT -s 192.168.1.10 -j DROP
- # 192.168.1.0/24 可接受,但 192.168.1.10 丢弃
- [root@localhost ~]# iptables -L -n --line-numbers
- Chain INPUT (policy ACCEPT)
- num target prot opt source destination
- 1 ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:80
- 2 ACCEPT all -- 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED
- 3 ACCEPT icmp -- 0.0.0.0/0 0.0.0.0/0
- 4 ACCEPT all -- 0.0.0.0/0 0.0.0.0/0
- 5 ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 state NEW tcp dpt:22
- 6 REJECT all -- 0.0.0.0/0 0.0.0.0/0 reject-with icmp-host-prohibited
- 7 ACCEPT all -- 0.0.0.0/0 0.0.0.0/0
- 8 ACCEPT all -- 192.168.1.200 0.0.0.0/0
- 9 ACCEPT all -- 192.168.1.0/24 0.0.0.0/0
- 10 DROP all -- 192.168.1.10 0.0.0.0/0
- Chain FORWARD (policy ACCEPT)
- num target prot opt source destination
- 1 REJECT all -- 0.0.0.0/0 0.0.0.0/0 reject-with icmp-host-prohibited
- Chain OUTPUT (policy ACCEPT)
- num target prot opt source destination
- [root@localhost ~]# iptables -D INPUT 10
- # 删掉INPUT中第10条规则
- 2.Iptables 开放tcp、udp端口
- 例:开放samba端口(udp137,138;tcp139,445)
- [root@localhost ~]# iptables –A INPUT –i eth0 –p udp --dport 137:138 –j ACCEPT
- [root@localhost ~]# iptables –A INPUT –i eth0 –p tcp --dport 139 –j ACCEPT
- [root@localhost ~]# iptables –A INPUT –i eth0 –p tcp --dport 445 –j ACCEPT
- 3.iptables匹配ICMP端口和ICMP类型
- iptables –A INPUT –p icmp --icmp-type 类型 –j REJECT
- 参数:--icmp-type :后面必须要接 ICMP 的封包类型,也可以使用代号,
- 例如 8 代表 echo request 的意思。(可自查询ICMP-type对应表)
- iptables -A INPUT -p icmp --icmp-type 8 -j REJECT
- iptables -A INPUT -p icmp --icmp-type echo-request -j REJECT
- ICMP类型
- TYPE CODE Description
- 0 0 Echo Reply——回显应答(Ping应答)
- 3 0 Network Unreachable——网络不可达
- 3 1 Host Unreachable——主机不可达
- 3 2 Protocol Unreachable——协议不可达
- 3 3 Port Unreachable——端口不可达
- 3 4 Fragmentation needed but no frag. bit set——需要进行分片但设置不分片比特
- 3 5 Source routing failed——源站选路失败
- 3 6 Destination network unknown——目的网络未知
- 3 7 Destination host unknown——目的主机未知
- 3 8 Source host isolated (obsolete)——源主机被隔离(作废不用)
- 3 9 Destination network administratively prohibited——目的网络被强制禁止
- 3 10 Destination host administratively prohibited——目的主机被强制禁止
- 3 11 Network unreachable for TOS——由于服务类型TOS,网络不可达
- 3 12 Host unreachable for TOS——由于服务类型TOS,主机不可达
- 3 13 Communication administratively prohibited by filtering——由于过滤,通信被强制禁止
- 3 14 Host precedence violation——主机越权
- 3 15 Precedence cutoff in effect——优先中止生效
- 4 0 Source quench——源端被关闭(基本流控制)
- 5 0 Redirect for network——对网络重定向
- 5 1 Redirect for host——对主机重定向
- 5 2 Redirect for TOS and network——对服务类型和网络重定向
- 5 3 Redirect for TOS and host——对服务类型和主机重定向
- 8 0 Echo request——回显请求(Ping请求)
- 9 0 Router advertisement——路由器通告
- 10 0 Route solicitation——路由器请求
- 11 0 TTL equals 0 during transit——传输期间生存时间为0
- 11 1 TTL equals 0 during reassembly——在数据报组装期间生存时间为0
- 12 0 IP header bad (catchall error)——坏的IP首部(包括各种差错)
- 12 1 Required options missing——缺少必需的选项
- 13 0 Timestamp request (obsolete)——时间戳请求(作废不用)
- 14 Timestamp reply (obsolete)——时间戳应答(作废不用)
- 15 0 Information request (obsolete)——信息请求(作废不用)
- 16 0 Information reply (obsolete)——信息应答(作废不用)
- 17 0 Address mask request——地址掩码请求
- 18 0 Address mask reply——地址掩码应答
- 4.Iptables --syn的处理方式
- 指定TCP匹配扩展
- 使用 --tcp-flags 选项可以根据tcp包的标志位进行过滤。
- [root@localhost ~]# iptables -A INPUT -p tcp --tcp-flags SYN,FIN,ACK SYN
- [root@localhost ~]# iptables -A FROWARD -p tcp --tcp-flags ALL SYN,ACK
- 上实例中第一个表示SYN、ACK、FIN的标志都检查,但是只有SYN匹配。第二个表示ALL(SYN,ACK,FIN,RST,URG,PSH)的标志都检查,但是只有设置了SYN和ACK的匹配。
- [root@localhost ~]# iptables -A FORWARD -p tcp --syn
- 选项--syn相当于"--tcp-flags SYN,RST,ACK SYN"的简写。
- [root@localhost ~]# iptables -A INPUT -m 模块名 --state 状态参数:
- -m iptables的模块 state: 状态检查 mac:网卡硬件地址
- --state 连接追踪中的状态: NEW: 新建立一个会话 ESTABLISHED:已建立的连接 RELATED: 有关联关系的连接 INVALID: 无法识别的连接
- [root@localhost ~]# iptables -A INPUT -p tcp --dport 22 -m state --state NEW -j ACCEPT
- # 放行ssh的首次连接状态
- [root@localhost ~]# iptables -A INPUT -m mac --mac-source 00:0C:29:56:A6:A2 -j ACCEPT
- # 对局域网内mac地址为00:0C:29:56:A6:A2主机开放其联机
- 本地端口转发
- [root@localhost ~]# iptables -t nat -A PREROUTING -p tcp --dport 6666 -j REDIRECT --to-port 22
- iptables保存和恢复
- iptables-save > /etc/sysconfig/iptables 保存
- iptables-restore /etc/sysconfig/iptables 恢复