Linux网络——配置防火墙的相关命令

摘要:本文主要学习了如何在Linux系统中配置防火墙。

iptables命令

iptables准确来讲并不是防火墙,真正的防火墙是运行于系统内核中的netfilter,而iptables仅仅是操作netfilter的一个工具,其所负责的主要功能便是与用户交互,获取到用户的要求,并转化成netfilter可以接受的信息。

链的概念

当客户端访问服务器的WEB服务时,客户端是起点,WEB服务所监听的套接字(IP地址和端口)是终点。当WEB服务需要响应客户端请求时,WEB服务所监听的IP与端口变成了起点,客户端变成了终点。

如果想要防火墙能够达到防火的目的,就需要在内核中的netfilter框架里设置关卡,所有进出的报文都要通过这些关卡,经过检查后,符合放行条件的才能放行,符合阻拦条件的则需要被阻止,于是就出现了INPUT关卡和OUTPUT关卡。如果客户端发来的报文访问的目标地址不是本机,而是其他服务器,这个时候就会用到PREROUTING关卡、FORWARD关卡和POSTROUTING关卡。这些关卡在iptables中被称之为链。

简要说明:INPUT链、OUTPUT链主要用在“主机防火墙”中,即主要针对服务器本机惊醒保护的防火墙。FORWARD链、PREROUTING链、POSTROUTING链多用在“网络型防火墙”中,例如使用Linux防火墙作为网关服务器在公司与Inetnet之间进行安全控制。

链的详细说明:

 INPUT链表示当收到访问防火墙本机地址的数据包(入站)时应用的规则。
OUTPUT链表示当防火墙本机向外发送数据包(出站)时应用的规则。
FORWARD链表示当接收到需要通过防火墙中转发送给其他地址的数据包(转发)时应用的规则。
PREROUTING链表示在对数据包做路由选择之前应用的规则。
POSTROUTING链表示在对数据包做路由选择之后应用的规则。

表的概念

每个经过这个关卡的报文,都要将这条链上的所有规则匹配一遍,如果有符合条件的规则,则执行规则对应的动作。但是每个链上的规则可能不止一个,所以把具有相同功能规则的集合叫做表,通过规则表管理规则。

默认的iptables规则表有:

 filter表是iptables的默认表,用于过滤包,如果没有自定义表,那么就默认使用filter表。
nat表用于网络地址转换。
mangle表用于指定如何处理数据包,它能修改数据标记位。
raw表可以实现不追踪某些数据包,默认系统的数据包都会被追踪,用于处理异常。
security表用于强制访问控制(MAC)的网络规则,在CentOS中没有该表。

规则表应用优先级:security,raw,mangle,nat,filter。

各条规则的应用顺序:链内部的过滤遵循“匹配即停止”的原则,如果对比完整个链也没有找到和数据包匹配的规则,则会按照链的默认策略进行处理。

包过滤流程

安装

CentOS的版本7中,默认没有安装iptables工具,所以需要手动安装:

 [root@localhost ~]# yum install -y iptables-services
...
=============================================================================================================================
Package 架构 版本 源 大小
=============================================================================================================================
正在安装:
iptables-services x86_64 1.4.-.el7 base k
为依赖而安装:
iptables x86_64 1.4.-.el7 base k
...
完毕!
[root@localhost ~]#

启动服务

使用管理服务的systemctl命令,启动并查看iptables服务:

 [root@localhost ~]# systemctl status iptables
● iptables.service - IPv4 firewall with iptables
Loaded: loaded (/usr/lib/systemd/system/iptables.service; disabled; vendor preset: disabled)
Active: inactive (dead) 8月 :: localhost.localdomain systemd[]: Stopped IPv4 firewall with iptables.
8月 :: localhost.localdomain systemd[]: Stopped IPv4 firewall with iptables.
[root@localhost ~]# systemctl start iptables
[root@localhost ~]# systemctl status iptables
● iptables.service - IPv4 firewall with iptables
Loaded: loaded (/usr/lib/systemd/system/iptables.service; disabled; vendor preset: disabled)
Active: active (exited) since 五 -- :: CST; 2s ago
Process: ExecStart=/usr/libexec/iptables/iptables.init start (code=exited, status=/SUCCESS)
Main PID: (code=exited, status=/SUCCESS) 8月 :: localhost.localdomain systemd[]: Starting IPv4 firewall with iptables...
8月 :: localhost.localdomain iptables.init[]: /usr/libexec/iptables/iptables.init:行22: /etc/init.d/func…或目录
8月 :: localhost.localdomain iptables.init[]: iptables: Applying firewall rules: /usr/libexec/iptables/i…到命令
8月 :: localhost.localdomain systemd[]: Started IPv4 firewall with iptables.
Hint: Some lines were ellipsized, use -l to show in full.
[root@localhost ~]#

基本语法

 iptables [指定表] [选项] [条件] -j [策略]

指定表说明

 -t 表名:用来指定操作的表,有filter、nat、mangle或raw,默认使用filter。

选项说明

查看的选项:

 -L 链名:查看指定表指定链的规则,不指定链则查看指定表的所有规则。
-v:查看详细信息。
-n:以数字格式显示主机地址和端口号。
-x:显示计数器的精确值。
--line-numbers:查看规则时,显示其在链上的编号。

管理规则的选项:

 -A 链名:添加新规则于指定链的尾部。
-I 链名 数字:添加新规则于指定链的指定位置,默认为首部。
-R 链名 数字:替换指定的规则为新的规则。
-D 链名 数字:根据规则编号删除规则。

管理链的选项:

 -N 链名:新建一个自定义的规则链。
-X 链名:删除指定表指定自定义链的规则,不指定链则删除指定表的所有自定义链的规则。
-F 链名:清空指定表指定链的规则,不指定链则清空指定表的所有规则。
-E 原链名 新链名:重命名链。
-Z:清空链及链中默认规则的计数器。
-P 链名 策略, 设置链路的默认策略。

条件说明

 -s IP地址:匹配源地址,这里不能指定主机名称,必须是IP。主要有3种,IP、IP/MASK、0.0.0.0/0.0.0.0。地址可以取反,加一个“!”表示除了哪个IP之外。
-d IP地址:匹配目标地址,规则同-s。
--sport 端口号-端口号:指定源端口,不能指定多个非连续端口,只能指定单个端口。
--dport 端口号-端口号:指定目标端口,规则同--sport。
-i 网卡:从指定网卡流入的数据,流入一般用在INPUT和PREROUTING上。
-o 网卡:从指定网卡流出的数据,流出一般在OUTPUT和POSTROUTING上。
-p 协议:匹配协议,这里的协议通常有3种,TCP、UDP、ICMP。
-m 端口号,端口号:表示启用多端口扩展。

策略说明

 ACCEPT:接收数据包。
DROP:丢弃数据包。
REJECT:被拒绝时,提示被拒绝的原因。
REDIRECT:将数据包重新转向到本机或另一台主机的某一个端口,通常功能实现透明代理或对外开放内网的某些服务。
SNAT:源地址转换。
DNAT:目的地址转换。
MASQUERADE:IP伪装。
LOG:日志功能。

保存配置

 [root@localhost ~]# service iptables save
iptables: Saving firewall rules to /etc/sysconfig/iptables:[ 确定 ]
[root@localhost ~]#

使用举例

查看规则:

 [root@localhost ~]# iptables -nvL
Chain INPUT (policy ACCEPT packets, bytes)
pkts bytes target prot opt in out source destination
ACCEPT all -- * * 0.0.0.0/ 0.0.0.0/ state RELATED,ESTABLISHED
ACCEPT icmp -- * * 0.0.0.0/ 0.0.0.0/
ACCEPT all -- lo * 0.0.0.0/ 0.0.0.0/
ACCEPT tcp -- * * 0.0.0.0/ 0.0.0.0/ state NEW tcp dpt:
REJECT all -- * * 0.0.0.0/ 0.0.0.0/ reject-with icmp-host-prohibited Chain FORWARD (policy ACCEPT packets, bytes)
pkts bytes target prot opt in out source destination
REJECT all -- * * 0.0.0.0/ 0.0.0.0/ reject-with icmp-host-prohibited Chain OUTPUT (policy ACCEPT packets, bytes)
pkts bytes target prot opt in out source destination
[root@localhost ~]#

