linux——Firewalld与iptables的基本配置

Firewalld

Firewalld概述

  • 动态防火墙后台程序 firewalld 提供了一个动态管理的防火墙,用以支持网络 “ zones” ,以分配对一个网络及其相关链接和界面一定程度的信任。它具备对 IP v4 和 IP v6 防火墙设置的支持。它支持以太网桥,并有分离运行时间和永久性配置选择。它还具备一个通向服务或者应用程序以直接增加防火墙规则的接口
  • 系统提供了图像化的配置工具firewall-config、system-config-firewall,提供命令行客户端firewall-cmd,用于配置firewalld永久性或非永久性运行时间的改变:它依次用 iptables工具与执行数据包筛选的内核中的 Netfilter通信

  • firewalld和iptables service 之间最本质的不同是:
    1、iptables service 在 /etc/sysconfig/iptables 中储存配置,而 firewalld将配置储存在/usr/lib/firewalld/ 和 /etc/firewalld/ 中的各种XML文件里
    2、使用 iptables service每一个单独更改意味着清除所有旧有的规则和从/etc/sysconfig/iptables里读取所有新的规则,然而使用 firewalld却不会再创建任何新的规则;仅仅运行规则中的不同之处。因此,firewalld可以在运行时间内,改变设置而不丢失现行连接
    这里写图片描述
    基于用户对网络中设备和交通所给与的信任程度,防火墙可以用来将网络分割成不同的区域NetworkManager通知firewalld一个接口归属某个区域,新加入的接口被分配到默认区域。

网络区名称默认配置
trusted(信任)可接受所有的网络连接
home(家庭)用于家庭网络,仅接受ssh、mdns、ipp-client、samba-client、或dhcpv6-client服务连接
internal(内部)用于内部网络,仅接受ssh、mdns、ipp-client、samba-client、dhcpv6-client服务连接
work(工作) 用于工作区,仅接受ssh、ipp-client或dhcpv6-client服务连接
public(公共)在公共区域内使用,仅接受ssh或dhcpv6-client服务连接,为firewalld的默认区域
external(外部)出去的ipv4网络连接通过此区域伪装和转发,仅接受ssh服务连接
dmz(非军事区)仅接受ssh服务接连
block(限制)拒绝所有网络连接
drop(丢弃) 任何接收的网络数据包都被丢弃,没有任何回复

管理防火墙

1、安装防火墙软件
  • yum install firewalld firewalld-config -y
  • [root@client Desktop]# firewalld-config & firewalld的图形化管理
    这里写图片描述
2、启动和禁止防火墙
  • systemctl start firewalld
  • systemctl enable firewalld
  • systemctl stop firewalld
  • systemctl disable firewalld
3、使用命令行接口配置防火墙
  • 查看firewalld的状态
[root@client Desktop]# firewall-cmd --state 
running
  • 查看当前活动的区域,并附带一个目前分配给它们的接口列表
[root@client Desktop]# firewall-cmd --get-active-zones 
ROL
  sources: 172.25.0.252/32
public           ##网络区为公共
  interfaces: eth0
  • 查看默认网络区域
[root@client Desktop]# firewall-cmd --get-default-zone 
public
  • 查看所有可用区域
[root@client Desktop]# firewall-cmd --get-zones
ROL block dmz drop external home internal public trusted work
  • 列出指定域(public)的所有设置
[root@client Desktop]# firewall-cmd --zone=public --list-all 
public (default, active)
  interfaces: eth0
  sources: 
  services: dhcpv6-client ssh
  ports: 
  masquerade: no
  forward-ports: 
  icmp-blocks: 
  rich rules:
  • 列出指定域(block)的所有设置
[root@client Desktop]# firewall-cmd --zone=block --list-all 
block
  interfaces: 
  sources: 
  services: 
  ports: 
  masquerade: no
  forward-ports: 
  icmp-blocks: 
  rich rules:
  • 列出所有预设服务
[root@client Desktop]# firewall-cmd --get-services 
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 openvpn 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
  • 列出所有区域的设置
  • [root@client Desktop]# firewall-cmd --list-all-zones

  • 设置默认区域
