Linux防火墙

Linux防火墙

防火墙类型

  • 包过滤防火墙--iptables/firewalld

  • 应用代理防火墙

  • 状态检测防火墙

包过滤防火墙

firewalld/iptables防火墙属于用户态,定义防火墙的各种规则,内部结构指向netfilter网络过滤子系统(linux防火墙的内核态)来实现包过滤防火墙功能

Linux防火墙类型

  • iptables 工作在网络层,属于包过滤防火墙。基于接口设置规则

  • firewalld 工作在网络层,属于包过滤防火墙。支持网络区域所定义的网络连接以及接口安全等级

iptables与firewalld的区别

  • iptables主要是基于接口来设置规则;firewalld基于区域来设置不同的规则

  • iptables在/etc/sysconfig/iptables中存储配置;firewalld将配置存储在/etc/firewalld/和/usr/lib/firewalld/中的各种xml文件

  • iptables单独更改是清除所有旧的规则和从/etc/sysconfig/iptables里读取所有新的规则;firewalld不会创建新的规则,仅运行规则中的不同之处,在运行时间内,更改设置不丢失现行连接

  • iptables防火墙类型为静态防火墙;firewalld防火墙类型为动态防火墙

iptables--四表五链

四表--raw->mangle->nat->filter

  • filter 包过滤

    • INPUT

    • OUTPUT

    • FORWARD

  • nat 地址转换,包路由

    • OUTPUT

    • PREROUTING

    • POSTROUTING

  • raw 基于数据包的状态进行规则设定

    • OUTPUT

    • PREROUTING

  • mangle 修改数据包的内容,例如ttl

五链

  • INPUT 一般处理未被PREROUTIN修改过的包

  • OUTPUT

  • FORWARD 一般处理被PREROUTING链修改过的包

  • PREROUTING 对数据包的目的地址进行修改,DNAT;最先生效;被修改过后的包发往FORWARD链;未被修改的包发往INPUT

  • POSTROUTING

处理动作

  • ACCEPT 接收数据包,不会再匹配其他链条和规则

  • DROP 丢弃数据包,且没有任何返回

  • REJECT 拒绝数据包,但会返回拒绝信息

  • RETURN 当前规则不做处理,返回,让给下一条规则处理

  • LOG 当前规则只将请求信息记录到系统日志中,返回,给下一条规则处理

基础配置

iptables -t nat -nvL --line-numbers # n域名解析;v详细信息;L所有
iptables -t filter -A INPUT -s 192.168.44.0/24 -j REJECT
iptables -t filter -D INPUT -s 192.168.44.0/24 -j REJECT 
iptables -t filter -D FORWARD 1 #删除编号为1的FORWARD链规则
iptables -t filter -F INPUT #清空INPUT链
iptables -A INPUT -p tcp -j DROP 
iptables -A INPUT -p tcp --dport=22 -s 192.168.44.0/24 -j DROP 
iptables -A INPUT -p tcp -m multiport --dports=22,5900 -s 192.168.44.0/24 -j DROP 
iptables -A INPUT -p tcp -m multiport ! --dports=22,5900 -j DROP 
#22或80链接可能衍生出一些RELATED链接,可能出现端口不是22或80,若丢弃会导致通信失败
iptables -A INPUT -m state --state RELATED,ESTABLISTED -j ACCEPT 
​
## 规则持久化
iptables-save > /etc/iptables.conf # 保存
vim /etc/rc.local 
iptables-restore < /etc/iptables.conf # 恢复

firewalld

基于区域来设置不同的规则,根据数据包的源IP地址或传入的网络接口等条件将流量传入相应区域。

每个区域都定义了自己打开或关闭的端口或服务列表。

9个区域

  • drop 丢弃;不存在相应

  • block 阻塞区域,已经建立的连接才会被通过,只允许系统初始化的网络连接

  • public 只接受被选中的连接;默认zone;默认只允许ssh与dhcp;默认拒绝ping包

  • external 只有指定连接才能被接收

  • DMZ 只允许部分服务被外部访问

  • work 只能定义内部网络

  • home 只允许被选中的流量

  • internal 只允许被选中的流量

  • trusted 允许所有传入流量

数据处理流程

对于进入系统的数据包,会根据数据包的源IP地址或传入的网络接口等条件,将数据流量转入相应区域的防火墙规则。

对于进入系统的数据包,首先检查的就是源地址。

检查数据包的源地址规则

  • 若源地址关联到特定的区域(即源地址或接口绑定的区域有冲突),则执行该区域所制定的规则

  • 若源地址未关联到特定的区域(即源地址或接口绑定的区域没有冲突),则使用传入网络接口的区域并执行该区域所制定的规则

  • 若网络接口也未关联到特定的区域( 即源地址或接口都没有绑定特定的某个区域),则使用默认区域并执行该区域所制定的规则

配置模式

  • 运行时配置模式:实时生效,并持续的重新启动或加载firewalld配置;不中断连接;不能修改服务配置

  • 永久配置模式:不立即生效,除非重新启动或加载firewalld配置;中断现有连接,可以修改服务配置

    firewall-cmd --permanent RULE
    firewall-cmd --reload

基础配置

# 服务查看与启动
[root@localhost ~]# systemctl status firewalld
[root@localhost ~]# systemctl start firewalld
# firewall-cmd命令
## 查看firewalld运行状态
[root@localhost ~]# firewall-cmd --state
running
## 查看firewalld默认区域
[root@localhost ~]# firewall-cmd --get-default-zone 
public
## 查看firewalld当前正在使用的区域与接口
[root@localhost ~]# firewall-cmd --get-active-zones
public
  interfaces: eth0
