Linux防火墙配置及iptables与firewalld的使用解读

 更新时间:2025年01月13日 10:18:29   作者:火苗06  
防火墙是一种网络安全设备,通过规则控制进出网络的访问行为,它分为硬件防火墙和软件防火墙两大类,iptables是Linux系统中用于配置防火墙的工具,具有4个表和5个链,firewall命令用于配置和管理防火墙,有drop、block、public、external、dmz等不同的区域配置

1 防火墙定义

  • 防火墙是一种高级访问控制设备,置于不同网络安全域之间,他通过相关的安全策略来控制(允许,拒绝,监视,记录)进出网络的访问行为。
  • 防火墙是一组规则,当数据包进出受保护的网络区域时,进出内容(特别是关于其来源、目标和使用的协议等信息)会根据防火墙规则进行检测,以确定是否允许其通过。

2 防火墙分类

  • 硬件防火墙
  • 软件防火墙
  • 主机防火墙
  • 网络防火墙

3 iptables

3.1 iptables 四表五链

3.1.1 功能(表)

  • filter:防火墙过滤数据包,默认表
  • nat:网络地址转换(network address translation)
  • mangle:拆分,做出修改
  • raw:关闭nat表上启用的连接追踪功能

3.1.2 链

PREROUTING      (previous  routing路由前)
INPUT
OUTPUT
FORWARD
POSTROUTING  (postpone routing路由后)

3.1.3 功能(表)中的链

filter:INPUT,FORWARD,OUTPUT
nat:PREROUT(DNAT),INPUT,OUTPUT,POSTROUTING(SNAT)
mangle:PREROUTING,INPUT,FORWARD,OUTPUT,POSTROUTING
raw:PREROUTING,OUTPUT

3.2 优先级

策略应用优先级:raw,mangle,nat,filter
策略常用优先级:filter,nat,mangle,raw

3.3 iptables 命令的使用

iptables工具:
	-t:指定表
	-L:查看规则 
	-n:以数字形式查看
	-F:清空所有规则
	-X:清除自定义链
	-P:指定链的默认规则
	-j:指定要执行的动作
		ACCEPT:接受
		DROP:丢弃
		REJECT:拒绝
		DNAT:目标地址转换
		SNAT:源地址转换
	-A:append追加策略
	-s:source源ip(网段)
	-d:destination目标ip(网段)
	-I:insert插入策略
	-p:protocol指定协议
	--dport:指定目标端口
	--sport:指定源端口
	--line-num:显示规则行号
	-D:按照行号删除某链中的规则
	-i:指定网卡

3.3.1 filter表

清空所有策略:                                        iptables -F
清空自定义链:                                        iptables -X
自定义一个链                                         iptables -N old_forward
修改自定义链的名字                                    iptables -E old_forward new_forward
把filter中forward链的默认策略打成drop                  iptables -P FORWARD DROP                
查看filter表中的策略并且显示行数:                      iptables -L -n --line-number    
删除filter表中forward链中的第9条策略:                 iptables -t filter -D FORWARD 9



#限制所有主机(0.0.0.0)拒绝ping本主机                    
iptables -t filter -A INPUT -s 0.0.0.0 -d 192.168.254.24 -p icmp -j REJECT    

#显示所有主机(0.0.0.0)拒绝通过ens33网卡ping本主机       
iptables -t filter -A INPUT -d 192.168.254.24 -i ens33 -p icmp -j REJECT

#只允许10.159.32.65访问本地80端口

iptables -I INPUT -p TCP --dport 80 -j DROP     //拒绝所有机器访问
iptables -I INPUT -s 10.159.32.65-p TCP --dport 80 -j ACCEPT       //对某个ip放行

或

iptables -P INPUT  -j DROP     //设置INPUT链的默认规则
iptables -I INPUT -s 10.159.32.65-p TCP --dport 80 -j ACCEPT       //对某个ip放行

3.3.2 nat表

##开启转发模式

╭─root@localhost.localdomain ~  
╰─➤  cat /proc/sys/net/ipv4/ip_forward 
0
╭─root@localhost.localdomain ~  
╰─➤  echo 1 > /proc/sys/net/ipv4/ip_forward

或者

# vim /etc/sysctl.conf 
...
net.ipv4.ip_forward = 1
...
# sysctl -p
#源地址为192.168.250.0网段的ip地址经过防火墙都转换成192.168.31.100这个ip地址(SNAT:源地址转换)

iptables -t nat -A POSTROUTING -s 192.168.250.0/24  -d 192.168.250.0/24 -j SNAT --to-source 192.168.31.100
 
-------------------------------------------------------
   
#访问目标地址为192.168.31.200这个机器并且是tcp协议80号端口的都转发给192.168.250.1(DNAT目标地址转换)

iptables -t nat -A PREROUTING -d 192.168.31.200 -p tcp --dport 80 -j DNAT --to-destination 192.168.250.1:80

-------------------------------------------------------

#访问目标地址为192.168.31.200这个机器并且是tcp协议80号端口的都转发给192.168.31.100的9999号端口(DNAT目标端口地址转换)

