iptables

  • iptables防火墙概念介绍
    开放源代码的完全自由的基于包过滤的防火墙工具,主要工作在OSI七层的二、三、四层

  • iptables安装
    rpm -qa iptables iptables-services #查看是否安装,没有再装
    需要关闭selinux,否则iptables不读取配置文件
    临时关闭selinux setenforce 0
    永久关闭 sed -i 's#SELINUX=enforcing#SELINUX=disabled#g' /etc/selinux/config #修改完成后需要重启才能生效
    centos7需要关闭firewalld systemctl disable --now
    yum install -y iptables-services #安装iptables服务端

  • iptables防火墙工作原理
    名词概念:容器 表 链 规则
    容器:装东西的一个器皿
    表: 表(防火墙功能表)装入到防火墙服务(容器)
    链: 链(具体功能说明)装入到防火墙的表中(容器)
    规则:规则(具体策略信息)装入到防火墙的链中(容器)
    规则 --> 链 --> 表 --> 防火墙服务程序

    四表 (man iptables 查看详细帮助)
    filter (过滤) iptables的默认表,进行包过滤处理一张表,主要用作主机防火墙
    nat (映射) 端口或IP映射或共享上网,对数据地址信息进行转换/数据包端口信息进行转换,实现内网用户访问外网,实现外网用户访问内网
    mangle 对数据包信息进行标记修改 MPLS
    raw 将数据一些标记信息进行拆解

    五链
    INPUT 对进入数据进行包过滤处理 电影院
    FORWARD 对流经数据进行包过滤处理 传达室
    OUTPUT 对流出数据进行包过滤处理 监狱
    从防火墙自身产生数据包要访问外网时,需要进行映射
    POSTROUTING post 某件事处理之后再做什么事 路由之后进行什么处理
    经过路由之后,对数据信息进行映射 --- 完成内网主机可以访问外网
    REROUTING pre 某件事处理之前需要做什么事 路由之前进行什么处理
    经过路由之前,对数据信息进行映射 --- 完成外网主机可以访问内网

    规则说明:防火墙包处理方式

    1. 防火墙是层层过滤的,实际是按照配置规则的顺序从上到下,从前到后进行过滤的。
    2. 如果匹配上规则,即明确表示是阻止还是通过,数据包就不再向下匹配新的规则。
    3. 如果规则中没有明确表明是阻止还是通过的,也就是没有匹配规则,向下进行匹配,直到匹配默认规则得到明确的阻止还是通过。
    4. 防火墙的默认规则是所有规则执行完才执行的。
  • iptables防火墙配置过程:
    防火墙初始化配置:
    iptables -F Delete all rules in chain or all chains
    删除链上所有规则信息
    iptables -Z Zero counters in chain or all chains
    清除所有计数器信息 (排错使用)
    iptables -X Delete a user-defined chain ??? 简化防火墙配置工作
    删除用户自定义链信息

  • 防火墙信息查看方法:
    iptables -nL -v --line-numbers -t xx 查看防火墙配置信息
    -L --- 列表显示防火墙配置的规则信息
    -n --- 规则中地址或端口信息以数字方式呈现
    -v --- 查看防火墙更详细配置信息
    -t --- 指定查看哪个表配置信息
    --line-numbers --- 显示配置规则需要信息

  • 练习
    filter表配置方法:
    练习题一:阻止所有用户都不能访问SSH远程服务 基于端口进行访问控制(4层)
    iptables -A INPUT -p tcp --dport 22 -j DROP

    练习题二:阻止指定ip远程连接防火墙主机 基于地址进行访问控制(3层)
    iptables -A INPUT -s 10.0.0.1 -p tcp --dport 22 -j DROP

    练习题三:除了10.0.0.1可以访问22端口,这个网段中其他主机都不能访问
    方法一:
    iptables -A INPUT -s 10.0.0.1 -p tcp --dport 22 -j ACCEPT
    iptables -A INPUT -s 10.0.0.0/24 -p tcp --dport 22 -j DROP
    方法二:
    iptables -A INPUT ! -s 10.0.0.1 -p tcp --dport 22 -j DROP

    练习题四:根据指定网卡进行访问控制,只允许数据包从eth0接口进入进行访问 访问80端口
    iptables -A INPUT -i eth0 -p tcp --dport 80 -j ACCEPT
    iptables -A INPUT -i eth1 -p tcp --dport 80 -j DROP

    练习题五:防火墙配置顺序问题
    iptables -I INPUT -s 10.0.0.1 -p tcp --dport 80 -j ACCEPT
    iptables -I INPUT 2 -s 10.0.0.1 -p tcp --dport 80 -j ACCEPT
    iptables -I INPUT 2 -s 10.0.0.0/24 -p tcp --dport 22 -j ACCEPT

    练习题六:防火墙规则信息进行修改
    iptables -R INPUT 2 -s 10.0.0.0/24 -p tcp --dport 23 -j ACCEPT

    练习题七:防火墙规则阻止访问多个端口信息
    阻止10.0.0.1 主机访问 22-30端口 连续多个端口
    iptables -A INPUT -s 10.0.0.1 -p tcp --dport 23:30 -j DROP

    阻止10.0.0.1 主机访问 22,24,25 间断多个端口
    iptables -A INPUT -m multiport -s 10.0.0.1 -p tcp --dport 21,23,27 -j DROP

    练习题八:实现防火墙服务禁ping功能
    能进行ping的链路测试,是依赖于icmp协议
    发送端(请求消息) --- 接收端(响应消息)
    请求消息:icmp类型8
    响应消息:icmp类型0

    情况一:
    客户端主机 -icmp 8->(阻止) 服务器主机(防火墙)
    iptables -A INPUT -p icmp --icmp-type 8 -j DROP
    情况二:
    客户端主机 <icmp 0- (阻止) 服务器主机(防火墙)
    iptables -A OUTPUT -p icmp --icmp-type 0 -j DROP
    情况三:
    直接禁止icmp协议
    iptables -A INPUT -p icmp -j DROP
    iptables -A OUTPUT -p icmp -j DROP

    练习题九:防火墙服务进行限速处理 控制数据发送频次
    -m limit --limit n/{second/minute/hour}: --- 传输数据包频次效率
    ---limit-burst [n] --- 触发指定阈值进行限制

    iptables -I INPUT -s 10.0.0.1 -p icmp --icmp-type 8 -m limit --limit 6/min --limit-burst 5 -j ACCEPT
    iptables -A INPUT -s 10.0.0.1 -p icmp --icmp-type 8 -j DROP

    练习题十:防火墙默认规则配置
    filter:
    INPUT: ACCEPT 逛公园 (INPUT 黑名单) --> DROP 看电影 (INPUT 白名单)
    FORWARD: ACCEPT --> DROP
    OUTPUT: ACCEPT


    建议:放置防火墙将远程用户提出门外方法

    1. 在配置防火墙服务时,编写一个定时任务 间隔20分钟 将防火墙服务重启
    2. 尽量是脚本方式配置
    3. 保存好防火墙配置信息,在服务器启动文件 iptables -P INPUT ACCEPT /iptables -F

    iptables -P INPUT DROP

    删除已有配置信息:
    方式一:根据已有规则信息删除规则
    iptables -D INPUT ! -s 10.0.0.1 -p tcp --dport 22 -j DROP
    方式二:根据规则序号删除规则
    iptables -D INPUT 2

    -A --- 指定在哪个链上添加规则信息
    -I --- 指定在哪个链上插入规则信息
    -D --- 将指定链上规则进行删除操作
    -R --- 将指定链上规则进行修改操作
    -P --- 设置默认策略

    -p --- 指定匹配规则的协议信息(tcp udp icmp)

    --dport --- 指定访问目标端口信息
    --sport --- 指定访问源端口信息

    -s --- 指定数据包源地址或者网段信息
    -d --- 指定数据包目标地址或者网段信息

    -i --- 指定数据包进入网卡信息
    -o --- 指定数据包流出网卡信息

    -j --- 对匹配信息做什么处理 (ACCEPT DROP(丢弃-优选) REJECT(拒绝))

    -m --- 匹配扩展防火墙需求信息
    multiport --- 识别多端口配置信息
    limit --- 实现流量限速功能

