前言

iptables详解跳转blog:iptables介绍

iptables管理和规则跳转blog:piptables管理和规则

iptables文档:iptables(8) - Linux man page

iptables指南:iptables-tutorial

防火墙常用策略

拒绝进入防火墙的所有ICMP协议数据包w

iptables -I INPUT  -p icmp -j REJECT

-I : 在指定链中插入一条规则,默认第一行, INPUT链:进入防火墙的必经之链, -p 选择协议 -j 对数据包执行的操作


允许防火墙转发除ICMP协议以外的所有数据包

iptables -A FORWARD -p !icmp -j ACCEPT

-A:在指定链的末尾添加(append)一条新的规则


拒绝转发来自192.168.1.10主机的数据。允许转发来自192.168.0.0/24网段的数据

iptables -A FORWARD -s 192.168.1.10 -j REJECT
iptables -A FORWARD -s 192.168.0.0/24 -j ACCEPT

⚠️注意要把拒绝的放在前面,不然无法起作用。


丢弃从外网接口(eth1)进入防火墙本机的源地址为私网地址的数据包

iptables -A INPUT -i eth1 -s 10.0.0.0/8 -j DROP
iptables -A INPUT -i eth1 -s 172.16.0.0/12 -j DROP
iptables -A INPUT -i eth1 -s 192.168.0.0/16 -j DROP

私网地址范围

A类地址:10.0.0.0~10.255.255.255.

B类地址:172.16.0.0 ~172.31.255.255.

C类地址:192.168.0.0~192.168.255.255.


只允许管理员从202.13.0.0/16网段使用SSH远程登录防火墙主机。

iptables -A INPUT -p tcp --dport 22 -s 202.13.0.0/16 -j ACCEPT
iptables -A INPUT -p tcp --dport 22 -j DROP

SSH使用的传输层协议是TCP

SSH服务开放22端口,-dport num 匹配目标端口号


允许本机开放从TCP端口20-1024提供的应用服务

iptables -A INPUT -p tcp --dport 20:1024 -j ACCEPT
iptables -A OUTPUT -p tcp --sport 20:1024 -j ACCEPT

端口范围的表示方式:20-1024的表示方式,20:1024

允许开放这个范围的服务,流量不止要能进来,还要进来之后能顺利流出。所以还要制定OUTPUT链的规则。


允许转发来自192.168.0.0/24局域网段的DNS解析请求数据包

iptables -A FORWARD -s 192.168.0.0/24 -p udp --dport 53 -j ACCEPT
iptables -A FORWARD -d 192.168.0.0/24 -p udp --sport 53 -j ACCEPT

转发这一网段的请求,也是要求能够有进有出。 -d --sport总是成对出现

DNS解析,使用的传输层协议是UDP

DNS服务开放端口号是53号端口

扩展模块

iptables官方文档说明

扩展模块相关内容,章节10中详细介绍了。

比较常用的扩展:

Iptables -m参数

用法:

-m 模块关键字

扩展模块:

  1. iprange可以指定一段连续的IP地址范围,用于匹配报文的源地址或目的地址

    --src-range 匹配报文的源地址所在范围

    --dst-range 匹配报文的目标地址所在范围

    iptables -t filter -I INPUT -m iprange --src-range 192.168.1.15-192.168.1.149 -j REJECT
    
  2. string可以指定要匹配的字符串,如果报文中包含对应的字符串,则符合匹配条件。

    如:如果报文中包含字符“hello”,就丢弃当前报文

    iptables -t filter -I INPUT -m string --algo bm --string "hello" -j REJECT
    

    -m string表示使用string模块,--algo bm表示使用bm算法去匹配指定的字符串,--string "OOXX" 则表示我们想要匹配的字符串为”hello”

  3. time: 根据时间段区匹配报文,如果报文到达的时间在指定的时间范围以内,则符合匹配条件。

    比如:每天早上9点到下午6点不能看网页

    iptables -I OUTPUT -p tcp --dport 80 -m time --timestart 09:00:00 --timestop 18:00:00 -j REJECT
    

禁止其他主机ping防火墙主机,但是允许从防火墙上ping其他主机

iptables -I INPUT -p icmp --icmp-type 8/0 -j REJECT

或者

iptables -I INPUT -p icmp --icmp-type "echo-request" -j REJECT

ping 使用的网络层协议是icmp

流量要一开始就被及时制止,所以用-I 参数,将规则添加到第一行

