1. iptables基本定义

Table (表名)

Explanation (注释)

nat

nat表的主要用处是网络地址转换,即Network Address Translation,缩写为NAT。做过NAT操作的数据包的地址就被改变了,当然这种改变是根据我们的规则进行 的。属于一个流的包只会经过这个表一次。如果第一个包被允许做NAT或Masqueraded,那么余下的包都会自 动地被做相同的操作。也就是说,余下的包不会再通过这个表,一个一个的被NAT,而是自动地完成。这就 是我们为什么不应该在这个表中做任何过滤的主要原因,对这一点,后面会有更加详细的讨论。PREROUTING 链的作用是在包刚刚到达防火墙时改变它的目的地址,如果需要的话。OUTPUT链改变本地产生的包的目的地 址。POSTROUTING链在包就要离开防火墙之前改变其源地址。

mangle

这个表主要用来mangle数据包。我们可以改变不同的包及包 头的内容,比如 TTLTOSMARK。 注意MARK并没有真正地改动数据包,它只是在内核空间为包设了一个标记。防火墙 内的其他的规则或程序(如tc)可以使用这种标记对包进行过滤或高级路由。这个表有五个内建的链: PREROUTINGPOSTROUTING OUTPUTINPUT FORWARDPREROUTING在包进入防火墙之后、路由判断之前改变 包,POSTROUTING是在所有路由判断之后。 OUTPUT在确定包的目的之前更改数据包。INPUT在包被路由到本地 之后,但在用户空间的程序看到它之前改变包。FORWARD在最初的路由判 断之后、最后一次更改包的目的之前mangle包。注意,mangle表不能做任何NAT,它只是改变数据包的 TTLTOSMARK,而不是其源目地 址。NAT是在nat表中操作的。

filter

filter表是专门过滤包 的,内建三个链,可以毫无问题地对包进行DROPLOGACCEPTREJECT等操作。FORWARD 链过滤所有不是本地产生的并且目的地不是本地(所谓本地就是防火墙了)的包,而 INPUT恰恰针对那些目的地是本地的包。OUTPUT 是用来过滤所有本地生成的包的。

下图可以帮助理解各个表及其链在iptables防火墙中的作用:

关于iptables的更多解释, 推荐看下iptables 指南 1.1.19

2. iptables在路由器上的应用

2.1 ACL(权限访问控制)

目的:控制对路由器的访问权限,比如限制访问路由器的telnet、ssh或者对路由器进行ping连通测试等。

实操:

 #创建名为acl_chain_的链
iptables -t filter -N acl_chain_
#从接口br0来的到目的端口80,443且协议为tcp,报文源ip地址范围在192.168.1.-192.168..150内的报文直接进入下一条链处理;又tcp ,443分别对应http和https, 若后面的链没有对其执行drop动作,将允许访问路由器的web页面。
iptables -t filter -A acl_chain_ -i br0 -p tcp -m multiport --dports , -m iprange --src-range 192.168.1.100-192.168.1.150 -j RETURN
#注意icmp type 8为ping应答, nas+为模糊匹配接口(包括nas10,nas10_0),其他如上
iptables -t filter -A acl_chain_ -i nas+ -p icmp -m icmp --icmp-type -m iprange --src-range 0.0.0.0-223.255.255.255 -j RETURN
#tcp 22为ssh端口,若后面的链没有对其执行drop动作,将允许通过ssh访问路由器
iptables -t filter -A acl_chain_ -i br0 -p tcp -m multiport --dports -m iprange --src-range 0.0.0.0-223.255.255.255 -j RETURN
#表示进入acl_chain_的报文,如果之前没有匹配到的,都将其drop掉
iptables -t filter -A acl_chain_ -j DROP #创建名为ACL_的链
iptables -t filter -N ACL_
#到tcp ,,,,,,,,,,21的报文都进入acl_chain_处理
iptables -t filter -A ACL_ -p tcp -m multiport --dports ,,,,,,,,,, -j acl_chain_
#到udp ,,,,,,,,,,21的报文都进入acl_chain_处理
iptables -t filter -A ACL_ -p udp -m multiport --dports ,,,,,,,,,, -j acl_chain_
#ping应答相关的报文也进入acl_chain_处理
iptables -t filter -A ACL_ -p icmp -m icmp --icmp-type -j acl_chain_ #将ACL链追加在filter INPUT中
iptables -t filter -A INPUT -j ACL_ ! -i lo 若上述命令都执行成功,那么在路由器上的相关规则为:
# iptables -t filter -S INPUT
-P INPUT ACCEPT
-A INPUT ! -i lo -j ACL_
#
# iptables -t filter -S ACL_
-N ACL_
-A ACL_ -p tcp -m multiport --dports ,,,,,,,,,, -j acl_chain_
-A ACL_ -p udp -m multiport --dports ,,,,,,,,,, -j acl_chain_
-A ACL_ -p icmp -m icmp --icmp-type -j acl_chain_
#
# iptables -t filter -S acl_chain_
-N acl_chain_
-A acl_chain_ -i br0 -p tcp -m multiport --dports , -m iprange --src-range 192.168.1.100-192.168.1.150 -j RETURN
-A acl_chain_ -i nas+ -p icmp -m icmp --icmp-type -m iprange --src-range 0.0.0.0-223.255.255.255 -j RETURN
-A acl_chain_ -i br0 -p tcp -m multiport --dports -m iprange --src-range 0.0.0.0-223.255.255.255 -j RETURN
-A acl_chain_ -j DROP
#

2.2 PortMapping(端口映射)

目的:使内网中某主机的某些端口暴露于外网,这样外网访问路由器的指定端口,便会被路由器转发到内网某主机上。

实操:如下图,192.168.1.2为LAN侧某个PC的IP地址,192.168.88.253为路由器上名为ppp1的wan interface的IP地址。

把路由器上名为ppp1的wan接口上收到的tcp 2211的数据转到lan侧pc 192.168.1.2上的tcp 1122上。

把路由器上名为ppp1的wan接口上收到的udp 8877的数据转到lan侧pc 192.168.1.2上的udp 7788上。


# iptables -t filter -S FORWARD
-P FORWARD ACCEPT
-A FORWARD -i ppp1 ! -o ppp1 -j MINIUPNPD
# iptables -t filter -S MINIUPNPD
-N MINIUPNPD
-A MINIUPNPD -d 192.168.1.2/32 -p tcp -m tcp --dport 1122 -j ACCEPT
-A MINIUPNPD -d 192.168.1.2/32 -p udp -m udp --dport 7788 -j ACCEPT


# iptables -t nat -S PREROUTING
-P PREROUTING ACCEPT
-A PREROUTING -i ppp1 -j MINIUPNPD
# iptables -t nat -S MINIUPNPD
-N MINIUPNPD
-A MINIUPNPD -p tcp -m tcp --dport 2211 -j DNAT --to-destination 192.168.1.2:1122
-A MINIUPNPD -p udp -m udp --dport 8877 -j DNAT --to-destination 192.168.1.2:7788

2.3 DMZ

目的: 将外网发往路由器的某接口的所有信息都转发到内网的某台主机上.

实操:

在表nat中创建一个名为DMZ_PRE2_0的链
iptables -t nat -N DMZ_PRE2_0
从接口nas2_0来的通过链DMZ_PRE2_0的报文,将对其作DNAT转换,改变报文的目的地址为192.168.1.
iptables -t nat -A DMZ_PRE2_0 -i nas2_0 -j DNAT --to-destination 192.168.1.5 将链DMZ_PRE2_0追加到表nat的内建链PREROUTING中
iptables -t nat -A PREROUTING -j DMZ_PRE2_0 若上述命令都执行成功,那么在路由器上的相关规则为:
# iptables -t nat -S PREROUTING
-P PREROUTING ACCEPT
-A PREROUTING -j DMZ_PRE2_0
# iptables -t nat -S DMZ_PRE2_0
-N DMZ_PRE2_0
-A DMZ_PRE2_0 -i nas2_0 -j DNAT --to-destination 192.168.1.5
#