[root@client Desktop]# firewall-cmd --set-default-zone=trusted 
success
[root@client Desktop]# firewall-cmd --get-default-zone 
trusted
[root@client Desktop]# firewall-cmd --get-active-zones 
ROL
  sources: 172.25.0.252/32
trusted      ##网络区为信任
  interfaces: eth0
  • 设置网络地址到指定的区域
  • firewall-cmd -permanent --add-source=172.25.254.27 --zone=trusted
  • firewall-cmd -permanent --add-source=172.25.254.27/24 --zone=trusted
    –permanent参数表示永久生效设置
    如果没有指定–zone参数,那么会加入默认区域
    172.25.254.27(IP指定)、172.25.254.27/24(网络位相同即可)
  • 删除指定区域中的网络地址
  • firewall-cmd -permanent --remove-source=172.25.254.27 --zone=trusted
  • 添加、改变、删除网络接口

查看指定级别的接口

[root@client Desktop]# firewall-cmd --list-interfaces 
eth0

查看指定接口的 Zone 信息

[root@client Desktop]# firewall-cmd --get-zone-of-interface=eth0
trusted

添加网络接口

[root@client Desktop]# firewall-cmd --add-interface=eth1 --zone=public 
success
[root@client Desktop]# firewall-cmd --get-zone-of-interface=eth1
public

改变某接口至某信任等级,譬如改变 eth0 至 public

[root@client Desktop]# firewall-cmd --change-interface=eth0 --zone=public 
success
[root@client Desktop]# firewall-cmd --get-zone-of-interface=eth0
public
[root@client Desktop]# firewall-cmd --get-zone-of-interface=eth1
public

删除指定接口eth1

[root@client Desktop]# firewall-cmd --remove-interface=eth1 --zone=trusted 
success
[root@client Desktop]# firewall-cmd --get-zone-of-interface=eth1
no zone
  • 添加、删除服务

添加

[root@client ~]# firewall-cmd --zone=public -add-service=http 
success
[root@client ~]# firewall-cmd --list-all
public (default, active)
  interfaces: eth0 eth1
  sources: 
  services: dhcpv6-client http ssh
  ports: 
  masquerade: no
  forward-ports: 
  icmp-blocks: 
  rich rules: 

删除

[root@client ~]# firewall-cmd --remove-service=http
success
[root@client ~]# firewall-cmd --reload   ##不完全刷新
success
[root@client ~]# firewall-cmd --list-all
[root@client ~]# firewall-cmd --list-all
public (default, active)
  interfaces: eth0 eth1
  sources: 
  services: dhcpv6-client ssh
  ports: 
  masquerade: no
  forward-ports: 
  icmp-blocks: 
  rich rules:
  • 列出、添加、删除端口
  • firewall-cmd --zone=public -list-ports
  • firewall-cmd --add-port=8080/tcp --zone=public
  • firewall-cmd --remove-port=8080/tcp --zone=public

  • 重新加载防火墙

    注意:这并不会中断已经建立的连接,如果打算中断,可以使用 –complete-reload选项)firewalld的规则被保存在/etc/firewalld目录下的文件中,你也可以直接编辑这些文件达到配置防火墙的目的。/usr/lib/firewalld目录下的内容是不可以被编辑的,但可以用做默认模板

4、Direct Rules
通过 firewall-wall-cmd 工具,可以使用 --direct 选项在运行时间里增加或者移除链。
如果不熟悉 iptables ,使用直接接口非常危险,因为可能会无意间导致防火墙被入侵。
直接端口模式适用于服务或者程序,以便在运行时间内增加特定的防火墙规则。
直接端口模式添加的规则优先应用
firewall-cmd –-direct –get-all-rules   ##列出规则
firewall-cmd –-direct –add-rule ipv4 filter INPUT 1 -p tcp –dport 80 -s 172.25.254.50 -j ACCEPT   ##添加规则
firewall-cmd –-direct –remove-rule ipv4 filter INPUT 1 -p tcp –dport 80 -s 172.25.254.50 -j ACCEPT   ##删除规则