Icmp扩展匹配条件:

icmp协议类型有很多种,都有对应的type码,每种type码又有对应的code。通常使用type/code去匹配具体类型的ICMP报文。使用--icmp-type表示根据具体的type与code去匹配对应的icmp报文。-m icmp 表示使用icmp扩展。如果已经使用了-p icmp则可以省略-m icmp

比如--icmp-type 8/0表示只有ping请求类型的报文才能被匹配到。也就是说别人对我们发起的ping请求将会被拒绝通过防火墙,而我们可以ping通别人。因为别人回应我们的报文icmp type 为0,code也为0。

除了用type code的数字表示,也可以使用文字的描述。直接填写description中的内容表述就可以了。比如 --icmp-type 8/0 可以用以下的方式表示。空格用-表示

--icmp-type "echo-request" 


还有udp的扩展:

udp扩展,使用-sport-dport来匹配UDP协议报文的源端口与目的端口。

比如放行samba服务的137与138两个UDP端口。

iptables -I INPUT -p udp --dport 137 -j ACCEPT
iptables -I INPUT -p udp --dport 138 -j ACCEPT

禁止转发来自MAC地址为00:0C:29:27:55:3F的和主机的数据包

iptables -A FORWARD -m mac --mac-source 00:0C:29:27:55:3F -j DROP

在文档里匹配mac,找到想要的内容

![Screen Shot 2022-07-19 at 11.30.30](/Users/gryffinbit/Desktop/Screen Shot 2022-07-19 at 11.30.30.png)


允许防火墙本机对外开放TCP端口20、21、25、110以及被动模式FTP端口1250-1280

iptables -A INPUT -p tcp -m multiport --dport 20,21,25,110,1250:1280 -j ACCEPT

在文档里匹配TCP,找到想要的内容,其中在dport选项里提到了multiport,于是再去找multiport的扩展匹配

![Screen Shot 2022-07-19 at 11.45.44](/Users/gryffinbit/Desktop/Screen Shot 2022-07-19 at 11.45.44.png)

multiport扩展

![Screen Shot 2022-07-19 at 11.50.51](/Users/gryffinbit/Desktop/Screen Shot 2022-07-19 at 11.50.51.png)


禁止转发源IP地址为192.168.1.20-192.168.1.99的TCP数据包

iptables -A FORWARD -p tcp -m iprange --src-range 192.168.1.20-192.168.1.99 -j DROP

![Screen Shot 2022-07-19 at 14.21.48](/Users/gryffinbit/Desktop/Screen Shot 2022-07-19 at 14.21.48.png)


禁止转发与正常TCP连接无关的非—syn请求数据包

iptables -A FORWARD -m state --state NEW -p tcp !--syn -j DROP

这里涉及了数据包的连接状态。-m state表示数据包的连接状态,NEW表示每次新的连接开始时.

状态参数要放在前面。在选择协议的前面。

连接状态相关的扩展匹配文档

NEW means that the packet has or will start a new connection, or that it is associated with a connection that has not seen packets in both directions.

文档中,查找和syn相关的扩展匹配内容


拒绝访问防火墙的新数据包,但允许响应连接或与已有连接相关的数据包

iptables -A INPUT -p tcp -m state --state NEW -j DROP
iptables -A INPUT -p tcp -m state --state ESTABLISHED,RELATED -j ACCEPT

这个也是和连接相关的。新数据包就是NEW新的连接。而已有连接相关的数据包,包括已经建立连接了ESTABLISHED的和新旧连接都有关系的RELATED。

NEW means that the packet has or will start a new connection, or that it is associated with a connection that has not seen packets in both directions.

ESTABLISHED means that the packet is part of an already established connection that has seen packets in both directions and is fully valid.

RELATED means that the packet is starting a new connection and is associated with an already established connection.


只开放本机的web服务(80)、FTP(20、21、20450-20480),放行外部主机发住服务器其它端口的应答数据包,将其他入站数据包均予以丢弃处理

iptables -I INPUT -p tcp -m multiport --dport 20,21,80 -j ACCEPT
iptables -I INPUT -p tcp --dport 20450:20480 -j ACCEPT
iptables -I INPUT -p tcp -m state --state ESTABLISHED -j ACCEPT
iptables -P INPUT DROP

FTP是使用tcp来传输的,所以-p 的协议选用是tcp

参考链接

iptables规则

iptables官方文档说明

iptables(8) - Linux man page

iptables-tutorial

评论