侧边栏壁纸
  • 累计撰写 29 篇文章
  • 累计创建 6 个标签
  • 累计收到 0 条评论

目 录CONTENT

文章目录

Linux防火墙

Administrator
2026-02-01 / 0 评论 / 0 点赞 / 1 阅读 / 0 字

Linux 防火墙

iptables

介绍

  1. 是 Linux 老版本(CentOS)防火墙 Netfilter 的管理工具。

  2. 概念

      • filter:过滤

      • nat:网络地址转换,路由器上会用

      • mangle:修改数据包

      • raw:指定不被连接跟踪的数据包

      • input 链:入方向网络

      • output 链:出方向网络

      • forward 链:转发

      • prerouting:在路由之前操作数据

      • postrouting: 在路由之后操作数据

    • 规则

      • accept:允许

      • drop:丢弃

      • reject:拒绝

使用

iptables -L -n --line-numbers		#查看 filter 表所有的链的所有的规则
image-20250604212644589

添加规则——(入方向)

  1. 命令

    iptables -I 或 -A INPUT -s 192.168.85.128 -p icmp -j DROP
    		#丢弃来自 192.168.85.128 的 ping
    		#-I 在最头部添加一个规则
    		#-A 在尾部添加一个规则
    		#-S 源地址,想要禁止的 IP
    		#-p 协议,ping 的协议是 icmp
    		#-j 动作,DROP/REJECT
    		
    iptables -D INPUT 1
    		#删除 INPUT 入方向的第一条规则
    
    iptables -I INPUT -s 192.168.85.128 -p icmp -j REJECT
    		#-j 动作设置为:REJECT,会有明确的拒绝连接回复
    
    image-20250604220859770
    image-20250604221259268
  2. 拦截出方向

    iptables -I OUTPUT -p icmp -j DROP
    		#拦截出方向,也可以禁止 ping,但是不规范
    iptables -D OUTPUT 1		#删除规则
    
    image-20250604224907619
    未命名绘图
    iptables -I INPUT -s 192.168.85.128 -j DR0P
    		#完全禁止来自 192.168.85.128 的任何流量
    		
    iptables -I INPUT -s 192.168.85.128 -p tcp --dport 22 -j REJECT
    		#--dport 目的端口
    
    未命名绘图
    iptables -I INPUT -s 192.168.85.128 -p tcp -m multiport --dport 20,21 -j REJECT
    			#拦截来自 192.168.85.128 的 ftp 流量
    
    iptables -I INPUT -s 192.168.85.1/24 -p tcp --dport 22 -j REJECT
    			#拦截 192.168.85.1 - 192.168.85.254 的流量
    iptables -I INPUT -m iprange --src-range 192.168.85.100-192.168.85.150 -p tcp --dport 22 -j REJECT
    			#拦截 192.168.85.100 - 192.168.85.150 的流量
    
  3. 测试通信

    • 测试 22 端口

      iptables -I INPUT -s 192.168.85.128 -p tcp --dport 22 -j REJECT
      				#关 22 端口
      ssh root@IP地址
      
      image-20250604224107264
    • 测试 8000 端口

      iptables -I INPUT -s 192.168.85.128 -p tcp --dport 8000 -j REJECT
      				#关 8000 端口
      
      python-m http.server		#开启 8000 端口
      wget http://IP地址:8000		#测试
      
      image-20250604224309860
    • 删除规则

      iptables -F		#删除所有的 iptables 规则
      

添加规则——(出方向)

[!NOTE]

应用场景:禁止出网(特定的协议)

  1. 禁用 ping

    iptables -I INPUT -p icmp -j REJECT		#入方向
    或
    iptables -I OUTPUT -p icmp -j DROP		#出方向
    
  2. 禁止访问 http 网站(http 不出网)

    iptables -I OUTPUT -p tcp --dport 80 -j DROP
    
    未命名绘图
  3. 禁止访问 https 网站(https 不出网 / tls 不出网)

    iptables -I OUTPUT -p tcp --dport 443 -j DROP
    
    未命名绘图
iptables -I OUTPUT -p tcp --dport 8000 -j DROP
未命名绘图
  • kali 访问 CentOS

    • 请求是入方向,不满足防火墙规则,不拦截。

    • 响应是出方向,但是目的端口是随机的,不满足防火墙规则,不拦截。

  • CentOS 访问 ubuntu

    • 请求是出方向,目的端口是 8000 端口,满足防火墙规则,拦截。

  • aliyun server 访问 CentOS

    • 请求是入方向,不满足防火墙规则,不拦截。

    • 但有物理限制,故无法访问,与防火墙无关。

ufw

介绍

  • 基于 iptables,每条 ufw 命令对应一条或多条 iptables 命令。

命令

apt install ufw		#安装 ufw 防火墙

systemctl start ufw		#该命令无法使防火墙开启,还需要以下命令才可以

ufw status		#查看防火墙状态
    	---inactive		#关闭状态
		---active		#开启状态
    
ufw enable		#开启防火墙
ufw disable		#关闭防火墙
image-20250605200227719

配置——(入方向)

[!WARNING]

ufw 默认禁止所有入方向的流量。

  • 允许入方向流量

    ufw allow 8000/tcp		#允许任何机器访问自己的 8000 端口
    
  • 查看规则

    ufw status				#查看规则
    ufw status numbered		#查看规则并显示标号
    
    image-20250605200526585
  • 删除规则

    ufw delete allow 8000/tcp
    ufw delete 标号		#查看标号后,即可用标号删除规则
    
  • 快捷添加端口方式

    ufw allow http   ===等价===   ufw allow 80/tcp
    ufw allow ssh    ===等价===   ufw allow 21/tcp
    
  • 只允许某 IP 连接固定端口

    ufw allow from 192.168.85.101 to any port 8000 proto tcp
        		#只允许 192.168.85.101 连接自己的 8000 端口
    

配置——(出方向)

[!WARNING]

ufw 默认允许所有出方向的流量。

  • 拒绝出方向流量

    ufw deny out 22/tcp
    ufw deny out ssh
        		#拒绝 22 端口出方向流量
    			#即禁止了到其他主机 22 端口的 TCP 流量
    
    ufw deny out to 192.168.85.101 port 8000 proto tcp
        		#拒绝通往 192.168.85.101 的 8000 端口
    
    image-20250605103835066

firewalld

介绍

  • CentOS 7 之后的防火墙,不是 iptables。

命令

  • 查看默认规则

    firewall-cmd --list-all
    firewall-cmd --list-ports
    

    [!IMPORTANT]

    firewalld 默认禁止所有的入方向流量,但保留了一些周知端口。

配置——(入方向)

  • 允许入方向的某个端口

    firewall-cmd --add-port=8000/tcp		#允许入方向的 8000 端口
    
  • 删除规则

    firewall-cmd --remove-port=8000/tcp 
    
  • 应急模式(禁止所有的入、出流量)

    firewall-cmd --panic-on			#开启应急模式
    firewall-cmd --panic-off		#关闭应急模式
    
  • 禁用 ping

    firewall-cmd --add-icmp-block-inversion			#禁用 ping
    firewall-cmd --remove-icmp-block-inversion		#启用 ping
    

selinux

介绍

  • selinux 不是网络防火墙。

命令

  • 临时关闭 selinux

    setenforce 0
    
  • 永久关闭 selinux

    • 编辑 /etc/selinux/config,重启。

      SELINUX=disabled		#设置为禁止 selinux
      reboot		#重启
      
      image-20250605200845772

0

评论区