- iptables -A INPUT -m multiport —sports(—source-ports) 80,20,22,1000:2000 -j DROP
- iptables -A INPUT -m iprange —src-range 10.18.44.211-10.18.44.250 -j DROP
- iptables -A INPUT -m mac —mac-source 52:54:00:86:a1:86 -j REJECT
- iptables -t nat -A PREROUTING -d 192.168.1.2 -j DNAT —to-destination 192.168.2.2
- iptables -t nat -A POSTROUTING -d 192.168.2.2 -j SNAT —to 192.168.2.1
- iptables -t nat -A PREROUTING -p tcp -d 192.168.122.1 -dport 80 -j REDIRECT —to-destination 192.168.1.1:8080
防火墙iptables
分类:
逻辑分类:主机防火墙(个人)和网络防火墙(集体)
主机防火墙:针对单个主机进行防护
网络防火墙:它往往处于网络入口或者边缘,针对于网络入口进行防护,服务于防火墙背后的局域网
物理分类:硬件防火墙以及软件防火墙
硬件防火墙: 在硬件级别实现部分防火墙功能,另一部分基于软件实现,性能高,成本高
软件防火墙:应用软件处理逻辑运行于通用硬件平台之上,性能低,成本低
基础:
iptables其实不是真正的防火墙,她只是一个客户端的代理,用户是通过iptables这个代理,将用户的安全设定执行到对应的“安全框架”中,这个“安全框架”才是真正的防火墙,这个框架叫做“netfilter”
netfilter: 内核态 位于内核空间
iptables: 用户态 位于用户空间
四表五链:
四表:
raw 追踪数据包
mangle 对数据包打标记
nat 地址转换
filter 数据包过滤
五链:
PREROUTING 在路由之前
INPUT 数据包进入时
FORWARD 数据包经过时
OUTPUT 数据包出去时
POSTROUTING 在路由之后
raw:
Chain PREROUTING (policy ACCEPT)
Chain OUTPUT (policy ACCEPT)
mangle:
Chain PREROUTING (policy ACCEPT)
Chain INPUT (policy ACCEPT)
Chain FORWARD (policy ACCEPT)
Chain OUTPUT (policy ACCEPT)
Chain POSTROUTING (policy ACCEPT)
nat:
Chain PREROUTING (policy ACCEPT)
Chain INPUT (policy ACCEPT)
Chain OUTPUT (policy ACCEPT)
Chain POSTROUTING (policy ACCEPT)
filter:
Chain INPUT (policy ACCEPT)
Chain FORWARD (policy ACCEPT匹配过的数据包不会在去匹配)
Chain OUTPUT (policy ACCEPT)
匹配规则:
从上往下依次匹配,匹配过的数据包不会再去匹配
port(协议):tcp、udp、icmp
数据包流向:
PREROUTING [route] FORWARD POSTROUTING
INPUT OUTPUT
删除规则:
iptables -F [-t 表名] 默认时删除filter表 删除的是表里的所有
查看规则:
iptables -L
iptables -L -n
iptables -L —line (man手册上没有这个参数)
语法:
iptables -t 表 动作 链 匹配条件 -j 目标动作
-s:source 源地址
-d:destination 目标地址
动作:
添加规则: -A
iptables -t filter -A INPUT -p icmp -j REJECT
iptables -t filter -A INPUT -p tcp —dport 22 -s 192.168.122.113 -j REJECT
插入规则:-I
iptables -t filter -I INPUT 2 -p tcp —dport 22 -s 192.168.122.114 -j REJECT 插入到第二条规则上面
iptables -t filter -I INPUT -p tcp —dport 22 -s 192.168.122.114 -j REJECT 默认插入到第一行
替换(修改)规则:-R
iptables -t filter -R INPUT 2 -p tcp —dport 22 -s 192.168.122.115 -j REJECT 把114—>115
删除规则:-D
iptables -t filter -D INPUT -p tcp —dport 22 -s 192.168.122.115 -j REJECT
iptables -L —line (要删除的序号)
iptables -t filter -D INPUT(链) 2
修改默认策略:-P 只能用DROP和ACCEPT
iptables -t filter -P INPUT DROP
iptables -t filter -P INPUT ACCEPT
添加自定义链:-N 默认不生效 是用来存储规则的
iptables -N blackrach 自己创建的链
iptables -t filter -A blacrach -p tcp —dport 22 -s 192.168.122.116 -j REJECT 往自定义链上添加
iptables -A INPUT -j blackrach 关联自定义链,使用自定义链
修改自定义链名称:-E
iptables -E blackrach blackcloud
删除自定义规则:不能被关联,必须是空链
iptables -X +链名 删除自定义链
计数清零:-Z
清空字节数
清空数据包个数
-v 显示详细的计数信息
iptables -Z 清空计数
匹配条件:
基本匹配:
协议 -p tcp udp icmp
查端口:vim /etc/services 记录的是tcp/udp协议簇
vim /etc/protocols 记录的是icmp
-p:tcp udp icmp
端口:使用端口前加协议(-p)
—sport源端口
iptables -A INPUT -p tcp —sport 22 -s 10.18.44.10 -j REJECT
—dport目标端口
iptables -A INPUT -p tcp —dport 22 -s 10.18.44.10 -j REJECT
IP:
-s 源IP source ip地址 网段 逗号可以分开多个地址
-d 目标IP destination
扩展匹配:
-m 后面+扩展匹配
-m multiport 多端口
iptables -A INPUT -m multiport —sports(—source-ports) 80,20,22,1000:2000 -j DROP
—dports(—destination-ports)
-m iprange 多ip地址
iptables -A INPUT -m iprange —src-range 10.18.44.211-10.18.44.250 -j DROP
-m mac
iptables -A INPUT -m mac —mac-source 52:54:00:86:a1:86 -j REJECT
获取MAC的方式
[root@xingdian opt]# arp -a 10.0.102.101
[root@xingdian opt]# arping -I eth0 10.0.102.101
目标动作:
ACCEPT 允许数据包通过(默认策略)
DROP 直接丢弃数据包,不给任何回应
REJECT 拒绝数据包,必要时会给数据发送端一个响应
SNAT 源地址转换,可以解决内网用户用一个公网IP上网的问题 POSTROUTING
DNAT 目标地址转换 PREROUTING
REDIRET 做端口映射(扩展)
网络地址转换NAT(企业应用,虚拟机做实验效果不佳)
SNAT:把内网地址转换成公网地址
client ————————iptables——内网ip—公网( baidu公网)
一个数据包在经过路由之后(或者说在通过防火墙的过滤之后)才被知道他的源IP是谁,在路由之前只能看到目标IP,如果我看不到你的源IP,那怎么匹配想过滤的数据包并进行源地址转换?我防火墙根本就不能确定你是否是符合匹配条件的IP,所以只能使用POSTROUTING
iptables -t nat -A POSTROUTING -s 192.168.122.0/24 -d 192.168.122.0/24 -j SNAT —to-source 192.168.2.1
DNAT:要把别人的公网ip换成我们内部的IP
web-server iptables client
如果我不在路由之前就把目标地址转换完成,很显然当数据包到达入口IP之后,他的目的已经达到了,因为他本来的目标IP就是防火墙的对外公网IP,那么数据包还会往里面走吗?显然不可能了,所以只能使用PREROUTING
1.1 1.2 2.1 2.2
A ——————————-B——————————-C
转发
iptables -t nat -A PREROUTING -d 192.168.1.2 -j DNAT —to-destination 192.168.2.2
iptables -t nat -A POSTROUTING -d 192.168.2.2 -j SNAT —to 192.168.2.1
特重点:
iptables -t nat -A PREROUTING -p tcp -d 192.168.122.1 -dport 80 -j REDIRECT —to-destination 192.168.1.1:8080
docker 端口映射 namespace 命名空间 -p 80:8080