2.4 Filter(黑|白名单限制)

目的:通过IP、MAC等信息限制内网的某主机对路由器或者外网的访问

实操:

========ip
# iptables -t filter -S ipfilter_chain
新建一个名为ipfilter_chain的链
-N ipfilter_chain
从接口nas10_0出去且经过ipfilter_chain链的报文,协议为tcp,目的端口为100:,原ip范围在192.168.1.-192.168.1.50, 目的ip范围在192.172.1.-192.172.1.30,将其转发下一个链, 如果之后没有对其drop的动作,此报文将被允许通过。
-A ipfilter_chain -o nas10_0 -p tcp -m tcp --dport : -m iprange --src-range 192.168.1.5-192.168.1.50 -m iprange --dst-range 192.172.1.3-192.172.1.30 -j RETURN
-A ipfilter_chain -s 192.168.1.4/ -o nas10_0 -j RETURN
-A ipfilter_chain -o ppp80 -j RETURN
-A ipfilter_chain -d 172.30.20.1/ -o nas10_0 -j RETURN
-A ipfilter_chain -j DROP
# # iptables -t filter -S FORWARD
-P FORWARD ACCEPT
-A FORWARD -i br+ -j ipfilter_chain
-A FORWARD -i ra+ -j ipfilter_chain ========mac
# iptables -t filter -S macfilter_chain
新建一个名为macfilter_chain的链
-N macfilter_chain
通过链macfilter_chain的报文,如果其源mac地址为40::7E:::0B,就将其丢掉
-A macfilter_chain -m mac --mac-source ::7E:::0B -j DROP
# 将链macfilter_chain追加到表filter的内建链中FORWARD
# iptables -t filter -S FORWARD
-P FORWARD ACCEPT
-A FORWARD -i br+ -j macfilter_chain
-A FORWARD -i ra+ -j macfilter_chain 将链macfilter_chain追加到表filter的内建链中INPUT
# iptables -t filter -S INPUT
-P INPUT ACCEPT
-A INPUT -i ra+ -j macfilter_chain
-A INPUT -i br+ -j macfilter_chain

2.5 Firewall(防火墙)

目的: iptables规则也可以帮助建立一道防火墙,减少主机遭到恶意攻击的风险。

实操:

1.

说明: 防火墙通用的规则一般都有允许类型为RELATED,ESTABLISHED的报文直接ACCEPT,而把INVALID,NEW直接DROP掉。

规则:

# iptables -t filter -S INPUT
-P INPUT ACCEPT
-A INPUT -i nas+ -m state --state RELATED,ESTABLISHED -j ACCEPT
...
-A INPUT -i nas+ -m state --state INVALID,NEW -j DROP

2

类型:SYN/TCP reset attack

说明:攻击者可以给目标计算机发送0~65535端口发送TCP SYN或者UDP,如果收到了TCP RST或者UDP报文的ICMP不可达报文,则说明这个端口没有开放;相反,则说明TCP端口是开放的,或者UDP端口可能开放。这就是端口扫描攻击。

方法:限制TCP SYN报文的数据流量,但这个也不能完全避免端口扫描攻击。

规则:

# iptables -t filter -S INPUT
-A INPUT ! -i br+ -j DOS_FW

# iptables -t filter -S DOS_FW
-N DOS_FW
-A DOS_FW -p tcp -m state --state NEW -m limit --limit 15/sec --limit-burst 30 -j RETURN
-A DOS_FW -p tcp -j DROP

3

类型:SYN/RST attack:

说明:SYN在TCP三次握手中使用,RST是在TCP复位时使用,正常情况下SYN和RST不可能同时出现在一个TCP中,同时又SYN和RST标志的TCP报文应该被认为是一个异常报文。
方法:这种异常报文,建议直接DROP掉。

规则:

# iptables -t filter -S INPUT
-A INPUT ! -i br+ -j DOS_FW

# iptables -t filter -S DOS_FW
-N DOS_FW
-A DOS_FW -p tcp -m tcp --tcp-flags SYN,RST SYN,RST -j DROP

4