添加规则:

 [root@localhost ~]# iptables -A INPUT -m state --state NEW -p tcp --dport  -j ACCEPT
[root@localhost ~]# iptables -nvL
Chain INPUT (policy ACCEPT packets, bytes)
pkts bytes target prot opt in out source destination
ACCEPT all -- * * 0.0.0.0/ 0.0.0.0/ state RELATED,ESTABLISHED
ACCEPT icmp -- * * 0.0.0.0/ 0.0.0.0/
ACCEPT all -- lo * 0.0.0.0/ 0.0.0.0/
ACCEPT tcp -- * * 0.0.0.0/ 0.0.0.0/ state NEW tcp dpt:
REJECT all -- * * 0.0.0.0/ 0.0.0.0/ reject-with icmp-host-prohibited
ACCEPT tcp -- * * 0.0.0.0/ 0.0.0.0/ state NEW tcp dpt: Chain FORWARD (policy ACCEPT packets, bytes)
pkts bytes target prot opt in out source destination
REJECT all -- * * 0.0.0.0/ 0.0.0.0/ reject-with icmp-host-prohibited Chain OUTPUT (policy ACCEPT packets, bytes)
pkts bytes target prot opt in out source destination
[root@localhost ~]#

删除规则:

 [root@localhost ~]# iptables -D INPUT
[root@localhost ~]# iptables -t filter -nvL
Chain INPUT (policy ACCEPT packets, bytes)
pkts bytes target prot opt in out source destination
ACCEPT all -- * * 0.0.0.0/ 0.0.0.0/ state RELATED,ESTABLISHED
ACCEPT icmp -- * * 0.0.0.0/ 0.0.0.0/
ACCEPT all -- lo * 0.0.0.0/ 0.0.0.0/
ACCEPT tcp -- * * 0.0.0.0/ 0.0.0.0/ state NEW tcp dpt:
REJECT all -- * * 0.0.0.0/ 0.0.0.0/ reject-with icmp-host-prohibited Chain FORWARD (policy ACCEPT packets, bytes)
pkts bytes target prot opt in out source destination
REJECT all -- * * 0.0.0.0/ 0.0.0.0/ reject-with icmp-host-prohibited Chain OUTPUT (policy ACCEPT packets, bytes)
pkts bytes target prot opt in out source destination
[root@localhost ~]#

firewalld命令

在CentOS系统的版本7中,firewalld防火墙取代了iptables防火墙,作为系统中netfilter内核模块的管理工具。firewalld使用了daemon和service替代了iptables的service部分,其底层还是使用iptables的command作为防火墙规则管理入口。

同iptables比较

firewalld跟iptables比起来至少有两大好处:

1)firewalld支持动态更新规则。使用iptables时,每一个单独的更改都需要清空旧的规则并重新读取所有规则,这种方式被称为静态防火墙件。而使用firewalld修改规则后,不需要重新加载所有规则,只需要将变更部分保存并更新到运行中的iptables即可,这种方式被称为动态防火墙。

2)firewalld使用区域和服务而不是链式规则。即使不明白“五张表五条链”,而且对TCP/IP协议也不理解也可以实现大部分功能,在使用上要比iptables人性化很多。

配置方式

firewalld的配置方法主要有三种:图形化工具、命令行工具、配置文件。

配置文件

firewalld的配置文件有两个存储位置:

 /etc/firewalld/:用于用户创建和自定义配置文件,覆盖默认配置。
/usr/lib/firewalld/:用于默认和备用配置。

