iptables学习

mangle表

建议不要在此表作任何过滤

表中仅有的几种操作

TOS 设置或改变数据包的服务类型域

TTL 数据包的生存时间域

MARK 设置特殊的标记

nat表

转换包的源或目标地址,只有流的第一个包会匹配,其后的包会自动处理

DNAT destination network address translation

SNAT source network address translation

MASQUERADE 与SNAT作用一样,但会查找可用的IP,负载比SNAT高

filter表

包过滤工作的主要地方

状态机制

一种连接跟踪机制,有 NEW, ESTABLISHED, RELATED, INVALID,使用--state匹配操作

除本地产生的包由OUTPUT链处理外,所有连接跟踪都是在PREROUTING链处理

(NAT表)

tcp SYN是NEW,SYN/ACK就是ESTABLISHED

udp 发送数据包是NEW,收到回复数据就是ESTABLISHED

ICMP同上

TCP发送的SYN包和UDP的数据包到目标网络有问题不可达时,数据包最后经过的一个路由会返回一个ICMP信息提示网络不可达,这种数据包是RELATED

FTP连接建立 的信息在协议数据包的数据域内,而不是在可分析的协议头里,因此,防火墙不知如何处理相应的数据包,解决的方法是为连接跟踪模拟加一个特殊的helper,以便能检测到那些信息,这样连接可以被跟踪,状态是RELATED.

conntrack helper可以编入内核,也可编为模块,用下面命令加载

modprobe ip_conntrack_*

连接跟踪不处理NAT

 

iptables-save iptables-restore

若用脚本增减iptables规则,每一次都会将iptables的规则集从内核空间提取出来,增删或修改后再插入内核空间,会花费更多的时间.

save一次将内核空间的规则集保存,restore一次将规则集载入内核空间.可以节省时间,但缺点不够脚本灵活.

iptables-save [-c] [-t table]

-c 保存包和字节计数器的值

-t 后面加上表名,保存特定表的规则集

iptables-restore [-c] [-n]

-c 同save

-n 不覆盖己有的规则


语法格式

iptables [ -t table] command [match] [target/jump]

target放在,若不指定表名,默认为filter表,command是增删或修改一个规则

match描述包的特点,可以指定IP,接口,协议类型等等

若数据包匹配match的描述,内核用target来处理,或把包发往target

Tables

nat 网络地址转换

mangle 改变不同的包的包头的内容,如TTL,TOS,或MARK,mangle有五个链:PREROUTING,POSTROUTING,OUTPUT,INPUT,FORWARD.在mangle表内不能做任何NAT

filter 专门过滤包,INPUT,OUTPUT,FORWARD

command

-A --append

末尾添加规则

-D --delete

删除规则,一是完整写出规则,二是指定规则的序号(由1开始)

-I --insert

根据序号插入规则,默认序号是1

-R --replace

替换规则,要指定序号

-L --list

显示所选链的所有规则

-F --flush

清空所选的链,不指定链会清空表的所有链

-Z --zero

把指定链(不指定是所有链)的计数器清零

-N --new-chain

根据指定的名字建新链

-X --delete-chain

删除指定的自定义链(不指定删除默认表的所有非内建链)

-P --policy

默认的target,所有不符合规则的包被强制使用这个策略.只有内建的链可以使用策略

-E --rename-chain

对自定义的链重命名

option

-v --verbose(详细的)

可以使用此选项的命令:--list --append --insert --delete --replace

-x --exact(精确的)

--list

-n --numeric(数值)

--list

--line-numbers(序号)

--list

-c --set-counters(设置计数器)

--insert --append --replace

--modprobe(探测并加载模块)

ALL

matches

五类:通用匹配,TCP匹配,UDP匹配,ICMP匹配,特殊匹配(state,owner limit等)

通用匹配:可以直接使用,不需要前提条件

-p --protocol 协议名

例:iptables -A INPUT -p tcp

1,名字不分大小写,但是/etc/protocols中定义的

2,可以使用相应的数值,ICMP是1,TCP是6,UDP是17

3,缺省是ALL,只匹配TCP,UDP,ICMP

4,可以是列表,以逗号分隔,如tcp,udp

5,可以加!取反,值范围是TCP,UDP,ICMP

-s --source --src 来源地址

iptables -A INPUT -s 192.168.1.1

1,单个地址

2,网络,192.168.1.0/24 192.168.1.0/255.255.255.0

3,加!取反

4,缺省是所有地址

-d --dst --destination 目的地址

iptables -A INPUT -d 192.168.1.1

同 -s一样

-i --in-interface 网络接口

iptables -A INPUT -i eth0

只能用于INPUT,FORWARD,PREROUTING

1,指定接口名称

2,可使用通配符,如 号匹配所有包,不考虑接口,eth 表示所有ethernet接口

3,加!取反

-o --out-interface

同 -i

-f --fragment

iptables -A INPUT -f

匹配被分片的包的第二片及以后的部分

隐含匹配

TCP matches 只能匹配TCP,有 -p tcp为前提

--sport --source-port

1,不指定表示所有端口

2,可以用服务名或端口号,服务名从/etc/services中查找,用端口号装载规则会更快

3,连续端口号,22:80=>20到80的端口号, :80 =>0到80的端口号,80: =>80到65535的端口号

4,可以加!号取反, -sport ! 22

5,不匹配连续的端口列表

--dport --destination-port

用法同sport,目的地端口

--tcp-flags

iptables -p tcp --tcp-flags SYN,FIN,ACK SYN 表示匹配仅SYN标记被设置的包

iptables -p tcp --tcp-flags ALL NONE 匹配所有标记都未设置1的包

iptables -p tcp --tcp-flags ! SYN,FIN,ACK SYN 表示FIN,ACK被设置的包

--syn

