博客
关于我
day4-Iptables防火墙
阅读量:347 次
发布时间:2019-03-04

本文共 4049 字,大约阅读时间需要 13 分钟。

Iptables防火墙配置与实战案例

一、Iptables防火墙结构介绍

Iptables是Linux系统中的一种网络防火墙工具,用于管理网络流量。其核心功能是通过定义规则来过滤、转发数据包,从而实现对网络的访问控制。Iptables的规则由表(tables)和链(chains)组成,每条规则都有一个目标(-j option)。

1.1 Iptables进入主机进行过滤的流程图

数据包进入主机时,防火墙规则的执行顺序是从前到后依次执行。如果遇到匹配的规则,则执行该规则后停止检查其他规则;如果不匹配则继续向下进行。需要注意的是,匹配到了拒绝规则也会停止检查,防火墙的默认行为是拒绝所有未明确允许的数据包。

1.2 表与链的关系

Iptables主要有以下几种表:

  • filter表:用于过滤数据包,主要用于输入、输出和转发链。
  • nat表:用于实现网络地址转换(NAT),主要用于PREROUTING和POSTROUTING链。
  • mangle表:用于修改数据包的标识信息,主要用于INPUT和OUTPUT链。

每个表包含多条链,链中的规则按顺序执行。一般情况下,用户不会经常使用mangle表,因为它相对复杂且不常用。

1.3 常用表的介绍

  • filter表:处理大部分的过滤规则,主要用于INPUT、OUTPUT、FORWARD链。
  • nat表:实现IP地址转换功能,通常用于PREROUTING和POSTROUTING链。

二、Iptables命令规则及配置

2.1 Iptables表与链的工作流程