[root@localhost ~]# firewall-cmd --get-zones
block dmz drop external home internal public trusted work  
​
## 指定接口的区域
## 查看指定接口绑定的区域
[root@localhost ~]# firewall-cmd --get-zone-of-interface=eth0
public
## 从指定区域删除绑定的接口
[root@localhost ~]# firewall-cmd --zone=internal --remove-interface=eth0
success
## 指定区域绑定接口
[root@localhost ~]# firewall-cmd --zone=public --add-interface=eth0
success
## 更改指定区域的绑定接口
[root@localhost ~]# firewall-cmd --zone=internal --change-interface=eth0
success
​
## 指定源地址的区域
## 查看指定源地址的区域
[root@localhost ~]# firewall-cmd --get-zone-of-source=192.168.122.0/24
no zone
## 指定源地址的区域
[root@localhost ~]# firewall-cmd --zone=internal --add-source=192.168.122.0/24
success
[root@localhost ~]# firewall-cmd --get-zone-of-source=192.168.122.0/24
internal
## 更改源地址的区域
[root@localhost ~]# firewall-cmd --zone=dmz --change-source=192.168.122.0/24
success
## 删除源地址的区域
[root@localhost ~]# firewall-cmd --zone=dmz --remove-source=192.168.122.0/24
success
[root@localhost ~]# firewall-cmd --get-zone-of-source=192.168.122.0/24
no zone
​
## 区域的规则--服务、端口、ICMP类型
## 查看所有区域的规则
[root@localhost ~]# firewall-cmd --list-all-zones
## 查看指定区域的所有规则
[root@localhost ~]# firewall-cmd --zone=public --list-all 
public (active)
  target: default
  icmp-block-inversion: no
  interfaces: eth0
  sources: 
  services: ssh dhcpv6-client
  ports: 
  protocols: 
  masquerade: no
  forward-ports: 
  source-ports: 
  icmp-blocks: 
  rich rules: 
## 查看指定区域允许放行的服务
[root@localhost ~]# firewall-cmd --zone=public --list-services
ssh dhcpv6-client
## 设置指定区域允许放行的服务
[root@localhost ~]# firewall-cmd --zone=public --add-service=http
success
[root@localhost ~]# firewall-cmd --zone=public --list-services
ssh dhcpv6-client http
[root@localhost ~]# firewall-cmd --zone=public --remove-service=http
success
[root@localhost ~]# firewall-cmd --zone=public --list-services
ssh dhcpv6-client
​
## 设置指定区域放行的端口策略
[root@localhost ~]# firewall-cmd --zone=public --list-ports
​
[root@localhost ~]# firewall-cmd --zone=public --add-port=23/tcp
success
[root@localhost ~]# firewall-cmd --zone=public --remove-port=23/tcp
success
​
## 查看指定区域拒绝访问的icmp类型
[root@localhost ~]# firewall-cmd --get-icmptypes #查看icmptype类型
[root@localhost ~]# firewall-cmd --list-icmp-blocks
## 设置指定区域的拒绝访问的icmp类型
[root@localhost ~]# firewall-cmd --add-icmp-block=echo-request
success
[root@kvm01 ~]# ping 192.168.122.166
PING 192.168.122.166 (192.168.122.166) 56(84) bytes of data.
From 192.168.122.166 icmp_seq=1 Destination Host Prohibited
From 192.168.122.166 icmp_seq=2 Destination Host Prohibited
[root@localhost ~]# firewall-cmd --remove-icmp-block=echo-request
success
​

直接规则--类似iptables的四表五链

  • 直接规则优先于firewalld规则

[root@localhost ~]# firewall-cmd --direct --get-all-chains
## 规则定义: --direct --add-rule { ipv4 | ipv6 | eb } <table> <chain> <priority> <args>
[root@localhost ~]# firewall-cmd --direct --add-rule ipv4 filter INPUT 0 -p icmp -j REJECT
success
[root@localhost ~]# firewall-cmd --direct --remove-rule ipv4 filter INPUT 0 -p icmp -j REJECT
success
[root@localhost ~]# firewall-cmd --direct --get-all-rules
​
## 定义NAT规则
firewall-cmd --direct --passthrough ipv4 -t nat -I POSTROUTING -o eth1 -j MASQUERADE -s 192.168.122.0/24

富规则--精确控制

[root@localhost ~]# firewall-cmd --list-rich-rules
​
## 富规则语法
rule family=ipv4
source address=192.168.122.0/24
[destination address=192.168.44.0/24]
service|port|protocol|icmp-block|masquerade|forward-port
[log]
[audit]
accept|reject|drop
​
firewall-cmd --permanent --zone=public --add-rich-rule='rule family=ipv4 source address=192.168.0.11/32 reject'
firewall-cmd --permanent --zone=vnc --add-rich-rule='rule family=ipv4 source address=192.168.1.0/24 port port=7900-7905 protocol=tcp accept'
firewall-cmd --add-rich-rule='rule family=ipv4 source address=192.168.0.11/32 service name=ssh reject'

NAT和端口转发

# 地址伪装masquerade
firewall-cmd --permanent --zone=<ZONE> --add-rich-rule='rule family=ipv4 source address=192.168.0.0/24 masquerade' 
# 端口转发
frewall-cmd --permanent --zone=public --add-forward-port=port=513:proto=tcp:toport=132:toaddr=192.168.0.254
​
# 本地端口转发
firewall-cmd --add-rich-rule='rule family=ipv4 source address=172.25.0.10/32 forward-port port=80 to-port=22 protocol=tcp'
​
# 目标地址转发
firewall-cmd --add-rich-rule='rule family=ipv4 source address=172.25.0.10/32 forward-port port=80 to-port=80 protocol=tcp to-addr=172.25.0.254'
​

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值