iptable

IPtables分为2部分,一部分位于内核中,用来存放规则,称为NetFilter。还有一段在用户空间中,用来定义规则,并将规则传递到内核中,这段在用户空间中的程序就叫做iptables。
所以对于用户空间来说,就是按照需要生成一条条规则,然后向内核中提交,存放到NetFilter,让这些规则在数据传输与处理的过程中起作用。

1 iptable命令

iptable的整体命令规则如下:

image.png
  • 所有表名必须小写
    filter/nat/mangle
  • 所有链名必须大写
    INPUT/OUTPUT/FORWARD/PREROUTING/POSTROUTING
  • 所有匹配必须小写
    -s/-d/-m <module_name>/-p
  • 所有动作必须大写
    ACCEPT/DROP/SNAT/DNAT/MASQUERADE

1.1 表的介绍

  • filter

主要用来过滤数据包,在这里根据包的内容与规则匹配,然后对包做DROP或ACCEPT等操作,大部分的target都可以在这儿使用。
默认的标准链有三条,分别是INPUT、FORWARD、OUTPUT,其他链(如br0_in、common)是根据需求新创建的。

  • nat( Network Address Translation )

主要用于网络地址转换,做过NAT操作的数据包,地址将会根据设定的规则被改变。

  • mangle

通过修改IP报头中的服务类型TOS,以获得更好的传输服务可以设为:最小时延、最大吞吐量、最高可靠性和最小费用 。

  • raw

只使用在PREROUTING链和OUTPUT链上,因为优先级最高,从而可以对收到的数据包在连接跟踪前进行处理。一但用户使用了RAW表,在某个链上,RAW表处理完后,将跳过NAT表和 ip_conntrack处理,即不再做地址转换和数据包的链接跟踪处理了。RAW表可以应用在那些不需要做nat的情况下,以提高性能。

1.2 默认规则链的介绍

  • PREROUTING:对数据包进行路由选择前(nat表中,DNAT)
  • INPUT:路由选择之后,发现数据包目的地址是本机,入站时(filter表中)
  • FORWARD:路由选择之后接收到需要通过防火墙发送给其它主机(转发时)(filter表)
  • POSTROUTING:对数据包进行路由选择后,数据包到路由器进行路由判断之后经过的链(nat表,SNAT)
  • OUTPUT:出站时(nat,filter表)

1.3 iptables对数据包的处理流程

image.png
  • 数据包进入系统,经过IP校验后经过PREROUTING链中的Mangle和Nat的处理;
  • kernel根据路由表决定包的目的地址,决定该数据包需要转发还是发给本机;
  • 如果该数据包是发给本机的,则经过INPUT链的Mangle和Filter处理后再传递给上层协议;如果需要转发,则发给FORWARD链的Mangle和Filter进行处理;
  • 本机网络层以上各层产生的数据包通过OUTPUT链的Mangle、Nat、Filter处理后,再进行路由选择;
  • 所有需要发送到网络中的数据包,都必须经过POSTROUTING链的Mangle和Nat进行处理。

1.4 iptables匹配条件

image.png

1.5 iptables主要有以下动作:

  • ACCEPT:接收数据包
  • DROP:丢弃数据包
  • REJECT:丢弃数据包并返回一个错误包
  • SNAT:做源地址转化
  • DNAT:做目的地址转化
  • MASQUERADE:地址伪装,用于动态IP
  • LOG:将这条匹配消息保存到系统日志中
  • REDIRECT:在防火墙所在的机子内部转发包或流到另一个端口
  • 用户自定义的链名(net2all):跳转到这条链下,进行匹配

2 具体应用

1.打开linux转发功能:echo 1 > /proc/sys/net/ipv4/ip_forward

2.1 限速

注意:限速的包跟iptable的单位是不一样的,2/3

如max_speed:100kb/s,则为100*2/3=66

iptables -I FORWARD -s 192.168.1.0/24 -j DROP
iptables -I FORWARD -d 192.168.1.0/24 -j DROP
iptables -I FORWARD -d 192.168.1.0/24 -m limit --limit 66/s --limit-burst 66 -j ACCEPT
iptables -I FORWARD -s 192.168.1.0/24 -m limit --limit 66/s --limit-burst 66 -j ACCEPT

如原本已经有了限速规则,要设置新的规则,则需要把原先的规则删除,再添加新的规则

