目录

防火墙基本概念

iptables讲解

iptables四表

iptables五规则链

iptables控制类型

iptables命令配置

firewalld讲解

firewalld区域概念

firewalld两种配置方法

firewall-cmd命令行基础配置

firewall-config图形化配置


防火墙基本概念

防火墙就是根据系统管理员设定的规则来控制数据包的进出,主要是保护内网的安全

目前Linux系统的防火墙类型主要有两种:分别是iptables和firewalld

iptables-静态防火墙

早期的Linux系统中默认使用的是iptables防火墙,配置文件在/etc/sysconfig/iptables,主要工作在网络层

该防火墙使用链式规则,只可以过滤互联网的数据包,无法过滤从内网到内网的数据包

iptables只可以通过命令行进行配置

iptables默认是允许所有,需要通过拒绝去做限制

iptables在修改了规则之后必须得全部刷新才可以生效,还会丢失连接(无法守护进程)

firewalld-动态防火墙

取代了之前的iptables防火墙,配置文件在/usr/lib/firewalld和/etc/fiewalld中,主要工作在网络层

新增区域概念,不仅可以过滤互联网的数据包,也可以过滤内网的数据包

firewalld不仅可以通过命令行进行配置,也可以通过图形化界面配置

firewalld默认是拒绝所有,需要通过允许去放行

firewalld可以动态修改单条规则,动态管理规则集(允许更新规则而不破环现有会话和连接,可以守护进程)

注意事项

iptables和firewaldl不是真正的防火墙,是指用来定义防火墙规则功能的"防火墙管理工具/程序",将定义好的规则交由内核中的netfilter即网络过滤器来读取,从而真正实现防火墙功能

即:真正的防火墙执行者是位于内核的netfilter,只不过firwalld和iptables的使用方法以及效果等不同

在配置防火墙时,不建议两种配置方法结合使用(建议只使用其中的一种)


iptables讲解

iptables配置防火墙依靠四个部分实现:表、规则链、规则(匹配条件)、控制类型组成

iptables四表

处理优先级由高到低,表与表之间都是独立的

raw表

是否对某个数据包进行状态追踪(包含OUTPUT、PREAUTING两个规则链)

mangle表

修改数据包内容;可以做流量整形、对数据包设置标记(包含所有规则链)

nat表

负责地址转换功能;修改数据包中的源目IP地址或端口(包含IN、OU、PR、PO三个规则链)

filter表

负责过滤数据包;对数据包时允许放行还是不允许放行(包含IN、OU、FO三个规则链)

iptables五规则链

什么是规则链

 很多个规则组成一个规则链

 数据包从上往下做匹配,匹配成功就结束匹配,并执行相应的控制类型(建议需要将精准的策略放在上面)

 如果没有找到相匹配的规则,则执行该规则链的默认控制类型

规则链类型

INPUT    

OUTPUT   

PREROUTING 

POSTROUTING     

FORWARD      

数据包到达防火墙根据下图进行匹配

iptables进行数据处理关心的是四表五链以及流量的进出

iptables 和nginx冲突_子网

iptables控制类型

ACCEPT 

DROP

REJCET  

SNAT     

DNAT    

MASQUERADE

LOG


iptables命令配置

配置iptables防火墙时需要将防火墙服务开启

systemctl start firewalld            开启防火墙

systemctl status firewalld          查看防火墙状态

iptables 和nginx冲突_iptables 和nginx冲突_02


iptables命令查看防火墙

iptables -nL -t nat  查看nat表的规则链

  -n 使用数字形式显示输出结果(如:通过IP地址)

  -L 查看当前防火墙有哪些策略

  -t 指定查看iptables的哪个表(默认是filter表)

iptables 和nginx冲突_服务器_03


iptables命令配置防火墙

iptables -P INPUT DROP    将INPUT规则链的默认流量更改为拒绝

  -P  设置/修改默认策略

iptables -t filter -I INPUT -s 192.168.10.0/24 -j ACCEPT  在filter表下的INPUT规则链中配置规则

  -I    num 插入规则(大写i,默认在链的开头加入规则,可以指定序号)

  -i    从这块网卡流入的数据    

  -o   从这块网卡流出的数据

  -s   源地址(加!表示取反)

  -d   目的地址  

  -j    限制动作

iptables -A INPUT -p tcp --dport 1000:1024 -j REJECT 拒绝 tcp端口号为1000~1024的数据包

  -A         在链的末尾加入规则

  -p         指定协议类型

  --sport  源端口   

  --dport  目的端口

  -N         新建(new-chain)一条用户自己定义的规则链

  -X         删除指定表中用户自定义的规则链(delete-chain)

iptables -D INPUT 1  删除INPUT规则链的第一条规则

  -D num 删除规则链

  -R 修改规则

iptables -F         清空已有的策略

iptables-save     来保存防火墙策略

注意事项

当创建的规则内容与已有规则一致时,不会覆盖原先的规则,会直接加入到现有规则链中(即此时此规则链下有两条一摸一样的规则,只是顺序不同)

以上关于防火墙的配置是runtime模式,即配置成功后立即生效,但是重启后会失效(需要将配置保存,重启后才不会失效)


firewalld讲解

frewalld是服务名称,firewall-cmd和firewall-config是配置工具名称

firewall-cmd  基于命令行配置

firewall-config基于图形化界面配置(这两个配置方式实时同步)

firewalld区域概念

默认所有网卡都是public区域,可以根据需要将网卡设置为不同的区域

Trust      信任区域

 允许所有流量(所有的网络连接都可以接受)

Public     公共区域

 仅接受ssh、dhcpv6-client服务连接(默认区域)

External  外部区域

 仅接收ssh服务连接(默认通过此区域转发的IPv4流量将会进行地址伪装)

Home     家庭区域

 仅接受ssh、msdns、ipp-client、samba-client、dhcpv6-client服务网络连接

Internal  内部区域

 同home区域

Work      工作区域

 仅接受ssh、ipp-client、dhcpv6-client服务连接

Dmz       隔离区域(非军事区域)

 仅接收ssh服务连接

Block      限制区域

 拒绝所有传入流量(有回应)

Drop       丢弃区域

 丢弃所有传入流量(无回应)

数据包到达防火墙匹配规则

firewall进行数据处理只关心区域

  1. 根据数据包的源IP地址匹配,根据源地址绑定区域的区域规则进行匹配(如果没有绑定区域则匹配默认区域的规则)
  2. 根据传入的网络接口匹配,进入此接口绑定区域的区域规则进行匹配(如果没有绑定区域则匹配默认区域的规则)

绑定源地址的区域规则>网卡绑定的区域规则>默认区域的规则

firewalld两种配置方法

临时配置(runtime 当前生效表)

立即生效,重启后失效

不中断现有连接

无法修改服务配置

永久配置(permanent 永久生效表)

不立即生效,重启后生效,或者立即同步后生效

会终端现有连接

可以修改服务配置

firewall-cmd命令行基础配置

如何实现永久配置

--permanent  表示此配置加入到永久生效(默认临时生效)

或者在配置结束后执行此命令 firewall-cmd --runtime-to-permanent将临时更改为永久

永久配置完成后需要立即同步 firewall-cmd --reload 立即同步永久配置

查看默认区域并进行更改

firewall-cmd --get-zones  

firewall-cmd --get-default-zone 

firewall-cmd --get-active-zone 

firewall-cmd --set-default-zone=trusted

iptables 和nginx冲突_linux_04


将网卡/子网与区域绑定(允许/拒绝此子网通过)

firewall-cmd --zone=drop --add-source=192.168.20.0/24 将此子网与drop区域绑定(拒绝从此子网发来的流量)

firewall-cmd --zone=trusted --add-interface=ens160

   --remove-source  删除子网与区域的绑定

   --change-source  更改子网与区域的绑定

iptables 和nginx冲突_服务器_05


配置区域允许/拒绝的协议/端口号

firewall-cmd --list-all                   显示当前区域的端口号、网卡、服务等信息

                   --list-all-zones         显示所有区域的

firewall-cmd --get-services

firewall-cmd --zone=public --add-service http 

                                           --remove-service ssh      拒绝通过ssh协议

                                           --add-port=123/tcp          允许通过tcp的123端口

                                           --remove-port=123/tcp    拒绝通过tcp的123端口

cat /etc/services

iptables 和nginx冲突_linux_06


配置协议端口转换(端口映射)

firewall-cmd --permanent --zone=public --add-forward-port=port=888:proto=tcp:toport=22:toaddr=192.168.10.1

将192.168.10.1主机的tcp 22端口号转为888端口号(public区域接收ssh)

  --remove-forward-port 删除此端口映射

iptables 和nginx冲突_运维_07


其它配置

--panic-on

--panic-off

配置富规则rich(更复杂、更详细的防火墙策略配置)

优先级最高(高于默认规则,两个并不冲突)

能够根据源目地址、端口号来限制用户

firewall-cmd  --zone=public --list-rich-rule  

firewall-cmd --permanent --zone=public --add-rich-rule="rule family="ipv4" source address="192.168.100.1/24" service name="ssh" accept"   允许来自192.168.100.1的主机访问22端口

 --add-rich-rule                 添加一个富规则

 --remove-rich-rule          删除一个富规则

 accept/reject                    允许/拒绝访问

iptables 和nginx冲突_linux_08

firewall-config图形化配置

安装firewall-config

 配置Yum源(软件仓库)

 安装软件 dnf install firewall-config

iptables 和nginx冲突_子网_09


系统界面讲解

1:选择运行时(Runtime)或永久(Permanent)模式的配置

2:选择区域

3:当前正在使用的区域(黑色加粗)

4:管理当前被选中区域中的服务

5:管理当前被选中区域中的端口

6:设置允许被访问的协议

7:设置允许被访问的端口

8:开启或关闭SNAT(源网络地址转换)技术

9:设置端口转发策略

10:控制请求icmp服务的流量

11:被选中区域的服务,若勾选了相应服务前面的复选框,则表示允许与之相关的流量

iptables 和nginx冲突_服务器_10


12:管理防火墙的富规则

13:网卡信息(网卡与区域绑定信息)

14:子网信息(子网与区域绑定信息)

iptables 和nginx冲突_服务器_11


15:查看常用的服务协议列表

iptables 和nginx冲突_服务器_12


16:主机地址的黑白名单

iptables 和nginx冲突_运维_13



iptables 和nginx冲突_linux_14