第十五天 13-linux防火墙

Linux防火墙之——iptables和firewalld

简介:

● 防火墙是位于内外网之间的一组软硬件部件的组合,主要目的是保护内外网的数据流通的安全,当外网访问内网的时候发送的数据包必须经过内网的防火墙检验是否符合规则。
● 能够指定火墙策略的两个工具包: iptables和firewalld

●IPTables应用 Linux的防火墙体系主要工作在网络层,针对TCP/IP数据包实时过滤和限制,属于典型的包过滤防火墙或称作网络层防火墙(iptables)
● Firewalld:只用于管理Linux防火墙的命令程序,属于“用户态”(User Space。又称为用户空间)的防火墙管理体系。支持网络区域所定义的网络链接以及接口安全等级的动态防火墙管理工具。

iptables和firewalld的区别

对比项FirewalldIptables
创建规则允许更新规则而不破坏现有会话和连接在修改了规则后必须得全部刷新才可以生效
使用区域和服务而不是链式规则
默认策略默认是拒绝的默认是允许的
相同firewalld和iptables一样,它们的作用都用于维护规则,而真正使用规则干活的是内核的netfilter。

IPTables防火墙

一、IPTables防火墙介绍

linux系统的防火墙:IP信息包过滤系统,它实际上由两个组件netfilter和iptables组成。

能够指定火墙策略的两个工具包iptables和firewalld●Linux的防火墙体系主要工作在网络层,针对TCP/IP数据包实时过滤和限制,属于典型的包过滤防火墙或称作网络层防火墙(iptables)只用于管理Linux防火墙的命令程序。

1、五张表:filter、nat、mangle、raw、security。主要用于将不同的规则存储在不同的表中
  1. filter表:默认表,负责过滤数据包(使用频率最高)

  2. nat表:用于网络地址转换(IP、端口)

  3. mangle表:主要应用在修改数据包、流量整形、给数据包打标识

  4. raw表:这个表很少用到,主要用于配置连接跟踪相关内容,使用频率较少

  5. security表:这个表用于安全Linux的防火墙规则,是iptables最近的新增表,使用频率较少

2、五条链:流量方向
  1. input:匹配目标IP是本机的数据包,入站

  2. output:出口数据包,出站

  3. forward:匹配流经本机的数据包

  4. prerouting:修改目的地址,用来做DNAT。如:把内网中的80端口映射到互联网端口

  5. postrouting:修改源地址,用来做SNAT。如:局域网共享一个公网IP接入internet。

防火墙处理数据包的四种方式

ACCEPT 允许数据包通过

DROP 直接丢弃数据包,不给任何回应信息

REJECT 拒绝数据包通过,必要时会给数据发送端一个响应的信息。

LOG在/var/log/messages文件中记录日志信息,然后将数据包传递给下一条规则

3、规则
  • 基于防火墙策略设置的各类防护规则,防火墙规则的执行顺序认为从前到后依次执行、遇到匹配的规则就不再继续向下检查、如果遇到不匹配的规则则会继续向下进行。

二、安装与配置IPTables

systemctl stop firewalld			
    
yum install iptables iptables-services

firewalld默认在没有设定规则的情况下,是拒绝所有流量,而iptables默认没有设定规则情况下,允许所有流量

三、基本的命令使用

基本语法格式
iptables [-t 表名] 命令选项 [链名] [条件匹配] [-j 目标动作或跳转]
1. 查看iptables防火墙规则
iptables -nL 
-L 查看当前表的所有规则,默认查看的是filter表,如果要查看NAT表,可以加上-t NAT参数
-n 使用数字形式(numeric)显示输出结果
2.添加丢弃规则
iptables -A INPUT -j DROP 			
//所有入站流量全部丢弃,包括SSH请求 

iptables -A OUTPUT -j DROP			*//所有出站流量全部丢弃.  

-A在指定链的末尾添加(append)一条新的规则    
-j代表指定你要操作的动作  

  
iptables -I INPUT -j DROP
iptables -I OUTPUT -j DROP

-I代表插入到开头 

