linux防火墙_Linux防火墙(firewalld与iptables)

一、防火墙的基本信息

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进入图形化界面配置

1104bbae235de7df8c59756f5ffd60de.png

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

3firewalld的域

4firewalld的管理

实验准备:

两台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的开启以及关闭

yum install -y firewalld firewall-config

systemctl start firewalld 开启

systemctl enable firewalld 设置开机自启

systemctl disable firewalld 开机自动关闭防火墙

systemctl stop firewalld 关闭防火墙

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

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 重新加载防火墙设置

ed1253d5120064f337fa2fb0435db0b4.png

(3)、server虚拟机下载httpd

yum install httpd -y

systemctl start httpd

步骤如下:

此时没有给防火墙添加http服务

主机访问:

通过浏览器访问172.25.254.223失败

768f0c19e32696a8f8a55df5501f6f89.png

server端:firewall-cmd --add-source=172.25.254.23 --zone=trusted,原因是添加到该信任域名

主机再次访问172.25.254.223成功

c0b492963847777ecc5032c1f9658d68.png

server端:

firewall-cmd --reload

firewall-cmd --add-source=172.25.254.23 --zone=public 该域下没有允许http服务

主机再次访问172.25.254.223 失败

04459e76822420cab895907f7c7df226.png

实验二:将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

cd /etc/firewalld/zones/

ls

vim public.xml 通过文件的方式给本机防火墙添加服务 添加http

======firewall-cmd --permanent --add-service=http 通过命令给本机防火墙永久添加服务

firewall-cmd --reload

firewall-cmd --list-all

ff7e9db4e9aa08c4919b1c8f60fb13ed.png

7af70cd1ee9c95f52feb3bae2c1402b2.png

ad0f811fe2a59c0f6d4b818990b28207.png

bfdeda740cda9dcfefea212860a7531b.png

d6dec033fb50a269ab7ad7bfd573751d.png

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

命令方式添加服务:

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

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

014f2c162e00c80174282702c72dad94.png

添加端口

firewall-cmd --list-ports 列出所有允许通过的端口

firewall-cmd --add-port=8080/tcp

firewall-cmd --list-ports 8080端口添加成功

firewall-cmd --remove-port=8080/tcp 移除

0f5626865b8c00ec29caa59c38b2e716.png

(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查看网关

a847f621d64abb3fa476195acb529d11.png

再次 ping 172.25.254.223 成功

测试

desktop: ip:192.168.0.123

ssh root@172.25.254.23

在主机上:

w -i 查看到的是 ip:172.25.254.223 连接的

5d843658654f7a19f73df6046e4f5fff.png

(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的启用

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端口

参数的作用

-t表的选择

A 追加

-p 采用tcp协议

-dport 22 目的端口号,22

-j 动作为ACCEPT

iptables -nL 显示表的信息,什么都不加,表示默认查看filter这个表的信息

-t filter -nL 显示filter这个表的信息

-F 删除所有表的信息

d5d75a54284224adf949e00aee4c907e.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 列出所有的信息 ,并且不做解析

在已有的链中操作:

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

791e8880c4f16049678250cf9fd85bda.png

例题练习:

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

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保存到配置文件里

2d7dd855c91b579eb11622155cf44be5.png

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端测试

e5320046c4a5fccf7a38be898093f817.png

c67fbdb9aa426af8ac84ecb4d4788cc3.png

352e818f1b791d98bb0be3235364a104.png

四、管理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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值