nat表配置方法:
postrouting:地址或端口映射 先进行路由在将地址信息进行转换
prerouting: 地址或端口映射 先进行地址信息转换在进行路由

案例一:只有内网IP地址主机如何实现访问外网
第一个里程:配置内网主机网卡地址信息
修改主机内网网卡
GATEWAY=172.16.1.71
DNS1=223.5.5.5

验证配置是否生效
# route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 172.16.1.71 0.0.0.0 UG 101 0 0 eth1
172.16.1.0 0.0.0.0 255.255.255.0 U 101 0 0 eth1

第二个里程:修改防火墙服务内核信息,开启路由转发功能
# cat /etc/sysctl.conf
net.ipv4.ip_forward = 1
# sysctl -p

第三个里程:修改防火墙策略规则信息
filter:
# iptables -nL
Chain INPUT (policy DROP)
target prot opt source destination
ACCEPT tcp -- 10.0.0.0/24 0.0.0.0/0 tcp dpt:22
ACCEPT all -- 172.16.1.0/24 0.0.0.0/0

Chain FORWARD (policy DROP)
target prot opt source destination

Chain OUTPUT (policy ACCEPT)
target prot opt source destination

nat:
# iptables -t nat -A POSTROUTING -s 172.16.1.0/24 -o eth0 -j SNAT --to-source 10.0.0.71
# iptables -t nat -nL
Chain POSTROUTING (policy ACCEPT)
target prot opt source destination
SNAT all -- 172.16.1.0/24 0.0.0.0/0 to:10.0.0.71

