Iptables 规则基础笔记

Iptables规则:

Firewall:工作在主机或网络边缘,对进出的保温按事先定义的规则进行检查,并有匹配到的规则进行处理的一组硬件或者软件.

用户请求进来,先到本地的route路由判断是否访问的为本地ip,如果不是则查看是否开启了ip-forward功能,如果开起来,则继续向后转发.

iptables/netfilter:

netfilter:工作内核中,让规则能够生效的网络框架.

iptables:工作于用户空间,防火墙规则编写工具,编写规则并发送到netfilter

PREROUTING:主要做目标地址转换

INPUT :从本机进来的

OUTPUT:从本机出去的

FORWARD:从本机转发的

POSTROUTING:路由之后转发,主要做源地址转换

过滤:做报文筛选

NAT:Network Adress Translation 网络地址转换.

Dnat:目标地址转换 公网响应,将公网地址自动Dnat到内网.

Snat:源地址转换 内网地址访问公网资源,出去时将源地址转换为公网地址.

表和链的对应关系:

filter:

INPUT FORWARD OUTPUT

nat:

PREROUTING OUTPUT POSTROUTING

mangle:

PREROUTING INPUT FORWARD OUTPUT POSTROUTING

检查条件,处理机制:

通:默认为堵,只对能识别的进行放行

堵:默认为通,只对能识别的进行阻截

检查条件:

IP:SIP  DIP

TCP,UDP,ICMP协议首部

处理机制:

DROP:悄悄丢弃,不返回任何结果

REJECT:拒绝,返回拒绝信息

ACCEPT:允许通过

SNAT:源地址转换

DNAT:目标地址转换

RETURN:未匹配到重新返回

REDIRECT:映射

LOG:日志

Iptables规则参数:

  # iptables -nL   查看规则
 iptables [-t table] -N chain   #新增一条自定义的规则链(自定义的链只能在被调用或转发时生效)

-I 插入,默认为第1条

 iptables [-t table] -I chain [rulenum] rule-specification

iptables [-t table] -X [chain]   #删除一条自定义的空链

实例:

 # iptables -X Mew

iptables [-t table] -E old-chain-name new-chain-name    #修改自定义链名

实例:

    [[email protected] ~]# iptables -E Mew Redhat
        [[email protected] ~]# iptables -nL
        Chain INPUT (policy ACCEPT)
        target     prot opt source               destination         
        Chain FORWARD (policy ACCEPT)
        target     prot opt source               destination         
        Chain OUTPUT (policy ACCEPT)
        target     prot opt source               destination         
        Chain Redhat (0 references)
        target     prot opt source               destination

iptables [-t table] -P chain target  #修改链的默认策略,无法修改自定义链的默认规则.

实例:

# iptables -t filter -P FORWARD DROP
iptables [-t table] {-F|-L|-Z} [chain [rulenum]] [options...]

-F :清空链中的规则

规则有编号,在链中自上而下,从1开始;

-L: list,列出表中的所有规则

-n:数字格式显示IP和Port

-v:以详细格式显示

实例:

  [[email protected] ~]# iptables -nL -v
   Chain INPUT (policy ACCEPT 10936 packets, 1068K bytes)
   pkts bytes target     prot opt in     out     source               destination         
    Chain FORWARD (policy DROP 0 packets, 0 bytes)
    pkts bytes target     prot opt in     out     source               destination         
   Chain OUTPUT (policy ACCEPT 8217 packets, 698K bytes)
    pkts bytes target     prot opt in     out     source               destination         
   Chain Redhat (0 references)
   pkts bytes target     prot opt in     out     source               destination

pkts:packets,被本规则所匹配到的报文个数

bytes:被本规则所匹配到的所有报文的大小之和,会执行单位换算.

target:目标,即处理机制

prot:协议,一般为{tcp|udp|ICMP}

opt:可选项

in:数据包流入接口.

out:数据包的流出接口

source:源地址

destination:目标地址:

-v

-vv

-x:exactly,精确值,不执行单位换算

--line-number:显示各规则的行号

实例: --line-number 看到每条规则都有编号

 [[email protected] ~]# iptables -nL --line-numbers
            Chain INPUT (policy ACCEPT)
            num  target     prot opt source               destination         
            1    ACCEPT     all  --  172.16.0.0/16        172.16.0.192       
            2    ACCEPT     tcp  --  172.16.0.0/16        172.16.0.192       
            Chain FORWARD (policy DROP)
            num  target     prot opt source               destination         
            Chain OUTPUT (policy ACCEPT)
            num  target     prot opt source               destination         
            1    ACCEPT     tcp  --  172.16.0.192         172.16.0.24         
            Chain Redhat (0 references)
            num  target     prot opt source               destination

