linux之iptables命令

防火墙概述

防火墙:它是工作在主机或者网络的边缘,对进出的数据报文按照事先定义好的规则中的标准进行检查,一旦符合标准,就会采取由这个规则所定义的动作来进行处理的一套流程。
linux:网络防火墙
netfilter:Frame
iptables:数据报文过滤,NAT,mangle等规则生成的工具;
网络:IP报文首部,TCP报文首部

防火墙:硬件,软件:规则(匹配标准,处理办法)

Framework:
默认规则;
开放:堵
关闭:通

规则:匹配标准
IP:SIP,DIP
TCP:SPORT DPORT, SYN=1,FIN=0,RST=0,ACK=0(三次握手的第一次)
SYN=1, FIN=0, RST=0, ACK=1(三次握手的第二次)
SYN=0, FIN=0, RST=0, ACK=1(ESTABLISHED)
UDP:SPORT,DPORT
ICMP:icmp-type

数据报文过滤:
Linux2.0
ipfirewall/firewall
Linux2.2
ipchain/firewall
Linux2.4
iptables/netfilter

hook function:钩子函数
prerouting
input
output
forward
postrouting

规则链:
PREROUTING
INPUT
OUTPUT
FORWARD
POSTROUTING

filter(过滤):表
INPUT
OUTPUT
FORWARD
nat(地址转换):表
PREROUTING[DNAT]
OUTPUT
POSTROUTING[SNAT]
mangel(拆开,修改,封装):表
PREROUTING
INPUT
OUTPUT
FORWARD
POSTROUTING
RAW
PREROUTING
OUTPUT
每个filter,nat,mangel下都有多个链,每个链下又有多个规则,相当于多行多列(即表),这是为什么叫做iptables的原因

iptables总共有 四表五链,其作用是往这些表的链上写入相应的规则,并让他们完成相应功能的。

数据包过滤匹配流程

在这里插入图片描述

用法

iptables:
能否使用自定义链?
可以使用自定链,但只在被调用时才能发挥作用,而且如果没有自定义链中的任何规则匹配,还应该有返回机制;
用可以删除自定义的空链
默认链无法删除
每个规则都有两个内置的计数器:
被匹配的报文个数
被匹配的报文大小之和

规则:匹配标准,处理动作

netfilter:Framework,位于TCP/IP协议栈(内置了五个钩子函数),内核中
iptables [-t TABLE] COMMAND CHAIN [num] 匹配标准 -j 处理办法

  • 匹配标准:

    • 通用匹配
      -s, --src:指定源地址
      -d, --dst:指定目标地址
      -p {tcp|udp|imcp}:指定协议
      -i INTERFACE:指定数据报文流入的接口
      可用于定义标准的链:PREROUTING,INPUT,FORWARD
      -o INTERFACE:指定数据报文流出的接口
      可用于标准定义的链:OUTPUT,POSTROUTING,FORWARD

    • 扩展匹配

      • 隐含扩展:不用特别指明由哪个模块进行的扩展,因为此时使用-p{tcp|udp|icmp}
        –sport PORT[-PORT]
        –dport PORT[-PORT]
        –tcp-flags mask comp:只检查mask指定的标志位,是逗号分隔的标志位列表: comp:此列表中出现的表记位必须为1, comp中没出现,而mask中出现的,必须为0:
        –tcp-flags SYN,ACK,RST,FIN SYN = --syn
      • 显式扩展:必须指明由哪个模块进行的扩展,在iptables中使用-m选项可完成此功能
        -m EXTENSION --spe-opt
        state:状态扩展
        综合ip_conntrack追踪会话的状态
        NEW:
        ESTABLISHED
        INVALID
        RELATED
        -m state --state NEW,ESTABLISHED -J ACCEPT
        首先要装载ip_conntrack_ftp和ip_nat_ftp模块
        iptables -A INPUT -d 172.16.100.7 -p tcp -m --state ESTABLISHED,RELATED -J ACCEPT
        multiport:离散的多端口匹配扩展
        –source-ports
        –destination-ports
        –ports
        -m multiport --destination-port 21,22,80 -j ACCEPT
        条件取反: !, -s 172.16.100.6 几乎所有的条件都可以取反。
        iprange__ip地址范围扩展
        -m iprange
        –src-range
        –dst-range
        iptables -A INPUT -t tcp -m iprange --src-range 172.16.100.2-172.16.100.100 --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT
        -m connlimit:连接数限制
        ! --connlimit-above n 最大连接上限
        iptables -N INPUT -s 172.16.100.3 -p tcp --dport 80 -m connlimit ! --connlimit-above 2 -j ACCEPT 不超过两个连接的就放行,否则,拒绝掉第三个及其更多的连接。
        -m limit
        –limit rate 速率限制列如5/minute
        –limit-burst 定义了limit match的峰值,即在单位时间内最多可通过的包数
        iptables -t filter -A INPUT -m limit --limit-burst 5 -j ACCEPT 即在单位时间内最多可匹配5个包
        -m string
        –algo {bm|kmp}
        –string “STRING”
  • 命令:

    • 管理规则
      -A:附加一条规则,添加在链的尾部
      -I:CHAIN [num]:插入一条规则
      -D CHAIN [num]: 删除一条规则
      -R CHAIN [num]: 替换一条规则
      管理链:
      -F: flush,清空指定规则链,如果省略CHAIN,则可以实现删除对应表中所有链
      -P: CHAIN:设定链的默认策略:
      -N:自定义一个新的空链
      -X:删除一个自定义的空链
      -Z:置零指定链中所有的规则计数器
      -E:重命名一条自定义的链
    • 查看链:
      -L:显示指定表中的规则
      -n :以数字格式显示主机地址和端口号(iptables默认会反解IP成主机名,端口反解成对应的服务名,如果你没有配置DNS,那么这个反解的过程会非常慢,所以用-n可以解决这个慢的问题。)
      -v:显示详细信息
      -vv:
      -x:显示计数器的精确值(exact)
      –line-numbers:显示规则号码
  • 动作(target):
    ACCEPT:放行
    DROP:丢弃
    REJECT:拒绝
    DNAT:目标地址转换
    SNAT:源地址转换
    REDIRECT:端口重定向
    MASQUERADE:地址伪装
    LOG:日志
    –log-prefix “STRING”
    MARK:打标记

一些列子
1.丢弃掉192.168.2.0网络访问过来的数据包
iptables -t filter -A INPUT -s 192.168.2.0/24 -j drop

2.放行所有访问本机(172.16.100.7)22号端口的数据包
iptables -t filter -A INPUT -d 172.16.100.7 -p tcp --dport 22 -j ACCEPT

3.放行所有对本机器22号端口的新请求或者已经建立的请求
iptables -t filter -A INPUT -d 172.16.100.7 -p tcp --DPORT 22 -m state --state NEW,ESTABLISHED -j ACCEPT

4.使用自定义链
iptables -N clean_in
iptables -A clean_in -d 255.255.255.255 -p icmp -j DROP
iptables -A clean_in -d 172.16.255.255 -p icmp -j DROP
iptables -A clean_in ! --syn -m state --state NEW -j DROP
iptables -A clean_in -p tcp --tcp-flags ALL ALL -j DROP
iptables -A clean_in -p tcp --tcp-flags ALL NONE -j DROP
iptables -A clean_in -d 172.16.100.7 -j RETURN 此条规则返回主链
iptables -I INPUT -j clean_in 使用自定义链

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

你抱着的是只熊

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值