firewalld的配置文件结构非常简单,主要包含两个文件和三个目录:

 文件firewalld.conf是主配置文件,只有5个配置项:
)DefaultZone表示使用的zone。默认值为public。
)MinimalMark表示标记的最小值。默认值为100。
)CleanupOnExit表示当退出firewalld后是否清除防火墙规则。默认值为yes。
)Lockdown表示是否可以通过lockdown-whitelist.xml文件操作firewalld。默认值为no。
)IPv6_rpfilter用来判断所接受到的包是否是伪造的。默认值为yes。
文件lockdown-whitelist.xml规定了当Lockdown为yes的时候,哪些程序可以对firewalld进行操作。
文件direct.xml使用类似iptables的语法来进行规则的增删,如果用到direct就会有这个文件。
目录zones用来保存zone配置文件。
目录services用来保存service配置文件。
目录icmptypes用来保存和icmp类型相关的配置文件。

区域(zone)说明

所谓的区域就是一个信赖等级,某一等级下对应有一套规则集。划分方法包括:网络接口、IP地址、端口号等等。

一般情况下,会有如下的这些默认区域:

 drop:丢弃所有进入的数据包。
block:拒绝所有进入的数据包。
public:只接受部分选定的数据包。
external:应用在NAT设定时的对外网络。
dmz:非军事区。
work:使用在公司环境。
home:使用在家庭环境。
internal:应用在NAT设定时的对内网络。
trusted:接受所有的数据包。

查看用户配置目录里的zone配置文件:

 [root@localhost ~]# ls /etc/firewalld/zones
public.xml
[root@localhost ~]#

查看public.xml配置文件的内容:

 [root@localhost ~]# cat /etc/firewalld/zones/public.xml
<?xml version="1.0" encoding="utf-8"?>
<zone>
<short>Public</short>
<description>For use in public areas. You do not trust the other computers on networks to not harm your computer. Only selected incoming connections are accepted.</description>
<service name="dhcpv6-client"/>
<service name="ssh"/>
</zone>
[root@localhost ~]#

可以看到配置文件中仅开放了 dhcpv6-client 服务和 ssh 服务。

服务(service)说明

iptables时代习惯使用端口号来匹配规则,但是如果某一个服务的端口号改变了,那就要同时更改iptables的规则,十分不方便,同时也不方便阅读理解。

service配置文件使用服务名来命名,比如ssh的配置文件是ssh.xml,可以通过修改配置文件的内容来实现对规则的修改。

查看ssh.xml配置文件的内容:

 [root@localhost ~]# cat /usr/lib/firewalld/services/ssh.xml
<?xml version="1.0" encoding="utf-8"?>
<service>
<short>SSH</short>
<description>Secure Shell (SSH) is a protocol for logging into and executing commands on remote machines. It provides secure encrypted communications. If you plan on accessing your machine remotely via SSH over a firewalled interface, enable this option. You need the openssh-server package installed for this option to be useful.</description>
<port protocol="tcp" port=""/>
</service>
[root@localhost ~]#

名词解释

target:策略,当区域在处理包的时候,如果没有显式指明策略,则使用区域的target表示的策略。有四个可选值:default(不处理并返回上一级)、ACCEPT(通过)、%%REJECT%%(拒绝并回复)、DROP(丢弃不回复),默认为default。

service:服务。

port:端口,使用port可以不通过service而直接对端口进行设置。

interface:接口,可以理解为网卡。

source:源地址,可以是ip地址也可以是ip地址段。

icmp-block:icmp报文阻塞,可以按照icmp类型进行设置。

masquerade:ip地址伪装,也就是按照源网卡地址进行NAT转发。

forward-port:端口转发。

rule:自定义规则。

匹配zone

对于一个接受到的请求具体使用哪个zone,firewalld是通过三种方法来判断的:

1)source,请求报文的源地址。

2)interface,接收请求的网卡。

3)firewalld.conf中配置的默认zone。

基本语法

 firewall-cmd [--zone=区域] [--permanent] [选项]

可选配置说明

 --zone:指定区域,不指定则使用默认区域。
--permanent:是否将改动写入到区域配置文件中。

选项说明

查看和更改状态:

 --state:查看防火墙的状态。
--reload:重新加载防火墙,中断用户的连接,将临时配置清掉,加载配置文件中的永久配置。
--complete-reload:重新加载防火墙,不中断用户的连接(防火墙出严重故障时使用)。

使用应急模式:

 --panic-on:开启紧急模式,强制关闭所有网络连接。