数据包的流向和流程如下:

  • 数据包进入主机时,首先经过NAT表的PREROUTING链。
  • 如果数据包需要进入主机内部,则经过filter表的INPUT链。
  • 数据包离开主机内部时,经过NAT表和filter表的OUTPUT链。
  • 如果数据包需要离开主机,则经过filter表的FORWARD链。
  • 最后,数据包经过NAT表的POSTROUTING链。
  • 2.2 配置生产环境主机防火墙

    在实际操作中,需要注意以下几点:

  • 默认规则:默认规则是拒绝所有未明确允许的数据包。
  • 链的顺序:规则的执行顺序很重要,建议从最具体到最一般的规则进行定义。
  • 保存规则:可以通过iptables-save命令将规则保存到文件中,方便后续恢复。
  • 2.3 防火墙配置脚本示例

    以下是一个常用的防火墙配置脚本示例:

    #!/bin/bashIPT="/sbin/iptables"# 清空所有规则$IPT -F$IPT -X$IPT -Z# 允许SSH访问$IPT -A INPUT -s 192.168.1.0/24 -p tcp --dport 52113 -j ACCEPT$IPT -A INPUT -s 202.81.17.0/24 -p tcp --dport 52113 -j ACCEPT$IPT -A INPUT -s 10.0.0.0/24 -p tcp --dport 52113 -j ACCEPT$IPT -A INPUT -p tcp --dport 22 -j ACCEPT# 允许访问特定端口$IPT -A INPUT -s 192.168.1.0/24 -p all -j ACCEPT$IPT -A INPUT -s 202.81.17.0/24 -p all -j ACCEPT$IPT -A INPUT -s 10.0.0.0/24 -p all -j ACCEPT# 设置默认策略$IPT --policy INPUT ACCEPT$IPT --policy FORWARD DROP$IPT --policy OUTPUT ACCEPT# 允许环回接口访问$IPT -A INPUT -i lo -j ACCEPT$IPT -A OUTPUT -o lo -j ACCEPT# 拦截恶意地址$IPT -A INPUT -i eth0 -s 172.16.0.0/12 -j DROP$IPT -A INPUT -i eth0 -s 0.0.0.0/8 -j DROP$IPT -A INPUT -i eth0 -s 169.254.0.0/16 -j DROP$IPT -A INPUT -i eth0 -s 192.0.2.0/24 -j DROP# 防御潜在攻击$IPT -A INPUT -p tcp --tcp-flags ALL ALL -j DROP$IPT -A INPUT -p tcp --tcp-flags ALL NONE -j DROP$IPT -A INPUT -p tcp --tcp-flags ALL FIN,URG,PSH -j DROP$IPT -A INPUT -p tcp --tcp-flags SYN,RST SYN,RST -j DROP$IPT -A INPUT -p tcp --tcp-flags SYN,FIN SYN,FIN -j DROP$IPT -A INPUT -p tcp --tcp-flags FIN,RST FIN,RST -j DROP$IPT -A INPUT -p tcp --tcp-flags ACK,FIN FIN -j DROP$IPT -A INPUT -p tcp --tcp-flags ACK,PSH PSH -j DROP$IPT -A INPUT -p tcp --tcp-flags ACK,URG URG -j DROP# 允许特定服务$IPT -A INPUT -s 192.168.1.0/24 -p tcp --dport 5666 -j ACCEPT$IPT -A INPUT -s 202.81.17.0/24 -p tcp --dport 5666 -j ACCEPT$IPT -A INPUT -s 202.81.18.0/24 -p tcp --dport 5666 -j ACCEPT$IPT -A INPUT -s 192.168.1.0/24 -p tcp --dport 3306 -j ACCEPT$IPT -A INPUT -s 192.168.1.0/24 -p tcp --dport 3307 -j ACCEPT$IPT -A INPUT -s 192.168.1.0/24 -p tcp --dport 3308 -j ACCEPT$IPT -A INPUT -s 192.168.1.0/24 -p tcp --dport 1521 -j ACCEPT$IPT -A INPUT -p tcp --dport 21 -j ACCEPT$IPT -A INPUT -p tcp --dport 80 -j ACCEPT$IPT -A INPUT -s 192.168.1.0/24 -p tcp -m multiport --dport 8080,8081,8082,8888,8010,8020,8030,8150 -j ACCEPT$IPT -A INPUT -s 202.81.17.0/24 -p tcp -m multiport --dport 8080,8081,8082,8888,8010,8020,8030,8150 -j ACCEPT$IPT -A INPUT -s 124.43.62.96/27 -p tcp -m multiport --dport 8080,8081,8082,8888,8010,8020,8030,8150 -j ACCEPT$IPT -A INPUT -s 192.168.1.0/24 -p udp --dport 161 -j ACCEPT$IPT -A INPUT -s 202.81.17.0/24 -p udp --dport 161 -j ACCEPT$IPT -A INPUT -s 192.168.1.0/24 -p tcp -m tcp --dport 873 -j ACCEPT$IPT -A INPUT -s 202.81.17.0/24 -p tcp -m tcp --dport 873 -j ACCEPT$IPT -A INPUT -s 124.43.62.96/27 -p tcp -m tcp --dport 873 -j ACCEPT$IPT -A INPUT -s 192.168.1.0/24 -p udp -m multiport --dport 111,892,2049 -j ACCEPT$IPT -A INPUT -s 192.168.1.0/24 -p tcp -m multiport --dport 111,892,2049 -j ACCEPT$IPT -A INPUT -p icmp -m icmp --icmp-type any -j ACCEPT$IPT -A INPUT -s 124.43.62.96/27 -p icmp -m icmp --icmp-type any -j ACCEPT$IPT -A INPUT -s 192.168.1.0/24 -p icmp -m icmp --icmp-type any -j ACCEPT$IPT -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT$IPT -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT# 脚本结束

    三、实战案例

    在实际操作中,可以根据需要调整防火墙规则。例如:

  • 如果需要开放更多端口,可以在对应的规则中添加相应的允许规则。
  • 如果需要限制访问,可以通过设置更严格的访问控制列表(ACL)来实现。
  • 在生产环境中,建议定期备份防火墙规则,确保网络安全。
  • 转载地址:http://xqhe.baihongyu.com/

    你可能感兴趣的文章
    MySQL中group by 与 order by 一起使用排序问题
    查看>>
    mysql中having的用法
    查看>>
    MySQL中interactive_timeout和wait_timeout的区别
    查看>>
    mysql中int、bigint、smallint 和 tinyint的区别、char和varchar的区别详细介绍
    查看>>
    mysql中json_extract的使用方法
    查看>>
    mysql中json_extract的使用方法
    查看>>
    mysql中kill掉所有锁表的进程
    查看>>
    mysql中like % %模糊查询
    查看>>
    MySql中mvcc学习记录
    查看>>
    mysql中null和空字符串的区别与问题!
    查看>>
    MySQL中ON DUPLICATE KEY UPDATE的介绍与使用、批量更新、存在即更新不存在则插入
    查看>>
    MYSQL中TINYINT的取值范围
    查看>>
    MySQL中UPDATE语句的神奇技巧,让你操作数据库如虎添翼!
    查看>>
    Mysql中varchar类型数字排序不对踩坑记录
    查看>>
    MySQL中一条SQL语句到底是如何执行的呢?
    查看>>
    MySQL中你必须知道的10件事,1.5万字!
    查看>>
    MySQL中使用IN()查询到底走不走索引?
    查看>>
    Mysql中使用存储过程插入decimal和时间数据递增的模拟数据
    查看>>
    MySql中关于geometry类型的数据_空的时候如何插入处理_需用null_空字符串插入会报错_Cannot get geometry object from dat---MySql工作笔记003
    查看>>