防火墙iptables和firewalld

防火墙

  • 分类:软件和硬件
  • 功能:依据策略对穿越防火墙自身的流量进行过滤。
  • 原理:防火墙策略可以基于流量的源目地址、端口号、协议、应用等信息来定制,然后防火墙使用预先定制的策略规则监控出入的流量,若流量与某一条策略规则相匹配,则执行相应的处理,反之则丢弃。
    RHEL7使用firewalld;RHEL6使用iptables。它们都不是真正的防火墙,只是用来定义防火墙策略的防火墙管理工具而已。或者说,它们只是一种服务。
  • 区别:
    iptables服务会把配置好的防火墙策略交由内核层面的netfilter网络过滤器来处理
    firewalld服务则是把配置好的防火墙策略交由内核层面的nftables包过滤框架来处理。
  • 策略和规则链:
    防火墙会从上至下的顺序来读取配置的策略规则,在找到匹配项后就立即结束匹配工作并去执行匹配项中定义的行为(即放行或阻止)。如果读完所有策略都没有匹配的规则就执行默认的策略
  • 规则链依据数据包处理位置的不同进行分类:

在进行路由选择前处理数据包(PREROUTING)
处理流入的数据包(INPUT)
处理流出的数据包(OUTPUT)
处理转发的数据包(FORWARD)
在进行路由选择后处理数据包(POSTROUTING)

  • 处理行为:

ACCEPT:允许流量通过
REJECT:拒绝流量通过,并回复信息"信息已收到,但被丢弃"
LOG:记录日志信息
DDROP: 拒绝流量通过,直接丢弃
REJECT拒绝动作使得流量发送方可以收到如下信息:
PING 192.168.10.10 icmp_seq=1 Destination Port Unreachable…
… 100% packet loss…
DROP拒绝动作使得流量发送方无法判断流量是被拒绝,还是接收方主机当前不在线:

[root@localhost ~]# ping -c 4 192.168.10.10
PING 192.168.10.10 (192.168.10.10) 56(84) bytes of data.
— 192.168.10.10 ping statistics —
2 packets transmitted, 0 received, 100% packet loss, time 1000ms

iptables常用的命令:

(1)[root@localhost ~]# iptables -F #清空规则
(2)[root@localhost ~]# iptables -L #查看规则
(3)[root@localhost ~]# iptables -P INPUT ACCEPT #允许所有的包通过。小心使用DROP,会使得所有连接断开
可以看到:
Chain INPUT (policy ACCEPT) #默认设置
注意:默认规则的拒绝只能是DROP,不能是REJECT
(4)[root@localhost ~]# iptables -I INPUT -p icmp -j ACCEPT #允许ICMP包通过,于是就允许ping该主机
(5)将INPUT规则链设置为只允许指定网段的主机访问本机的22端口,拒绝来自其他所有主机的流量
[root@localhost ~]# iptables -I INPUT -s 192.168.252.0/24 -p tcp --dport 22 -j ACCEPT
[root@localhost ~]# iptables -A INPUT -p tcp --dport 22 -j REJECT
测试可以使用192.168.252.0/24网段内的主机连接:
[root@localhost ~] ssh 192.168.252.177 (可以看到是可以连接上的)
再使用IP地址在该网段之外的主机访问,会提示:Connection failed.
(7)向INPUT规则链中添加拒绝所有人访问本机12345端口的策略规则(一般用于mysql和redis等重要端口)
[root@localhost ~]# iptables -I INPUT -p tcp --dport 12345 -j REJECT
[root@localhost ~]# iptables -I INPUT -p udp --dport 12345 -j REJECT
[root@localhost ~]# iptables -L
Chain INPUT (policy ACCEPT)
target prot opt source destination
REJECT udp – anywhere anywhere udp dpt:italk reject-with icmp-port-unreachable
REJECT tcp – anywhere anywhere tcp dpt:italk reject-with icmp-port-unreachable
ACCEPT tcp – 192.168.252.0/24 anywhere tcp dpt:ssh
ACCEPT icmp – anywhere anywhere
REJECT tcp – anywhere anywhere tcp dpt:ssh reject-with icmp-port-unreachable

