您的位置:首页 > 其它

防火墙(firewalld与iptables)

2017-12-04 12:09 344 查看
防火墙是整个数据包进入主机前的第一道关卡。防火墙主要通过Netfilter与TCPwrappers两个机制来管理的。

1)Netfilter:数据包过滤机制

2)TCP Wrappers:程序管理机制

关于数据包过滤机制有两个软件:firewalld与iptables

关于两者的不同介绍如下:

1



2 iptables通过控制端口来控制服务,而firewalld则是通过控制协议来控制端口

我们这里先对firewalld做实验。Iptables和firewalld只能开一个。

在学习之前先对iptables firewalld 内核之间的关系有一个了解。



(一)

(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

12月 03 21:12:02 route systemd[1]: Started firewalld - dynamic firewall daemon.
12月 03 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 &




其中左下角是软件管理的域,有以下几种:



Configuration有临时设定(runtime)和永久(permanent)设定两种,临时设定reload后会恢复原状态,而永久不会。

每个域后由管理的服务,端口等等:



这里注意,public为火墙默认的域。

(3)firewall的命令行接口配置防火墙

Firewalld-cmd是命令,firewalld-config是图形。

查看活跃区域,默认区域,所有区域:



更改默认区域



测试:将默认区域改为publilc,测试:本来public只允许sshh和dhcpv6-client,现在我们用ftp测试。

安装vsftpd和lftp,并开启:

在ftp服务端:





在ftp客户端:



测试结果:ftp客户端访问被拒绝。

注意:用firewall-cmd –list-all 显示的就是默认区域的接口(interfaces),源(sources),服务(services)端口(ports)伪装开关(masquerade)(转发接口)Forward-ports 。

列出服务:





此时可以更改服务相关配置,服务的配置文件都是.xml结尾:





–将来源IP172.25.254.250设置为trust



删除:



–将eth0添加到trusted中,注意:得先将eth0从public中删除:





–实验:下面时对接口做的工作,现在初始情况是:eth0与eth1处在public域中,现在假设eth0为外网开放接口,eth1为内网开放接口,现在将eth1加入trusted中,内部网络可以访问。

先将eth1加入到trusted中:



然后在trusted中加入http服务:



publlic域默认为ssh连接与dhcpv6-client所以eth0并不具有连网功能:

eth0:172.25.254.136



eth1:172.25.254.236,注意:现实生活中通常是两个不同的网段。



—实验:我们可以将来源ip为172.25.254.79的所有包拒绝:



此时未生效,需要加载,有两种方式:





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

(4)firewalld的direct-rules



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端口的请求响应:





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

在防火墙服务器上将伪装打开:



当79端口登陆主机时,将79伪装



当访问本机22端口时,将其转到236这个主机上:



测试查看;用79主机ssh连接136主机:



登陆的是236主机:



查看登陆者,登陆者是136。79主机被伪装起来了



(二)iptables

首先得保持一个纯净的环境,将firewalld关闭。安装iptables









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

(2)iptables实现防火墙功能的原理是:在数据包经过内核的过程中有五处关键地方,分别是PREROUTING、INPUT、OUTPUT、FORWARD、POSTROUTING,称为钩子函数,iptables这款用户空间的软件可以在这5处地方写规则,对经过的数据包进行处理,规则一般的定义为“如果数据包头符合这样的条件,就这样处理数据包”。

iptables中定义有表,分别表示提供的功能,有filter表(实现包过滤)、nat表(实现网络地址转换)、mangle表(实现包修改)、raw表(实现数据跟踪),这些表具有一定的优先级:raw–>mangle–>nat–>filter

下面是数据包流向图:



数据包先经过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表


如上,可以看到filter三条链

2)查看net表的



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

(4)NAT

Net Address Trancelate:网络地址转换

SNAT(源地址转换)是指在数据包从网卡发送出去的时候,把数据包中的源地址部分替换为指定的IP,这样,接收方就认为数据包的来源是被替换的那个IP的主机

DNAT(目标地址转换),就是指数据包从网卡发送出去的时候,修改数据包中的目的IP,表现为如果你想访问A,可是因为网关做了DNAT,把所有访问A的数据包的目的IP全部修改为B,那么,你实际上访问的是B

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

1)SNAT:

实验准备:

双网卡主机:



单网卡主机:

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


查看火墙规则:



这时还有个net表的ip转发功能未开启,将其开启:

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


[root@route ~]# vim /etc/sysctl.conf




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


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



SNAT:局域网共享一个公网IP接入lnternel,

好处如下:

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

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

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

DNAT :

我们在双网卡主机(route)上书写规则:



从eth1接口经来的数据包我们将其目标地址转为172.25.254.11这台主机上

我们在172.25.254.79主机上测试:

用ssh连接172.25.254.136:



但是却是登陆的172.25.254.11这台主机:



实现了目的地转换。

DNAT的用途:

DNAT:向internel发布内网服务器

在内网中有服务器,如果想让公网用户访问有有两种方法。

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

2 内网web服务器,或是ftp服务器,为了用户在公网也可以访问,有不想买公网ip地址,采用DNAT方案。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: