防火墙(firewalld与iptables)

防火墙是整个数据包进入主机前的第一道关卡。防火墙主要通过Netfilter与TCPwrappers两个机制来管理的。
1)Netfilter:数据包过滤机制
2)TCP Wrappers:程序管理机制
关于数据包过滤机制有两个软件:firewalld与iptables
关于两者的不同介绍如下:
1
防火墙(firewalld与iptables)_第1张图片
2 iptables通过控制端口来控制服务,而firewalld则是通过控制协议来控制端口
我们这里先对firewalld做实验。Iptables和firewalld只能开一个。
在学习之前先对iptables firewalld 内核之间的关系有一个了解。
防火墙(firewalld与iptables)_第2张图片

(一)
(1)firewalld

安装:
[root@route ~]# yum install firewalld
[root@route ~]# systemctl start firewalld
[root@route ~]# systemctl status firewalld
firewalld.service - firewalld - dynamic firewall daemon
   Loaded: loaded (/usr/lib/systemd/system/firewalld.service; enabled)
   Active: active (running) since 日 2017-12-03 21:12:02 EST; 49s ago
 Main PID: 2362 (firewalld)
   CGroup: /system.slice/firewalld.service
           └─2362 /usr/bin/python -Es /usr/sbin/firewalld --nofork --nopid

1203 21:12:02 route systemd[1]: Started firewalld - dynamic firewall daemon.
1203 21:12:45 route systemd[1]: Started firewalld - dynamic firewall daemon.
[root@route ~]# systemctl enable firewalld
[root@route ~]# firewall-cmd --state 
running    ##查看火墙状态

(2)firewalld的图形化管理:

root@route ~]# firewall-config &

防火墙(firewalld与iptables)_第3张图片

其中左下角是软件管理的域,有以下几种:
防火墙(firewalld与iptables)_第4张图片

Configuration有临时设定(runtime)和永久(permanent)设定两种,临时设定reload后会恢复原状态,而永久不会。
每个域后由管理的服务,端口等等:
防火墙(firewalld与iptables)_第5张图片
这里注意,public为火墙默认的域。
(3)firewall的命令行接口配置防火墙
Firewalld-cmd是命令,firewalld-config是图形。
查看活跃区域,默认区域,所有区域:

防火墙(firewalld与iptables)_第6张图片

更改默认区域

这里写图片描述

测试:将默认区域改为publilc,测试:本来public只允许sshh和dhcpv6-client,现在我们用ftp测试。
安装vsftpd和lftp,并开启:
在ftp服务端:
这里写图片描述

这里写图片描述
在ftp客户端:
这里写图片描述
测试结果:ftp客户端访问被拒绝。
注意:用firewall-cmd –list-all 显示的就是默认区域的接口(interfaces),源(sources),服务(services)端口(ports)伪装开关(masquerade)(转发接口)Forward-ports 。

列出服务:
防火墙(firewalld与iptables)_第7张图片

这里写图片描述
此时可以更改服务相关配置,服务的配置文件都是.xml结尾:
防火墙(firewalld与iptables)_第8张图片

–将来源IP172.25.254.250设置为trust
防火墙(firewalld与iptables)_第9张图片

删除:
这里写图片描述

–将eth0添加到trusted中,注意:得先将eth0从public中删除:
这里写图片描述

这里写图片描述

–实验:下面时对接口做的工作,现在初始情况是:eth0与eth1处在public域中,现在假设eth0为外网开放接口,eth1为内网开放接口,现在将eth1加入trusted中,内部网络可以访问。
先将eth1加入到trusted中:
防火墙(firewalld与iptables)_第10张图片

然后在trusted中加入http服务:

这里写图片描述

publlic域默认为ssh连接与dhcpv6-client所以eth0并不具有连网功能:
eth0:172.25.254.136
防火墙(firewalld与iptables)_第11张图片
eth1:172.25.254.236,注意:现实生活中通常是两个不同的网段。
这里写图片描述

—实验:我们可以将来源ip为172.25.254.79的所有包拒绝:
这里写图片描述

此时未生效,需要加载,有两种方式:
这里写图片描述

这里写图片描述
注意:若此时179主机通过ssh连接上了服务端,若用complete,则会中断现有连接,若使用–reload,则不会中断现有连接。

