iptables

作者: 小昔小怪兽 | 来源:发表于2021-01-22 16:09 被阅读0次

iptables全局报文流向图:

全局报文流向图

一、增加规则

1.在INPUT链的filter表插入(头插)源IP为192.168.116.1通行的规则

 iptables -I INPUT -t filter -s 192.168.116.1 -j ACCEPT

2.在INPUT 链的 filter 表追加 (尾插) 宿IP为 10.9.62.30 传输层协议为tcp的 拒绝规则

iptables -I INPUT -t filter -p tcp -d 10.9.62.30 -j REJECT

3.将某个规则插入INPUT 链第2条
规则:将宿IP为 10.0.1.56 规则拒绝

iptables -I INPUT 2 -t filter -d 10.0.1.56 -j REJECT

二、查看规则

1.查看 INPUT 链 filter 表详细规则

root@ubuntu:~# iptables -t filter -L INPUT -v -n
Chain INPUT (policy ACCEPT 141 packets, 9701 bytes)
 pkts bytes target     prot opt in     out     source               destination         
   75  9806 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0            tcp dpt:8080

Chain INPUT (policy ACCEPT 141 packets, 9701 bytes)
上述ACCEPT代表 INPUT的默认规则,即当链中所有规则都没有匹配到的策略,默认放行。
可通过如下命令修改默认策略为DROP

iptables -P INPUT DROP

三、修改规则

前提:有如下规则

root@ubuntu:~# iptables -L INPUT -vn --line
Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
num   pkts bytes target     prot opt in     out     source               destination         
1        0     0 ACCEPT     tcp  --  *      *       10.1.22.11           0.0.0.0/0            tcp dpt:9090

原规则:源IP:10.1.22.11 协议:tcp 动作:放行
修改后规则:源IP:10.1.22.11 协议:tcp 动作:拒绝
命令:

iptables -R INPUT 1 -t filter -s 10.1.22.11 -p tcp --dport 9090 -j REJECT

结果:

root@ubuntu:~# iptables -L INPUT -vn --line
Chain INPUT (policy ACCEPT 27 packets, 53402 bytes)
num   pkts bytes target     prot opt in     out     source               destination         
1        0     0 REJECT     tcp  --  *      *       10.1.22.11           0.0.0.0/0            tcp dpt:9090 reject-with icmp-port-unreachable

注意点:修改规则时候一定把源规则所有规则写全,要不然默认规则是0.0.0.0/0,会导致规则非预期变化!

四、删除规则

前提:有如下规则

root@ubuntu:~# iptables -L INPUT -vn --line
Chain INPUT (policy ACCEPT 186 packets, 262K bytes)
num   pkts bytes target     prot opt in     out     source               destination         
1        0     0 REJECT     tcp  --  *      *       10.1.22.11           0.0.0.0/0            tcp dpt:9090 reject-with icmp-port-unreachable
2        0     0 REJECT     tcp  --  *      *       0.0.0.0/0            10.9.62.30           reject-with icmp-port-unreachable
3        0     0 REJECT     all  --  *      *       0.0.0.0/0            10.0.1.56            reject-with icmp-port-unreachable
4     1290  100K ACCEPT     all  --  *      *       192.168.116.1        0.0.0.0/0           
5      230 18154 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0            tcp dpt:8080

1.删除INPUT 链 第二条规则

iptables -D INPUT 2

结果:

root@ubuntu:~# iptables -L INPUT -vn --line
Chain INPUT (policy ACCEPT 17 packets, 1611 bytes)
num   pkts bytes target     prot opt in     out     source               destination         
1        0     0 REJECT     tcp  --  *      *       10.1.22.11           0.0.0.0/0            tcp dpt:9090 reject-with icmp-port-unreachable
2        0     0 REJECT     all  --  *      *       0.0.0.0/0            10.0.1.56            reject-with icmp-port-unreachable
3     1384  107K ACCEPT     all  --  *      *       192.168.116.1        0.0.0.0/0           
4      257 19678 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0            tcp dpt:8080

五、匹配规则

1.匹配协议

参数:-p
支持协议类型:

  • centos6: tcp, udp, udplite, icmp, esp, ah, sctp
  • centos7: tcp, udp, udplite, icmp, icmpv6,esp, ah, sctp, mh
    当不使用-p指定协议类型时,默认表示所有类型的协议都会被匹配到,与使用-p all的效果相同。

2.匹配端口

匹配端口属于iptables扩展匹配条件,匹配源宿IP和协议都属于基本匹配条件,在使用端口匹配时候,必须先指定匹配的协议才可以使用!
1.匹配源端口
参数:--sport

iptables -I INPUT -p tcp -m multiport --sport 9090,8080:8090 -j ACCEPT

解释:-m 表示使用扩展模块: multiport进行匹配,这样source-port 就可以指定多个,并且可以指定连续的端口段以及离散的端口组,中间以逗号(,)隔开。
:8080 代表地址段 0-8080
8080: 代表端口段8080-65535(即默认的所有端口段)
2.匹配目的端口
参数:--dport

iptables -I INPUT -p tcp -m multiport --sport 9090,8080:8090 -j ACCEPT

用法同上。

未完待续...

参考:http://www.zsythink.net/archives/1544

六、扩展模块

1、ipset (实现O(1)查找规则)

ipset是iptables的扩展,它允许你创建 匹配整个地址集合的规则。而不像普通的iptables链只能单IP匹配, ip集合存储在带索引的数据结构中,这种结构即时集合比较大也可以进行高效的查找,官网:http://ipset.netfilter.org/

  1. 安装ipset :yum install ipset
  2. 创建一个hash表:ipset create myfilter hash:ip(net) maxelem 100000
    ipset 默认可以存储65536个元素,可以使用maxelem指定数量
  3. 查看已创建的ipset :ipset list
  4. 加入一个黑名单IP:ipset add myfilter 10.1.62.10
  5. 移除一个黑名单IP:ipset del myfilter 10.1.62.10
  6. 创建一个防火墙规则:iptables -I INPUT -m set –match-set myfilter src -p tcp -j DROP

参考:http://www.zsythink.net/archives/1564

七、自定义链

1.创建自定义链
在filter表中创建IN_WEB自定义链
iptables -t filter -N IN_WEB

2、引用自定义链
在INPUT链插入规则,tcp协议且目的端口8080的报文走IN_WEB链处理
iptables -I INPUT -p tcp --dport 8080 -j IN_WEB

3、重命名链名称
iptables -E -t filter IN_WEB WEB

4、删除自定义链
前提:
1、自定义链没有被引用
2、自定义链中没有任何规则
iptables -X WEB
如果链被其他链引用需要先删除其他链上的规则,并且清空自定义链的规则,在执行删除自定义链。
删除INPUT链引用WEB链的规则 :iptables -D INPUT 1
清空WEB链规则:iptables -F WEB

相关文章

网友评论

      本文标题:iptables

      本文链接:https://www.haomeiwen.com/subject/ewoszktx.html