--panic-off:关闭紧急模式。
--query-panic:查看是否为应急模式。

查看和操作区域:

 --get-zones:查看所有区域。
--get-default-zone:查看默认的区域。
--set-default-zone=区域:更改默认的区域。
--get-active-zones:查看正在使用的区域。

查看区域配置:

 --list-all:查看区域的所有配置,类似于iptables -nL。
--list-all-zones:查看所有区域的所有配置。

反向查询区域:

 firewall-cmd --get-zone-of-interface=接口:根据接口查询区域。
firewall-cmd --get-zone-of-source=IP地址/子网掩码:根据地址查询区域。

操作区域绑定的地址:

 --list-sources:查看区域绑定的地址。
--add-source=IP地址/子网掩码:添加地址绑定的区域,地址绑定过则报错。
--remove-source=IP地址/子网掩码:删除地址绑定的区域。
--change-source=IP地址/子网掩码:更新地址绑定的区域,地址没有绑定则添加。
--query-source=IP地址/子网掩码:查询地址和区域是否绑定。

操作区域开放的接口:

 --list-interfaces:查看区域开放的接口。
--add-interface=接口:添加区域开放的接口。
--remove-interface=接口:删除区域开放的接口。
--change-interface=接口:更新区域开放的接口。
--query-interface=接口:查询区域是否开放接口。

配置区域的策略:

 --get-target:查询区域的策略。--permanent是必选的。
--set-target=策略:设置区域的策略。--permanent是必选的。

配置区域的服务:

 --list-services:查看区域启用的服务。
--add-service=服务:在区域启用服务。
--remove-service=服务:在区域禁用服务。
--query-service=服务:查看区域是否启用服务。

配置区域的端口:

 --list-ports:查看区域启用的端口。
--add-port=端口号/协议:在区域启用端口。
--remove-port=端口号/协议:在区域禁用端口。
--query-port=端口号/协议:查看区域是否启用端口。

配置区域的端口转发:

 --list-forward-ports:查看区域的端口转发。
--add-forward-port=port=本地端口号:proto=协议:toport=目标端口号:toaddr=目标IP/子网掩码:添加区域的端口转发。
--remove-forward-port=port=本地端口号:proto=协议:toport=目标端口号:toaddr=目标IP/子网掩码:删除区域的端口转发。
--query-forward-port=port=本地端口号:proto=协议:toport=目标端口号:toaddr=目标IP/子网掩码:查询区域是否有端口转发。

配置区域按照icmp类型进行阻塞:

 --list-icmp-blocks:查看区域阻塞的icmp类型。
--add-icmp-blocks=icmptype:添加区域阻塞的icmp类型。
--remove-icmp-blocks=icmptype:删除区域阻塞的icmp类型。
--query-icmp-blocks=icmptype:查询icmp类型是否在区域阻塞。

配置地址转换:

 --add-masquerade:开启SNAT(源地址转换)。
--remove-masquerade:关闭SNAT(源地址转换)。
--query-masquerade:查询SNAT(源地址转换)是否开启。

通过rich规则配置区域:

 --list-rich-rules:查看rich规则。
--add-rich-rule='rich规则':添加rich规则。
--remove-rich-rule='rich规则':删除rich规则。
--query-rich-rule='rich规则':查询查看单条rich规则。