-Z:zero,规则计数器清零

iptables [-t table] {-A|-D} chain rule-specification

-A append,附加一条规则;rule-specification 条件匹配 -j 处理机制,默认在指定链的最后一行添加

匹配条件(通用匹配)

-s:源ip,可以时ip,也可以是网络地址,可以取反:!172.10.10.0/24,"!"取反

-s 相当于--src或者--source

-d:匹配目标地址

-p:匹配协议,通常只使用{TCP|UDP|ICMP}三者之一

-i:数据报文流入的接口:通常只用于INPUT/FORWARD/PREROUTING

-o:流出的接口:通常只用于OUTPUT/FORWARD/POSTROUTING

实例:

# iptables -A INPUT -p tcp -s 172.16.0.0/16 -d 172.16.0.192 -j ACCEPT

所有来自172.16.0.0这个网段的tcp协议访问本地172.16.0.192资源的都允许进来

   # iptables -A OUTPUT -p tcp -s 172.16.0.192 -d 172.16.0.24 -j ACCEPT

所有从本机 172.16.0.192出去的协议为tcp的目标为172.16.0.24的店铺允许出去.

-s:源地址不写,默认为4个零

实例:

 [[email protected] ~]# iptables -A INPUT -d 172.16.0.192 -j ACCEPT
 [[email protected] ~]# iptables -nL -v
 Chain INPUT (policy ACCEPT 163 packets, 15385 bytes)
 pkts bytes target     prot opt in     out     source               destination         
 23  1752 ACCEPT     all  --  *      *       0.0.0.0/0            172.16.0.192

-i :指定流入网卡,不能在output上使用,否则会报错.

 # iptables -A INPUT -i eth0 -d 172.16.0.192 -j ACCEPT

只要从eth0进来访问本机的就允许

从本机eth0出去访问公网的就允许.

 # iptables -A OUTPUT -o eth0 -s  172.16.0.192 -j ACCEPT
Chain OUTPUT (policy ACCEPT 66 packets, 5489 bytes)
pkts bytes target     prot opt in     out     source               destination         
 4   592 ACCEPT     all  --  *      eth0    172.16.0.192         0.0.0.0/0

保存恢复规则:

service iptables save

规则会被保存至/etc/sysconfig/iptables文件中;

将火墙规则保存到其他文件中:iptables-save

# iptables-save > iptables.20170707

从某个文件中恢复规则,iptables-restore

# iptables-restore < iptables.20170707

隐含扩展:使用-p{TCP|UDP|ICMP}指定某特定协议后,协议自身所能够进行的自动扩展

-p:tcp

--dport :可以指定单个端口,可以使连续的多个端口.

--sport: 可以指定源端口---

--tcp-flags:标志位

RST,SYN,ACK,FIN

实例:

#允许172.16.0.0/16通过tcp协议的22端口访问本地资源

 [[email protected] ~]# iptables -A INPUT -i eth0 -s 172.16.0.0/16 -d 172.16.0.192 -p tcp --dport 22 -j ACCEPT

#允许本地通过tcp协议的22端口与172.16.0.0/16通讯.

[[email protected] ~]# iptables -A OUTPUT -s 172.16.0.192 -d 172.16.0.0/16 -p tcp --sport 22 -j ACCEPT

#允许本地lo端口进出.

# iptables -A INPUT -i lo -j ACCEPT
# iptables -A OUTPUT -o lo -j ACCEPT

-p:    udp

--sport:

--dport:

udp协议没有标志位。

-p:icmp

--icmp-type 8是ping请求 0是ping响应

例子:放行ping其他主机:

     # iptables -A OUTPUT -s 172.16.0.177 -p icmp --icmp-type 8 -j ACCEPT
     # iptables -A INPUT -d 172.16.0.177 -p icmp --icmp-type 0 -j ACCEPT

规则命令:

iptables -D chain rulenum [options] 删除规则

实例:删除OUTPUT链上的第1条规则

  # iptables -D OUTPUT 1

iptables [-t table] -I chain [rulenum] rule-specification   在指定的地方插入规则

如果不指定默认为第一行.

实例:在第三行

# iptables -I INPUT 3 -i lo -j ACCEPT
 # iptables -I INPUT 3 -i eth0 -d 172.16.0.192  -j ACCEPT

