iptables命令的详解

Linux系统中防火墙:iptables/netfilter (既可以当主机防火墙,又可以当网络防火墙)

netfilter:linux内核中的防火墙的框架,Feamework,防火墙功能实现的主体;

iptables:专门为netfilter编写的数据报文的匹配规则的用户空间的应用程序工具;

在使用iptables防火墙的时候,我们建议将Centos 7 中的 firewalld 关闭,并停止运行;

[[email protected] ~]# systemctl stop firewalld.service
[[email protected] ~]# systemctl disable  firewalld.service

并把核心转发功能开启,这关系到我们转发功能;

[[email protected] ~]# echo 1 > /proc/sys/net/ipv4/ip_forward
[[email protected] ~]# cat /proc/sys/net/ipv4/ip_forward
1

把 SELinux 设成 premissive 模式;

[[email protected] ~]# setenforce 0
[[email protected] ~]# getenforce 
Permissive

netfilter的逻辑结构:

chain:

INPUT

OUOTPUT

FORWARD

PREROUTING

POSTROUTING

table:

filter:过滤器,包过滤防火墙功能;

包含:INPUT、OUOTPUT、FORWARD三条链

nat:用于修改报文的源地址和/或目的地址,而且还可以修改端口号;

地址转换

地址伪装

包含:PREROUTING、POSTROUTING、OUTPUT、INPUT(1.4+版本中新增加)

mangle:拆解报文并对报文格式进行修改,然后在重新封装报文;

流量控制

数据标签

包含:PREROUTING、POSTROUTING、OUTPUT、INPUT、FORWARD五条链;

raw:关闭nat表上启动的连接追踪机制;

包含:PREROUTING、OUTPUT两条链;

各个表中相同规则链上的规则生效优先级次序(从高到低);

raw --> mangle  --> nat  --> filter

定义规则时的注意事项:

1.规则的匹配顺序是由上至下按照书写顺序进行匹配;

1) 同一类规则,匹配范围最小的应该写在最上面;

2) 非同一类的规则,匹配频率越高的应该写在上面;

3) 建议尽量不修改链的默认策略为组织所有数据,如果想要设置组织所有数据的规则,在链的最后一条设置阻止所有数据的规则即可;

iptables规则编写的通用格式:

iptables [-t table] COMMAND CHAIN [-m matchname] [per-match-options] -j targetname [per-target-options]

-t table:指定选择执行那个表的功能,可以选择的表包括:raw,mangle,nat及filter,如果省略此选项,则表示使用默认表——filter表;

-m matchname:通常是配置显示扩展的匹配条件时,必须书写;如果省略则表示要配置基本匹配条件或隐式扩展匹配条件;

-j targetname:指定所有匹配条件的数据包的处理动作;

COMMAND:

链的操作命令:

-P, --policy chain target

用于定义指定链的默认策略;通常有两种动作选择,即:ACCEPT和DROP;

-N, --new-chain chain

创建一条新的自定义的规则链;新建的链上的规则必须要被内键链上的规则调用才能生效;

-X, --delete-chain [chain]

删除被内键链调用次数为0的自定义链;

-E -rename-chain

重定义被内键链调用次数为0的自定义链;

-F -flush

清除所有指定链(表中所有链)上的规则;

规则的操作命令:

-A -append chain rule-specification:

在指定的链的末尾追加一条规则;

-D, --delete chain rule-specification

-D, --delete chain rulenum

从指定的链上删除一条规则,可以指明具体规则,也可以指明规则在链上的编号;

-I, --insert chain [rulenum] rule-specification:

在指定的链上插入一条规则,默认是将新规则插入至链的第一条规则,也可以指定规则编号,使得插入的规则称为指定链上的第rulenum条规则;

-R, --replace chain rulenum rule-specification:

用命令行中的规则替换指令链上的第rulenum条规则,并不是修改规则张总某个具体条件,而是用完全替换整条规则;

-L, --list [chain]:

列表显示指定表指定链(所有链)上的所有规则;

可以使用的其他常用选项:

-v, --verbose:显示更详细的信息,还有-vv;

-n, --numeric:将规则中的所有信息都进行数字化显示;包括主机名和端口号等信息;

-x, --exact:精确的显示计数器的结果;

每个规则都有两个计数器:

1.规则所匹配的报文的个数;

2.规则所匹配的报文的字节总数;

--line-numbers:显示指定链上各个规则的编号;

其他的命令:

-Z, --zero [chain [rulenum]]

将指定链的规则计数器置0;

常用的TARGETS:

LOG:对于匹配的数据报文的的流动情况进行日志记录,并不会影响数据报文本身的传输;

MARK:对于匹配的数据报文进行防火墙标记的设置;

MASQUERADE: 源地址伪装,一种特殊情况的IP地址转换;

REDIRECT:目标IP地址和端口的重定向;