Linux网络——配置防火墙的相关命令的更多相关文章

  1. Linux网络配置、文件及命令

    Linux的网络配置是曾一直是我学习Linux的埋骨之地,投入了大量的精力和心神但是自己的虚拟机就是联不了网.原来一个大意,我一躺就是一年半.在这里简单的谈谈我对网络的微微认识. VMware的联网模 ...

  2. 【Linux】Vmware&Linux 网络配置

    Vmware 网络设置 Linux 网络设置 注:本实验使用Linux 版本为 RedHat 6.3 Vmware 网络设置 1.Vmware 网络工作模式 bridged(桥接模式) -- 网络能提 ...

  3. linux网络配置相关文件

    网络接口(interface)是网络硬件设备在操作系统中的表示方法,比如网卡在Linux操作系统中用ethX,是由0开始的正整数,比如eth0.eth1...... ethX.而普通猫和ADSL的接口 ...

  4. linux网络配置命令(一)——ifconfig

    linux网络配置命令(一)——ifconfig ifconfig 查看.配置网卡信息.已过时,推荐使用ip命令 格式:  ifconfig [interface]                   ...

  5. Linux网络配置和网络诊断命令介绍

    方法/步骤 1 在接下来的讲解中,讲解的Linux网络配置和网络诊断的命令有: ifconfig.ping.netstat.traceroute.dig和nslookup.host.hostname. ...

  6. Linux网络——配置网络之iproute家族命令

    Linux网络——配置网络之iproute家族命令 摘要:本文主要学习了iproute家族用来配置网络的命令. ip命令 ip命令用于查看和管理IP地址.接口.路由.隧道等.用来取代ifconfig命 ...

  7. Linux网络——配置网络之ifconfig家族命令

    Linux网络——配置网络之ifconfig家族命令 摘要:本文主要学习了ifconfig家族用来配置网络的命令. ifconfig命令 ifconfig命令用来显示或设置网络接口信息,设置只是临时生 ...

  8. linux网络配置完全解析

    概述:熟悉了windows下面的网络配置,对linux下的网络配置缺未必了解透彻.熟练掌握linux下的网络配置原理,能帮助我们更容易掌握网络传输原理:同时具备一些网络连接不通对应问题的排查能力.文本 ...

  9. linux入门基础——linux网络配置

    linux网络配置 以太网连接 在linux中,以太网接口被命名为:eth0.eth1等.0.1代表网卡编号 通过lspci命令能够查看网卡硬件信息(假设是usb网卡,则须要使用lsusb命令) 命令 ...

随机推荐

  1. Difference between JDK, JRE and JVM

    With Java programming language, the three terms i.e. JDK, JRE and JVM will always be there to unders ...

  2. SpringBoot+MyBatisPlus+ElementUI一步一步搭建前后端分离的项目(附代码下载)

    场景 一步一步教你在IEDA中快速搭建SpringBoot项目: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/87688277 ...

  3. 松软科技web课堂:JavaScript 事件

    HTML 事件是发生在 HTML 元素上的“事情”. 当在 HTML 页面中使用 JavaScript 时,JavaScript 能够“应对”这些事件. HTML 事件 HTML 事件可以是浏览器或用 ...

  4. flutter_inner_drawer 使用

    版本: flutter_inner_drawer: "^0.2.2" github:  https://github.com/Dn-a/flutter_inner_drawer 这 ...

  5. word-break、word-wrap、white-space区别

    <div id="box"> Hi  , This is a incomprehensibilities long word. </br> 你好  , 这 ...

  6. android笔记--Intent和IntentFilter详解

    本文转载自:https://www.cnblogs.com/liushengjie/archive/2012/08/30/2663066.html 本文转载自:https://www.cnblogs. ...

  7. liunx用户环境初始化脚本

          liunx用户环境初始化脚本 编写生成脚本基本格式,包括作者,联系方式,版本,时间,描述等 [root@magedu ~]# vim .vimrc set ignorecase set c ...

  8. DropDownList绑定数据源后,要插入项的处理

    private void BindDivision() { DivisionService divisionService = new DivisionService(); var divisions ...

  9. ubuntu 桌面版, ssh 连接时使用,x转发进行使用 gnome-terminal 时出现:Error calling StartServiceByName for org.gnome.Terminal: Timeout was reached 错误

    当我按照这种情景使用时,出现了这种情况: 考虑着 gnome 桌面正在运行,可能是gnome-terminal 使用了工厂模式进行创建:查找gnome-terminal 文档,有如下解决方案: gno ...

  10. TensorFlow从1到2(十四)评估器的使用和泰坦尼克号乘客分析

    三种开发模式 使用TensorFlow 2.0完成机器学习一般有三种方式: 使用底层逻辑 这种方式使用Python函数自定义学习模型,把数学公式转化为可执行的程序逻辑.接着在训练循环中,通过tf.Gr ...