例如:不让50主机访问80端口的请求响应:
这里写图片描述
这里写图片描述

5、端口转发与地址伪装

在防火墙服务器上将伪装打开:
这里写图片描述
当50从端口登陆主机时,将50伪装
这里写图片描述
当访问本机22端口时,将其转到227这个主机上
这里写图片描述
刷新
这里写图片描述

IP为172.25.254.50的主机连接主机172.25.254.127时,将其转到主机172.25.254.227
测试
用50主机ssh连接136主机:
这里写图片描述
登陆的是227主机:
这里写图片描述
查看登陆者,登陆者是127。50主机被伪装起来了
这里写图片描述

Iptables

首先得保持一个纯净的环境,将firewalld关闭。安装iptables,并启动
  • yum install iptables-services -y 安装iptables
[root@client Desktop]# iptables -nL   ##查看策略
略,此时显示出的是 firewalld 的策略
[root@client Desktop]# systemctl stop firewalld.service 
[root@client Desktop]# systemctl disable firewalld.service 
[root@client Desktop]# systemctl start iptables.service 
[root@client Desktop]# systemctl enable iptables.service 
[root@client Desktop]# iptables -F    ##刷新策略
[root@client Desktop]# iptables -nL
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         
[root@client Desktop]#

(1)理论基础:当主机收到一个数据包后,数据包先在内核空间中处理,若发现目的地址是自身,则传到用户空间中交给对应的应用程序处理,若发现目的不是自身,则会将包丢弃或进行转发。
(2)iptables实现防火墙功能的原理是:在数据包经过内核的过程中有五处关键地方,分别是PREROUTING、INPUT、OUTPUT、FORWARD、POSTROUTING,称为钩子函数,iptables这款用户空间的软件可以在这5处地方写规则,对经过的数据包进行处理,规则一般的定义为“如果数据包头符合这样的条件,就这样处理数据包”。
iptables中定义有表,分别表示提供的功能,有filter表(实现包过滤)、nat表(实现网络地址转换)、mangle表(实现包修改)、raw表(实现数据跟踪),这些表具有一定的优先级:raw–>mangle–>nat–>filter
下面是数据包流向图:

这里写图片描述
数据包先经过PREOUTING,由该链确定数据包的走向:

  • 目的地址是本地,则发送到INPUT,让INPUT决定是否接收下来送到用户空间,流程为①—>②

  • 若满足PREROUTING的nat表上的转发规则,则发送给FORWARD,然后再经过POSTROUTING发送出去,流程为: ①—>③—>④—>⑥

  • 主机发送数据包时,流程则是⑤—>⑥

(3)iptables的规则书写:
基本语法:iptables [-t 表] [操作命令] [链][规则匹配器][-j 目标动作]

iptables
[-t filter]
[-AI INPUT,OUTPUT,FORWARD]
[-io interface]
[-p tcp,udp.icmp,all]
[-s ip/nerwork]
[--sport ports]
[-d ip/network]
[--dport ports]
[-j ACCEPT DROP REJECT REDIRECT MASQUERADE LOG
DNAT SNAT MIRROR QUEUE RETURN MARK]

常用操作命令:
-A 在指定链尾部添加规则
-D 删除匹配的规则
-R 替换匹配的规则
-I 在指定位置插入规则


其他操作命令:
-L/S 列出指定链或所有链的规则
-F 删除指定链或所有链的规则
-N 创建用户自定义链
-X 删除指定的用户自定义链
-P 为指定链设置默认规则策略,对自定义链不起作用
-Z 将指定链或所有链的计数器清零
-E 更改自定义链的名称
-n ip地址和端口号以数字方式显示


常见规则匹配器说明:
-p tcp|udp|icmp|all 匹配协议,all会匹配所有协议
-s addr[/mask] 匹配源地址
-d addr[/mask] 匹配目标地址
–sport port1[:port2] 匹配源端口(可指定连续的端口)
–dport port1[:port2] 匹配目的端口(可指定连续的端口)
-o interface
匹配出口网卡,只适用FORWARD、POSTROUTING、OUTPUT。
匹配入口网卡,只使用PREROUTING、INPUT、FORWARD。