iptables [-t table] -R chain rulenum rule-specification 替换指定规则

明确指定将第几行替换为.

实例:

     # iptables -R INPUT 4 -i lo -p tcp -j ACCEPT

显示指定链的规则:-S 后面未指定具体的链,则显示所有链的规则.

iptables [-t table] -S [chain [rulenum]]

实例:

 # iptables -S INPUT
 -P INPUT ACCEPT
 -A INPUT -s 172.16.0.0/16 -d 172.16.0.192/32 -i eth0 -p tcp -m tcp --dport 22 -j ACCEPT
 -A INPUT -i lo -j ACCEPT
 -A INPUT -d 172.16.0.192/32 -i eth0 -j ACCEPT
 -A INPUT -i lo -p tcp -j ACCEPT

显示扩展:必须明确指定扩展模块

-m 扩展模块名称 --专用选项

multiport:多端口匹配,一次指定多个(15个以内)零散端口

[!] --source-port,--sport port[:port]

[!] --destination-port,--dport port[:port]

--ports:

实例:

iptables -A INPUT -d 172.16.0.192 -p tcp -m multiport --dport 22,80 -j ACCEPT

# iptables -A OUTPUT -s 172.16.0.192 -p tcp -m multiport --sport 22,80 -j ACCEPT

iprange:ip地址范围

time:指定时间范围

--datestart:

--datestop:

--timestart:

--timestop:

实例:

# iptables -A INPUT -d 172.16.100.7 -p tcp --dport 901 -m time --weekdays Mon,Tus,Wed,Thu,Fri --timestart 08:00:00 --timestop 18:00:00 -j ACCEPT

string:字符串

--algo {bm|kmp} :字符匹配时使用到的算法

--string "string":要查找的字符串

--from offset

从本地80端口出去包含字符串"hello"的全丢掉.

# iptables -A OUTPUT -s 172.16.0.7 -p tcp --sport 80 -m string --algo kmp --string "hello" -j DROP
# iptables -A INPUT -d 192.168.149.128  -p tcp -m multiport --dports 22,80 -j ACCEPT	

[!] --src-range from[-to]

[!] --dst-range from[-to]

ip-range:指定ip段访问:

只允许这个网段访问本地的23端口telnet服务.

 # iptables -A INPUT -d 192.168.149.128 -p tcp --dport 23 -m iprange --src-range 172.16.0.9-172.16.0.110 -j ACCEPT
# iptables -A OUTPUT -s 192.168.149.128  -p tcp --sport 23  -m iprange --dst-range 172.16.0.9-172.16.0.110 -j ACCEPT

time:指定时间daunt

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

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

--timestart hh:mm[:ss]

--timestop hh:mm[:ss]

[!] --weekdays day[,day...]

# iptables -A OUTPUT -s 192.168.149.128 -p tcp --sport 91 -m time --weekdays 1,7 --timestart 08:00:00 --timestop 18:00:00 -j ACCEPT
# iptables -A INPUT -d 192.168.149.128 -p tcp --dport 91 -m time --weekdays 1,7 --timestart 08:00:00 --timestop 18:00:00 -j ACCEPT

string:字符串访问控制

--algo {bm|kmp}:字符匹配查找时使用的算法

--string:查找的字符串

[!] --hex-string pattern:要查找的字符串,字符编码转换

--from :

--to

# iptables -I OUTPUT -s 192.168.149.128 -p tcp --sport 80 -m string --algo kmp --string "hello" -j DROP

connlimit :每个ip对指定服务的最大连接数

[!] --connlimit-above n

请求本地80端口,并发大于5的请求全部丢掉.

# iptables -I INPUT -d 192.168.149.128 -p tcp --dport 80 -m connlimit --connlimit-above 5 -j DROP

limit:报文的速率控制

--limit-burst number :峰值

--limit rate[/second|/minute|/hour|/day]每秒的速率

# iptables -A INPUT -d 192.168.149.128 -p icmp --icmp-type 8 -m limit --limit 2/second --limit-burst 5 -j ACCEPT

hping3 命令

ab -c 20 -n 2000 http://www.baidu.com/index.html  并发测试命令

网络工具排名:

sectools.org

state:状态匹配

ip_conntrack,nf_conntrack  Iptables根据这2个模块完成连接追踪

--state:

NEW 状态;第一次连接状态叫NEW

ESTABLISHED 连接状态,后续的状态都是ESTABLISHED

