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:发送到网卡接口之前。