iptables的命令使用

iptables的使用

   iptables 是Linux一个用于 IP 访问控制的指令它可以调用内核 Netfilter 进行 IP 访问控制设置属于网络七层模型中网络层的防火墙。

命令介绍

基本语法如下:

iptables [-t TABLE] COMMAND CHAIN  CRETIRIA -j TARGET

-t 指定要访问的表,不指定,默认为 filter 表

TABLE 上面提到的四张表filternatmangleraw,一般常用到的表为 filter 和 nat 表

COMMAND操作参数

分为对链本身操作、规则操作及查询操作:

本身操作

-F:flush, 清空规则链;

-N:new, 自建一条链

-X: delete, 删除一条自定义的空链

-Z:zero,计数器归零

-P:policy,设置默认策略,对filter表来讲,默认规则为ACCEPT或DROP;

-E:重命名自定义链

链规则操作

-A 添加规则

-I 插入规则

-D 删除规则

-R 修改规则

查询操作:

-L  列出规则

   -n: 数字格式显示主机地址和端口;

   -v: 详细格式,-vv, -vvv

   -x: exactly,不要对计数器的计数结果做单位换算,而显示其精确值  

   --line-numbers: 显示规则编号

CRETIRIA匹配条件

匹配条件,可使用以下参数

通用匹配

-s 地址:指定报文源IP地址匹配的范围;可以是IP,也可以是网络地址;可使用!取反;

   --src, --source

-d 地址:指定报文目标IP地址匹配的范围;

   --dst, --destination

-p 协议:指定匹配报文的协议类型,一般有三种tcp, udp和icmp;

-i INTERFACE: 数据报文流入的接口;PREROUTING, INPUT, FORWARD

-o INTERFACE: 数据报文流出的接口;OUTPUT, FORWARD, POSTROUITING

扩展匹配

调用netfilter额外模块实现特殊检查机制,(使用到相关功能,要使用iptables命令的-m选项来指定调用哪个模块)

隐式扩展

当使用-p {tcp|udp|icmp}中的一种时,可以直接使用扩展专用选项;

-p tcp 指定端口采用:

  --sport PORT[-PORT]: 指定源端口

  --dport PORT[-PORT]: 指定目标端口

  --tcp-flags

 要检查标志位列表(用逗号分隔),必须为1的标志位列表(逗号分隔),加参数:

  --syn

-p udp同样指定端口如下:

 --sport 

 --dport

-p icmp [-m icmp]

 --icmp-type

  0: echo-reply, ping响应

  8: echo-request, ping请求

显式扩展

必须明确说明使用哪个模块进行扩展,而后才能使用其扩展专用选项;

-m 扩展模块名称

multiport: 多端口匹配, 可用于匹配非连续或连续端口;最多指定15个端口;

专用选项

指定端口

--source-ports, --sports port[,port,port:port]  指定源端口

--destination-ports, --dports   指定目标端口

--ports  通用端口,包括源与目标端口

例如:开放22,80端口指令,允许其它机器访问172.16.100.7

[root@localhost ~]# iptables -I INPUT -d 172.16.100.7 -p tcp -m multiport --dports 22,80 -j ACCEPT

[root@localhost ~]# iptables -I OUTPUT -s 172.16.100.7 -p tcp -m multiport --sports 22,80 -j ACCEPT

匹配地址

iprange: 匹配指定范围内的地址匹配一段连续的地址而非整个网络时有用;

[!] --src-ragne IP[-IP]

[!] --dst-range

例如,限定一段连续地址可以通过telnet连接。

[root@localhost ~]# iptables -A INPUT -d 172.16.100.7 -p tcp --dport 23 -m iprange --src-range 172.16.100.1-172.16.100.100 -j ACCEPT

[root@localhost ~]# iptables -A OUTPUT -s 172.16.100.7 -p tcp --sport 23 -m iprange --dst-range 172.16.100.1-172.16.100.100 -j ACCEPT

匹配字符串

string: 字符串匹配,能够检测报文应用层中的字符串

专用选项:

--algo {kmp|bm}  2种不同的算法,选一种

--string "STRING"      STRING为你想要匹配的字符串

--hex-string "HEX_STRING": HEX_STRING为编码成16进制格式的字串;

例子:对报文中包含有sex字符串的进行拒绝访问(丢包)

# iptables -I OUTPUT -m string --algo kmp --string "sex" -j DROP

匹配时间

time: 基于时间做访问控制

专用选项:

--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]  按时期匹配,day可为

Mon, Tue,.....     中间用逗号隔开 

例子,允许周一周二8:20-18:40访问172.16.100.7的80端口(即默认的http访问):

[root@localhost ~]# iptables -I INPUT -d 172.16.100.7 -p tcp --dport 80 -m time --timestart 08:20 --timestop 18:40 --weekdays Mon,Tue  -j ACCEPT

匹配连接数

connlimit: 连接数限制,对每IP所能够发起并发连接数做限制;

专用选项:

[!] --connlimit-above [n] 

例子:限制同一IP ssh远程连接数。

[root@localhost ~]# iptables -A INPUT -d 172.16.100.7 -p tcp --dport 22 -m connlimit --connlimit-above 2 -j DROP

速率匹配

limit: 速率限制

专用选项:

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

--limit-burst n

例子:限制每分钟只能ping20次:

[root@localhost ~]# iptables -A INPUT -d 172.16.100.7 -p icmp --icmp-type 8 -m limit --limit 20/minute --limit-burst 5 -j ACCEPT

匹配状态

state: 根据状态检查匹配,匹配对应的状态

专用选项:

--state

连接追踪中的状态, 状态包括:

NEW: 新建立一个会话

ESTABLISHED:已建立的连接

RELATED: 有关联关系的连接

INVALID: 无法识别的连接

例子:放行所有已建立连接的数据包。

[root@localhost ~]# iptables -A OUTPUT -m state --state ESTABLISHED -j ACCEPT

TARGET处理参数

处理目标,即对数据包的处理行为,包含:

1、DROP :  丢弃包,作用同拒绝,一般使用DROP进行拒绝

2、REJECT: 拒绝

3、ACCEPT: 放行

4、自定义的链 :   根据自定义链中的规则进行匹配

    创建自定义链:iptables [-t table] -N chain

    删除自定义且0引用的空链:iptables [-t table] -X chain

    重命名自定义链:iptables [-t table] -E old_name new_name

5、DNAT:明确申明要做的是目的地地址转换操作 

6、SNAT:明确申明要做的是源地址转换操作

7、REDIRECT:重定向:主要用于实现端口重定向

8、MARK:打防火墙标记的

9、RETURN:在自义链中无法匹配报文时,将其返回主链

常用例子

  1. 查询规则

如上截图,对应字段及中文含义为:

pkts  bytes   target     prot  opt  in          out         source       destination

包数 字节数 目标       协议      流入接口  流出接口   源地址      目标地址

  1. 添加规则

1)SNAT例子:内网中的主机A想通过主机B访问公网中的WEB主机C。

内网主机A地址:172.16.6.2

网关主机为B:由2个地址,一个是内网地址172.16.0.1,一个外网地址192.168.1.1

公网主机C地址:2.2.2.2

使用IPTABLE指令为:

 [root@localhost ~]# iptables -t nat -A POSTROUTING -s 172.16.6.2 -j SNAT --to-source 1.1.1.1

2)DNAT例子:公网中的主机A想通过网关主机B访问公网中的内网主机A。

私网主机A地址:172.16.6.2

网关主机为B:由2个地址,一个是内网地址172.16.0.1,一个外网地址192.168.1.1

公网主机C地址:2.2.2.2

使用IPTABLE指令为:

 [root@localhost ~]# iptables -t nat -A PREROUTING -d 1.1.1.1 -j DNAT --to-destination 172.16.6.2

  1. 删除规则

例如,删除nat的第一条规则:

[root@localhost ~]# iptables -t nat -D 1

注:规则序号为从1开始,依次递增。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值