(8)向INPUT规则链中添加拒绝192.168.252.10主机访问本机80端口(Web服务)的策略规则:
[root@localhost ~]# iptables -I INPUT -p tcp -s 192.168.252.10 --dport 80 -j REJECT
[root@localhost ~]# iptables -L
Chain INPUT (policy ACCEPT)
target prot opt source destination
REJECT tcp – 192.168.252.10 anywhere tcp dpt:http reject-with icmp-port-unreachable
(9)向INPUT规则链中添加拒绝所有主机访问本机1000-1024端口的策略规则:
[root@localhost ~]# iptables -A INPUT -p tcp --dport 1000:1024 -j REJECT
[root@localhost ~]# iptables -A INPUT -p udp --dport 1000:1024 -j REJECT
[root@localhost ~]# iptables -L
Chain INPUT (policy ACCEPT)
target prot opt source destination
REJECT tcp – anywhere anywhere tcp dpts:cadlock2:1024 reject-with icmp-port-unreachable
REJECT udp – anywhere anywhere udp dpts:cadlock2:1024 reject-with icmp-port-unreachable

注意:使用iptables命令配置的防火墙规则默认会在系统下一次重启时失败,如果想让配置的防火墙策略永久生效,还需要执行保存命令:
[root@localhost ~]# service iptables save
The service command supports only basic LSB actions (start, stop, restart, try-restart, reload, force-reload, status). For other actions, please try to use systemctl.
因为是在RHEL7上执行,会报错,可通过安装iptables解决:

[root@localhost ~]# systemctl stop firewalld
[root@localhost ~]# yum install iptables-services
[root@localhost ~]# systemctl enable iptables
Created symlink from /etc/systemd/system/basic.target.wants/iptables.service to /usr/lib/systemd/system/iptables.service.
[root@localhost ~]# systemctl start iptables
[root@localhost ~]# service iptables save
iptables: Saving firewall rules to /etc/sysconfig/iptables:[ OK ]

firewalld 服务

是RHEL7系统中的默认防火墙配置管理工具。
拥有两种管理方式:基于CLI(命令行界面)和基于GUI(图形用户界面)

  • 新增概念:支持动态更新技术、区域(zone)
    区域:firewalld预先准备了几套防火墙策略集合(策略模板),用户可以根据生产场景的不同而选择合适的策略集合,从而实现防火墙策略之间的快速切换。
  • 常用的区域名称和规则:
区域 规则
trusted 允许所有的数据包
home 拒绝流量流入,除非与流出的流量相关;如果与ssh/mdns/dhcp服务有关则允许流量
internal 等同于home区域
work 拒绝流量流入,除非与流出的流量相关;如果与ssh/mdns/dhcp服务有关则允许流量
public 拒绝流入的流量,除非与流出的流量相关;如果与ssh/mdns/dhcp服务有关则允许流量
external 拒绝流入的流量,除非与流出的流量相关;如果与ssh服务有关则允许流量
dmz 拒绝流入的流量,除非与流出的流量相关;如果与ssh服务有关则允许流量
block 拒绝流入的流量,除非与流出的流量相关;
drop 拒绝流入的流量,除非与流出的流量相关;

终端管理工具firewalld-cmd和图形管理工具firewall-config后面讲。

问答:

1.在RHEL7系统中,iptables是否已经被firewalld服务彻底取代?
答:没有,iptables和firewalld服务均可用于RHEL7系统。
2.请简述防火墙策略规则中DROP和REJECT的不同之处。
答:DROP的动作是丢包,不响应;REJECT是拒绝请求,同时向发送方会送拒绝信息。
3.如何把iptables服务的INPUT规则链默认策略设置为DROP?
答:执行命令:iptables -P INPUT DROP
4.怎样编写一条防火墙策略规则,使得iptables服务可以禁止源自192.168.10.0/24网段的流量访问本机的sshd服务(22端口)?
答:执行命令:iptables -I INPUT -s 192.168.10.0/24 -p tcp --dport 22 -j REJECT
5.请简述firewalld中区域的作用
答:可以依据不同的工作场景来调用不同的firewalld区域,实现大量防火墙策略规则的快速切换。
6.如何在firewalld中把默认的区域设置为dmz?
答:执行命令:firewall-cmd --set-default-zone=dmz
7.如何让firewalld中以永久模式配置的防火墙策略规则立即生效?
答:执行命令:firewall-cmd --reload

你可能感兴趣的:(防火墙iptables和firewalld)