您的位置:首页 > 运维架构 > Linux

Linux----防火墙(firewalld与iptables两种管理方式)

2019-08-18 16:37 831 查看
版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。 本文链接:https://blog.csdn.net/weixin_42221657/article/details/99685923

一、防火墙的基本信息

1、定义:

          防火墙是整个数据包进入主机前的第一道关卡。是一种位于内部网络与外部网络之间的网络安全系统,是一项信息安全的防护系统,依照特定的规则,允许或是限制传输的数据通过。

2.管理防火墙的两种方式:
(1)firewalld管理火墙的工具,相对简单
(2)iptables复杂,功能强大

3.防火墙的三表五链

  •     Filter表过滤数据包,默认表

    (1)INPUT链:    过滤所有目标地址是本机的数据包(对进入本机的数据包进行过滤)
    (2)OUTPUT链:过滤所有本机产生的数据包(对源地址的数据包的过滤)
    (3)FORWARD链:过滤所有路过本机的数据包(源地址和目标地址都不是本机的数据包)

  •     NAT表网络地址转换(Network Address Translation

    如果第一个数据包允许经行NAT或Masquerade,那么其它数据包都会被做相同的动作,也就是其它数据包不会被一个一个的    NAT(属于一个流的包只会经过这个表一次)任何时候都不要在这个表的任何一条链进行过滤。

包含三个动作:
   (1)DNAT:改变数据包的目的地址包能从路由到某台机器(使得公网能够访问局域网的服务器)
   (2)SNAT:改变数据包的源地址(使得局域网能够访问公网)
 (3)NASQUERADE:和SNAT一样使得局域网能访问公网,无固定ip使用PPP.PPPoE等拨号上网接入

Nat表包含三条链:
(1)PREROUTING链:数据包到达防火墙时改变包的目的地地址
(2)OUTPUT链:改变本地产生数据包的目标地址
(3)POSTROUTING:在数据包离开防火墙时改变数据包的源地址

  •     Mangle表:修改数据包,改变包头中的内容(TTL,TOS,MARK)

   mangle中的五条链:
(1)PREROUTING链
(2)POSTROUTING链
(3)OUTPUT链
(4)INPUT链
(5)FORWARD链

二、Firewalld

1、firewalld概述

          动态防火墙后台程序firewalld提供了一个动态管理的防火墙,用以支持网络“zones”,以分配对一个网络及其相关链接和界面一定程度的信任。它具备对ipv5和IP v6防火墙设置的支持。它支持以太网桥,并有分离运行时间和永久性配置选择。它还具备一个通向服务或者英勇程序以直接增加防火墙规则的接口  
2、firewalld配置方法

图像化:firewall-config进入图形化界面配置

命令行:firewall-cmd........

3.firewalld的域

4.firewalld的管理

实验准备:

    两台reset的虚拟机。desktop单网卡,IP:192.168.0.123

                                        server两个网卡:eth0:172.25.254.223     eth1:192.168.0.223

                                         物理主机IP:172.25.254.23

(1)、firewalld的开启以及关闭

[code]yum install -y firewalld firewall-config
systemctl start firewalld            开启
systemctl enable firewalld           设置开机自启
systemctl disable firewalld          开机自动关闭防火墙
systemctl stop firewalld             关闭防火墙

(2)、使用命令配置防火墙
 

[code]firewall-cmd --state                     查看防火墙状态
firewall-cmd --get-active-zones        查看防火墙正在使用的域
firewall-cmd --get-default-zone        查看防火墙默认域
firewall-cmd --get-zones                  查看防火墙的域
firewall-cmd --zone=public --list-all  列出public域的所有设置
firewall-cmd --get-services              查看防火墙的服务
firewall-cmd --list-all-zones              列出所有域的详细信息
firewall-cmd --set-default-zone=***    设置***为默认域
firewall-cmd --reload                       重新加载防火墙设置

(3)、

server虚拟机下载httpd

[code]yum install httpd -y
systemctl start httpd

步骤如下:
     此时没有给防火墙添加http服务

主机访问:
     通过浏览器访问172.25.254.223失败


server端:firewall-cmd --add-source=172.25.254.23 --zone=trusted,原因是添加到该信任域名
主机再次访问172.25.254.223成功


server端:

firewall-cmd --reload

firewall-cmd --add-source=172.25.254.23 --zone=public  该域下没有允许http服务
主机再次访问172.25.254.223 失败

实验二:将172.25.254.223IP放到可信任域里,此时该服务可以通过防火墙
server端:firewall-cmd --remove-interface=eth0 --zone=pubilc
                 firewall-cmd --add-interface=eth0 --zone=trusted
      主机访问:
    通过浏览器访问172.25.254.223 成功

移出该域,不能访问

server端:firewall-cmd --remove-interface=eth0 --zone=trusted    将eth0移出这个域
          firewall-cmd --add-interface=eth0 --zone=pubilc
主机访问:
通过浏览器访问172.25.254.113 失败

server端:firewall-cmd --change-interface=eth0 --zone=trusted    将eth0修改成可信任域里
主机访问:
通过浏览器访问172.25.254.113 成功

(4)、给防火墙添加服务
      查看本机防火墙已经允许的服务
         firewall-cmd --list-services
      查看本机已有的可以给防火墙添加的所有服务
       firewall-cmd --get-services

文件方式给本机添加服务iscsi
cd /usr/lib/firewalld/
cd services/
ls   查看本机已有的所有服务的文件
firewall-cmd --permanent --add-service=iscsi  添加失败,本机无此服务文件,所以不能添加
首先应添加iscsi服务文件
cp -p http.xml iscsi.xml
vim iscsi.xml     修改配置,端口
firewall-cmd --get-services 查看本机已有的可以给防火墙添加的所有服务,iscsi添加成功
firewall-cmd --permanent --add-service=iscsi    或者进/etc/firewalld/zones添加
firewall-cmd --reload
firewall-cmd --list-all

文件的方式给本机防火墙添加服务httpd
 

[code]cd /etc/firewalld/zones/
ls
vim public.xml    通过文件的方式给本机防火墙添加服务  添加http
======firewall-cmd --permanent --add-service=http  通过命令给本机防火墙永久添加服务
firewall-cmd --reload
firewall-cmd --list-all

permanent这个参数,也会生成public.xml.old这个备份文件,备份的是添加服务之前的信息。

命令方式添加服务:

firewall-cmd --permanent --add-service=服务名    

firewall-cmd --reload   完毕重新加载

添加端口
 

[code]firewall-cmd --list-ports  列出所有允许通过的端口
firewall-cmd --add-port=8080/tcp
firewall-cmd --list-ports  8080端口添加成功
firewall-cmd --remove-port=8080/tcp   移除

(5)、关于reload:
firewall-cmd --reload    和  firewall-cmd --complete-reload 的区别

firewall-cmd --reload 只重新加载防火墙列表服务,并不会暂停正在运行使用的服务
firewall-cmd --complete-reload  全部重新加载,会检测正在进行的服务

     例子:如果删除了防火墙之前允许的服务,即使reload,不会影响被删除服务目前的使用

                                               如果是--complete-reload,重新加载防火墙列表服务后,监测到没有了该服务,则禁止该服务的进行。

(6)、禁止某一ip通过ssh服务连接
server端:   
firewall-cmd --list-all
firewall-cmd --permanent --add-service=ssh
firewall-cmd --reload

systemctl start sshd
firewall-cmd --permanent --direct --add-rule ipv4 filter INPUT 1 -s 172.25.254.23 -p tcp --dport 22 -j REJECT允许除了该主机外,所有的主机进行通过22端口

主机ip:172.25.254.23
测试  ssh root@172.25.254.223  被拒绝

解除限制
server:
firewall-cmd --permanent --direct --get-all-rules    查看所有的规则

firewall-cmd --permanent --direct --remove-rule ipv4 filter INPUT 1 -s 172.25.254.13 -p tcp --dport 22 -j REJECT   解除禁止

firewall-cmd --reload
systemctl restart firewalld 


(7)、firewalld管理的地址伪装SNAT

问题导向:以此来解决不同网段下的主机通信
有两块网卡的虚拟机server  ip:172.25.254.113    ip: 192.168.0.113   

步骤如下:

  • 打开地址伪装

firewall-cmd --list-all
firewall-cmd --permanent --add-masquerade   添加地址伪装
firewall-cmd --reload

在有一块网卡的虚拟机desktop  ip:192.168.0.123
ping 172.25.254.223无法ping通

  • 添加网关 vim /etc/sysconfig/network-scripts/ifcfg-eth0    

GATEWAY=192.168.0.223
systemctl restart network
route -n查看网关

  • 再次 ping 172.25.254.223  成功

测试
desktop:  ip:192.168.0.123
ssh root@172.25.254.23

在主机上:
w -i    查看到的是 ip:172.25.254.223 连接的

(8)、firewalld管理的地址转发DNAT
server操作:
打开地址伪装,设置路由
firewall-cmd --list-all
firewall-cmd --permanent --add-masquerade
firewall-cmd --reload
firewall-cmd --list-all
firewall-cmd --add-forward-port=port=22:proto=tcp:toport=22:toaddr=172.25.254.23

转发的含义:当desktop连接172.25.254.223时的22端口时,转到主机

desktop   设置网关为server的同网段IP:
 ssh连接server时,由于已经开启地址转换,连接时跳转到 172.25.254.23

23主机上查看w -i查看此时谁在使用,就是server的主机

三、iptables

1.iptables的概念

iptables(网络过滤器)是一个工作于用户空间的防火墙软件,防火墙在做信息包过滤决定时,有一套遵循和组成的规则,这些规则存储在专用的信息包过滤表中,而这些表集成在linux内核中。

2.iptables的启用

[code] systemctl stop firewalld     关闭firewalld管理
systemctl disable firewalld  使其开机不自启
systemctl mask firewalld     锁住防火墙 我一般不索,因为老忘记
yum install iptables-services
systemctl start iptable    打开iptable

3、iptable的命令
   

    iptables -t filter A INPUT -p tcp --dport 22 -j ACCEPT      在filter这个表上追加22端口

[code]  参数的作用
-t表的选择
A 追加
-p 采用tcp协议
-dport 22  目的端口号,22
-j 动作为ACCEPT
[code]iptables -nL  显示表的信息,什么都不加,表示默认查看filter这个表的信息
-t filter -nL  显示filter这个表的信息
-F    删除所有表的信息

file:///E:/%E5%8D%9A%E5%AE%A2%E6%88%AA%E5%9B%BE/firewall%E5%8D%9A%E5%AE%A2%E6%88%AA%E5%9B%BE/Screenshot%20from%202019-08-17%2009-24-54.png
保存表的信息:  
法1:service iptables save 保存所有表的信息,到/etc/sysconfig/iptables
法2:iptables-save > /etc/sysconfig/iptables

注意:没有相应表的名字,则默认是对filter这个表进行操作

  • 对链的操作

  iptables -N redhat          添加链
               -E redhat hello   修改链的名字
               -X hello              删除链
               -P INPUT DROP     修改input默认的动作(police里的内容)
               -S INPUT          查看链的内容
               -nL                 列出所有的信息 ,并且不做解析  

  • 在已有的链中操作:
[code]iptables -D INPUT 1	        ##删除INPUT链中的第一条策略
iptables -I INPUT  -p tcp --dport 80  -j REJECT	##插入策略到INPUT中的第一条
iptables -R INPUT 1 -p tcp --dport 80 -j ACCEPT	##修改第一条策略
iptables -P INPUT DROP		    ##把INPUT表中的默认策略改为drop

例题练习:

只允许22和80端口可以通过

[code]iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
已经建立的连接和正在启动的新连接
iptables -A INPUT -m state --state NEW -i lo -j ACCEPT
设置状态为NEW但经过本地回环接口的连接允许
iptables -A INPUT -m state --state NEW -p tcp --dport 22 -j ACCEPT
设置经过22端口的新状态允许连接
iptables -A INPUT -m state --state NEW -p tcp --dport 80 -j ACCEPT
设置经过80端口的新状态允许连接
iptables -A INPUT -j REJECT拒绝其他的服务

service iptables save保存到配置文件里

iptables -Z 清空所有的状态

例题:只允许这三个服务通过防火墙squid sshd dns
                           3128  22  53  udp
 

4.iptables的伪装和转发

 

地址伪装
尝试在desktop ip:192.168.0.123
ping 主机 ip:172.25.254.23 失败

server
在server端 双网卡 eth0:ip:172.25.254.113   eth1: ip: 192.168.0.113
1
iptables -t nat -A POSTROUTING -o eth0 -j SNAT --to-source 172.25.254.113
iptables -t nat -nL

desktop
再次尝试 ping 主机 ip:172.25.254.13 成功

地址转发
iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 22 -j DNAT --to-dest 192.168.0.23:22

iptables -t nat -nL

desktop端测试

四、管理selinux端标签

         在selinux开启状态下
 修改端口
yum install httpd -y
systemctl start httpd
netstat -antlupe | grep httpd
vim /etc/httpd/conf/httpd.conf 修改端口为8080
systemctl restart httpd
netstat -antlupe | grep httpd修改成功

vim /etc/httpd/conf/httpd.conf 修改端口为8888
systemctl restart httpd重启失败
setenforce 0  关闭selinux
systemctl restart httpd 成功
netstat -antlupe | grep httpd  端口为8888

setenforce 1
systemctl restart httpd重启失败

semanage port -l | grep http  对端口号有限制 不能任意更改,没有的需要手动添加

semanage port -a -t http_port_t -p tcp 8888  手动添加8888端口
systemctl restart httpd 成功
netstat -antlupe | grep httpd  端口为8888

 

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: