【Linux云计算架构:第二阶段-Linux必会的20多种服务】第8章——配置iptables防火墙增强服务器安全-案例实战讲解&&seLinux简单介绍&&firewall防火墙配置介绍

•实战:iptables使用方法
•例1:使用iptables防火墙保护公司web服务器
•例2:使用iptables搭建路由器,通过SNAT使用内网机器上网
•例3:限制某些IP地址访问服务器
•例4:使用DNAT功能把内网web服务器端口映射到路由器外网
•selinux概述-状态切换

iptables服务端:xuegod63.cn IP:192.168.1.63
iptables客户端:xuegod64.cn IP:192.168.1.64

实战举例1
配置vsftp服务器主动模式iptables规则:

iptables配置FTP的主动和被动模式
FTP协议有两种工作方式:PORT方式和PASV方式,中文意思为主动式和被动式。
Port模式:ftp server:tcp 21 <------client:dynamic ftp server:tcp 20 ------>client:dynamic
Pasv模式:ftp server:tcp 21 <----client:dynamic ftp server:tcp dynamic <----client:dynamic

PORT(主动)方式的连接过程是:客户端向服务器的FTP端口(默认是21)发送连接请求,服务器接受连接,建立一条命令链路。当需要传送数据时,客户 端在命令链路上用PORT命令告诉服务器:“我打开了XXXX端口,你过来连接我”。于是服务器从20端口向客户端的XXXX端口发送连接请求,建立一条 数据链路来传送数据。
PASV(被动)方式的连接过程是:客户端向服务器的FTP端口(默认是21)发送连接请求,服务器接受连接,建立一条命令链路。当需要传送数据时,服务 器在命令链路上用PASV命令告诉客户端:“我打开了XXXX端口,你过来连接我”。于是客户端向服务器的XXXX端口发送连接请求,建立一条数据链路来 传送数据。

1、开放20、21端口:

iptables -A INPUT -p tcp --dport 21 -j ACCEPT

iptables -A INPUT -p tcp --dport 20 -j ACCEPT

[[email protected] ~]# iptables -A INPUT -i lo -j ACCEPT #默认情况一般服务与本机通讯以127.0.0.1来通讯的。
[[email protected] ~]# iptables -A INPUT -p tcp -m multiport --dports 21,22,80 -j ACCEPT
[[email protected] ~]# iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
[[email protected] ~]# iptables -A INPUT -p icmp -j ACCEPT #允许其他机器 ping 本机

被动模式 connect_from_port_20=NO
Iptables 指南 1.1.19
https://www.frozentux.net/iptables-tutorial/cn/iptables-tutorial-cn-1.1.19.html#STATEMACHINEINTRODUCTION

如果不行:
3、上面还不行的话,再加载FTP额外模块:
modprobe ip_nat_ftp (我 做实验只加载这一块就ok了)
modprobe ip_conntrack
modprobe ip_conntrack_ftp
【Linux云计算架构:第二阶段-Linux必会的20多种服务】第8章——配置iptables防火墙增强服务器安全-案例实战讲解&&seLinux简单介绍&&firewall防火墙配置介绍

常用规则:
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT

实战举例2

例1:使用iptables防火墙保护公司web服务器。
分析:这允许单服务器的防护。
弄清对外服务对象
书写规则
网络接口 lo 的处理
协议 + 端口的处理
状态监测的处理

具体配置如下:
web服务器端:xuegod63
客户端: xuegod64
如果有硬件防火墙:拓扑图:
【Linux云计算架构:第二阶段-Linux必会的20多种服务】第8章——配置iptables防火墙增强服务器安全-案例实战讲解&&seLinux简单介绍&&firewall防火墙配置介绍
配置web服务器xuegod63防火墙:

配置之前,清空下已有的规则,防止规则冲突不生效
[[email protected] ~]# iptables -A INPUT -i lo -j ACCEPT #放行环回口所有数据
[[email protected] ~]# iptables -A INPUT -p tcp -m multiport --dports 22,80 -j ACCEPT
或:
[[email protected] ~]# iptables -A INPUT -p tcp --dport 22 -j ACCEPT
[[email protected] ~]# iptables -A INPUT -p tcp --dport 80 -j ACCEPT