上述两条命令一旦执行,所有流量无法进来,所有流量无法出去,为断网状态  
3.添加允许接受规则
1.iptables -I INPUT -p tcp --dport 22 -j ACCEPT			
//打开目标端口22,接受流经该端口的流量

iptables -I OUTPUT -p tcp --sport 80 -j ACCEPT 			
//打开源22端口 

--dport代表目的端口 ,--sport源端口

2.允许防火墙转发除ICMP协议以外的所有数据包

iptables -A FORWARD -p ! icmp -j ACCEPT

说明:使用“!”可以将条件取反。
-p —protocol 指定协议

案例:

iptables -I INPUT -p icmp -j DROP			//DROP:直接丢弃数据包,不会向源端做任何回复
iptables -I INPUT -p icmp -j REJECT			//REJECT:拒绝接受数据包,并向源端发送拒绝响应
iptables -I OUTPUT -p icmp -j DROP
4.显示出战规则的行号
iptables -L OUTPUT --line-numbers

-L  列出(list)指定链中所有的规则进行查看
5.删除出战规则第三行的规则
iptables -D OUTPUT 3

-D drop  删除
6.清空所有规则
iptables -F	
7.实例:
//允许本机访问外部IP地址和端口号,通过设定白名单的方式可以防止本机去访问别的服务器
//通过这种场景的设置,可以最大可能避免反弹Shell和挖矿程序去试图通过本地访问目标服务器下载恶意程序或执行恶意命令   
iptabels -I INPUT -i ens33 -p tcp -s 192.168.112.153  --sport 8088 -j ACCEPT
iptables -I OUTPUT -o ens33 -p tcp -d 192.168.112.153 --dport 8088 -j ACCEPT
    //指定网卡ens33,不指定网卡默认所以网卡
    
//防止DDOS攻击,设定一些数据的限制条件
iptables -A INPUT -p tcp --dport 80 -m limit --limit 25/minute --limit-burst 100 -j ACCEPT
    
//远程端口转发 : 
//确认端口转发功能是启用的

四、进阶用法

端口转发
  • 第一种:本机端口转发,比如80端口对外封闭,开放一个15673供外部访问,外部只知道15673,不知道80,可以避免协议猜测

  • 第二种:远程端口转发,把本机接受到的请求转发到远程电脑和对应端口上(远程可以是本地局域网,也可以是公网服务器)

    • 本机端口转发

      iptables -t nat -A PREROUTING -p tcp --dport 15673 -j REDIRECT --to-port 80		
          //-t nat  指定使用nat表
      12
      
  • 远程端口转发

    • 确认端口转发功能是启用的

      //开启远程转发
      vi /etc/sysctl.conf
      添加net.ipv4.ip_forward = 1
      执行命令 sysctl -p /etc/sysctl.conf
      1234
      
    • PREROUTING上访问8888时,转发给目标服务器和目标端口

    • PREROUTING是先于FILTER执行的,所以不需要转发时允许8888端口

      //当其他主机访问此电脑(192.168.184.137)的8888端口时,通过DNAT的方式转发到180.101.49.11的80端口
      
      //出去
      iptables -t nat -A PREROUTING -d 192.168.184.137 -p tcp --dport 8888 -j DNAT --to-destination 180.101.49.11:80
      
      //回来
      iptables -t nat -A POSTROUTING -d 180.101.49.11 -p tcp --dport 80 -j S
      

五、命令参数表

参数说明
-A在最后添加一条规则
INPUT链名、常用、大写
PREROUTING链名、大写
OUTPUT链名、大写
-I在最前面插入一条规则
-s指定源地址,可以是IP地址,也可以是网段“192.168.109.10/24”;“-s为空”代表所有
-d目标地址
-p协议
–dport指定主机端口(目的端口,本机开放或拒绝端口)
–sport指定主机端口(禁止连接对方某些接口)
-i指定网卡名,表示报文流入端口
-j指定所需要的操作
ACCEPT允许
REJECT拒绝,拒绝提供服务
DROP拒绝,丢弃数据包不回应
–src-range源地址范围(如:拒绝某IP段访问)
–dsc-range目标地址的范围
–mac-source源主机的mac地址
-t指定表名,默认是filter
-v查看详细信息
-nvL --line-numbers查看filter表中规则的顺序
-nvL -t mangle查看mangle表中的防火墙规则
-F清空filter表
-R替换规则
-m指定模块