原本max_speed:100kb/s,要设置max_speed:300kb/s;成则为300*2/3=200

iptables -D FORWARD -d 192.168.1.0/24 -m limit --limit 66/s --limit-burst 66 -j ACCEPT
iptables -D FORWARD -s 192.168.1.0/24 -m limit --limit 66/s --limit-burst 66 -j ACCEPT
iptables -D FORWARD -s 192.168.1.0/24 -j DROP
iptables -D FORWARD -d 192.168.1.0/24 -j DROP

iptables -I FORWARD -s 192.168.1.0/24 -j DROP
iptables -I FORWARD -d 192.168.1.0/24 -j DROP
iptables -I FORWARD -d 192.168.1.0/24 -m limit --limit 200/s --limit-burst 200 -j ACCEPT
iptables -I FORWARD -s 192.168.1.0/24 -m limit --limit 200/s --limit-burst 200 -j ACCEPT

原本max_speed:300kb/s,要设置max_speed:400kb/s;成则为400*2/3=266

iptables -D FORWARD -d 192.168.1.0/24 -m limit --limit 200/s --limit-burst 200 -j ACCEPT
iptables -D FORWARD -s 192.168.1.0/24 -m limit --limit 200/s --limit-burst 200 -j ACCEPT
iptables -D FORWARD -s 192.168.1.0/24 -j DROP
iptables -D FORWARD -d 192.168.1.0/24 -j DROP

iptables -I FORWARD -s 192.168.1.0/24 -j DROP
iptables -I FORWARD -d 192.168.1.0/24 -j DROP
iptables -I FORWARD -d 192.168.1.0/24 -m limit --limit 266/s --limit-burst 266 -j ACCEPT
iptables -I FORWARD -s 192.168.1.0/24 -m limit --limit 266/s --limit-burst 266 -j ACCEPT

去掉限制

iptables -D FORWARD -d 192.168.1.0/24 -m limit --limit 266/s --limit-burst 266 -j ACCEPT
iptables -D FORWARD -s 192.168.1.0/24 -m limit --limit 266/s --limit-burst 266 -j ACCEPT
iptables -D FORWARD -s 192.168.1.0/24 -j DROP
iptables -D FORWARD -d 192.168.1.0/24 -j DROP

2.2 MAC过滤/黑白名单

wifi过滤器,只允许某些mac链接

config wifi-iface
        option device 'radio0'
        option mode 'ap'
        option ssid 'OpenWrt'
        option network 'lan'
        option encryption 'psk'
        option key '12345678'
        option macfilter 'allow'
        list maclist '20:AB:37:8D:C2:F6'
        list maclist 'A8:02:C4:00:75:3D'

不允许某些mac链接

config wifi-iface
        option device 'radio0'
        option mode 'ap'
        option ssid 'OpenWrt'
        option network 'lan'
        option encryption 'psk'
        option key '12345678'
        option macfilter 'deny'
        list maclist '00:05:15:0B:02:11'
        list maclist 'A8:02:C4:00:75:3D'

vi /etc/firewall.user,然后按照这个格式添加,mac地址替换为实际地址。

添加黑名单,将mac为11:22:33:44:55:66的设备的包全部DROP

iptables -I FORWARD -m mac --mac-source 11:22:33:44:55:66 -j DROP

添加白名单,将所有的设备都丢弃,然后再只允许某一个mac通过

iptables -I FORWARD -s 192.168.1.0/24 -j DROP
iptables -I FORWARD -d 192.168.1.0/24 -j DROP
iptables -I FORWARD -m mac --mac-source 78:d7:5f:20:e2:9c -j ACCEPT

2.3 nat表的操作

Nat表有三条标准链(重点介绍):

  • PREROUTING 链的作用是在包刚刚到达防火墙时改变它的目的地(DNAT)
  • OUTPUT链改变本地产生的包的目的地址(DNAT)
  • POSTROUTING链在包就要离开防火墙之前转换包的源地址(SNAT)
    (注:只有流的第一个包会被这个链匹配,其后的包会自动被做相同的处理)
    实际的操作分为DNAT、SNAT和MASQUERADE
2.3.1 SNAT:源IP地址转换(POSTROUTING)(wan-lan通讯)

链接:https://pan.baidu.com/s/1MTvA46lD7eKNKZcdEgnqgw
提取码:9elj

基于原地址的转换一般用在我们的许多内网用户通过一个外网的口上网的时候,这时我们将我们内网的地址转换为一个外网的IP,我们就可以实现连接其他外网IP的功能。
所以我们在iptables中就要定义到底如何转换:
定义的样式:
比如我们现在要将所有192.168.10.0网段的IP在经过的时候全都转换成172.16.100.1这个假设出来的外网地址:

iptables -t nat -A POSTROUTING -s 192.168.10.0/24 -j SNAT --to-source 172.16.100.1

这样,只要是来自本地网络的试图通过网卡访问网络的,都会被统统转换成172.16.100.1这个IP.
那么,如果172.16.100.1不是固定的怎么办?
我们都知道当我们使用联通或者电信上网的时候,一般它都会在每次你开机的时候随机生成一个外网的IP,意思就是外网地址是动态变换的。这时我们就要将外网地址换成 MASQUERADE(动态伪装):它可以实现自动寻找到外网地址,而自动将其改为正确的外网地址。所以,我们就需要这样设置:

iptables -t nat -A POSTROUTING -s 192.168.10.0/24 -j MASQUERADE

这里要注意:地址伪装并不适用于所有的地方。

这个功能其实在路由器手机上默认都已经添加了,不然就都访问不了外网了。

2.3.2 DNAT:目的IP地址转换 (PREROUTING)

出口网关再将目的地址替换为私网的源主机地址,发回内部主机。
DNAT主要有两大用处

  • 发布内部服务器,让外面的internet用户能访问到内网的服务器
  • 网络重定向

典型的应用是,有个web服务器放在内网配置内网IP,前端有个防火墙配置公网IP,互联 网上的访问者使用公网IP来访问这个网站,当访问的时候,客户端发出一个数据包,这个数据包的报头里边,目标地址写的是防火墙的公网IP,防火墙会把这个 数据包的报头改写一次,将目标地址改写web服务器的内网IP,然后再把这个数据包发送到内网的web服务器上,这样,数据包就穿透了防火墙,并从公网 IP变成了一个对内网地址的访问了,即DNAT,基于目标的网络地址转换。

对于目标地址转换,数据流向是从外向内的,外面的是客户端,里面的是服务器端通过目标地址转换,我们可以让外面的ip通过我们对外的外网ip来访问我们服务器不同的服务器,而我们的服务却放在内网服务器的不同的服务器上。

如何做目标地址转换呢?:

iptables -t nat -A PREROUTING -d 192.168.10.18 -p tcp --dport 8011 -j DNAT --to-destination 172.16.100.2:8011

目标地址转换要做在到达网卡之前进行转换,所以要做在PREROUTING这个位置上

控制规则的存放以及开启
注意:你所定义的所有内容,当你重启的时候都会失效,要想我们能够生效,需要使用一个命令将它保存起来

2.4 protal认证(重定向)

https://blog.csdn.net/umitor/article/details/8622841

iptables -I FORWARD -p tcp -s 192.168.0.1/24 -j DROP 2>&1
iptables -t nat -I PREROUTING -p tcp -s 192.168.0.1/24 --dport 80 -j DNAT --to 192.168.0.1:8090 2>&1
iptables -t nat -I PREROUTING -p tcp -s 192.168.0.1/24 --dport 443 -j DNAT --to 192.168.0.1:1443 2>&1
iptables -t nat -I PREROUTING -p tcp -d 192.168.0.1 --dport 443 -j DNAT --to 192.168.0.1:2443 2>&1
iptables -D FORWARD -p tcp -s 192.168.0.1/24 -j DROP 2>&1
iptables -t nat -D PREROUTING -p tcp -s 192.168.0.1/24 --dport 80 -j DNAT --to 192.168.0.1:8090 2>&1
iptables -t nat -D PREROUTING -p tcp -s 192.168.0.1/24 --dport 443 -j DNAT --to 192.168.0.1:1443 2>&1
iptables -t nat -D PREROUTING -p tcp -d 192.168.0.1 --dport 443 -j DNAT --to 192.168.0.1:2443 2>&1

2.5 conntrack记录

2.cat /proc/net/ip_conntrack 记录

3.设置默认路由

拨上号后会有两个route

