首页 > 系统相关 >iptables

iptables

时间:2023-02-06 22:56:47浏览次数:40  
标签:iptables 10.0 -- REJECT INPUT port

1. Netfileter

  • Linux防火墙是由Netfilter组件提供的,Netfilter工作在内核空间中,集成在linux内核中

  • Netfilter是Linux2.4.x之后新一代的Linux防火墙机制,是Linux内核的一个子系统,Netfilter采用模块化设计,具有良好的可扩展性,提供扩展各种网络服务的结构化底层框架。Netfilter与IP协议栈是无缝契合,并允许对数据报进行过滤、地址转换、处理等操作。

  • 命令过滤查看

root@ubuntu:~# grep -m 10 NETFILTER /boot/config-5.15.0-47-generic 
CONFIG_NETFILTER=y
CONFIG_NETFILTER_ADVANCED=y
CONFIG_BRIDGE_NETFILTER=m
CONFIG_NETFILTER_INGRESS=y
CONFIG_NETFILTER_NETLINK=m
CONFIG_NETFILTER_FAMILY_BRIDGE=y
CONFIG_NETFILTER_FAMILY_ARP=y
CONFIG_NETFILTER_NETLINK_HOOK=m
CONFIG_NETFILTER_NETLINK_ACCT=m
CONFIG_NETFILTER_NETLINK_QUEUE=m


y  集成在内核
m  独立文件,一个模块

2. 防火墙工具介绍

2.1 iptables

  • 由软件包iptables提供的命令行工具,工作在用户空间,用来编写规则,写好规则被送往netfilter,告诉内核如何处理信息包
# 查看版本
dpkg --list iptables

# 查看文件
dpkg --listfiles iptables
  • 安装iptables的service包
    • 只能决定是否启用定义好的iptables规则,并不代表没有netfileter功能。
    • 启动关闭不影响服务,只影响自定义的防火墙规则

2.2 nftables

dpkg --list nftables

systemctl status nftables

2.3 netfilter中五个勾子函数和报文流向

  • Netfilter在内核中选取五个hook(钩子) function(INPUT、OUTPUT、FORWARD、PREROUTING、POSTROUTING),而这五个hook function向用户开放,用户可以通过一个命令工具(iptables)向其写入规则
    • PREROUTING:预路由
    • INPUT:直到协议栈,进入到服务协议关卡,也就是服务,如http
    • FORWARD:与 INPUT 相反,不经过服务,负责转发,NAT
    • OUTPUT:出协议栈,出去服务协议关卡
    • POSTROUTING:总出口
  • 由信息过滤表(table)组成,包含控制IP包处理的规则集(rules),规则被分组在链(chain)上
  • 三种报文流向
    • 流入本机:PREROUTING ---> INPUT ---> 用户空间进程
    • 流出本机:用户空间进程 ---> OUTPUT ---> POSTROUTING
    • 转发:PREROUTING ---> FORWARD ---> POSTROUTING

3. iptables的组成

  • iptables由五个表table和五个链chain以及一些规则组成

  • 链chain

    • 内置链:每个内置链对应于一个钩子函数
    • 自定义链:用于对内置链进行扩展或补充,可以实现更灵活的规则组织管理机制;只有Hook钩子调用自定义链时,才生效
  • 五个内置链chain

INPUT,OUTPUT,FORWARD,PREROUTING,POSTROUTING
  • 五个表table:filter、nat、mangle、raw、security
    • filter:过滤规则表,根据预定义的规则过滤符合条件的数据包,默认表(访问控制)
    • nat:network address translation 地址转换规则表
    • mangle:修改数据标记规则表
    • raw:关闭启用的连接跟踪机制,加快封包穿越防火墙速度
    • security:用于强制访问控制(MAC)网络规则,由Linux安全模块(如SELinux)实现
  • 优先级由高到底的顺序为:
security ---> raw ---> mangle ---> nat ---> filter

3.1 黑名单范例

  • 表示没有明确拒绝的也接受
# 默认是 -t FILTER
# 拒绝一个地址
iptables -A INPUT -s 10.0.0.10 -j DROP

