iptables+firewalld

防火墙讲解

centos7默认使用的防火墙是firewalld,但是同样也是支持iptables,在当今许多的企业中
使用的最多的是还是centos6的系统,所以为了能更好的服务于这些使用centos6的公司
我们首先学习的是iptables。最后学习firewalld。

iptables

netfilter/iptables:IP信息包过滤系统,由2个组件构成,分别是:netfilter和iptables。
netfilter:称之为内核空间,是内核的一部分,由一些信息包过滤表组成,这些表用来控制信息包过滤处理的规则集。
iptables:是一种工具,为了更好的操作信息包过滤表中的规则。
netfilter/iptables简称iptables
特点:
因为iptables是基于内核的防火墙,内置3表5链,所以所有的规则一旦经过配置后,就会生效,不需要重启启动服务。

3表5链(最后一表了解即可)

3表

表名说明包括的规则链
filter过滤数据包INPUT,OUTPUT,FORWARD
nat网络地址转换PEROUTING,POSTROUTING,OUTPUT
mangle修改数据包内容所有链
Raw处理异常PREROUTING,OUTPUT

5链

规则链名字说明
OUTPUT数据包的出口
FORWARD匹配流经本机的数据包
PREROUTING修改目的地址,用来做DNAT
POSTROUTING修改源地址用来做SNAT
INPUT匹配目标IP是本机的数据包

在这里插入图片描述
防火墙顺序:表->链->规则
在这里插入图片描述
数据包的2种流向

发送给防火墙的:
PREROUTING-------->INPUT---------------->OUTPUT---------------->POSTROUTING
需要经过防火墙:
PREROUTING-------->FORWARD------------>POSTROUTING

在这里插入图片描述

命令的简单使用

为了更好的使用iptables,我们首先关闭firewalld,然后安装iptables,然后进行以下的命令的示例
安装

[root@break ~]# systemctl stop firewalld.service 
[root@break ~]# yum install -y iptables-services
[root@break ~]# systemctl start iptables.service 

配置文件存放的位置

[root@break ~]# ls -al /etc/sysconfig/iptables
-rw------- 1 root root 1178 4月  15 19:25 /etc/sysconfig/iptables

iptables

1不指定表名字时候,默认使用filter
2不指定规则链名字,默认表示所有的规则链
3只有设置默认的规则,才可以不写-j的参数

iptables语法大全
在这里插入图片描述
command的使用
A:append,追加一条规则(放置在最后)

在 filter 表的 INPUT 链里追加一条规则(作为最后一条规则)
匹配所有访问本机 IP 的数据包,匹配到的丢弃
[root@break ~]# iptables -t filter -A INPUT -j DROP

-I :insert,插入一条规则(默认第一条规则)

 在 filter 表的 INPUT 链里插入一条规则(插入成第 1 条)
 [root@break ~]# iptables -I  INPUT -j DROP
 在 filter 表的 INPUT 链里插入一条规则(插入成第 3 条)
 [root@break ~]# iptables -I INPUT 3 -j DROP
-R :replays,替换或者修改规则
-D:delete,删除一条规则    
[root@break ~]# iptables -D INPUT 1

-F:flush,清空规则

flush清空规则,但是不代表会修改默认的规则,我们清空的规则仅仅只是我们设置的规则,而不是默认的规则。
[root@break ~]# iptables -F

-P:设置默认的规则,不需要加-j

[root@break ~]# iptables -P INPUT ACCEPT

-L : list,列出规则

[root@break ~]# iptables -L 
[root@break ~]# iptables -nvL

匹配条件

流入、流出接口(-i、-o)

  -i eth0   
  匹配是否从网络接口 eth0 进来
   -o eth0
  匹配是否从网络接口 eth0 出去

