iptables(防火墙)
netfilter ,内核级别的防火墙,里面生成防火墙规则,这个是底层
iptables,防火墙管理软件,包过滤型号
根据tcp头和tcp头进行过滤的
人为编写的,比较死,需要人经常去变更,不然容易出漏洞。
状态检测型防火墙
具有一定智能型,和包差不多
只写谁能出去,不写谁能进(出去往里进可以,不能直接进来)
工作原理状态检测表
代理型防火墙(效率低),现在好多waf使用这个。
应用在应用层。
功能超级强大,超级全。现在好很多了,硬件水平上升了。
1,iptables的表,链结构
2,数据包控制的匹配流程
1,基本语法,控制类型
2,添加,查看,删除规程
3,规程匹配条件
INPUT :入站
OUTPUT :出站 一般写状态
FORWARD :路由转发
表里装着链,链里面小写规则
filter #一般在写这个
raw #优先通过,3次握手不同状态,通过联系状态过滤
iptables -t filter #指定这个文件写规则
表里面放规则链,规则链里面有规则
上面这写是表名
mangle #用于标记,类似与日志
FORWARD #转发让别人更安全
iptables [-t 表名] 选项 [链名] [tiaojian ] -j [控制] #区分大小写,选项 类型,功能都要大写
必须大写
ACCEPT #允许通过。
DROP #直接丢弃,不给出任何回应。
REJECT #拒绝通过,必要时会给出提示。
LOG #记录日志信息,然后传给下一条规则继续匹配。
选项,都是写规则
-I #在链的开头(或指定序号)插入一条规则
-A #最后追加规则
规则可以该,去改iptables。
规则是顺序执行,需要注意顺序,越精细的规则放上面,越模糊的放在下面。
查询iptables
-L #查看表里面写了那些规则,默认情况下把表里的规则全部列出来了
iptables -L #默认是查filter表中的所有链
如需查其他的
例如:
iptables -t nat -L
-n #以数字形式显示地址和端口
-v #详细信息
–line-numbers #查看规则是显示序列号
删除,清空规则
-D #删除
-F #清空
iptables -D INPUT 3 #删除第三条
iptables -F 或者 iptables -t nat -F #清空
iptables -L --linenumber
例如
iptables -D OUTPUT 2
设置默认规则 (永远在最后一条,不需要注意顺序,都比对不上才会执行这条条件)
-P #默认规则(大写p)
例如
iptables -P INPUT DROP #默认进站丢弃
-p 协议名
-s 源地址 -d目标地址
-i 入站网卡 -o 出站网卡
lo
只写一个-p 其他就是任意了
业务流 管理流 -I -o 分配网卡
常用的隐含匹配条件
端口哦匹配 : --sport源端口 --dport 目标端口
Tcp标记匹配 --tcp-flags检查范围 被设置的标记
ICMP类型匹配 –icmp-type ICMP 8 #主动请求 0 #通了回应0 3#目标主机不可达到
DNS UDP:53
开启模块 前面都要加 -m
多端口匹配 : -m multiport --sport #源端口列
-m multiport --dport #目标端口列表
状态匹配: -m state --state #连接状态
NEW #状态,首次出现的连接请求,三次第一次握手,回包。
ESTABLISHED #已经建立连接,对方的回应第三握手结束,正在连接中。
RELATED #以建立连接,有其他相关进程,例如ftp一个服务两进程一个控制进程一个传输进程。
INVALID #位置连接请求。
路由检查状态,来过滤,过滤掉外来的NEW,ESTABLESHED 回包的运行回去。
INVALID百分之一百全拒绝。
time_wailt 断开,老化时间
配置路由器
设置第二块网卡对的配置文件
IPADDR=202.106.0.1
NETMASKE=255.255.255.0
先设置直连路由测试正常
然后在中间开一个路由转发功能呢
vim /etc/sysctl.conf #修改net.ipv4.ip_forward=1 #追加配置文件
sysctl -p (net.ipv3.ip_forwaed=1)
练习
LAMP服务器
设置OUTPUT链默认策略丢弃所有,可以允许已存在连接出去。
设置INPUT链默认策略丢弃所有,允许网关ping本服务器,不允许其他IP使用ping测试本服务器。允许外部ip地址访问本服务器80端口。允许网关访问本服务器SSH服务。
1,添加错误,使用iptables -L --line-number 查找出错误行
2,使用iptables -D OUTPUT 2 #删除OUTPUT 第二行
iptables -P OUTPUT DROP
iptables -A OUTPUT -m state --state ESTABLISHED -j ACCEPT
iptables -A OUTPUT -m state --state NEW ,INBALID -j DROP
iptables -P INPUT DROP
iptables -A INPUT -s 192.168.20.1 -p icmp -j ACCEPT
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
iptables -A INPUT -s 192.168.20.1 -p tcp --dport 22 -j ACCEPT
路由服务器:
设置策略要求网关服务器可以向外ping其他主机,其他主机都不可以ping网关服务器,允许转发已存在连接,允许外网任意IP地址访问
LAMP的80端口,拒绝外网任意IP地址访问本地的ssh服务,拒绝外网任意IP地址地址访问LAMP服务器的SSH服务,允许内网访问外网的DNS服务。
iptables -A INPUT -p icmp --icmp-type 8 -j DROP #别人ping我丢包
iptables -A INPUT -p icmp --icmp-type 3 -j ACCEPT
iptables -A INPUT -p icmp --icmp-type 0 -j ACCEPT
iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT #RELATE 多台服务时可以使用吗
iptables -A FORWARD -d 192.168.3.100 -p tcp --dport 80 -j ACCEPT
iptables -A INPUT -d 202.106.0.1 -p tcp --dport 22 -j DROP
iptables -A FORWARD -d 202.168.3.100 -p tcp --dport 22 -j DROP
iptables -A FORWARD -s 192.168.20.0/24 -p udp --dport 53 -j ACCEPT
小tip
怎么保存iptables规则
service iptables save #出不来
可以直接在文件中修改配置(vim 可以修改,可以写),重启iptabels 服务器即生效
文件中后面的小括号是匹配过多少次。
LAMP服务器:
设置OUTPUT链默认策略丢弃所有,可以允许已存在连接出去,新连接不可以发送出去。
设置INPUT链默认策略丢弃所有,允许网关ping本服务器,不允许其他IP使用PING来测试本服务器。允许外部IP地址访问本服务器80端口。允许网关访问本服务器SSH服务。
路由服务器:
设置策略要求网关服务器可以向外ping其他主机,其他主机都不可以ping网关服务器,允许转发已存在连接,允许外网任意IP地址访问LAMP的80端口,拒绝外网任意IP地址访问本地的SSH服务,拒绝外网任意IP地址访问LAMP服务器的SSH服务。允许内网访问外网的DNS服务。
iptables -P OUTPUT DROP
iptables -I INPUT -p tcp -m state --state ESTABLISHED -j ACCEPT
iptables -I INPUT -p tcp -m state --state RELATED -j ACCEPT
iptables -A OUTPUT -p tcp -m state --state NEW -j DROP
iptables -P INPUT DROP
iptables -I INPUT -s 192.168.3.1 -p icmp -j ACCEPT
iptables -I OUTPUT -d 192.168.3.1 -p icmp -j ACCEPT
iptables -A INPUT -p icmp -j DROP
iptables -I INPUT -p tcp --dport 80 -j ACCEPT
iptables -I OUTPUT -p tcp --sport 80 -j ACCEPT
iptables -I INPUT -s 192.168.3.1 -p tcp --dport 22 -j ACCEPT
iptables -I OUTPUT -d 192.168.3.1 -p tcp --sport 22 -j ACCEPT
设置策略要求网关服务器可以向外ping其他主机,其他主机都不可以ping网关服务器,允许转发已存在连接,允许外网任意IP地址访问LAMP的80端口,拒绝外网任意IP地址访问本地的SSH服务,拒绝外网任意IP地址访问LAMP服务器的SSH服务。允许内网访问外网的DNS服务。
iptables -A INPUT -p icmp --icmp-type 8 -j DROP #外部ping icmp请求包
iptables -A INPUT -p icmp --icmp-type 0 -j ACCEPT #外部ICMP回显包
iptables -A INPUT -p icmp --icmp-type 3 -j ACCEPT #不可达数据包
iptables -I OUTPUT -p icmp -j ACCEPT
iptables -A INPUT -p icmp -j DROP
iptables -I INPUT -i eno33554984 -p icmp -j DROP
iptables -I OUT -o eno33554984 -p icmp -j ACCEPT
iptables -A INPUT -p icmp -j DROP
iptables -I FORWARD -i eno33554984 -o eno16777736 -m state --state ESTABLISHED -j ACCEPT
iptables -I FORWARD -i eno16777736 -o eno33554984 -m state --state ESTABLISHED -j ACCEPT
iptables -I FORWARD -i eno33554984 -o eno16777736 -d 192.168.3.100 -p tcp --dport 80 -j ACCEPT
iptables -I FORWARD -i eno16777736 -o eno33554984 -s 192.168.3.100 -p tcp --dport 80 -j ACCEPT
iptables -I INPUT -i eno16777736 -s 192.168.3.0/24 -p tcp --dport 22 -j ACCEPT
iptables -I OUTPUT -o eno16777736 -d 192.168.3.0/24 -p tcp --sport 22 -j ACCEPT
iptables -A INPUT -i eno33554984 -d 202.106.0.1 -p tcp --dport 22 DROP
iptables -I FORWARD -i eno16777736 -o eno33554984 -s 192.168.3.0/24 -p tcp --dport 53 -j ACCEPT
iptables -I FORWARD -i eno33554984 -o eno16777736 -d 192.168.3.0/24 -p tcp --sport 53 -j ACCEPT
iptables -I INPUT -p icmp --icmp-type 0 -j ACCEPT #外部ICMP回显包
iptables -I INPUT -p icmp --icmp-type 3 -j ACCEPT #不可达数据包
iptables -I OUTPUT -p icmp -j ACCEPT
iptables -A INPUT -p icmp -j DROP
iptables -I FORWARD -m state --state ESTABLISHED -j ACCEPT
iptables -I FORWARD -m state --state RELATED -j ACCEPT
iptables -I FORWARD -i eno33554984 -o eno16777736 -d 192.168.3.100 -p tcp --dport 80 -j ACCEPT
iptables -I FORWARD -i eno16777736 -o eno33554984 -s 192.168.3.100 -p tcp --dport 80 -j ACCEPT
iptables -A INPUT -i eno33554984 -p tcp --dport 22 DROP
iptables -I INPUT -i eno16777736 -o eno16777736 -d 192.168.3.100 -p tcp --dport 22 -j DROP
iptables -I FORWARD -i eno16777736 -o eno33554984 -s 192.168.3.0/24 -p tcp --dport 53 -j ACCEPT
iptables -I FORWARD -i eno33554984 -o eno16777736 -d 192.168.3.0/24 -p tcp --sport 53 -j ACCEPT
iptables -P INPUT DROP
iptables -P OUTPUT DROP