RELATED 相关联的,命令请求和数据传输之间就是RELATED

INVALID 无效连接或者无法识别的连接

法则:

1、对于进入的状态为ESTABLISHED的都应该放行

2、对于出去的状态为ESTABLISHED的都应该放行

3、严格检查进入的状态为NEW的连接

4、所有状态为INVIALIED的都应该拒绝

实例:

匹配state 状态为NEW,ESTABLISHED的放行.

调整连接追踪功能所能容纳的最大追踪连接数:

/proc/sys/net/nf_conntrack_max  定义了onntrack 连接追踪的最大值

/proc/net/nf_conntrack 定义了当前追踪的所有连接

/proc/sys/net/netfilter/ 目录定义个了超时时间

        # iptables -A INPUT -d 172.16.0.177 -p tcp --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT
        # iptables -A OUTPUT -s 172.16.0.177 -p tcp --sport 22 -m state --state ESTABLISHED -j ACCEPT
        # iptables -A INPUT -d 172.16.0.177 -p icmp --icmp-type 8 -m limit --limit 2/second --limit-burst 5 -m state --state NEW,ESTABLISHED -j ACCEPT
        # iptables -A OUTPUT -s 172.16.0.177 -p icmp -m state --state NEW,ESTABLISHED -j ACCEPT

放行本地80端口,进来时state为NEW,ESTABLISHED,出去时状态为 ESTABLISHED

  # iptables -A INPUT -d 172.16.0.177 -p tcp --dport 80 -m state --state NEW,ESTABLISHED -j ACCEPT
        # iptables -A OUTPUT -s 172.16.0.177 -p tcp --sport 80 -m state --state ESTABLISHED -j ACCEPT

-j target

        RETURN:返回调用连
        # iptables -N clean_in
        # iptables -t filter -I clean_in -d 172.16.0.255 -p tcp --tcp-flags ALL ALL -jDROP
        # iptables -t filter -I clean_in -d 172.16.0.255 -p tcp --tcp-flags ALL NONE -jDROP
        # iptables -A clean_in -d 172.16.255.255 -p ucmp -j DROP
        # iptables -A clean_in -d 255.255.255.255 -p ucmp -j DROP
        # iptables -A clean_in -d 172.16.0.177 -j RETURN
        # iptables -I INPUT -d 172.16.0.177 -j RETURN
        # iptables -I clean_in 4 -d 172.16.0.177 -m state --state INVALID -j DROP  无法识别的都应该要删除.

被动服务器放行例如ftp,服务器被动模式下相应端口随机相应.

1、确保iptables加载ftp协议支持的模块:ip_nat_ftp,ip_conntrack_ftp

编辑/rtc/sysconfig/iptables-config文件,定义如下参数:

IPTABLES_MODULES="ip_nat_ftp,ip_conntrack_ftp"

手动安装使用:modprobe ip_nat_ftp

2、方形请求报文的RELATED和ESTABLISHED

        # iptables -A INPUT -d 172.16.0.177 -p tcp --dport 22 -j ACCEPT
        # iptables -A INPUT -d 172.16.0.177 -p tcp --dport 21 -j ACCEPT
        # iptables -A OUTPUT -s 172.16.0.177 -p tcp --sport 22 -j ACCEPT
        # iptables -A OUTPUT -s 172.16.0.177 -p tcp --sport 21 -j ACCEPT
        # iptables -P INPUT DROP
        # iptables -P OUTPUT DROP
        # iptables -A INPUT -d 172.16.0.177 -m state --state RELATED,ESTABLISHED -j ACCEPT
        # iptables -A INPUT -s 172.16.0.177 -m state --state ESTABLISHED -j ACCEPT
        # iptables -I INPUT 2 -d 172.16.0.177 -p tcp -m multiport --dports 22,80 -m state --state NEW -j ACCEPT
        # iptables -I OUTPUT 1 -s 172.16.0.177 -p tcp -m state --state ESTABLISHED -j ACCEPT
时间: 2024-10-25 13:56:51

Iptables 规则基础笔记的相关文章

C# 基础笔记(第一篇)

C#基础 概念:.net与c#.net/dontnet:一般指.net framework框架,一种平台,一种技术c#(charp):一种编程语言,可以开发基于.net的应用. *java既是一种技术又是一种编程语言.                           .net都能干什么?开发桌面应用程序   Winforminternet应用程序    Asp.net/webservice C/S:客户机(Client)/服务器模式(Server)B/S:浏览器(Browser)/务器模式(