iptables -t nat -A PREROUTING -d 192.168.31.200 -p tcp --dport 80 -j DNAT --to-destination 192.168.31.100:9999

4 firewall相关配置使用

firewall-cmd --state       #查看状态
firewall-cmd --list-all        #查看过滤的列表信息
firewall-cmd --add-port=80/tcp --permanent    #永久添加一个80端口(重启生效)
firewall-cmd --remove-port=4444/tcp    #移除4444/tcp端口
firewall-cmd --reload     #重新加载firewall

firewall 有zone的概念

[root@node1 ~]# firewall-cmd --get-zones
work drop internal external trusted home dmz public block
  • drop(丢弃) 任何接收到的网络数据都被丢弃,没有任何回复,公有发送出去的网络连接
  • block(限制)任何接收的网络连接都被IPV4 的icmp-host-prohibited信息和IPV6的icmp6-adm-prohibited信息所拒绝
  • public (公共) 在公共区域内使用,不能相信网络内的其它计算机不会对你的计算机造成危害,只接收经过选取的连接
  • external (外部)特别是为路由器启用了伪装功能的外部网。你不能信任来自网络的其它计算,不能信任它们不会对你的计算机造成危害,只能接收经过选择的连接。
  • dmz (非军事区) 用于你的非军事区的电脑 ,此区域内可公开访问,可以有限的进入你的内部网络,仅接收经过选择的连接。
  • work (工作) 可以基本信任网络内的其它计算机不会危害你的计算机,仅接收经过选择的连接。
  • home (家庭) 用于家庭网络,可以基本信任网络内的其它计算机不会危害你的计算机,仅接收经过选择的连接。
  • internal (内部)用于内部网络,可以基本信任网络内的其它计算机不会危害你的计算机,仅接收经过选择的连接
  • trusted (信任) 可接收所有的网

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • 实现一台或者多台Linux实例解绑SSH密钥对

    实现一台或者多台Linux实例解绑SSH密钥对

    在本篇文章中我们给大家分享了一篇如何为一台或者多台 Linux 实例解绑 SSH 密钥对的相关内容,有兴趣的朋友们学习下。
    2018-10-10
  • Linux加入windows ad域步骤详解(winbindsamba方案)

    Linux加入windows ad域步骤详解(winbindsamba方案)

    本文主要实验centos加入windows AD的方法,大家参考使用
    2013-12-12
  • Apache Flink 如何保证 Exactly-Once 语义(其原理分析示例)

    Apache Flink 如何保证 Exactly-Once 语义(其原理分析示例)

    Apache Flink 是一个流处理和批处理的开源平台,它提供了丰富的语义保证,其中之一就是 Exactly-Once 语义,本文将深入探讨 Flink 是如何保证 Exactly-Once 语义的,包括其原理分析和相关示例,感兴趣的朋友跟随小编一起看看吧
    2024-06-06
  • 在ubuntu中部署samba服务器的方法

    在ubuntu中部署samba服务器的方法

    这篇文章主要介绍了在ubuntu中部署samba服务器的方法,包括samba的安装,创建Samba配置文件的方法,本文给大家介绍的非常详细,具有参考借鉴价值,需要的朋友可以参考下
    2016-10-10
  • CentOS7下GitLab跨大版本升级的方法

    CentOS7下GitLab跨大版本升级的方法

    这篇文章主要介绍了CentOS7下GitLab跨大版本升级的方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-07-07
  • 在Linux中使用Vundle管理Vim插件的方法

    在Linux中使用Vundle管理Vim插件的方法

    Vim缺乏默认的插件管理器,所有插件的文件都散布在~/.vim下的几个文件夹中,插件的安装与更新与删除都需要自己手动来,既麻烦费事,又可能出现错误。下面这篇文章主要给大家介绍了关于在Linux中使用Vundle管理Vim插件的方法,需要的朋友可以参考下。
    2018-04-04
  • Linux安装Docker-Compose过程

    Linux安装Docker-Compose过程

    文章介绍了在Linux系统上安装Docker Compose的步骤,包括使用curl从GitHub下载Docker Compose二进制文件并保存到/usr/local/bin目录,然后通过chmod命令增加执行权限
    2024-11-11
  • Linux LVM逻辑卷相关管理方式

    Linux LVM逻辑卷相关管理方式

    这篇文章主要介绍了Linux LVM逻辑卷相关管理方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-04-04
  • 详解ubuntu安装CMake的几种方式

    详解ubuntu安装CMake的几种方式

    这篇文章主要介绍了详解ubuntu安装CMake的几种方式,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-08-08
  • Ubuntu18.04通过源码安装Odoo14的教程

    Ubuntu18.04通过源码安装Odoo14的教程

    本系列文章针对Odoo 14版,从系统安装,开发环境配置,代码结构,主要功能升级,源码赏析,Anodoo对Odoo的关键扩展等角度,预先给大家介绍即将在2020年发布的这一最新版本
    2020-02-02

最新评论