刘刚刚的个人博客

<linux就该这么学>第八章 Iptables与Firewalld防火墙

创建时间:2021-06-22 23:04:18
更新时间:2021-06-22 23:04:18

Firewalld是RHEL7开始增加的防火墙测量略配置工具。

Iptables的使用

iptables在生产环境中仍然具有顽强的生命力。iptables把用于处理或者过滤流量的测量略条目称为规则,多条规则组成一个规则链,在设置的策略规则中,防火墙会从上至下依次读取配置的策略规则,如果没有规则与之匹配,则会去执行默认的规则。

规则链依据数据包处理位置的不同进行分类,分为:

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

我们最常使用的是INPUT规则链,可以防御外部风险。

处理流量的动作包括:

  1. ACCEPT(允许流量通过)
  2. REJECT(拒绝流量通过):拒绝消息,并响应被拒绝的消息
  3. LOG(记录日志信息)
  4. DROP(拒绝流量通过):直接删除信息,不回复拒绝消息

iptables的常用参数:

参数作用
-P设置默认策略
-F清空规则链
-L查看规则链
- I指定要操作的规则链
-A在规则链的末尾加入新规则
-I num在规则链的头部加入新规则
-j指定处理流量的动作(accept drop reject log)
-D num删除某一条规则
-s匹配来源地址IP/MASK,加叹号“!”表示除这个IP外
-d匹配目标地址
-i 网卡名称匹配从这块网卡流入的数据
-o 网卡名称匹配从这块网卡流出的数据
-p匹配协议,如TCP、UDP、ICMP
--dport num匹配目标端口号
--sport num匹配来源端口号

