OPENWRT 教程第七章 防火墙开发之iptables

Openwrt 是一个 GNU/Linux 的发行版, 和其他大多数的发行版一样,Openwrt 的防火墙同样也是基于 iptables。

 

iptables -L INPUT --line-numbers     //列出INPUT 链所有的规则
iptables -D INPUT 4   //删除指定的第4行规则
iptables -R FORWARD 4 -i br0 -p tcp -m multiport --dports 80,3128,8080,8000 -j url_blocking  //添加规则到指定的行数(例如第四行 -R )

 

iptables -R INPUT 2 -p icmp –-icmp-type 8 -s 0/0 -j DROP
iptables -R INPUT 3 -p icmp –-icmp-type 0 -s 0/0 -j ACCEPT
iptables -R OUTPUT 2 -p icmp –icmp-type 0 -s 192.168.29.1 -j DROP

iptables -R OUTPUT 3 -p icmp –icmp-type 8 -s 192.168.29.1 -j ACCEPT

iptables -A INPUT -p icmp --icmp-type 8 -s 0/0 -j DROP

  

 

 iptables -F  //清除预设表filter中的所有规则链的规则
 iptables -X  //清除预设表filter中使用者自定链中的规则


iptables -nvx -L  //查看规则

iptables -t nat -nvx -L    //查看nat规则

 


1、允许PING设置

iptables -A INPUT -p icmp --icmp-type echo-request -j ACCEPT

iptables -A OUTPUT -p icmp --icmp-type echo-reply -j ACCEPT

或者也可以临时停止防火墙操作的。

service iptables stop

 

 

2、禁止PING设置

iptables -A INPUT -p icmp --icmp-type 8 -s 0/0 -j DROP



3、常用命令:

-A 追加规则-->iptables -A INPUT
-D 删除规则-->iptables -D INPUT 1(编号)
-R 修改规则-->iptables -R INPUT 1 -s 192.168.12.0 -j DROP 取代现行规则,顺序不变(1是位置)
-I 插入规则-->iptables -I INPUT 1 --dport 80 -j ACCEPT 插入一条规则,原本位置上的规则将会往后移动一个顺位
-L 查看规则-->iptables -L INPUT 列出规则链中的所有规则
-N 新的规则-->iptables -N allowed 定义新的规则

  

 

通用参数:
-p 协议 例:iptables -A INPUT -p tcp
-s源地址 例:iptables -A INPUT -s 192.168.1.1
-d目的地址 例:iptables -A INPUT -d 192.168.12.1
-sport源端口 例:iptables -A INPUT -p tcp --sport 22
-dport目的端口 例:iptables -A INPUT -p tcp --dport 22
-i指定入口网卡 例:iptables -A INPUT -i eth0
-o指定出口网卡 例:iptables -A FORWARD -o eth0

-j 指定要进行的处理动作
常用的ACTION:
DROP:丢弃
REJECT:明示拒绝
ACCEPT:接受
SNAT基于原地址的转换
source--指定原地址

  


实例:
比如我们现在要将所有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(外网有效ip)


这样,只要是来自本地网络的试图通过网卡访问网络的,都会被统统转换成172.16.100.1这个IP.

MASQUERADE(动态伪装)--家用带宽获取的外网ip,就是用到了动态伪装

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

 


DNAT目标地址转换
destination-指定目标地址

实例:
比如我们要将192.168.10.18访问80端口转换到172.16.100.2上

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

 

MASQUERADE:源地址伪装
REDIRECT:重定向:主要用于实现端口重定向
MARK:打防火墙标记的
RETURN:返回 在自定义链执行完毕后使用返回,来返回原规则链。

 


ebtables在以太网层进行过滤,而iptables只对IP数据包进行过滤。
ebtables来过滤数据链路层数据包。 2.6内核内置了ebtables,要使用它必须先安装ebtables的用户空间工具
ebtables 是主要是控制数据链路层的,在内核中,ebtables 的数据截获点比 iptables 更“靠前”,它获得的数据更“原始”,ebtables 多用于桥模式,比如控制 VLAN ID 等。
ebtables 就像以太网桥的 iptables。iptables 不能过滤桥接流量,而 ebtables 可以。ebtables 不适合作为 Internet 防火墙。


iptables源码解析里面会有一个strcmp对你传下来的参数进行比较

例如你说的这个命令
iptables -A mac_filter -m mac --mac-source 14:18:77:B1:33:E4 -j RETURN
我说过,先指定表名,后指定链,表名用-t指明(code 里解析命令的时候遇到-t,那么就认为-t后面跟的第一个参数是表名),如果没有-t则默认为表名是filter
这个命令显然没有-t,所以表名是filter
code里解析遇到-A,则表示后面的是链
我上面写的<-A/I/D/R>的意思是-A或者-I或者-D或者-R 后面跟的都是链名
那么我问你-p后面跟的是什么?

 


iptables只是Linux防火墙的管理工具而已,位于/sbin/iptables。真正实现防火墙功能的是netfilter,它是Linux内核中实现包过滤的内部结构。
iptables包含4个表,5个链。其中表是按照对数据包的操作区分的,链是按照不同的Hook点来区分的,表和链实际上是netfilter的两个维度。 4个表:filter,nat,mangle,raw,默认表是filter(没有指定表的时候就是filter表)。表的处理优先级:raw>mangle>nat>filter

filter:一般的过滤功能

nat:用于nat功能(端口映射,地址映射等)

mangle:用于对特定数据包的修改

raw:有限级最高,设置raw时一般是为了不再让iptables做数据包的链接跟踪处理,提高性能


5个链:PREROUTING,INPUT,FORWARD,OUTPUT,POSTROUTING。

PREROUTING:数据包进入路由表之前

INPUT:通过路由表后目的地为本机

FORWARDING:通过路由表后,目的地不为本机

OUTPUT:由本机产生,向外转发

POSTROUTIONG:发送到网卡接口之前。

 

转载于:https://www.cnblogs.com/vx-cg248805770/p/11477250.html

你可能感兴趣的:(OPENWRT 教程第七章 防火墙开发之iptables)