Linux网络——配置防火墙的相关命令
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网络——配置防火墙的相关命令的更多相关文章
- Linux网络配置、文件及命令
Linux的网络配置是曾一直是我学习Linux的埋骨之地,投入了大量的精力和心神但是自己的虚拟机就是联不了网.原来一个大意,我一躺就是一年半.在这里简单的谈谈我对网络的微微认识. VMware的联网模 ...
- 【Linux】Vmware&Linux 网络配置
Vmware 网络设置 Linux 网络设置 注:本实验使用Linux 版本为 RedHat 6.3 Vmware 网络设置 1.Vmware 网络工作模式 bridged(桥接模式) -- 网络能提 ...
- linux网络配置相关文件
网络接口(interface)是网络硬件设备在操作系统中的表示方法,比如网卡在Linux操作系统中用ethX,是由0开始的正整数,比如eth0.eth1...... ethX.而普通猫和ADSL的接口 ...
- linux网络配置命令(一)——ifconfig
linux网络配置命令(一)——ifconfig ifconfig 查看.配置网卡信息.已过时,推荐使用ip命令 格式: ifconfig [interface] ...
- Linux网络配置和网络诊断命令介绍
方法/步骤 1 在接下来的讲解中,讲解的Linux网络配置和网络诊断的命令有: ifconfig.ping.netstat.traceroute.dig和nslookup.host.hostname. ...
- Linux网络——配置网络之iproute家族命令
Linux网络——配置网络之iproute家族命令 摘要:本文主要学习了iproute家族用来配置网络的命令. ip命令 ip命令用于查看和管理IP地址.接口.路由.隧道等.用来取代ifconfig命 ...
- Linux网络——配置网络之ifconfig家族命令
Linux网络——配置网络之ifconfig家族命令 摘要:本文主要学习了ifconfig家族用来配置网络的命令. ifconfig命令 ifconfig命令用来显示或设置网络接口信息,设置只是临时生 ...
- linux网络配置完全解析
概述:熟悉了windows下面的网络配置,对linux下的网络配置缺未必了解透彻.熟练掌握linux下的网络配置原理,能帮助我们更容易掌握网络传输原理:同时具备一些网络连接不通对应问题的排查能力.文本 ...
- linux入门基础——linux网络配置
linux网络配置 以太网连接 在linux中,以太网接口被命名为:eth0.eth1等.0.1代表网卡编号 通过lspci命令能够查看网卡硬件信息(假设是usb网卡,则须要使用lsusb命令) 命令 ...
随机推荐
- Java变量在内存中的存储
目录 Java变量在内存中的存储 成员变量 局部变量 总结 Java变量在内存中的存储 以下探究成员变量和局部变量在内存中的存储情况. package com.my.pac04; /** * @aut ...
- 查看Linux服务器CPU总核数
下面介绍查看Linux服务器CPU总核数的方法. 通过/proc/cpuinfo可查看CPU个数及总核数. [root@kevin ~]# grep processor /proc/cpuinfo | ...
- Linux下Mysql安装教程详解
Linux下软件安装一般有三种方式:RPM包方式(通过Redhat 第三方包管理系统).二进制包和源码包.本篇主要介绍二进制包安装mysql数据库的方式. 如何获取二进制源码包 当然是到mysql官网 ...
- maven将xml文件一起打包
pom文件配置 <build> <!-- 将mapper.xml一起打包 --> <resources> <resource> <director ...
- ThinkPHP6框架的下载与安装
thinkphp6发布也有一段时间了,相对来说比较稳定,是时候学习一下thinkphp6框架,提前学习,到正式发布的时候,可以直接拿来做正式的项目,先人一步.thinkPHP6.0在5.1的基础上对底 ...
- Android Gradle 学习笔记(四):Gradle 构建脚本
本节我们从整体的角度来介绍一下Gradle. 一.setting.gradle 在Gradle中,定义了一个设置文件,用于初始化以及工程树的配置.设置文件的默认的名字就是setting.gradle, ...
- MVC、MVP与MVVM架构模式
MVC(Model View Controller): View 层是界面,Model 层是业务逻辑,Controller 层用来调度 View 层和 Model 层, 将用户界面和业务逻辑合理的组织 ...
- hadoop节点动态删除与增加
动态删除 1)修改配置文件 修改hdfs-site.xml文件,适当减小dfs.replication的数量,增加dfs.hosts.exclude选项 vi hdfs-site.xml <pr ...
- Docker 运行一个Web应用
使用 docker 构建一个 web 应用程序. 我们将在docker容器中运行一个 Python Flask 应用来运行一个web应用 参数说明: -d:让容器在后台运行. -P:将容器内部使用的网 ...
- 手机号码生成器app有吗,怎么使用的呢?
手机号码生成器app是有的,他有手机号码生成器安卓版,也有手机号码生成器苹果版的.很多人会误解他的功能以为是拿来生成号码来接验证码的,其实他不是拿来接短信的.它是用来给别人做营销找客沪的找客源的,接不 ...