iptables学习

iptables介绍

iptables是linux系统内嵌的一个防火墙,它集成在系统内核之中,因此执行效率非常高,iptables通过设置一些封包过滤规则,来定义什么数据可以接受,什么样的数据需要剔除。用户可通过iptables可以对计算机的数据包进行IP的过滤,已达到保护主机的目的。

iptables功能组成

iptables是由最基本的多个表(table)组成,而且每个表的的用途都不一样,,在每个表中都定义了多个链(chain),通过这些链,可以设置相应的规则和策略
iptables由3个常见表选项

  • 管理本机数据进出的filter表,实现防火墙功能 屏蔽或准许端口、IP 。内置了 INPUT、OUTPUT、FORWORD链
  • 管理防火墙内部主机NAT表 实现nat功能(实现共享上网,内网服务器上外网)(端口映射和IP映射)内置了PREROUTING、POSTROUTING、OUTPUT链。
  • 改变不同包,以及包头内容的mangle表
    filter表在iptables中用的最多,NAT表主要用到地址映射方面,mangle不常用。

工作流程

  1. 防火墙是层层过滤的,是按照匹配规则的顺序从上到下。从前到后进行过滤。
  2. 如果匹配成功规则,既明确表示,是拒绝(drop)和接受(accept),数据包就不再向下匹配新的规则。
  3. 如果规则没有明确表名是阻止还是通过,也就没有匹配规则,向下进行匹配,直到匹配默认规则得到明确的组织还是通过。
  4. 防火墙的默认规则是所有规则都匹配完才会匹配的。
    设立防护规则需要注意,禁止规则要放在上面.
列出当前系统filter表的几条链规则 -L 列出当前表的配置规则 -n 输出结果用IP显示,显示速度会快
iptables -L -n
使用-t 参数可以指定表,比如指定nat表中的信息
iptables -t nat -L -n
清除本机防火墙的所有规则设定(默认filter-t 指定清除的表
iptables -F ## 清空iptables某个指定表中所有链的规则设定
iptables -X ## 清空iptables使用者自定义的表
iptables -Z ## 将数据包计数器清零,数据包计数器用来统计同一数据包出现的次数
制定防火墙规则
iptables可以针对IP/网络、网络接口、协议、与端口、数据状态模块四个方面说设置过滤规则
 1. 设置预设规则语法如下 
#-P 大写P 指定表中的链 -t 指定表 默认filter
iptables [-t tables] -P [INPUT,OUTPUT,FORWORD] > [ACCEPT,DROP]
举例 将filter表中的 INPUT链设置成 DROP
iptables -P INPUT DROP
 2. 针对IP/网络、网络接口的过滤规则语法如下
iptables [-t tables] [-AI 链] [-io 网络接口] [-p 协议] > [-s 来源IP/网络] [-d 目标IP/网络] -j [ACCEPT|DROP|REJECT|REDIRECT]
# -A 新增加一条规则,放到已有规则的最后面
# -I 插入一条规则,如果没有指定插入规则的顺序,则新插入的规则变成第一条规则
# -i 指定数据包进入的网络接口,linux常见的有 etho、eth1、lo。搭配INPUT链使用 
# -o 指定数据传出的网络接口 搭配OUTPUT链使用
# -p 指定此规则时适用的协议 常用有 TCP UDP ICMP以及all
# -s 指定来源IP/网络 IP:192.168.2.2 网络: 192.168.2.0/24 或者192.168.2.0/255.255.255.0 若规则是不允许这些IP/网络访问,在规则前面加!
# -d 指定目标IP/网络 与参数-s 类似
# -j 此参数后面指定要执行的动作,只要动作有接受(ACCEPT)、丢弃(DROP)、记录(LOG)
# ACCEPT|DROP|REJECT 接受数据包|丢弃数据包|拦截数据包,并发送封包通知对方,此规则执行完毕,直接中断过滤程序,不进行其他规则的对比
# REDIRECT 用在NAT表中主要用于将封包请求重新定向到另一个端口。处理完此条规则,将继续对比其他的规则
举例1 允许局域网内的192.168.2.0/24的所有主机访问服务器,除了主机192.168.2.11
iptables -A INPUT -i eth0 -s 192.168.2.11 -j DROP
iptables -A INPUT -i eth0 -s 192.168.2.0/24 -j ACCEPT
# 注意顺序不要搞乱
举例2 让服务器接受所有来源不是网络接口ppp0的数据,相当于仅仅允许局域网访问,局域网内所有主机不能访问互联网
#ppp0是一般的adsl上网的internet 网络接口
iptables -A INPUT -i !ppp0 -j ACCEPT
举例3 将来自网络接口lo的数据包全部接受
iptables -A INPUT -i lo -j ACCEPT
举例4 将服务器的80端口重定向到8009端口
iptables -t NAT  -A PREROUTING -p tcp --dport 80 > -j REDIRECT --to-ports 8009
# nat表中的PREROUTING 在数据包刚刚到达防火墙的时,根据需要改变它的目的地址,以使数据包能够重定向到其他指定的主机
 3. 设置TCP、UDP协议的过滤规则语法如下
iptables [-t tables] [-AI 链] [-io 网络接口] [-p tcp,udp] [-s 来源网络/IP] [--sport 端口范围] [-d 目标网络/IP] [--dport 端口范围] -j [ACCEPT|DROP|REJECT|REDIRECT]
# --sport 端口范围 限制来源的端口号码,端口号码可以是连续的 999:1999
# --dport 端口范围 限制目标的端口号码
举例1 允许来自网络接口ppp0(互联网接口)并且来源端口是80的数进入服务器
iptables -A INPUT -i ppp0 -p tcp --sport 80 -j ACCEPT
举例2 允许来自网络接口ppp0且传输协议为UDP的53端口(53端口也是DNS的默认端口)
iptables -A INPUT -i ppp0 -p udp --sport 53 -j ACCEPT
举例3 使Linux服务器的80端口对外开发,
iptables -A INPUT -i ppp0 -p tcp --dport 80 -j ACCEPT
举例3 开放22端口,只允1.2.3.0~30中端口在1024~5000范围内的主机可由连接服务器其他的IP全部拒绝连接
iptables -A INPUT -i PPP0 -p tcp -s 1.2.3.0/30 --sport 1024:5000 --dport 22 -j ACCEPT
iptables -A INPUT -i ppp0 -p tcp --dport 22 -j DORP
 4. 设置数据状态模块的过滤规则语法如下
iptables -A INPUT -m [state|mac] --state [NEW|ESTABLEISHED|RELATED|INCALID]
# -m      模块选项 常见模块state 表示状态模块,mac 表示网卡硬件地址
# --state 一些数据包的状态
# NEW 连接模块看到某个连接的第一个包
# ESTABLISHED 表示该封包已经属于某个已经建立的联机。一个连接从NEW到ESTABLISHED只需要接到应答包即可
# RELATED 一个ESTABLISHED的连接,再产生一个主连接外的连接,这个新连接就是RELATED
# INVALID 表示不能识别数据包属于那个连接,或者数据包没有状态
举例1 是要是已建立的连接或者相关数据包就可以通过,不能识别的或者没有任何状态的数据包全部丢弃
iptables -A INPUT -m state --state ESTABLISHED, RELATED -j ACCEPT
iptables -A INPUT -m state --state INVALID -j DORP
举例2 将局域网内 MAC地址为aa:bb:cc:dd:ee:ff的主机开放对外访问权限
iptables -A INPUT -m mac --mac-source aa:bb:cc:dd:ee:ff -j ACCEPT
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值