Firewalld防火墙应用

Linux防火墙是通过netfiler来处理的,他是内核级别的框架。iptables被作为netfiler的用户态抽象层,iptables将包通过一系列的规则进行检查,如果包与特定的IP/端口/协议的组合匹配,规则就会被应用到这个包上,以决定包是否被通过、拒绝或丢弃。firewalld是最新的netfiler用户态抽象层。filewalld可以通过定义源IP和端口网络将入站流量分类到不同区域zone。每个区域基于指定的准则按自己配置去通过或拒绝包。另外的改进是基于iptables进行语法简化。firewalld通过使用服务名而不是它的端口和协议去指定服务,使它更易于使用。例如,是使用samba而不是使用UDP端口137和138和TCP端口139和445.它进一步简化语法,消除了iptables中对语句顺序的依赖

一、firewalld的基本使用

systemctl start firewalld			//启动
systemctl status firewalld			//查看状态
systemctl disable firewalld			//停止
systemctl stop firewalld			//禁用
systemctl restart firewalld			//重启
  • iptables功能总结

    常用的两张表:filter、nat     filter用于过滤数据包,nat用于路由转发功能
    常用的两条链:INPUT、OUTPUT
    常见的三个行为:ACCEPT、DROP、REJECT
    限制流量的三个特征:端口、协议、IP		对应的五元组:-d -s --dport --sport -p
    端口转发:本机端口、远程端口
    
  • firewalld中,没有表、没有链、没有行为,默认拒绝

二、区域

在不同的区域下,可以设置不同的防火墙策略,以便在需要的时候可以实现快速切换,而不需要从0开始配置一套。对于一套服务器环境来说,通常情况下,没有那么多需要去切换。drop、public、常用

drop		//丢弃。任何传入的网络数据包都被丢弃,没有回复。只能进行传出网络连接。

block		//阻止。任何传入的网络连接都被拒绝,其中包含用于IPv4的icmp-host-prohibited消息和用于IPv6的icmp6-adm-prohibited。只能从系统内启动网络连接

public		//公共(默认)。用于公共场所。

external		//外部网络。用于特别为路由器启用伪装的外部网络。

work 		//工作。用于工作区域

home		//家庭。适用于家庭领域

internal			//内部。用于内部网络

trusted			//受信任。接受所有网络连接。将接口连接添加到NetworkManager时,会将它们分配给默认区域。安装时,firewalld中的默认区域将设置为公共区域

1、配置firewalld-cmd
运行firewalld-cmd --list-all查看基础配置信息:
[root@yyb ~]# firewall-cmd --list-all
public (active)			//表示public区域是默认区域(当接口启动时会自动默认),并且他是活动的。		
  target: default
  icmp-block-inversion: no	//是否拒绝icmp
  interfaces: ens33		//列出了这个区域上关联的接口。
  sources: 			//列出了这个区域的源。格式xxx.xxx.xxx.xxx/xx。
  services: dhcpv6-client ssh		//列出了允许通过这个防火墙的服务。
  ports: 			//列出了一个允许通过这个防火墙的目标端口。
  protocols: 
  masquerade: no		//表示这个区域是否允许IP伪装。如果允许,它将允许IP转发
  forward-ports: 		//列出转发的端口
  source-ports: 		
  icmp-blocks: 		//阻塞的icmp流量的黑名单
  rich rules: 		//在一个区域中优先处理的高级配置
default		//是目标区域,它决定了与该区域匹配而没有由上面设置中显示处理的包的动作。
123456789101112131415
firewall-cmd --get-services得到一个防火墙预定义服务的详细列表