>>>
# 查看规则链
[root@localhost ~]# iptables -L
Chain INPUT (policy ACCEPT)
target     prot opt source               destination         
ACCEPT     udp  --  anywhere             anywhere             udp dpt:domain
ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:domain
ACCEPT     udp  --  anywhere             anywhere             udp dpt:bootps
ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:bootps

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination         
ACCEPT     all  --  anywhere             192.168.122.0/24     ctstate RELATED,ESTABLISHED
ACCEPT     all  --  192.168.122.0/24     anywhere            
ACCEPT     all  --  anywhere             anywhere            
REJECT     all  --  anywhere             anywhere             reject-with icmp-port-unreachable
REJECT     all  --  anywhere             anywhere             reject-with icmp-port-unreachable

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination         
ACCEPT     udp  --  anywhere             anywhere             udp dpt:bootpc
# 清空规则链
[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      
# 设置默认规则为丢弃,此时如果使用ping命令ping该机器的ip,则无响应
[root@localhost ~]# iptables -P INPUT DROP
[root@localhost ~]# iptables -L
Chain INPUT (policy DROP)
target     prot opt source               destination         

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination         

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination   
# 给规则链中加入icmp规则
[root@localhost ~]# iptables -I INPUT -p icmp -j ACCEPT
[root@localhost ~]# iptables -L
Chain INPUT (policy DROP)
target     prot opt source               destination         
ACCEPT     icmp --  anywhere             anywhere            

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination         

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination  
# 删除INPUT规则链中的第一条规则
[root@localhost ~]# iptables -D INPUT 1
[root@localhost ~]# iptables -L
Chain INPUT (policy DROP)
target     prot opt source               destination         

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination         

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination   

[root@localhost ~]# iptables -P INPUT ACCEPT
[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   
# 仅允许指定网段的ip访问指定端口
[root@linuxprobe ~]# iptables -I INPUT -s 192.168.10.0/24 -p tcp --dport 22 -j ACCEPT
[root@linuxprobe ~]# iptables -A INPUT -p tcp --dport 22 -j REJECT
[root@linuxprobe ~]# iptables -L
Chain INPUT (policy ACCEPT)
target prot opt source destination 
ACCEPT tcp -- 192.168.10.0/24 anywhere tcp dpt:ssh
REJECT tcp -- anywhere anywhere tcp dpt:ssh reject-with icmp-port-unreachable
# 拒绝12345的所有请求
[root@linuxprobe ~]# iptables -I INPUT -p tcp --dport 12345 -j REJECT
[root@linuxprobe ~]# iptables -I INPUT -p udp --dport 12345 -j REJECT
[root@linuxprobe ~]# 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.10.0/24 anywhere tcp dpt:ssh
REJECT tcp -- anywhere anywhere tcp dpt:ssh reject-with icmp-port-unreachable
# 拒绝1000-1024接口的请求
[root@linuxprobe ~]# iptables -A INPUT -p tcp --dport 1000:1024 -j REJECT
[root@linuxprobe ~]# iptables -A INPUT -p udp --dport 1000:1024 -j REJECT


# 拒绝端口范围
iptables -I INPUT tcp --dport 10000:20000 -j

# 保存现有的策略,centos 8
[root@linuxprobe ~]# iptables-save
# 保存现有的策略 centos 5/6/7
[root@linuxprobe ~]# service iptables save


  1. iptables修改的文件的位置

    /etc/sysconfig/iptables-config

## Firewalld

Firewall是RHEL7后新增的防火墙命令,它底层还是使用 iptables 对内核命令动态通信包过滤.拥有CLI/GUI两种使用方式.

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拒绝流入的流量,除非与流出的流量相关

CLI

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关闭应急状况模式
--zone配合其他命令对zone进行操作

在使用firewalld-cmd命令时有两种模式:

  • 默认为当前生效模式(-runtime)
  • 如果想让永久生效需要使用 -permanent,这样当前不会生效,在重启或者reload之后永久生效.
# 查看firewalld服务当前使用的区域
[root@localhost ~]# firewall-cmd --get-default-zone 
public
# 查看网卡信息
[root@localhost ~]# ifconfig 
ens160: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        ether 00:0c:29:d0:e4:db  txqueuelen 1000  (Ethernet)
        RX packets 1  bytes 247 (247.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 0  bytes 0 (0.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        inet6 ::1  prefixlen 128  scopeid 0x10<host>
        loop  txqueuelen 1000  (Local Loopback)
        RX packets 108  bytes 9188 (8.9 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 108  bytes 9188 (8.9 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

virbr0: flags=4099<UP,BROADCAST,MULTICAST>  mtu 1500
        inet 192.168.122.1  netmask 255.255.255.0  broadcast 192.168.122.255
        ether 52:54:00:62:1d:54  txqueuelen 1000  (Ethernet)
        RX packets 0  bytes 0 (0.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0 
        TX packets 0  bytes 0 (0.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

# 查看网卡的默认信息(网络关闭时)
[root@localhost ~]# firewall-cmd --get-zone-of-interface=ens160
no zone
# 查看网卡的默认信息(网络开启后) 
[root@localhost ~]# firewall-cmd --get-zone-of-interface=ens160
public
# 设置区域为home
[root@localhost ~]# firewall-cmd --permanent --zone=home --change-interface=ens160
The interface is under control of NetworkManager, setting zone to 'home'.
success
[root@localhost ~]# firewall-cmd --get-zone-of-interface=ens160
home
# 获取所有网卡的默认区域,优先级是最低的
[root@localhost ~]# firewall-cmd --get-default-zone 
public
# 修改网卡的默认区域
[root@localhost ~]# firewall-cmd --set-default-zone=external 
success
[root@localhost ~]# firewall-cmd --get-default-zone 
external
[root@localhost ~]# firewall-cmd --get-zone-of-interface=ens160
home
# 启用紧急模式(会断网)
[root@localhost ~]# firewall-cmd --panic-on
success
# 关闭紧急模式
[root@localhost ~]# firewall-cmd --panic-off
success

# 查询区域中服务的状态
[root@localhost ~]# firewall-cmd --zone=public --query-service=ssh
yes
[root@localhost ~]# firewall-cmd --zone=public --query-service=https
no

# 修改区域中服务器的状态,并reload
[root@localhost ~]# firewall-cmd --permanent --zone=public --add-service=https
success
[root@localhost ~]# firewall-cmd --zone=public --query-service=https
no
[root@localhost ~]# firewall-cmd --reload
[root@localhost ~]# firewall-cmd --zone=public --query-service=https
yes

# 设置端口的规则
[root@localhost ~]# firewall-cmd --zone=public --add-port=8080-8081/tcp
success
[root@localhost ~]# firewall-cmd --zone=public --list-ports
8080-8081/tcp

# 端口转发
[root@localhost ~]# firewall-cmd --permanent --zone={区域名称} --add-forward-port=port={来源端口}:proto={使用的协议}:toport={目标端口}:toaddr={目标地址}
[root@localhost ~]# firewall-cmd --permanent --zone=public --add-forward-port=port=888:proto=tcp:toport=22:toaddr=127.0.0.1
success

# 富规则
[root@localhost ~]# firewall-cmd --permanent --zone=public --add-rich-rule="rule family="ipv4" source address="192.168.10.0/24" service name="ssh" reject"
success

查看系统中运行的服务及端口号:

cat /etc/services

查看目前系统使用的端口号:

netstat -an

## firewall-config

安装

dnf install firewall-config
我的名片

昵称:shuta

职业:后台开发(python、php)

邮箱:648949076@qq.com

站点信息

建站时间: 2020/2/19
网站程序: ANTD PRO VUE + TP6.0
晋ICP备18007778号