[[email protected] ~]# iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
#允许已经建立tcp连接的包以及该连接相关的包通过。状态防火墙能识别TCP或者UDP会话。非状态防火墙只能根据端口识别,不能识别会话
[[email protected] ~]# iptables -P INPUT DROP
注:一般iptables,OUTPUT出口一般都放行,不需要在出口上做限制。这样允许服务器主动访问外网所有数据。

启动web服务器:
[[email protected] ~]# service httpd start
Starting httpd: [ OK ]

[[email protected] ~]# yum install vsftpd -y #安装ftp服务器并开起
[[email protected] ~]# service vsftpd start
Starting vsftpd for vsftpd: [ OK ]
xuegod64安装:
[[email protected] ~]# yum install elinks -y
测试web访问
[[email protected] ~]# elinks 192.168.1.63
在windows 测试访问http://192.168.1.63 可以访问; 测试FTP无法访问
测试vsftpd:拒绝访问
[[email protected] ~]# rpm -ivh /mnt/Packages/lftp-4.0.9-1.el6.x86_64.rpm
[[email protected] ~]# lftp 192.168.1.63
lftp 192.168.1.63:~> ls #可以看到连接并断开了
`ls’ at 0 [Connecting…]
查看配置结果:
[[email protected] ~]# iptables -L -n #对比 加参数-n和不加-n参数区别
Chain INPUT (policy DROP)
target prot opt source destination
ACCEPT all – 0.0.0.0/0 0.0.0.0/0
ACCEPT tcp – 0.0.0.0/0 0.0.0.0/0 multiport dports 22,80
ACCEPT tcp – 0.0.0.0/0 0.0.0.0/0 tcp dpt:22
ACCEPT tcp – 0.0.0.0/0 0.0.0.0/0 tcp dpt:80
ACCEPT all – 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED

Chain FORWARD (policy ACCEPT)
target prot opt source destination

Chain OUTPUT (policy ACCEPT)
target prot opt source destination
[[email protected] ~]# iptables -L
Chain INPUT (policy DROP)
target prot opt source destination
ACCEPT all – anywhere anywhere
ACCEPT tcp – anywhere anywhere multiport dports ssh,http
ACCEPT tcp – anywhere anywhere tcp dpt:ssh
ACCEPT tcp – anywhere anywhere tcp dpt:http
ACCEPT all – anywhere anywhere state RELATED,ESTABLISHED

例2:使用iptables搭建路由器,通过SNAT功能,使内网PC机,可以上网。

弄清网络拓扑
扩展,IP地址命名技巧: 方法一:以两个设备名称定义相邻的网段。适用于做多个网段的实验
【Linux云计算架构:第二阶段-Linux必会的20多种服务】第8章——配置iptables防火墙增强服务器安全-案例实战讲解&&seLinux简单介绍&&firewall防火墙配置介绍

方法二: 从左到右,依次命名。地址1给核心设备 如下:
实验环境:
xuegod63做路由器,xuegod64做客户端
【Linux云计算架构:第二阶段-Linux必会的20多种服务】第8章——配置iptables防火墙增强服务器安全-案例实战讲解&&seLinux简单介绍&&firewall防火墙配置介绍
需求: 使xuegod64可以通过xuegod63上网。
配置:xuegod63
添加两个网卡,配置eth0为桥接,eth1为vmnet4模式。
配置eth1的IP地址为:192.168.2.1 /24

启用内核路由转发功能:临时生效
[[email protected] ~]#echo “1” > /proc/sys/net/ipv4/ip_forward
永久生效:
[[email protected] ~]# vim /etc/sysctl.conf
改:#net.ipv4.ip_forward = 0
为: net.ipv4.ip_forward = 1
改完使配置生效:
[[email protected] ~]# sysctl -p

配置之前,把前面的规则去除了,否认会达不到一定的效果
iptables -P INPUT ACCEPT
iptables -F
配置SNAT:
[[email protected] ~]#iptables -t nat -A POSTROUTING -s 192.168.2.0/24 -j SNAT --to 192.168.1.63
或:
[[email protected] ~]#iptables -t nat -A POSTROUTING -s 192.168.2.0/24 -o eth0 -j MASQUERADE

配置客户端xuegod64:
修改xuegod64 eth0网卡模式为vmnet4
配置eth0 IP,网关,DNS:
[[email protected] ~]# cat /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0
NM_CONTROLLED=yes
IPADDR=192.168.2.2
NETMASK=255.255.255.0
GATEWAY=192.168.2.1 ##网关指向xuegod63的eth1地址
DNS1=223.5.5.5
ONBOOT=yes
TYPE=Ethernet
。。。
NAME=“eth0”
HWADDR=00:0C:29:12:EC:1E

[[email protected] ~]# service network restart

测试:
ping 192.168.1.1
ping baidu.com

例3使用DNAT 功能,把内网web服务器端口映射到路由器外网
实验环境:
RHEL64:IP:192.168.2.2 网卡属于:Vmnet4
RHEL63: eth1 : IP:192.168.2.1 网卡属于:Vmnet4
【Linux云计算架构:第二阶段-Linux必会的20多种服务】第8章——配置iptables防火墙增强服务器安全-案例实战讲解&&seLinux简单介绍&&firewall防火墙配置介绍

需求:把64的80端口映射到63的80端口,客户端访问192.168.1.63:80 即可访问192.168.2.2:80的内容

xuegod64,开启动httpd服务,首页内容为: 192.168.2.2
xuegod64:
[[email protected] ~]# yum install httpd -y
[[email protected] ~]# /etc/init.d/httpd start
[[email protected] ~]# echo 192.168.2.2 > /var/www/html/index.html

测试:
RHEL63 通过elinks 访问192.168.2.2正常
你物理机(IP:192.168.1.224)通过浏览器访问192.168.2.2不正常。因为192.168.1.224无法访问到内网服务器192.168.2.2。

做DNAT端口映射:
xuegod63:
[[email protected] ~]# iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j DNAT --to 192.168.2.2:80
或:
[[email protected] ~]# iptables -t nat -A PREROUTING -d 192.168.1.63 -p tcp --dport 80 -j DNAT --to 192.168.2.2:80
查看两者区别:
[[email protected] ~]# iptables -t nat -L -n
Chain PREROUTING (policy ACCEPT)
target prot opt source destination
DNAT tcp – 0.0.0.0/0 0.0.0.0/0 tcp dpt:80 to:192.168.2.2:80
DNAT tcp – 0.0.0.0/0 192.168.1.63 tcp dpt:80 to:192.168.2.2:80

测试:宿主机浏览器访问:192.168.0.63:80 即可访问到64的内容

如果是ADSL则为:
iptables -t nat -A PREROUTING -i ppp0 -p tcp --dport 81 -j DNAT --to 192.168.0.2:80

iptables命令使用总则总结:
所有链名必须大写
INPUT/OUTPUT/FORWARD/PREROUTING/POSTROUTING
所有表名必须小写
filter/nat/mangle
所有动作必须大写
ACCEPT/DROP/SNAT/DNAT/MASQUERADE
所有匹配必须小写
-s/-d/-m <module_name>/-p

关于SNAT和DNAT的区别:

http://www.cnblogs.com/iceocean/articles/1616305.html

selinux概述
SELinux( Security Enhanced Linux 安全性增强的Linux),由美国国家安全局NSA(National Security Agency)开发,构建与Kernel之上,拥有灵活的强制性访问控制结构,主要用在提高Linux的安全性,提供强健的安全保证,可以防御未知攻击,据称相当于B1级的军事安全性能(信息安全评估标准)!
信息安全评估标准:4类(D,C,B,A),7个级别:D,C1,C2,B1,B2,B3,A
Selinux已经整合到了2.6的Kernel以上的版本中 uname -r
传统的Linux在没有Selinux保护的时候,倘若运行于之上的服务器被骇客攻陷,其服务器最高权限就可能随之丧失,但是倘若有了SElinux的保护,入侵的也只有服务本身,整个服务器的最高权限依然还健在!
一句话熟悉Selinux的作用:增强Linux系统安全性,一个例子:那么是我运行的Apache服务器被入侵,也只是入侵到了我httpd这个服务,可以把它禁锢到这里(相当于整个服务器运行了httpd,入侵了httpd而已),而系统的整个权限依然正常!

Selinux特点
1:MAC(Mandator Access Control) 对访问控制彻底化,对所有的文件,目录,端口的访问,都是基于策略设定的,这些策略都是由管理员设定的,一般用户无权限管理和更改
2:RBAC(Role Base Access Control) 对用户只赋予最小权限,对于用户来说,被划分一些role,即使是root用户,你要是不在sysadm_r里,也不能实行sysadm_t的管理操作
3:TE(Type Enforcement) 对进程只赋予最小运行权限,TE的概念在SElinux中非常重要,其特点是对文件赋予一个叫type的标签类型,对进程赋予一个叫domain的标签,可以规定某个标签进程只能执行某类文件,例如:
进程vim,只可以读标签为T1的文件
a.txt T1 b.txt T2

selinux 的执行模式
enforcing 强制模式,只要selinux不允许,就无法执行;
permissive 警告模式,你可以执行,但你所做事件全部记录;
disabled 关闭selinux
Selinux工作原理
【Linux云计算架构:第二阶段-Linux必会的20多种服务】第8章——配置iptables防火墙增强服务器安全-案例实战讲解&&seLinux简单介绍&&firewall防火墙配置介绍
Subject进程你要干嘛,你得问selinux, 那selinux去读一下数据库,按规则你不能执行或能执行。

[[email protected] ~]# rpm -qa | grep selinux #selinux相关软件包,默认已经安装
libselinux-utils-2.0.94-5.3.el6_4.1.x86_64
libselinux-devel-2.0.94-5.3.el6_4.1.x86_64
selinux-policy-3.7.19-231.el6.noarch
libselinux-python-2.0.94-5.3.el6_4.1.x86_64
selinux-policy-targeted-3.7.19-231.el6.noarch
libselinux-2.0.94-5.3.el6_4.1.x86_64

[[email protected] ~]# ls /etc/sysconfig/selinux //配置文件位置
[[email protected] ~]# getenforce //查看当前selinux的运行状态
[[email protected] ~]# vim /etc/sysconfig/selinux //编辑selinux配置文件,启用selinux
SELINUX=enforcing #启用selinux,启用了Selinux需要重启系统,初次开启,需要更新文件标签,时间较久

Selinux状态切换
[[email protected] ~]# setenforce 0 #enforcing切换为permissive状态
[[email protected] ~]# getenforce
Permissive
[[email protected] ~]# setenforce 1 #permissive切换为 enforcing
[[email protected] ~]# getenforce
Enforcing

内核参数控制Selinux
关闭Selinux可以通过内核传递参数来控制
[[email protected] ~]# vim /boot/grub/grub.conf
……
kernel /vmlinuz-2.6.32-431.el6.x86_64 ro root=UUID=31f87693-32fa-4811-b5d4-7a5d35586f44 rd_NO_LUKS rd_NO_LVM LANG=en_US.UTF-8 rd_NO_MD SYSFONT=latarcyrheb-sun16 crashkernel=128M KEYBOARDTYPE=pc KEYTABLE=us rd_NO_DM rhgb quiet selinux=0 #末尾添加selinux=0关闭selinux
……
或者在开机时编辑grub界面,给内核传递一个参数selinux=0 方法和进入单用户方式一样,不过是一次有效
【Linux云计算架构:第二阶段-Linux必会的20多种服务】第8章——配置iptables防火墙增强服务器安全-案例实战讲解&&seLinux简单介绍&&firewall防火墙配置介绍
上图,按E键,进入单用户模式
【Linux云计算架构:第二阶段-Linux必会的20多种服务】第8章——配置iptables防火墙增强服务器安全-案例实战讲解&&seLinux简单介绍&&firewall防火墙配置介绍
上图按E键,添加内核参数selinux=0
【Linux云计算架构:第二阶段-Linux必会的20多种服务】第8章——配置iptables防火墙增强服务器安全-案例实战讲解&&seLinux简单介绍&&firewall防火墙配置介绍
回车,按B键启动操作系统
[[email protected] ~]# getenforce
Disabled
[[email protected] ~]# vim /etc/sysconfig/selinux
……
SELINUX=enforcing #配置文件还是启用的,所以内核控制生效,如果在grub.conf配置文件,永久生效,启动单用户模式配置,当次有效,重启selinux将启用
……
[[email protected] ~]# reboot //重启会更新标签,是个”漫长”的过程

【Linux云计算架构:第二阶段-Linux必会的20多种服务】第8章——配置iptables防火墙增强服务器安全-案例实战讲解&&seLinux简单介绍&&firewall防火墙配置介绍

centos7 之 firewalld 详细介绍配置
FirewallD是什么?
FirewallD 提供了支持网络/防火墙区域(zone)定义网络链接以及接口安全等级的动态防火墙管理工具。
什么是动态防火墙?
我们首先需要弄明白的第一个问题是到底什么是动态防火墙。为了解答这个问题,我们先来回忆一下 iptables service 管理防火墙规则的模式:用户使用命令添加防火墙的规则,如果想让规则永久保存,还需要再执行命令 service iptables reload 使变更的规则保存到配置文件里。在这整个过程的背后,iptables service 会对防火墙的规则列表全部重读一次,加载到内核.
如果我们把这种哪怕只修改一条规则也要进行所有规则的重新载入的模式称为静态防火墙的话,那么 firewalld 所提供的模式就可以叫做动态防火墙,它的出现就是为了解决这一问题,任何规则的变更都不需要对整个防火墙规则列表进行重新加载,只需要将变更部分保存并更新到运行中的 iptables 即可。

firewalld 和 iptables 之间有什么关系?

这里有必要说明一下 firewalld 和 iptables 之间的关系, firewalld 提供了一个 daemon 和 service,还有命令行和图形界面配置工具,它仅仅是替代了 iptables service 部分,其底层还是使用 iptables 作为防火墙规则管理入口。firewalld自身并不具备防火墙的功能,而是和iptables一样需要通过内核的netfilter来实现,也就是说firewalld和iptables一样,他们的作用都是用于维护规则,而真正使用规则干活的是内核的netfilter,只不过firewalld和iptables的结构以及使用方法不一样罢了。

什么是区域(zone)?
过滤规则集合:zone
一个zone就是一套过滤规则,数据包必须要经过某个zone才能入站或出站。不同zone中规则粒度粗细、安全强度都不尽相同。可以把zone看作是一个个出站或入站必须经过的安检门,有的严格、有的宽松、有的检查的细致、有的检查的粗略。
firewalld将网卡对应到不同的区域(zone),zone 默认共有9个,block ,dmz ,drop external, home, internal ,public , trusted , work.
不同的区域之间的差异是其对待数据包的默认行为不同,根据区域名字我们可以很直观的知道该区域的特征,在CentOS7系统中,默认区域被设置为public.
区域(zone)说明如下:
drop(丢弃)
任何接收的网络数据包都被丢弃,没有任何回复。仅能有发送出去的网络连接。
block(限制)
任何接收的网络连接都被 IPv4 的 icmp-host-prohibited 信息和 IPv6 的 icmp6-adm-prohibited 信息所拒绝。
public(公共)
在公共区域内使用,不能相信网络内的其他计算机不会对您的计算机造成危害,只能接收经过选取的连接。
external(外部)
特别是为路由器启用了伪装功能的外部网。您不能信任来自网络的其他计算,不能相信它们不会对您的计算机造成危害,只能接收经过选择的连接。
dmz(非军事区)
用于您的非军事区内的电脑,此区域内可公开访问,可以有限地进入您的内部网络,仅仅接收经过选择的连接。
work(工作)
用于工作区。您可以基本相信网络内的其他电脑不会危害您的电脑。仅仅接收经过选择的连接。
home(家庭)
用于家庭网络。您可以基本信任网络内的其他计算机不会危害您的计算机。仅仅接收经过选择的连接。
internal(内部)
用于内部网络。您可以基本上信任网络内的其他计算机不会威胁您的计算机。仅仅接受经过选择的连接。
trusted(信任)
可接受所有的网络连接。
指定其中一个区域为默认区域是可行的。当接口连接加入了 NetworkManager,它们就被分配为默认区域。安装时,firewalld 里的默认区域被设定为公共区域。

简单来讲就是为用户预先准备了几套规则集合,我们可以根据场景的不同选择合适的规矩集合,而默认区域是public。

什么是服务?
在 /usr/lib/firewalld/services/ 目录中,还保存了另外一类配置文件,每个文件对应一项具体的网络服务,如 ssh 服务等.
与之对应的配置文件中记录了各项服务所使用的 tcp/udp 端口,在最新版本的 firewalld 中默认已经定义了 70多 种服务供我们使用.
当默认提供的服务不够用或者需要自定义某项服务的端口时,我们需要将 service 配置文件放置在 /etc/firewalld/services/ 目录中.

/etc/firewalld/ 存放修改过的配置(优先查找,找不到再找默认的配置)
/usr/lib/firewalld/ 默认的配置
修改配置的话只需要将/usr/lib/firewalld中的配置文件复制到/etc/firewalld中修改。恢复配置的话直接删除/etc/firewalld中的配置文件即可。
比如:ssh服务默认运行在22端口,如果你的ssh服务运行在220端口(不是默认),此时需要放行220端口,就需要把/usr/lib/firewalld/ssh.xml 文件拷贝到 /etc/firewalld/services/ 目录下,修改文件端口为220

service 配置的好处显而易见:
第一,通过服务名字来管理规则更加人性化,
第二,通过服务来组织端口分组的模式更加高效,如果一个服务使用了若干个网络端口,则服务的配置文件就相当于提供了到这些端口的规则管理的批量操作快捷方式。

每加载一项 service 配置就意味着开放了对应的端口访问,使用下面的命令分别列出所有支持的 service 和查看当前 zone 种加载的 service:
[[email protected] ~]# firewall-cmd --get-services #列出所有支持的 service
RH-Satellite-6 amanda-client bacula bacula-client dhcp dhcpv6 dhcpv6-client dns ftp high-availability http https imaps ipp ipp-client ipsec kerberos kpasswd ldap ldaps libvirt libvirt-tls mdns mountd ms-wbt mysql nfs ntp openv*n pmcd pmproxy pmwebapi pmwebapis pop3s postgresql proxy-dhcp radius rpc-bind samba samba-client smtp ssh telnet tftp tftp-client transmission-client vnc-server wbem-https
[[email protected] ~]# firewall-cmd --list-services #查看当前 zone 种加载的 service
dhcpv6-client ssh

#####firewalld常用命令#####

yum install firewalld

启动:# systemctl start firewalld
查看状态:# systemctl status firewalld 或者 firewall-cmd --state
停止:# systemctl disable firewalld
禁用:# systemctl stop firewalld

配置firewalld
查看版本:$ firewall-cmd --version
查看帮助:$ firewall-cmd --help
显示状态:$ firewall-cmd --state
查看区域信息: $ firewall-cmd --get-active-zones
查看指定接口所属区域:$ firewall-cmd --get-zone-of-interface=eth0
拒绝所有包:# firewall-cmd --panic-on
取消拒绝状态:# firewall-cmd --panic-off
查看是否拒绝:$ firewall-cmd --query-panic

更新防火墙规则:

firewall-cmd --reload

firewall-cmd --complete-reload

两者的区别就是第一个无需断开连接,就是firewalld特性之一动态添加规则,第二个需要断开连接,类似重启服务

使用下面的命令分别列出所有支持的 zone 和查看当前的默认 zone:
[[email protected] ~]# firewall-cmd --get-zones
block dmz drop external home internal public trusted work
[[email protected] ~]# firewall-cmd --get-default-zone
public
设置默认接口区域

firewall-cmd --set-default-zone=public

立即生效无需重启

将接口添加到区域,默认接口都在public

firewall-cmd --zone=public --add-interface=eth0

永久生效再加上 --permanent 然后reload防火墙

打开端口(貌似这个才最常用)
查看所有打开的端口:

firewall-cmd --zone=dmz --list-ports

加入一个端口到区域:

firewall-cmd --zone=dmz --add-port=8080/tcp

若要永久生效方法同上

打开一个服务,类似于将端口可视化,服务需要在配置文件中添加,/etc/firewalld 目录下有services文件夹

firewall-cmd --zone=work --add-service=smtp

移除服务

firewall-cmd --zone=work --remove-service=smtp

输出区域 全部启用的特性。如果省略区域,将显示默认区域的信息。

firewall-cmd [–zone=] –list-all
[[email protected] zones]# firewall-cmd --list-all
public (default, active)
interfaces: eno16777736
sources:
services: dhcpv6-client ssh
ports:
masquerade: no
forward-ports:
icmp-blocks:
rich rules:
[[email protected] zones]# firewall-cmd --zone=work --list-all
work
interfaces:
sources:
services: dhcpv6-client ipp-client ssh
ports:
masquerade: no
forward-ports:
icmp-blocks:
rich rules:

获取活动的区域

[[email protected] zones]# firewall-cmd --get-active-zones
work
interfaces: eno16777736

根据接口获取区域

firewall-cmd –get-zone-of-interface=
[[email protected] zones]# firewall-cmd --get-zone-of-interface=eno16777736
public

以下关于区域和接口的操作,就不一一举例了,可以根据实际情况修改.

将接口增加到区域

firewall-cmd [–zone=] --add-interface=

如果接口不属于区域,接口将被增加到区域。如果区域被省略了,将使用默认区域。接口在重新加载后将重新应用。

修改接口所属区域

firewall-cmd [–zone=] --change-interface=

这个选项与 –add-interface 选项相似,但是当接口已经存在于另一个区域的时候,该接口将被添加到新的区域。

从区域中删除一个接口

firewall-cmd [–zone=] --remove-interface=

查询区域中是否包含某接口

firewall-cmd [–zone=] --query-interface=

注意:返回接口是否存在于该区域。没有输出。

列举区域中启用的服务

firewall-cmd [ --zone= ] --list-services

这两条简单点说,就是断网和连网.

firewall-cmd --panic-on

启用应急模式阻断所有网络连接,以防出现紧急状况

firewall-cmd --panic-off

查询应急模式

firewall-cmd --query-panic

#####通过配置文件来使用Firewalld的方法#####
系统本身已经内置了一些常用服务的防火墙规则,存放在/usr/lib/firewalld/services/
注意!
请勿编辑/usr/lib/firewalld/services/ ,只有 /etc/firewalld/services 的文件可以被编辑。
[[email protected] ~]# ls /usr/lib/firewalld/services/
amanda-client.xml dhcpv6.xml high-availability.xml ipp-client.xml kpasswd.xml libvirt.xml mysql.xml pmcd.xml pop3s.xml RH-Satellite-6.xml smtp.xml tftp.xml
bacula-client.xml dhcp.xml https.xml ipp.xml ldaps.xml mdns.xml nfs.xml pmproxy.xml postgresql.xml rpc-bind.xml ssh.xml transmission-client.xml
bacula.xml dns.xml http.xml ipsec.xml ldap.xml mountd.xml ntp.xml pmwebapis.xml proxy-dhcp.xml samba-client.xml telnet.xml vnc-server.xml
dhcpv6-client.xml ftp.xml imaps.xml kerberos.xml libvirt-tls.xml ms-wbt.xml openv*n.xml pmwebapi.xml radius.xml samba.xml tftp-client.xml wbem-https.xml
动态添加一条防火墙规则如下:
以下例子均以系统自带的public zone 为例子.

假设自定义的 ssh 端口号为 12222,使用下面的命令来添加新端口的防火墙规则:

如果需要使规则保存到 zone 配置文件,则需要加参数 –permanent
举例如下:
[[email protected] zones]# firewall-cmd --add-port=12222/tcp
success
[[email protected] zones]# cat /etc/firewalld/zones/public.xml

<?xml version="1.0" encoding="utf-8"?> Public 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. 发现没有写到配置文件里

[[email protected] zones]# firewall-cmd --add-port=12222/tcp --permanent
success
[[email protected] zones]# cat /etc/firewalld/zones/public.xml

<?xml version="1.0" encoding="utf-8"?> Public 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. 已经写到配置文件里

注意:防火墙配置文件也可以手动修改,修改后记得重载

  1. 如果想开放80端口供外网访问http服务,例子如下
    1.1 将 http.xml复制到/etc/firewalld/services/下面,以服务形式管理防火墙,

这个cp命令其实是可以省略的,系统会优先去读取 /etc/firewalld 里面的文件,读取完毕后,会去/usr/lib/firewalld/services/ 再次读取.为了方便修改和管理,建议复制到/etc/firewalld

[[email protected] ~]# cp /usr/lib/firewalld/services/http.xml /etc/firewalld/services/
[[email protected] ~]# ls /etc/firewalld/services/
http.xml
[[email protected] ~]# ls /etc/firewalld/zones/
public.xml public.xml.old
1.2 修改public.xml,加入http服务
cat /etc/firewalld/zones/public.xml

<?xml version="1.0" encoding="utf-8"?> Public 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. # 这行是后加的,要匹配 /etc/firewalld/services/文件夹下的文件名 1.3 重新载入 两条命令都可以的 以 root 身份输入以下命令,重新加载防火墙,并不中断用户连接,即不丢失状态信息: [[email protected] ~]# firewall-cmd --reload success 2. 修改防火墙ssh的端口方法 2.1 复制ssh.xml文件到/etc/firewalld/services/ [[email protected] ~]# cp /usr/lib/firewalld/services/ssh.xml /etc/firewalld/services/ 2.2 修改ssh.xml文件 12222为ssh端口 [[email protected] ~]# cat /etc/firewalld/services/ssh.xml <?xml version="1.0" encoding="utf-8"?> SSH 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. 2.3 重新载入 两条命令都可以的 以 root 身份输入以下命令,重新加载防火墙,并不中断用户连接,即不丢失状态信息: [[email protected] ~]# firewall-cmd --reload success 3. 指定ip访问ssh端口 3.1 修改/etc/firewalld/zones/ # rule字段内为要限制的ip和使用的服务 [[email protected] ~]# cat /etc/firewalld/zones/public.xml <?xml version="1.0" encoding="utf-8"?> Public 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. [[email protected] ~]# firewall-cmd --reload success 4. 添加自定义服务 举例,添加8080端口为新的Service 4.1 添加新文件 8080.xml cat /etc/firewalld/services/8080.xml <?xml version="1.0" encoding="utf-8"?> 8080 Test 此处为文字说明 4.2 编辑public.xml 文件,加入相应的Server cat /etc/firewalld/zones/public.xml <?xml version="1.0" encoding="utf-8"?> Public 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. # 这行是后加的,要匹配 /etc/firewalld/services/8080.xml 文件名 重新载入 [[email protected] ~]# firewall-cmd --reload success

SNAT
firewall-cmd --permanent --direct --passthrough ipv4 -t nat -A POSTROUTING -s 192.168.10.0/24 -j SNAT --to-source 你的公网ip

DNAT
firewall-cmd --permanent --direct --passthrough ipv4 -t nat -A PREROUTING -d 173.16.16.1 -p tcp–dport 2346 -j DNAT --to-destination 192.168.10.2:22
https://www.biaodianfu.com/firewalld.html