REJECT:阻止数据报文传输并向数据报文的源头返回消息;

SNAT:源IP地址转换;

DNAT:目标IP地址转换;

ACCEPT:对于匹配的数据报文进行放行;

DROP:对于匹配的数据报文进行阻止;

RETURN:在规则链之间跳转;

匹配条件:

默认情况下,同一条命令中的不同条件之间存在逻辑"与"的关系;

!: 对于匹配的结果取反,有除了...之外的意思;

基本匹配条件:

[!] -s, --source address[/mask][,...]

检测数据报文中的源IP地址的匹配范围;可以是单个IP地址,也可以是子网,主网,超网等IP地址设定:0.0.0.0/0表示整个ip地址栈中所有的ip地址;如果省略该条件,意味着将匹配所有的源IP地址;

[!] -d, --destination address[/mask][,...]

检测数据报文中的目的IP地址的匹配范围;可以是单个IP地址,也可以是子网,主网,超网等IP地址设定:0.0.0.0/0表示整个ip地址栈中所有的ip地址;如果省略该条件,意味着将匹配所有的目的IP地址;

[!] -i, --in-interface name

检查数据报文入站的接口是否能够被此条件所匹配;

[!] -o, --out-interface name

检查数据报文出站的接口是否能够被此条件所匹配;

扩展匹配条件:

隐式扩展匹配条件:

[!] -p, --protocol protocol

[!] -p, [-m matchname] --protocol protocol

检查数据报文某指定的协议的封装首部中是否有符合条件的特性或字段;

可以在此处指定的协议包括:

tcp, udp, udplite, icmp, icmpv6, esp, ah, sctp, mh, all

tcp协议:

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

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

用于指定源端口和/或目标端口的匹配条件;每次只能指定一个端口或一组连续的端口,而不能指定离散端口;

[!] --tcp-flags mask comp

用于指定在tcp协议首部中各标志位的匹配条件;

URG, SYN, RST, PSH, FIN, ACK, ALL, NONE

mask:设定要检测的标志位的列表,可以使用","进行分隔;

comp:必须被置"1"的标志位列表,剩余的在mask列表中的标志位必须置"0";

[!] --syn

相当于:--tcp-flags SYN,RST,ACK,FIN SYN

udp协议(udp模块):

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

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

用于指定源端口和/或目标端口的匹配条件;每次只能指定一个端口或一组连续的端口,而不能指定离散端口;

icmp协议(icmp模块)

[!] --icmp-type {type[/code]|typename}

常用的icmp-type:

echo-request: 代码为8;

echo-reply: 代码为0;

显式扩展匹配条件:

1.multiport扩展:

一次性的写入多个离散端口或多组连续端口,最大的上限15组端口,每一个段范围占用两个端口;

可以支持的协议:tcp, udp, udplite, dccp, sctp

相关选项:

[!] --source-ports,--sports port[,port|,port:port]...

[!] --destination-ports,--dports port[,port|,port:port]...

[!] --ports port[,port|,port:port]...

--dports 22 ,80,3306 -j ACCEPT

示例:

~]# iptables -I FORWARD -s 192.168.100.100 -d 172.16.69.2 -p tcp -m multiport --dports 22,80,3306 -j ACCEPT

~]# iptables -I FORWARD -d 192.168.100.100 -s 172.16.69.2 -p tcp -m multiport --sports 22,80,3306 -j ACCEPT

2.iprange扩展:

以连续的任意数量的IP地址访问作为匹配条件:

相关选项:

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

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

-m iprange --src-range 172.16.1.100-172.16.1.200

示例:

~]# iptables -I FORWARD -m iprange --src-range 192.168.100.1-192.168.100.100 -d 172.16.69.2 -p tcp -m multiport --dports 22,80,3306 -j ACCEPT

~]# iptables -I FORWARD -m iprange --dst-range 192.168.100.1-192.168.100.100 -s 172.16.69.2 -p tcp -m multiport --sports 22,80,3306 -j ACCEPT

3.string扩展:

对数据报文中的应用层数据做字符串匹配检测;

相关选项:

--algo {bm|kmp}

--string "STRING"

示例:

~]# iptables -I FORWARD -s 172.16.69.2 -m string --algo bm --string "dafa" -j REJECT

4.time扩展

根据报文到达防火墙本机的时间与指定的时间范围进行匹配检测;

相关选项:

--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...]

定义每个月中的各个天,1-31

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

定义每个星期的星期几,1-7

示例:

~]# iptables -I FORWARD -m time --timestart 08:00:00 --timestop 17:59:59 ! --weekdays 6,7 -o eno16777736 -j REJECT

5.stat扩展 modprobe nf_conntrack_ftp内核模块;

连接状态检测的模块;基于连接追踪机制实现;

conntrack

iptables对连接状态的定义:

INVALID, ESTABLISHED, NEW, RELATED or UNTRACKED;

INVALID:无法识别的连接状态,无效的通信状态;SYN,FIN

ESTABLISHED:已经建立连接的状态;连接态;

NEW:尚未建立连接的状态;

RELATED:与其他已经建立的连接有相互关联的连接状态;关联态或衍生态;

UNTRACKED:未追踪的状态;

内核中用于保存连季节追踪状态数据的位置:/proc/net/nf_conntrack

能够被追踪到的最大的连接数:/proc/sys/net/nf_conntrack_max

注意:此处记录的最大连接数的数值,建议必要时可以调整其大小到足够大;

为了能够尽可能的高效利用内存资源,缓存的连接追踪的状态不能无限期保存,因此设置了相应的超时时间;

/proc/sys/net/netfilter/nf_conntrack*timeout*

利用连接追踪设置FTP服务器的访问控制:

~]# iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

~]# iptables -A INPUT -d 172.16.69.2 -p tcp -m multiport --dports 21,22,80,3306 -m state --state NEW -j ACCEPT

~]# iptables -A INPUT -j DROP

注意:需要装载nf_conntrack_ftp内核模块;

~]# modprobe nf_conntrack_ftp

设置nf_conntrack_ftp模块的自动装载;

/etc/sysconfig/iptables-config

IPTABLES_MODULES="nf_conntrack_ftp"

利用连接追踪可以设置OUTPUT链上的通用规则;

~]# iptables -A OUTPUT -m state --state ESTABLISHED -j ACCEPT

~]# iptables -A OUTPUT -j DROP

6.mac扩展

实现mac地址的扩展进行限制;PREROUTING, INTPUT, FORWARD链;

[!] --mac-source address

匹配Mac地址,其形式必须是:XX:XX:XX:XX:XX:XX

7.connlimit扩展:

根据每个客户端IP地址做并发连接数的匹配检测;

相关选项:

[!] --connlimit-upto n

当客户端当前的并发连接数小于或等于n时,可以匹配此条件;此条件通常和ACCEPT动作配合使用;

[!] --connlimit-above n

当客户端当前的并发连接数大于n时,可以匹配此条件;此条件通常和DROP或REJECT动作配合使用;

8.limit扩展:

基于服务器端收发数据报文的速率来进行匹配检测;

--limit rate[/second|/minute|/hour|/day]

服务器端最大单位时间内能够接收的报文速率;

--limit-burst number

初始时所能接收的数据报文的最大数量;

示例:

~]# iptables -I INPUT 1 -p icmp --icmp-type 8 -m limit --limit 15/minute --limit-burst 8 -j ACCEPT

nat表:

功能:

1.NAT,Network Address Translation,

1) SNAT: Source-Address Nat

通常用于让局域网中使用私有ipv4地址的主机能够访问外部网络或互联网;

一般在路由选择之后完成原地址自的网络地址转换,因此,与iptables而言,此类规则应配置在POSTROUTTING链上;

a.静态地址转换:一对一地址转换;

b.地址伪装:多对一地址值转换;

2) DNAT:Destination-Address Nat

通常用于让外部网络或互联网中的主机能够访问局域网中使用私有ipv4地址的服务器上的网络服务;

一般在路由选择之前就需要完成目标地址的网络地址转换,因此,于iptables而言,此类规则应配置在PREROUTING链上;

2.NAPT:Network Address and Port Translation,网络地址端口转换;

网络地址转换 + 地址映射

SNAT:

This is the correct behavior when the next dialup is unlikely to have the same  interface address (and hence any established connections are lost anyway).

--to-ports port[-port]

注意:在REHL或Centos系发信号版Linux中,SNAT所指定的ipaddr必须是当前主机上配置并生效的ip地址;

示例:

iptables -t nat -A POSTROUTING  -s 192.168.1.0/24 -j SNAT --to-source 172.16.1.74

~]# iptables -t nat -A POSTROUTING -s 192.168.100.0/24 -j MASQUERADE

//源地址伪装技术,无需指定具体的内部全局地址,自动决定本地可用的IP地址作为内部全局地址,进行源地址转换

DNAT:

This target is only valid in the nat table, in the PREROUTING and  OUTPUT  chains,  and  user-defined chains  which  are  only  called from those chains.

--to-destination [ipaddr[-ipaddr]][:port[-port]]

示例:

~]# iptables -t nat -A PREROUTING -d 192.168.100.1 -p tcp --dport 80 -j DNAT --to-destination 172.16.69.2:8000

与之相同功能的操作:

1.在路由器上设置NAT转换的防火墙规则:

~]# iptables -t nat -R PREROUTING 1 -d 192.168.100.1 -j DNAT --to-destination 172.16.69.2

2.在目标服务器上做端口重定向:需要使用REDIRECT target

~]# iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-ports 8000

原文地址:http://blog.51cto.com/liujingyu/2119618

时间: 2024-10-11 04:23:30

iptables命令的详解的相关文章

iptables命令使用详解

iptables的主要功能是实现对网络数据包进出设备及转发的控制.当数据包需要进入设备.从设备中流出或者经该设备转发.路由时,都可以使用iptables进行控制. 环境 操作系统:CentOS7.3 ip地址:172.16.55.7 1.iptables中的"四表五链"及"堵通策略" A."四表"是指,iptables的功能--filter, nat, mangle, raw. filter, 控制数据包是否允许进出及转发(INPUT.OUTPU

iptables Data filtering详解

内容简介防火墙的概述iptables简介iptables基础iptables语法iptables实例案例详解(一)防火墙的简介防火墙是指设置在不同网络或网络安全域之间的一系列部件的组合,它能增强机构内部网络的安全性.它通过访问控制机制,确定哪些内部服务允许外部访问,以及允许哪些外部请求可以访问内部服务.它可以根据网络传输的类型决定IP包是否可以传进或传出内部网.防火墙通过审查经过的每一个数据包,判断它是否有相匹配的过滤规则,根据规则的先后顺序进行一一比较,直到满足其中的一条规则为止,然后依据控制

【转】Snort 命令参数详解

转载自<Snort 命令参数详解> 用法:        snort -[options] <filters> 选项: -A <alert> 设置报警模式,alert = full/fast/none/unsock,详解上一篇snort简介. -b 用二进制文件保存网络数据包,以应付高吞吐量的网络. -B <mask> 将IP地址信息抹掉,去隐私化. -c <cf> 使用配置文件<cf>,这会使得snort进入IDS模式,并从<

Pip 命令使用详解

Pip 命令使用详解 2015-01-06 21:44 3033人阅读 评论(0) 收藏 举报  分类: debian(3)  redis(1)  python 1.pip下载安装1.1 pip下载 1 # wget "https://pypi.python.org/packages/source/p/pip/pip-1.5.4.tar.gz#md5=834b2904f92d46aaa333267fb1c922bb" --no-check-certificate 1.2 pip安装 1

iptables防火墙配置详解

iptables简介 iptables是基于内核的防火墙,功能非常强大,iptables内置了filter,nat和mangle三张表. filter负责过滤数据包,包括的规则链有,input,output和forward: nat则涉及到网络地址转换,包括的规则链有,prerouting,postrouting和output: mangle表则主要应用在修改数据包内容上,用来做流量整形的,默认的规则链有:INPUT,OUTPUT,NAT,POSTROUTING,PREROUTING: inpu

linux wget 命令用法详解(附实例说明)

Linux wget是一个下载文件的工具,它用在命令行下.对于Linux用户是必不可少的工具,尤其对于网络管理员,经常要下载一些软件或从远程服务器恢复备份到本地服务器.如果我们使用虚拟主机,处理这样的事务我们只能先从远程服务器下载到我们电脑磁盘,然后再用ftp工具上传到服务器.这样既浪费时间又浪费精力,那不没办法的事.而到了Linux VPS,它则可以直接下载到服务器而不用经过上传这一步.wget工具体积小但功能完善,它支持断点下载功能,同时支持FTP和HTTP下载方式,支持代理服务器和设置起来

linux nc命令使用详解(转)

linux nc命令使用详解 功能说明:功能强大的网络工具 语 法:nc [-hlnruz][-g<网关...>][-G<指向器数目>][-i<延迟秒数>][-o<输出文件>][-p<通信端口>][-s<来源位址>][-v...][-w<超时秒数>][主机名称][通信端口...] 参 数: -g<网关> 设置路由器跃程通信网关,最丢哦可设置8个. -G<指向器数目> 设置来源路由指向器,其数值为4的

【转】 wget 命令用法详解

wget是在Linux下开发的开放源代码的软件,作者是Hrvoje Niksic,后来被移植到包括Windows在内的各个平台上.它有以下功能和特点:(1)支持断点下传功能:这一点,也是网络蚂蚁和FlashGet当年最大的卖点,现在,Wget也可以使用此功能,那些网络不是太好的用户可以放心了:(2)同时支持FTP和HTTP下载方式:尽管现在大部分软件可以使用HTTP方式下载,但是,有些时候,仍然需要使用FTP方式下载软件:(3)支持代理服务器:对安全强度很高的系统而言,一般不会将自己的系统直接暴

Mysql导入导出工具Mysqldump和Source命令用法详解

mysqldump -u 用户名 -p [--opt] DATABASENAME [Table] >导出SQL文件名 例子: mysqldump -h host -u user -p --opt databasename [table] > /home/user/databasename.sql 使用Mysqldump导出数据表结构 mysqldump -u root -p --no-data mysql user >D:\PHPWeb\sqlbackup\mysql_user.sql