来源、目的地址(-s、-d

 -s 192.168.0.1   
 -d 202.106.0.20 

协议类型 (-p)

   -p tcp

来源、目的端口(–sport、–dport)

--sport 1000      匹配源端口是 1000 的数据包
--dport 80        匹配目的端口是 80 的数据包

动作

-j ACCEPT:通过,允许数据包通过本链而不拦截它
-j DROP:丢弃,阻止数据包通过本链而丢弃它
-j SNAT :源地址转换
-j DNAT:目的地址转换
-j MASQUERADE:动态源地址转换,简称伪装

模块匹配

按包状态匹配   (state)
按来源 MAC 匹配(mac)
按包速率匹配   (limit)
多端口匹配     (multiport)

包状态匹配

包状态说明
NEW初始化包
ESTABLISHED建立
RELATED多重连接
INVALID无状态
 iptables -A INPUT -m state --state RELATED,ESTABLISHED  -j ACCEPT
 iptables -A FORWARD -m mac --mac-source xx:xx:xx:xx:xx:xx -j DROP
 iptables -A FORWARD -d 192.168.0.1 -m limit --limit 50/s  -j ACCEPT
 iptables -A FORWARD -d 192.168.0.1 -j DROP
 iptables -A INPUT -p tcp -m multiport --dports  21,22,25,80,110 -j ACCEPT

保存

services iptables save

使用iptables防火墙防护公司的web服务器

#服务器
[root@break ~]# iptables -A INPUT -i lo -j ACCEPT
[root@break ~]# iptables -A INPUT -p tcp -m multiport --dport 22,80 -j ACCEPT
[root@break ~]# iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
[root@break ~]# systemctl restart httpd
[root@break ~]# cat /var/www/html/index.html 
123
#客户端
[root@break ~]# curl 192.168.1.63
123

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

#客户机新建一块网卡,为vmnet0模式,设置新网卡的ip:192.168.2.10 网关:192.168.2.1
#服务器:新建的网卡为vmnet0模式,设置新的网卡ip:192.168.2.1 
服务器:
[root@break ~]# ifconfig ens37 192.168.2.1
[root@break ~]# ifconfig ens37
ens37: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.2.1  netmask 255.255.255.0  broadcast 192.168.2.255
        inet6 fe80::2adf:6a89:990a:5993  prefixlen 64  scopeid 0x20<link>
        ether 00:0c:29:37:4f:df  txqueuelen 1000  (Ethernet)
        RX packets 18260  bytes 1396674 (1.3 MiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 441  bytes 48608 (47.4 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
[root@break ~]# iptables -t nat -A POSTROUTING -s 192.168.2.0/24   -j  SNAT  --to 192.168.1.63

启用内核路由转发功能:临时生效

临时生效:
echo "1" > /proc/sys/net/ipv4/ip_forward
永久生效:
vim /etc/sysctl.conf
改:#net.ipv4.ip_forward = 0
客户端:修改ip和网关。直接从配置文件中修改。
刚开始ping g.cn 不通,当服务器配置了防火墙,就可以通了。

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

服务器:
 iptables -t nat -A PREROUTING -d 192.168.1.63 -p tcp --dport 80 -j DAT --to 192.168.2.10 
 客户端:通过culr访问192.168.1.63,得到的是192.168.1.64的内容。

firewalld:FirewallD 提供了支持网络/防火墙区域(zone)定义网络链接以及接口安全等级的动态防火墙管理工具。

动态防火墙与静态防火墙

 iptables service 管理防火墙规则的模式:(静态防火墙)
 用户使用命令添加防火墙的规则,如果想让规则永久保存,还需要再执行命令 service iptables reload 
 使变更的规则保存到配置文件里。在这整个过程的背后,会对防火墙的规则列表全部重读一次,加载到内核.
 firewalld 所提供的模式就可以叫做动态防火墙:
 它的出现就是为了解决这一问题,任何规则的变更都不需要对整个防火墙规则列表进行重新加载,只需要将变更部分保存并更新到运行中的 iptables 即可。

firewalld与iptables的关系

都是用来操作防火墙规则的工具,核心是内核中的filternat,只是用来操作的方法不一样而已。

firewalld小点

9zone:block ,dmz ,drop external, home, internal ,public , trusted , work.
简单来讲就是为用户预先准备了几套规则集合,我们可以根据场景的不同选择合适的规矩集合,而默认区域是public。
默认的配置文件:/usr/lib/firewalld/services/
修改的配置文件:/etc/firewalld/services/ 

9zone介绍:

zone说明
drop任何接收的网络数据包都被丢弃,没有任何回复。仅能有发送出去的网络连接。
block任何接收的网络连接都被 IPv4 的 icmp-host-prohibited 信息和 IPv6 的 icmp6-adm-prohibited 信息所拒绝。
public在公共区域内使用,不能相信网络内的其他计算机不会对您的计算机造成危害,只能接收经过选取的连接。
external特别是为路由器启用了伪装功能的外部网。您不能信任来自网络的其他计算,不能相信它们不会对您的计算机造成危害,只能接收经过选择的连接。
dmz用于您的非军事区内的电脑,此区域内可公开访问,可以有限地进入您的内部网络,仅仅接收经过选择的连接。
work用于工作区。您可以基本相信网络内的其他电脑不会危害您的电脑。仅仅接收经过选择的连接。
home用于家庭网络。您可以基本信任网络内的其他计算机不会危害您的计算机。仅仅接收经过选择的连接。
internal用于内部网络。您可以基本上信任网络内的其他计算机不会威胁您的计算机。仅仅接受经过选择的连接。
trusted可接受所有的网络连接。

庞大的命令体系

firewall-cmd --get-services   #列出所有支持的 service
firewall-cmd --list-services     #查看当前 zone 种加载的 service
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                  #断开连接的同时,重启服务
 firewall-cmd --zone=dmz --list-ports            #查看所有打开的端口
 firewall-cmd --zone=dmz --add-port=8080/tcp           #加入一个端口到区域

动态添加一条规则
在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值