(4)firewalld的direct-rules

防火墙(firewalld与iptables)_第12张图片


firewall-cmd –-direct –get-all-rules   ##列出规则
firewall-cmd –-direct –add-rule ipv4 filter INPUT 0 ! -s 172.25.254.79 -p tcp –dport 80 -j ACCEPT   ##添加规则
firewall-cmd –-direct –remove-rule ipv4 filter INPUT 0 ! -s 172.25.254.79 -p tcp –dport 80 -j ACCEPT   ##删除规则

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

防火墙(firewalld与iptables)_第13张图片

(5)端口转发与地址伪装:

在防火墙服务器上将伪装打开:
这里写图片描述

当79端口登陆主机时,将79伪装
这里写图片描述

当访问本机22端口时,将其转到236这个主机上:
这里写图片描述

测试查看;用79主机ssh连接136主机:
这里写图片描述

登陆的是236主机:
防火墙(firewalld与iptables)_第14张图片

查看登陆者,登陆者是136。79主机被伪装起来了
这里写图片描述

(二)iptables
首先得保持一个纯净的环境,将firewalld关闭。安装iptables
防火墙(firewalld与iptables)_第15张图片

防火墙(firewalld与iptables)_第16张图片

这里写图片描述

这里写图片描述

(1)理论基础:当主机收到一个数据包后,数据包先在内核空间中处理,若发现目的地址是自身,则传到用户空间中交给对应的应用程序处理,若发现目的不是自身,则会将包丢弃或进行转发。

(2)iptables实现防火墙功能的原理是:在数据包经过内核的过程中有五处关键地方,分别是PREROUTING、INPUT、OUTPUT、FORWARD、POSTROUTING,称为钩子函数,iptables这款用户空间的软件可以在这5处地方写规则,对经过的数据包进行处理,规则一般的定义为“如果数据包头符合这样的条件,就这样处理数据包”。
iptables中定义有表,分别表示提供的功能,有filter表(实现包过滤)、nat表(实现网络地址转换)、mangle表(实现包修改)、raw表(实现数据跟踪),这些表具有一定的优先级:raw–>mangle–>nat–>filter
下面是数据包流向图:
防火墙(firewalld与iptables)_第17张图片
数据包先经过PREOUTING,由该链确定数据包的走向:

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

2 若满足PREROUTING的nat表上的转发规则,则发送给FORWARD,然后再经过POSTROUTING发送出去,流程为: ①--->③--->④--->⑥
3 主机发送数据包时,流程则是⑤--->⑥

(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 在指定位置插入规则

例:iptables -I INPUT 1 –dport 80 -j ACCEPT

(将规则插入到filter表INPUT链中的第一位上)
-L/S 列出指定链或所有链的规则
-F 删除指定链或所有链的规则
-N 创建用户自定义链

例:iptables -N allowed
-X 删除指定的用户自定义链
-P 为指定链设置默认规则策略,对自定义链不起作用

例:iptables -P OUTPUT DROP
-Z 将指定链或所有链的计数器清零
-E 更改自定义链的名称

例:iptables -E allowed disallowed
-n ip地址和端口号以数字方式显示

例:iptables -Ln
常见规则匹配器 说明
-p tcp|udp|icmp|all 匹配协议,all会匹配所有协议
-s addr[/mask] 匹配源地址
-d addr[/mask] 匹配目标地址
–sport port1[:port2] 匹配源端口(可指定连续的端口)
–dport port1[:port2] 匹配目的端口(可指定连续的端口)
-o interface

匹配出口网卡,只适用FORWARD、POSTROUTING、OUTPUT。

例:iptables -A FORWARD -o eth0
-i interface

匹配入口网卡,只使用PREROUTING、INPUT、FORWARD。
–icmp-type 匹配icmp类型(使用iptables -p icmp -h可查看可用的ICMP类型)
–tcp-flags mask comp

匹配TCP标记,mask表示检查范围,comp表示匹配mask中的哪些标记。

例:iptables -A FORWARD -p tcp –tcp-flags ALL SYN,ACK -j ACCEPT

(表示匹配SYN和ACK标记的数据包)
目标动作 说明
ACCEPT 允许数据包通过
DROP 丢弃数据包
REJECT 丢弃数据包,并且将拒绝信息发送给发送方
SNAT

源地址转换(在nat表上)

例:iptables -t nat -A POSTROUTING -d 192.168.0.102 -j SNAT –to 192.168.0.1
DNAT

目标地址转换(在nat表上)

例:iptables -t nat -A PREROUTING -d 202.202.202.2 -j DNAT –to-destination 192.168.0.102
REDIRECT

目标端口转换(在nat表上)

例:iptables -t nat -D PREROUTING -p tcp –dport 8080 -i eth2.2 -j REDIRECT –to 80
MARK

将数据包打上标记

例:iptables -t mangle -A PREROUTING -s 192.168.1.3 -j MARK –set-mark 60

实验:
1)显示filter表所有链的规则,默认为filter表防火墙(firewalld与iptables)_第18张图片
如上,可以看到filter三条链
2)查看net表的
防火墙(firewalld与iptables)_第19张图片

3)注意一点:火墙设置的策略好坏会影响到传输速率的快慢,因为火墙规则读取是有先后顺序的。

(4)NAT
Net Address Trancelate:网络地址转换
SNAT(源地址转换)是指在数据包从网卡发送出去的时候,把数据包中的源地址部分替换为指定的IP,这样,接收方就认为数据包的来源是被替换的那个IP的主机
DNAT(目标地址转换),就是指数据包从网卡发送出去的时候,修改数据包中的目的IP,表现为如果你想访问A,可是因为网关做了DNAT,把所有访问A的数据包的目的IP全部修改为B,那么,你实际上访问的是B
下面我们来模拟以下两个转换:
1)SNAT:
实验准备:
双网卡主机:
防火墙(firewalld与iptables)_第20张图片
单网卡主机:
IP:
这里写图片描述

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

接下来我们在单网卡主机上ping网关,检查实验环境:

这里写图片描述

说明双网卡主机网卡来良好。

在进行SNAT之前我们的单网卡主机是不能连接不同网段的172.25.79.250这台主机的 。

我们要用单网卡主机来连不同网段的主机,必须要做SNAT。在双网卡主机上做防火墙规则书写:

iptables -t nat -A POSTROUTING -o eth1 -j SNAT --to-source 172.25.79.136

查看火墙规则:

防火墙(firewalld与iptables)_第21张图片
这时还有个net表的ip转发功能未开启,将其开启:

[root@route ~]# sysctl -a | grep ip_forward
net.ipv4.ip_forward = 0
[root@route ~]# vim /etc/sysctl.conf 

防火墙(firewalld与iptables)_第22张图片

[root@route ~]# sysctl -p
net.ipv4.ip_forward = 1

此时在单网卡主机ping不同网段的主机,发现可以:

这里写图片描述

SNAT:局域网共享一个公网IP接入lnternel,
好处如下:
1、保护内网用户安全,因为公网地址总有一些人恶意扫描,而内网地址在公网没有路由所以无法被扫描,能被扫描的只有防火墙这一台,这样就减少了被攻击的可能。
2、Ipv4地址匮乏,很多公司只有一个ipv4地址,但是却有几百个用户需要上网,这个时候就需要使用SNAT。
3、省钱,公网地址付费,使用SNAT只需要一个公网ip就可以满足几百人同时上网。

DNAT :
我们在双网卡主机(route)上书写规则:
防火墙(firewalld与iptables)_第23张图片
从eth1接口经来的数据包我们将其目标地址转为172.25.254.11这台主机上

我们在172.25.254.79主机上测试:
用ssh连接172.25.254.136:
防火墙(firewalld与iptables)_第24张图片

但是却是登陆的172.25.254.11这台主机:
防火墙(firewalld与iptables)_第25张图片
实现了目的地转换。

DNAT的用途:
DNAT:向internel发布内网服务器
在内网中有服务器,如果想让公网用户访问有有两种方法。
1  配置双网卡,一网卡对内,一网卡对外;一般是高访问量的web服务器,为了避免占用网关的流量才这样做,使用不是很广泛。
2  内网web服务器,或是ftp服务器,为了用户在公网也可以访问,有不想买公网ip地址,采用DNAT方案。

你可能感兴趣的:(防火墙,伪装,端口转发)