# 拒绝一段地址,可能会导致自身服务器也会连接不上服务器
iptables -A INPUT -s 10.0.0.0/24 -j REJECT

# 删除第二条规则
iptables -D INPUT 2

# 在第一条插入允许某一个地址可以访问
iptables -I INPUT -s 10.0.0.1 -j ACCEPT

# 先插入允许后再拒绝物理机也不会断开服务器连接
iptables -A INPUT -s 10.0.0.0/24 -j REJECT

# 删除多余规则
iptables -D INPUT 2

3.2 白名单范例

  • 没有被明确允许的通通都拒绝
# 没有被明确允许的通通都拒绝,更改的这个参数为DROP就为白名单
iptables -P INPUT DROP
  • 白名单全部拒绝后后面想要开放一些接口,则如下操作
-s --source  源IP地址或不连接连续的IP地址

-d --destination   目标IP地址或者不连接的IP地址

-p --protocol  指定协议,可使用数字加0(all)
   protocol: tcp,udp,icmp,icmpv6,udplite,ah,sctp,mh or"all"

-i --in-interface  报文接入的"网卡设备"接口,只能应用于数据报文流入环节,只应用于INPUT、FORWARD、OREROUTING链

-o --out-interface  报文流出的接口,只能应用于数据报文流出的环节,只应用于FORWARD、OUTPUT、POSTROUTING链
  • 允许网卡设备 lo 通过访问
iptables -I INPUT 2 -i lo -j ACCEPT
  • 如果执行如下清空防火墙规则,则会导致全部断开连接,拒绝所有地址,因为白名单只允许添加ACCEPT的规则才允许通过。
# 清空所有规则
iptables -F
  • 改回黑名单模式,原本DROP(白名单,拒绝所有),黑名单(ACCEPT,允许所有)
iptables -P INPUT ACCEPT

3.3 白名单推荐的创建方式

  • 先允许,后全拒绝
# 允许本地Windows主机
iptables -A INPUT -s 10.0.0.1 -j ACCEPT

# 允许自身服务器
iptables -A INPUT -i lo -j ACCEPT

# 中间没有 -s -i 规则,表示全拒绝。全部拒绝
iptables -A INPUT -j REJECT

# 在第三条添加允许一个段可以访问,全部拒绝的规则变成第四条
iptables -I INPUT 3 -s 10.0.0.0/24 -j ACCEPT

# 控制icmp协议
iptables -I INPUT 3 -s 10.0.0.10 -p icmp -j REJECT
  • 删除规则
    • 删除INPUT表下的第三条记录规则
iptables -D INPUT 3