Nginx基础笔记

Nginx基础笔记 资源 安装 ubuntu下 编译安装 基本操作 HTTP基本配置 配置说明 配置文件目录结构 配置文件结构 模块 模块化 index模块 Log模块 Real IP模块 Access模块 Rewrite模块 Proxy模块 upstream模块 其他 配置静态化目录 负载均衡 控制页面缓存 nginx的内置变量 nginx小结 资源 资源 Nginx 官网 Nginx 官方下载地址 Nginx最佳实践配置项目 地址 Nginx Configuration wiki 教程 ag

iptables防火墙使用笔记

一.背景 每次WEB项目上线时总是要安装环境,其中免不了配置防火墙来允许外网访问.之前都是网上找教程比葫芦画瓢把开启80端口命令敲一下就不管了.本着学习的精神,今天打算好好研究一下iptables配置,并作笔记以便之后查看.只求明白即可,具体深入原理啥的就算了. 注:centos7默认防火墙改为firewall而非iptables. 二.快速搞定  iptables -I INPUT -p tcp --dport 80 -j ACCEPT 如果不想往下看的话,基本上只需记下这条命令就可以开启80

REDIS基础笔记

Redis基础笔记 资源链接 简介 简介 安装 五种数据类型及相应命令 1. 字符串类型 2. 散列类型 3. 列表类型 4. 集合类型 5. 有序集合 其他 事务 SORT 生存时间 任务队列 发布/订阅模式 Python中使用Redis 实际实例 管理 其他 资源链接 推荐书籍:<Redis入门指南> 资源列表: redis命令速查command | CMD索引-中文 | CMD树-中文 redis源码github 下载地址redis.io The Little Redis book 入口

iptables防火墙基础

一.iptables基础: 1.了解iptables防火墙. (1)iptables的表:按照功能的不同表分为raw(状态跟踪).mangle(标记).nat(地址修改).filter(过滤). (2)iptables规则链:按照不同时机链分为INPUT(入站).OUTPUT(出站).FORWARD(转发).PREROUTING(路由前).POSTROUTING(路由后): 在链中存放规则: filter: INPUT/FORWARD/OUTPUT nat: PREROUTING/POSTROU

MYSQL基础笔记(二)-SQL基本操作

SQL基本操作 基本操作:CRUD,增删改查 讲SQL的基本操作根据操作对象进行分类: 1.库操作 2.表操作 3.数据操作 库操作: 对数据库的增删改查 新增数据库: 基本语法: 1 Create database 数据库名字[库选项]: 库选项:用来约束数据库,分为两个选项:1.字符集设定:charset/character set 具体字符集(数据存储的编码格式,中文常用字符集gbk和utf8.).2.校对集设定:collate 具体校对集(数据比较的规则). 例如: 其中:数据库名字不能

iptables 规则策略设置

Iptables 一.防火墙基础知识 1.防火墙是什么 工作于主机或网络边缘,对于进出的定义的报文的规则做检查,进而对被规则匹配到的报文作为相应处理的 套件 2.防火墙的作用 防火墙的作用主要是防黑客,防恶意攻击,有点类似于acl机制.主要针对服务器或者保护局域网中的主机. 防火墙主要作用是不防病毒和木马的,但是有一定的防护作用. 3.防火墙的分类 主机防火墙:工作在主机上的软件防火 网络防火墙:工作在网络边缘保护局域网,在网络中检测 ip 首部 tcp首部 帧首部 应用层网关防火墙:让消息报文

.NET基础笔记(C#)

闲着没事就把以前学习时的笔记拿出来整理了一下,个人感觉有点用,就想拿出来跟园友共享一下.有些基础性的内容比如基本概念.语法什么的就不发了. 内容:1.构造方法(函数) 2.继承   3.访问修饰符  4.静态和非静态  5.隐藏基类方法  6.重写基类方法  7.抽象方法  8.接口  9.多态和接口  10.值类型与引用类型  11.ref和out  12.类型转换  13.异常处理  14.string字符串处理  15.string常用方法  16.StringBulider  17.Fi

iptables规则备份和恢复/firewalld的9个zone

iptables规则备份和恢复 iptables规则保存,默认保存的位置路径:/etc/sysconfig/iptables文件里: [[email protected] ~]# service iptables save iptables规则备份到指定路径: [[email protected] ~]# iptables-save > /tmp/ipt.txt iptables清空规则: [[email protected] ~]# iptables -t nat -F iptables查看规