为ipchain兼容

--tcp-option

iptables -p tcp --tcp-option 16

根据TCP表头匹配

UDP matches

只有--sport --dport,用法与TCP一样

ICMP matches

--icmp-type

iptables -A INPUT -p icmp --icmptype 8

icmp类型匹配 ,可以加!取反

显式匹配

--limit

iptables -A INPUT -m limit --limit 3/hour

单位时间内可匹配的包

--limit-burst

iptables -A INPUT -m limit 3/hour --limit-burst 5

单位时间内可匹配包的峰值

--mac-source

iptables -A INPUT -m --mac-source AA:BB:00:11:CC:DD

mac地址匹配,只能用于以太网,可用!取反,只能用在PREROUTING,FORWARD,INPUT链中

多端口匹配

可以指定不连续的多个端口,不能同时使用标准端口匹配和多端口匹配.

iptables -A INPUT -p tcp -m multiport --source-port 22,53,80

iptables -A INPUT -p tcp -m multiport --destination-port 22,53,80

iptables -A INPUT -p tcp -m multiport --port 22,53,80 同端口匹配,如80到80的包

owner match

基于包的生成者的ID来匹配包,只能用于OUTPUT

--uid-owner 用户名ID

--gid-owner 组ID

--pid-owner 进程号

--sid-owner 生成包的会话ID(SID)

iptables -A OUTPUT -m --pid-owner 100

state match 连接状态跟踪机制匹配

--state

iptables -A INPUT -m --state RELATED,ESTABLISHED

TOS match

TOS是IP头的一部分,由8个二进制位组成,包括一个3 bit的优先权子字段(现在已被忽略),4 bit的TOS子字 段和1 bit未用位(置0).它一般用来把当前流的优先权和需要的服务(比如,最小延时、最大吞吐量 等)通知路由器.但路由器和管理员对这个值的处理相差很大,有的根本就不理会,而有的就会尽量满足要 求.

--tos

iptables -A INPUT -p tcp -m --tos 0x16

TTL match

根据IP头里的time to live来匹配

--ttl

iptables -A OUTPUT -m ttl --ttl 60

Target/jump

target/jump决定包的处理,语法是--jump target 或 -j target ,target分两类,一是具体的操作,如ACCEPT和DROP,另一个是发送到同一个表内的链

如:

iptables -N newchain

iptables -A INPUT -p tcp -j newchain

包从INPUT跳入newchain,到了newchain的结尾会退回INPUT链的下一条规则,如果在子链中ACCEPT,父链中也ACCEPT,相当于跳过父链中的其它规则

ACCEPT

-j ACCEPT ACCEPT后,当前链与表不再匹配,但还要接受其它表中的链的处理

DNAT

只能用在nat表的PREROUTING和OUTPUT链中,包含DNAT target的链不能被其它链调用

iptables -t nat -A PREROUTING -p tcp -d 172.16.1.1 --dport 80 -j DNAT --to-destination 192.168.1.1

DROP

丢掉包,不向发送者和路由返回信息

LOG

记录包的信息

iptables -A FORWARD -p tcp -j LOG --log-level debug

log-level分为:debug,info,notice warning,warn,err,error,crit,alert,emerg,panic

--log-prefix

log信息的前缀

--log-tcp-sequence

TCP序列号和其它日志信息一起记录

--log-ip-option

记录IP包头中字段大小不变的选项

MASQUERADE

与SNAT作用一样,但不需要指定--to-source,用于动态获取IP地址的连接,如拨号上网DHCP等,只能用于nat表的POSTROUTING,有一个选项--to-ports(非必须)

iptables -t nat POSTROUTING -p tcp -j MASQUERADE --to-ports 80

MARK

设置mark值

iptables -t mangle -A PREROUTING -p tcp --dport 22 -j MARK --set-mark 2

MIRROR

反转目的地址与来源地址

QUEUE

为软件管理包队列

REDIRECT

防火墙所在的主机内部转发包到另一个端口.

iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-ports 8080

REJECT

与DROP作用一样,还会返回错误信息,只能用在INPUT,OUTPUT,FORWARD

iptables -A FORWARD -p tcp --dport 22 -j REJECT --reject-with tcp-reset

可用的信息类型:1,icmp-net-unreachable 2,icmp-host-unreachable 3,icmp-port-unreachable 4,icmp-proto-unreachable 5,icmp-net-prohibited 6,icmp-host-prohibited,默认是3,还有 echo-reply tcp-reset

RETURN

返回上一层,顺序是子链--父链--默认策略

SNAT

只能用在nat表的POSTROUTING

iptables -t nat -A POSTROUTING -p tcp -o eth0 -j SNAT --to-source 192.168.10.10

可以指定单独或连续的地址,也可指定端口

TOS

iptables -t mangle -A PREROUTING -p tcp --dport 22 -j TOS --set-tos 0x10

TTL

若ISP通过判断包的TTL来禁止共享连接,可以设置TTL为相同的数值来冲过封锁

iptables -t mangle -A PREROUTING -i eth0 -j TTL --ttl-set 64

--ttl-dec 减少1

--ttl-inc 加1

注意TTL每通过一个路由都会减1

ULOG

ULOG可以在用户空间记录被匹配的包的信息,这些信息和整个包都会通过netlink socket被多播。然 后,一个或多个用户空间的进程就会接受它们。换句话说,ULOG是至今iptables和Netfilter下最成熟、最 完善的日志工具,它包含了很多更好的工具用于包的记录。这个target可以是我们把信息记录到MySQL或其 他数据库中。这样,搜索特定的包或把记录分组就很方便了。

iptables -A INPUT -p tcp --dport 22 -j ULOG --ulog-nlgroup 2

--ulog-prefix

--ulog-cprange

--ulog-qtreshold


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值