防火墙配置完毕:不能达到效果如何排错:
第一个里程:检查nat表计数器信息
# iptables -nL -t nat -v
Chain POSTROUTING (policy ACCEPT 89 packets, 5418 bytes)
pkts bytes target prot opt in out source destination
0 0 SNAT all -- * eth0 172.16.1.0/24 0.0.0.0/0 to:10.0.0.71

第二个里程:梳理防火墙各种表和链匹配顺序
参见图示:数据流向原理图

第三个里程:查看防火墙filter策略配置
# iptables -nL -v
Chain FORWARD (policy DROP 2 packets, 168 bytes)
pkts bytes target prot opt in out source destination

解决问题方式:
方式一:简单方式
iptable -P FORWARD ACCEPT
方式二:配置forward策略
forward第一个关卡打通:
iptables -A FORWARD -i eth1 -s 172.16.1.7 -j ACCEPT
forward第二个关卡打通:
iptables -A FORWARD -o eth0 -s 172.16.1.7 -j ACCEPT
forward第三个关卡打通:
iptables -A FORWARD -i eth0 -d 172.16.1.7 -j ACCEPT
forward第四个关卡打通:
iptables -A FORWARD -o eth1 -d 172.16.1.7 -j ACCEPT

案例二:实现外网主机访问内网主机
实现windows主机 -- 内部web服务器 172.16.1.7 22
防火墙映射配置
# iptables -t nat -A PREROUTING -d 10.0.0.71 -p tcp --dport 9000 -i eth0 -j DNAT --to-destination 172.16.1.7:22
# iptables -t nat -nL
Chain PREROUTING (policy ACCEPT)
target prot opt source destination
DNAT tcp -- 0.0.0.0/0 10.0.0.71 tcp dpt:9000 to:172.16.1.7:22

说明:外网想访问内网多台主机
建议配置vpn

  1. 企业防火墙配置思路:
    提示:网络NA知识

    ==================================
    第一个里程:保存已有默认配置信息
    cp /etc/sysconfig/iptables /backup

    第二个里程:重新初始化配置
    iptables -Z
    iptables -X
    iptables -F
    提示:确认默认规则为ACCEPT时 再进行清空操作

    第三个里程:将自己不要提出在外火墙外面
    iptables -A INPUT -s 访问主机地址(公网) -p tcp --dport 22 -j ACCEPT

    第四个里程:修改默认策略规则
    确保filter INPUT、FORWARD 默认规则
    iptables -P INPUT DROP
    iptables -P FORWARD DROP

    第五个里程:是否需要实现禁ping
    iptables -A INPUT -s 特殊网段 -p icmp -j ACCEPT
    iptables -A INPUT -i lo -p icmp -j ACCEPT

    第六个里程:设置允许访问白名单
    iptables -A INPUT -s 内网地址信息 -j ACCEPT
    iptables -A INPUT -p tcp --sport 53 -j ACCEPT --- 保证DNS解析服务正常
    iptables -A INPUT -p udp --sport 53 -j ACCEPT --- 保证DNS解析服务正常
    iptables -A INPUT -s 合作商地址 -p 协议 --dport 服务端口 -j ACCEPT

    第七个里程:实现NAT地址映射
    iptables -t nat -A PORTROUTING XXX --- 实现内网主机访问外网
    iptables -t nat -A PREROUTING XXX --- 实现外网主机访问内网

    第八个里程:所有信息配置完毕,需要保存配置
    PS: 防火墙命令所有配置知识临时生效
    配置文件位置 /etc/sysconfig/iptables
    iptables-save >/etc/sysconfig/iptables
    service iptables save

posted @ 2022-06-29 18:26  长风cf  阅读(167)  评论(0)    收藏  举报