admin@TgT:/data/dropbear # netcfg                                        
ppp0     UP                               10.57.216.229/32  0x000010d1 00:00:00:00:00:00
lo       UP                                   127.0.0.1/8   0x00000049 00:00:00:00:00:00
rmnet_usb0 DOWN                                   0.0.0.0/0   0x00001002 b6:bd:b2:b4:51:56
wlan0    UP                                 192.168.1.1/24  0x00001043 10:65:cf:09:36:2b
...
rmnet7   DOWN                                   0.0.0.0/0   0x00000000 00:00:00:00:00:00
rmnet0   UP                                10.38.194.54/30  0x00000041 00:00:00:00:00:00
rmnet1   DOWN                                   0.0.0.0/0   0x00000000 00:00:00:00:00:00
admin@TgT:/data/dropbear # ip route show
default via 10.38.194.53 dev rmnet0 
default via 10.64.64.64 dev ppp0 
10.38.194.52/30 dev rmnet0  proto kernel  scope link  src 10.38.194.54 
10.38.194.53 dev rmnet0  scope link 
10.64.64.64 dev ppp0  proto kernel  scope link  src 10.57.216.229 
74.125.204.100 via 10.38.194.53 dev rmnet0 
74.125.204.139 via 10.38.194.53 dev rmnet0 
192.168.1.0/24 dev wlan0  proto kernel  scope link  src 192.168.1.1 
218.2.2.2 via 10.38.194.53 dev rmnet0 
218.2.2.2 via 10.38.194.53 dev rmnet0  src 10.38.194.54 
218.4.4.4 via 10.38.194.53 dev rmnet0 
218.4.4.4 via 10.38.194.53 dev rmnet0  src 10.38.194.54 

拨上号后,将rmnet0设置为默认路由,删除ppp0的默认路由

admin@TgT:/data/dropbear # ip route del default dev ppp0
admin@TgT:/data/dropbear # ip route add default dev rmnet0
admin@TgT:/data/dropbear # ip route show
default via 10.38.194.53 dev rmnet0 
10.38.194.52/30 dev rmnet0  proto kernel  scope link  src 10.38.194.54 
10.38.194.53 dev rmnet0  scope link 
10.64.64.64 dev ppp0  proto kernel  scope link  src 10.57.216.229 
74.125.204.100 via 10.38.194.53 dev rmnet0 
74.125.204.101 via 10.38.194.53 dev rmnet0 
74.125.204.139 via 10.38.194.53 dev rmnet0 
192.168.1.0/24 dev wlan0  proto kernel  scope link  src 192.168.1.1 
218.2.2.2 via 10.38.194.53 dev rmnet0  src 10.38.194.54 
218.4.4.4 via 10.38.194.53 dev rmnet0  src 10.38.194.54 

掉线时,将ppp0设置为默认路由,删除rmnet0的默认路由

admin@TgT:/data/dropbear # ip route show
default dev ppp0  scope link 
10.64.64.64 dev ppp0  proto kernel  scope link  src 10.57.216.229 
192.168.1.0/24 dev wlan0  proto kernel  scope link  src 192.168.1.1 

iptables -nvL

iptables -nvL ACL_RULES

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,080评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,422评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,630评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,554评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,662评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,856评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,014评论 3 408
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,752评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,212评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,541评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,687评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,347评论 4 331
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,973评论 3 315
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,777评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,006评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,406评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,576评论 2 349

推荐阅读更多精彩内容

  • 妈咪来京看我十余天 珍惜和妈妈在一起的时间 画画的事儿就靠边先放放了 今天妈咪回去了 我得赶紧画画打卡完成心蓝的作...
    flowla阅读 197评论 2 1
  • 过度自信似乎是我们的天性,当评价的对象是自己时,这种效应尤为明显,不然也就不会存在那么多,制定时就注定不会完成的新...
    Rose酱阅读 202评论 0 0
  • 混混沌沌中一翻日历发现今天竟然是小年了,这日子过的,想起卡西的口头禅:豁且! 按照我们北方的习俗,农历腊月二十三小...
    翟凡凡阅读 108评论 0 0
  • 文/颜夕遥 下午在房间收拾东西的时候,发现了一本旧得泛黄的相册,掸去岁月堆积的灰尘后,意外地发现里面装了很多信和以...
    颜夕遥阅读 173,727评论 56 373