4. iptables扩展匹配条件

  • 扩展匹配条件:需要加载扩展模块(/usr/lib64/xtables/*.so),方可生效
  • 扩展模块的查看帮助:man iptables-extensions
  • 扩展匹配条件
    • 隐式扩展
    • 显示扩展

4.1 隐式扩展

4.1.2 tcp扩展

  • tcp协议的扩展选项
--source-port, --sport port[:port],匹配报文源端口,可为端口选项连接范围

--destnation--port, --dport portp[:port],匹配报文目标端口,可为连接范围

--tcp-flags mask comp
mask: 需检查的标志位列表,用 , 分割,例如 SYN,ACK,FIN,RST
comp: 在mask列表中必须为的标志为列表,无指定则必须为0,用 , 分割tcp协议的扩展选项
  • 范例
# 在第三条规则插入一条拒绝目标服务器80端口
iptables -I INPUT 3 -s 10.0.0.100 -p tcp --dport 80 -j REJECT

iptables -I INPUT 3 -s 10.0.0.100 -p tcp --dport 3306 -j REJECT
  • udp 协议扩展选项
--source-port, --sport port[:port],匹配报文源端口,可为端口选项连接范围

--destnation--port, --dport portp[:port],匹配报文目标端口,可为连接范围

4.1.3 icmp协议的扩展选项

--icmp-type {type[/code]|typename}
type/code
0/0   echo-reply   icmp应答
8/0   echo-request  icmp请求
  • 实现一边通,一边拒绝的效果
    • 拒绝请求包
    • 应答包可以,添加规则这边可以通,没有添加的不能通
# 8 是请求允许,方法一,推荐
iptables -A INPUT -s 10.0.0.100 -p icmp --icmp-type 8 -j REJECT

# 方法二
iptables -A OUTPUT -d 10.0.0.100 -p icmp --icmp-type 0 -j REJECT

# 删除这条规则,测试请求允许
iptables -D INPUT 3
iptables -D OUTPUT 3

# 0 是应答请求
iptables -A INPUT -s 10.0.0.100 -p icmp --icmp-type 0 -j REJECT

4.2 显示扩展

4.2.1 multiport扩展

  • 以离散方式定义多端口匹配最多指定15个端口
# 指定多个源端口
--source-ports, --sports port[,port|,port:port]

# 指定多个目标端口
--destination-ports,--dports port[,port|,port:port]

# 多个源目标端
--ports port[,port|,port:port]
  • 范例
# 清空之前的规则
iptables -F

# 拒绝 10.0.0.100 目标机器的 80 6379端口
iptables -A INPUT -s 10.0.0.100 -p tcp -m multiport --dports 80,6379 -j REJECT

4.2.2 iprange扩展

  • 指明连续性的(但一般不是整个网络)IP地址范围
--src-range fromp[-to]   源IP地址范围
--dst-range frpmp[-to]   目标IP地址范围
  • 范例
iptables -A INPUT -m iprange --src-range 10.0.0.1-10.0.0.7 -j DROP

4.2.3 mac扩展

  • mac模块可以指明源MAC地址,适用于: PREROUTING, FORWARD, INPUT
    • 属于链路层
--mac-source xx:xx:xx:xx:xx
  • 范例
iptables -A INPUT -m mac --mac-source 00:0c:29:8c:32:61 -j REJECT

4.2.4 string扩展

  • 对报文中的应用层数据做字符串模式匹配检测
--algo {bm|kmp} 字符串匹配检测算法
bm: Boyer-Moore
kmp: Knuth-Pratt-Morris

--form offset  开始偏移

--to offset   结束偏移

--string pattern   要检测的字符串模式

--hex-string pattern  要检测字符串模式,16进制格式
  • 范例
iptables -A OUTPUT -p tcp --sport 80 -m string --algo bm --from 62 --string "google" -j REJECT

4.2.5 time扩展

  • PS: CentOS8 此模块有问题,而且是按照UTC时间来算的,也就是世界标准时间(date -u)
  • 根据将报文到达的时间与指定的时间范围进行匹配
--datestart YYYY[-MM[-DD[Thh[:mm[ss]]]]]   日期

--datestop YYYY[-MM[-DD[Thh[:mm[:ss]]]]]

--timestart hh:mm[:ss]   时间

--timestop  hh:mm[:ss]

--monthdays day[,day...]  每个月的几号

--weekdays day[,day...]  星期几,1-7分别表示星期一到星期日

--kerneltz  内核时区(当地时间),不建议使用CentOS7版本以上系统默认UTC

注意: centos6不支持kerneltz,--localtz指定本地时区(默认)
  • 范例
iptables -A INPUT -m time --timestart 6:00 --timestop 8:00 -j REJECT

4.2.6 connlimit扩展

  • 根据客户端IP做并发连接数量匹配
  • 可防止Dos(Denial if Service,拒绝服务)攻击
--connlimit-upto N  连接的数量小于等于N时匹配

--connlimit-above N  连接的数量大于N时匹配
  • 范例
    • 并发连接数量大于2个时全部拒绝
iptables -A INPUT -p tcp --dport 80 -m connlimit --connlimit-above 2 -j REJECT

4.2.7 limit扩展

  • 基于收发报文的速率做匹配,令牌通过过滤器
    • 作用于限流
--limit-burst number     前多少个包不限制

--limit   [/second/minute/hourl/day]
  • 范例
    • 前五个包不限制,后面每十分钟不限制一次
iptables -I INPUT -p icmp --icmp-type 8 -m limit --limit 10/minute --limit-burst 5 -j ACCEPT

iptables -A INPUT -p icmp -j REJECT

4.2.8 state扩展

  • state扩展模块,可以根据 "连接追踪机制" 去检查连接的状态,较耗资源

  • conntrack机制:追踪本机上的请求和响应之间的关系

  • 状态类型

    • NEW:新发出请求,连接追踪信息库中不存在此连接的相关信息条目,因此,将其识别第一次发出的请求。新请求,“新用户”
    • ESTABLISHED:NEW状态之后,连接追踪信息中为其建立的条目失效之前期间内所进行的通信状态。老请求,”老用户“
    • ELATED:新发起的但与已有连接相关的连接,如:ftp协议中的数据连接与命令连接之间的关系
    • INVALID:无效的连接,如flag标记不正确
    • UNTRACKED:未进行追踪的连接,如:raw表中关闭追踪
  • 范例

iptables -A INPUT -m state --state ESTABLISHED -j ACCEPT

iptables -A INPUT -m state --state NEW -j REJECT

cat /proc/net/nf_conntrack

# 连接跟踪能记录多少条,决定了这个state的最大值是多少。
cat /proc/sys/net/netfilter/nf_conntrack_max

# 这样能达到新的连接不能访问,但是本机没有影响,可以ping其它机器,我能连你,你不能连我
iptables -A INPUT -m state --state NEW -s 10.0.0.100 -j REJECT

标签:iptables,10.0,--,REJECT,INPUT,port
From: https://www.cnblogs.com/wsxier/p/17096950.html

相关文章

  • 深入理解 netfilter 和 iptables
    深入理解 netfilter 和iptables ......
  • ERROR: Couldn't determine iptables version
     001、ubuntu中安装ssh服务时遇到如下报错:ERROR:Couldn'tdetermineiptablesversion  002、解决方法root@DESKTOP-A31BQ38:~#update-alternatives--listip......
  • vxlan结合iptables-snat实现内网服务器公网访问
    如上图,有这样一种场景,我们经常遇到,局域网内有两台服务器,Server1和Server2,Server1可以通通网,Server2只能通内网,无法直接访问公网现在想Server2能访问到公网,怎么做?......
  • iptables常用操作
    目录在指定行插入规则删除指定规则对非10.12网段的IP地址进行DROP操作注:以下命令都只是操作input链在指定行插入规则在第6行插入规则iptables-IINPUT6-miprange-......
  • Linux下开启防火墙放行nfs,ssh,httpd,dns,chrony服务(iptables,firewalld),firewalld端口转发
     环境:CentOS7.9什么是防火墙防火墙:防火墙是位于内部网和外部网之间的屏障,它按照系统管理员预先定义好的规则来控制数据包的进出。防火墙又可以分为硬件防火墙与软件......
  • Iptables原理介绍
    Linux防火墙——iptables原理介绍原创 liugp 大数据与云原生技术分享 2023-01-0207:30 发表于广东收录于合集#linux13个#防火墙3个#iptables2个一、......
  • Centos7 配置iptables NAT端口转发
    打开端口转发的功能1,首先开启IP转发功能,默认是关闭的。临时修改:[root@localhost~]#echo1>/proc/sys/net/ipv4/ip_forward修改过后就马上生效,但如果系统重启后......
  • iptables端口转发
    用一个例子说明:服务器:192.168.0.121:27896中转机:192.168.0.163:27896在192.168.0.121的端口27896上开启了一个服务器,我希望访问中转机192.168.0.163的27896也可以访问到......
  • Centos 6.5 iptables 端口白名单设置
     iptables-IINPUT-ptcp--dport8888-jDROPiptables-IINPUT-s10.9.145.101-ptcp--dport8888-jACCEPTserviceiptablessave参考文章:https://www.cnblo......
  • centos7下docker启动时报iptables错误
    centos7启动docker报错内容:iptablesfailed:iptables--wait-tnat-ADOCKER-ptcp-d0/0--dport22201-jDNAT--to-destination172.18.0.2:22!-idocker0:ip......