运行一下命令理解firewall规则用法:
firewall-cmd --zone=public --list-port			//查看所有打开的端口
firewall-cmd --reload					//更新防火墙规则
firewall-cmd --get-zones				//列出所有区域
firewall-cmd --get-active-zones				//查看区域信息
firewall-cmd --set-default-zone=public		//设定默认区域,立即生效
firewall-cmd --get-zone-of-interface=ens33				//查看指定接口所属区域
firewall-cmd --list-all			//查看所有规则
永久修改
firewall-cmd --permanent <some modification>
firewall-cmd --reload
12
firewall-cmd --add-service=http --permanent
firewall-cmd --reload
12
2、常见使用场景
firewall-cmd --panic-on			//拒绝所有包
firewall-cmd --panic-off			//取消拒绝状态
firewall-cmd --query-panic			//查看是否拒绝

firewall-cmd --add-service=ftp				//暂时开放ftp服务
firewall-cmd --add-service=ftp --permanent			//永久开放ftp服务
firewall-cmd --query-service=ftp			//查询服务开启状态
firewall-cmd --remove-service=http			//阻止http服务
firewall-cmd --list-services			//查看开放的服务
cd /usr/lib/firewalld/services				//查看对应规则库文件	

firewall-cmd --add-port=3306/tcp			//开放通过tcp访问3306
firewall-cmd --remove-port=3306/tcp			//阻止通过tcp访问3306

firewall-cmd --zone=public --query-port=80/tcp			//查看80端口
firewall-cmd --zone=public --list-ports				//查看所有开放端口

firewall-cmd --zone=public --add-port=80/tcp --permanent			//永久开放80端口
firewall-cmd --zone=public --remove-port=80/tcp --permanent			//删除80端口

允许http服务通过1分钟

firewall-cmd --zone=public --add-service=http --timeout=1m
//timeout选项	s秒、m分、h小时为单位
12
  • 重载防火墙

    firewall-cmd --reload
    
  • 检查防火墙状态

    firewall-cmd --state
    
  • 让设定生效

    systemctl restart firewalld
    
  • 检查设定是否生效

    iptables -L -n | hrep 21
    firewall-cmd --list-all
    
  • 查看当前活动区域

firewall-cmd --get-active-zone
  • 获取到所有的区域

    firewall-cmd --get-zones
    
3、富规则

与iptables一致,富规则中的动作可以设置为:accept、drop、reject(小写)

  • 添加指定ip访问端口规则:

    firewall-cmd --permanent -add-rich-rule 'rule family=ipv4 source address="192.168.184.1" port protocol="tcp" port=80 accept'
    
  • 删除指定某个IP访问特定端口规则

    firewall-cmd --remove-rich-rule 'rule family=ipv4 source address="192.168.184.1" port protocol="tcp" port="80" accept'
    
  • 允许ping

    firewall-cmd --add-rich-rule='rule family="ipv4" protocol value="icmp" source address="192.168.184.1" accept'
    
  • 端口转发

    iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-port 8080
    
  • 接受192.168.184.0网段所有的IP访问SSH服务

    firewall-cmd --add-rich-rule='rule family=ipv4 source address="192.168.184.0/24" service name=ssh accept'
    
  • 直接模式(使用iptables语法)

    firewall-cmd --direct --add-rule ipv4 filter INPUT 1 -p tcp --dport 80 -s 192.168.184.1 -j ACCEPT
    //INPUT后的数字 1 代表规则的优先级,数字越小优先级越高
    firewall-cmd --direct --get-all-rules		//查看直接模式下的规则
    firewall-cmd --direct --remove-rule ipv4 filter INPUT 1 -p tcp --dport 80 -s 192.168.184.1 -j ACCEPT
    
4、端口转发

注意问题

  • 比如我将80端口转发至8080端口,首先检查本地80和8080端口是否开放监听
  • 其次检查是否允许伪装IP,没有的话要开启
//将8888端口的流量转发至80
firewall-cmd --add-forward-port=port=8888:proto=tcp:toport=80
firewall-cmd --remove-forward-port=port=8888:proto=tcp:toport=80    
  • 开启伪装IP

    firewall-cmd --add-masquerade
    
  • 关闭伪装IP

    firewall-cmd --remove-masquerade
    

三、扩展

在linux中,配置文件通常是在/etc/目录下;日志文件一般在/var/log目录下

可以使用find /etc/ -name "*frewall*"查找配置文件

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

阿凯6666

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值