目标动作说明:
ACCEPT 允许数据包通过
DROP 丢弃数据包
REJECT 丢弃数据包,并且将拒绝信息发送给发送方

实验

  • 显示filter表所有链的规则,默认为filter表
    这里写图片描述
    如上,可以看到filter三条链
  • 查看nat表的
    这里写图片描述
  • 注意一点:火墙设置的策略好坏会影响到传输速率的快慢,因为火墙规则读取是有先后顺序的。
  • NAT (Net Address Trancelate:网络地址转换)
  • SNAT(源地址转换)是指在数据包从网卡发送出去的时候,把数据包中的源地址部分替换为指定的IP,这样,接收方就认为数据包的来源是被替换的那个IP的主机
  • DNAT(目标地址转换),就是指数据包从网卡发送出去的时候,修改数据包中的目的IP,表现为如果你想访问A,可是因为网关做了DNAT,把所有访问A的数据包的目的IP全部修改为B,那么,你实际上访问的是B

下面我们来模拟以下两个转换:

SNAT

实验准备:
双网卡主机:
这里写图片描述
单网卡主机:
IP:
这里写图片描述
网关:

这里写图片描述
注意:这里双网卡主机类似于路由器的功能。所以单网卡主机的网关必须是和本机ip处于同一网段而且是和双网卡主机上的一块网卡IP相同。

接下来在单网卡主机上ping网关,检查实验环境(结果如下图,说明双网卡主机网卡良好。):
这里写图片描述
在进行SNAT之前,单网卡主机是不能连接不同网段的172.25.254.50这台主机的 。
我们要用单网卡主机来连不同网段的主机,必须要做SNAT。在双网卡主机上做防火墙规则书写:
iptables -t nat -A POSTROUTING -o eth0 -j SNAT --to-source 172.25.254.127
查看火墙规则:
这里写图片描述
这时查看 net 表的ip转发功能,0代表未开启,则需要将其开启;1代表已开启:
这里写图片描述
注:开启方法

[root@client Desktop]# sysctl -a | grep ip_forward
net.ipv4.ip_forward = 0
[root@client Desktop]# vim /etc/sysctl.conf 
net.ipv4.ip_forward = 1   ##添加
[root@client Desktop]# sysctl -p
net.ipv4.ip_forward = 1
[root@client Desktop]# sysctl -a | grep ip_forward
net.ipv4.ip_forward = 1

此时在单网卡主机ping不同网段的主机,发现可以:
这里写图片描述
SNAT:局域网共享一个公网IP接入lnternel
好处如下:

  • 保护内网用户安全,因为公网地址总有一些人恶意扫描,而内网地址在公网没有路由所以无法被扫描,能被扫描的只有防火墙这一台,这样就减少了被攻击的可能。

  • Ipv4地址匮乏,很多公司只有一个ipv4地址,但是却有几百个用户需要上网,这个时候就需要使用SNAT。

  • 省钱,公网地址付费,使用SNAT只需要一个公网ip就可以满足几百人同时上网。

DNAT

在双网卡主机上书写规则:
iptables -t nat -A PREROUTING -i eth0 -j DNAT --to-dest 172.25.20.227
这里写图片描述
从eth0接口进来的数据包我们将其目标地址转为172.25.20.227这台主机上

在172.25.254.50主机上测试——用ssh连接172.25.254.127:
这里写图片描述
但是却是登陆的172.25.20.227这台主机:
这里写图片描述
实现了目的地转换。

DNAT的用途(DNAT:向internel发布内网服务器 )
在内网中有服务器,如果想让公网用户访问有有两种方法:

  • 配置双网卡,一网卡对内,一网卡对外;一般是高访问量的web服务器,为了避免占用网关的流量才这样做,使用不是很广泛。

  • 内网web服务器,或是ftp服务器,为了用户在公网也可以访问,有不想买公网ip地址,采用DNAT方案。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值