类型:SYN/FIN attack
说明:正常情况下,SYN标志(连接请求标志)和FIN标志(连接拆除标志)是不能同时出现在一个TCP报文中的。而且RFC也没有规定IP协议栈如何处理这样的畸形报文,因此,各个操作系统的协议栈在收到这样的报文后的处理方式也不同,攻击者就可以利用这个特征,通过发送SYN和FIN同时设置的报文,来判断操作系统的类型,然后针对该操作系统,进行进一步的攻击。(refer to https://www.cnblogs.com/ianthe/articles/3658307.html)
方法:一般都是将同时含有SYN和FIN标志的TCP报文直接DROP掉。

规则:

# iptables -t filter -S INPUT
-A INPUT ! -i br+ -j DOS_FW

# iptables -t filter -S DOS_FW
-N DOS_FW
-A DOS_FW -p tcp -m tcp --tcp-flags FIN,SYN FIN,SYN -j DROP

5

类型: Ping/Ping of Death attack:
说明: 当目标计算机一直收到了大量的PING报文,可能说明它遭受了恶意的攻击
方法: 限制ping报文的数据流量

规则:

# iptables -t filter -S INPUT
-A INPUT ! -i br+ -j DOS_FW

# iptables -t filter -S DOS_FW
-N DOS_FW
-A DOS_FW -p icmp -j DOS_PIN
# iptables -t filter -S DOS_PIN
-N DOS_PIN
-A DOS_PIN -p icmp -m icmp --icmp-type 8 -m limit --limit 10/sec --limit-burst 50 -j RETURN
-A DOS_PIN -p icmp -m icmp --icmp-type 0 -m limit --limit 10/sec --limit-burst 50 -j RETURN
-A DOS_PIN -p icmp -j DROP

6

类型:FIN/URG/PSH attack:

规则:

# iptables -t filter -S INPUT
-A INPUT ! -i br+ -j DOS_FW

# iptables -t filter -S DOS_FW
-N DOS_FW
-A DOS_FW -p tcp -m tcp --tcp-flags FIN,SYN,RST,PSH,ACK,URG FIN,PSH,URG -j DROP

7

类型:Xmas attack:

规则:

# iptables -t filter -S INPUT
-A INPUT ! -i br+ -j DOS_FW

# iptables -t filter -S DOS_FW
-N DOS_FW
-A DOS_FW -p tcp -m tcp --tcp-flags FIN,SYN,RST,PSH,ACK,URG FIN,SYN,RST,PSH,ACK,URG -j DROP
-A DOS_FW -p tcp -m tcp ! --tcp-flags FIN,SYN,RST,ACK SYN -m state --state NEW -j DROP

8

类型:Null scanning attack:

规则:

iptables -t filter -S DOS_FW
-N DOS_FW
-A DOS_FW -p tcp -m tcp --tcp-flags FIN,SYN,RST,PSH,ACK,URG NONE -j DROP

iptables及其在路由器上的应用 (待完善)的更多相关文章

  1. 教你如何在Drcom下使用路由器上校园网(以广东工业大学、极路由1S HC5661A为例)

    免责声明: 在根据本教程进行实际操作时,如因您操作失误导致出现的一切意外,包括但不限于路由器变砖.故障.数据丢失等情况,概不负责: 该技术仅供学习交流,请勿将此技术应用于任何商业行为,所产生的法律责任 ...

  2. 分析并实现 360 P1路由器上的朋友专享网络 功能

    笔者分析了360 P1路由器上的朋友专享网络功能,发现其主要由如下子功能组成: 1. APP点击“立即开启”,则路由器会多出一个新的SSID:360朋友专享网络-8463.此SSID不加密:同时,原有 ...

  3. 打破常规——大胆尝试在路由器上搭建SVN服务器

    注册博客园挺久了,一直比较懒,虽然有几次想写点文章,但是一直没有行动,今天给大家带来一篇比较有意思的文章,不涉及技术上的,希望大家轻拍.本文的文字和图片全部为原创,尊重作者转载请注明出处! 说起路由器 ...

  4. 在路由器上搭建SVN服务器

    在路由器上搭建SVN服务器 SVN托管服务大家都不陌生了,我最早开始用的是谷歌提供的SVN,因为在上面托管的项目都是开源的,所以当有些项目不方便在网上公开的时候,就需要自己搭建SVN服务器了.wind ...

  5. 将 DNSCrypt 部署到 Openwrt 路由器上+ DNSmasq 解析国内域名用本地 DNS[ZT+实践]

    原文地址: 1.https://typcn.com/legacy/blog/posts/openwrt-dnscypt.html 2.http://www.openwrt.pro/post-376.h ...

  6. 分析并实现 360 P1路由器上的测速功能(也可以针对金山测速功能)

    现在各种智能路由器以及一些PC上的防火墙软件,都提供网络测速功能.笔者对此进行了研究,并在自己的路由器上也实现了此功能.下面做一下总结 一般的网络测速,主要关注两个方面:网络延迟和下载速率 1.网络延 ...

  7. 交换机/路由器上的 S口 F口 E口

    S口是serial接口的意思,也叫高速异步串口,主要是连接广域网的V.35线缆用的,说白了就是路由器和路由器连接时候用的,可以用命令设置带宽,一般也就在10M.8M左右.F口是FastEthernet ...

  8. Openwrt路由器上安装python

    在路由器安装python之前,还是经过了一番折腾的.淘宝上买了个已经刷好系统的小米迷你路由器,但里面安装的不是预期的Pandorbox,而是LEDE. 这个固件已经带了大量自带的软件,128的内存实在 ...

  9. Pandorabox固件路由器上申请Let's Encrypt证书,为内网里的多个web服务提供SSL支持

    对于家中宽带有公网IP的用户,有时我们需要将路由器内部网络的某些web服务通过端口转发暴露到外网(例如NAS远程访问),但HTTP是明文传输,有被监听的风险:如果在NAS上使用自签名证书,再端口转发, ...

随机推荐

  1. 每日英语:Mystery Medical Symptoms Hit a Surprising Number of Patients

    It's a common scenario: You have an odd pain for weeks or are feeling too tired lately. So you head ...

  2. 【XMPP】XMPP协议之原理篇

    XMPP协议简介 XMPP协议(Extensible Messaging and Presence Protocol,可扩展消息处理现场协议)是一种基于XML的协议. 目的是为了解决及时通信标准而提出 ...

  3. Java两种核心机制

    1.Java虚拟机 2.垃圾回收

  4. mariadb 10.1.26 二进制包安装笔记

    报错链接:http://php.upupw.net/ank2discuss/40/6841-e.html mariadb 10.1.26 二进制版本 全名称: mariadb-10.1.26-linu ...

  5. QT动态库和静态库使用

    软件版本:QT5.12.0 + Qt Creator4.8.0 动态链接 动态链接库又叫"共享库",即sharedLib. Qt Creator中新建项目,选择"Libr ...

  6. ASP.NET MVC 4 (十三) 基于表单的身份验证

    在前面的章节中我们知道可以在MVC应用程序中使用[Authorize]特性来限制用户对某些网址(控制器/控制器方法)的访问,但这都是在对用户认证之后,而用户的认证则依然是使用ASP.NET平台的认证机 ...

  7. Keepalived 配置高可用集群

    一.Keepalived 简介 (1) Keepalived 能实现高可用也能实现负载均衡,Keepalived 是通过 VRRP 协议 ( Virtual Router Redundancy Pro ...

  8. redis-sentinel的理解实践

    一.前言 组内现在用的是redis 的sentinel. 本着实践的原则,对sentinel的几台服务器进行了网络或者抓包方面的实践. 一共三台redis服务器, 10.10.20.6, 10.10. ...

  9. 关于linux-Centos 7下mysql 5.7.9的rpm包的安装方式

    环境介绍>>>>>>>>>>>>>>>>>> 操作系统:Centos 7.1 mysql数据 ...

  10. python3之枚举

    枚举 li = ['a','b','c','d'] for index,i in enumerate(li): #for index,i in enumerate(li,100): print(ind ...