什么是防火墙?
一道保护性的安全屏障
对内网保护,隔离外网
软件防火墙firewalld
底层是包过滤防火墙iptables
iptables的表,链结构:四张表 五条链
表名(表是服务的功能分类)
raw | 状态跟踪 |
---|---|
mangle 打标记 | |
nat | 地址转换 |
filter | 过滤表 |
链名(匹配数据包传输的方向)
INPUT | 进入防火墙的数据包 |
---|---|
OUTPUT | 从防火墙主机出去的数据包 |
FORWARD | 经过防火墙主机的数据包 |
POSTROUTING | 路由后处理 |
PREROUTING | 路由前处理 |
命令格式:
]#:iptables -t 表名 选项(增删改查) 链名 匹配条件 -j 处理动作
选项包括
-L:列出所有的管理条目
-n:以数字形式显示地址,端口等信息
-I:在链的开头(或指定序号)插入一条规则
-A:在链的末尾追加一条规则
-P:为指定的链设置默认规则
-D;删除链内指定序号(或内容)的一条规则
-F:清空所有的规则
–line-numbers:查看规则时,显示规则的序号
匹配条件(规则)的表示方式(可以取反加!)
选项 | 用法 |
---|---|
协议匹配 | -p 协议名 |
地址匹配 | -s 源地址,-d 目标地址 |
接口匹配 | -i 收数据的网卡,-o 发数据的网卡 |
端口匹配 | –sport 源端口,–dport 目标端口 |
ICMP类型匹配 | –icmp-type ICMP类型 |
规则的执行顺序
顺序匹配,匹配即停止(LOG除外)
若无任何匹配,则按该链的默认策略处理
处理动作包括
DROP:丢弃
REJECT:拒绝
ACCEPT:放行
LOG:记录日志
SNAT:源地址转换
DNAT:目标地址转换
网络型防护墙(控制数据包是否允许经过自己)
使用的是:filter表的FORWARD链子
[root@c ~]# iptables -t filter -nL --line-numbers
Chain INPUT (policy ACCEPT)
num target prot opt source destination
1 ACCEPT all -- 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED
2 ACCEPT icmp -- 0.0.0.0/0 0.0.0.0/0
3 ACCEPT all -- 0.0.0.0/0 0.0.0.0/0
4 ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 state NEW tcp dpt:22
5 REJECT all -- 0.0.0.0/0 0.0.0.0/0 reject-with icmp-host-prohibited
Chain FORWARD (policy ACCEPT)
num target prot opt source destination
1 REJECT all -- 0.0.0.0/0 0.0.0.0/0 reject-with icmp-host-prohibited
Chain OUTPUT (policy ACCEPT)
num target prot opt source destination
filter表的链名和所对应的规则
链名(规则)
[root@c ~]# iptables -t raw -F
[root@c ~]# iptables -t mangle -F
[root@c ~]# iptables -t filter -F
[root@c ~]# iptables -t nat -F
[root@c ~]# iptables-save > /etc/sysconfig/iptables
[root@c ~]# systemctl restart iptables.service
[root@c ~]# iptables -t filter -L
Chain INPUT (policy ACCEPT)
target prot opt source destination
Chain FORWARD (policy ACCEPT)
target prot opt source destination
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
[root@c ~]# iptables -t raw -L
Chain PREROUTING (policy ACCEPT)
target prot opt source destination
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
[root@c ~]# iptables -t nat -L
Chain PREROUTING (policy ACCEPT)
target prot opt source destination
Chain INPUT (policy ACCEPT)
target prot opt source destination
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
Chain POSTROUTING (policy ACCEPT)
target prot opt source destination
[root@c ~]# iptables -t mangle -L
Chain PREROUTING (policy ACCEPT)
target prot opt source destination
Chain INPUT (policy ACCEPT)
target prot opt source destination
Chain FORWARD (policy ACCEPT)
target prot opt source destination
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
Chain POSTROUTING (policy ACCEPT)
target prot opt source destination
清空默认规则,并永久生效,链的默认规则只能是ACCEPT或DROP
主机型防火墙(自己保护自己)
使用的是:filter表 INPUT链
不指定表的情况下默认是filer表
封锁IP地址/网段
主机防护,针对入站访问的源地址
网络防护,针对转发访问的源地址
只放行ssh,并查看设置永久生效
[root@c ~]# iptables -t filter -nL INPUT --line-numbers
Chain INPUT (policy ACCEPT)
num target prot opt source destination
[root@c ~]#iptables -t filter -A INPUT -p tcp --dport 22(目标端口) -j ACCEPT
[root@c ~]#iptables -t filter -P INPUT DROP
[root@c ~]#iptables -t filter -nL INPUT --line-numbers
Chain INPUT (policy DROP)
num target prot opt source destination
1 ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:22
[root@c ~]#iptables-save > /etc/sysconfig/iptables
上面是0.0.0.0全网段,所以所有网段都可以进行ssh
下面的是只让192.168.2.0网段可以通过
[root@c ~]# iptables -t filter -I INPUT 1 -s 192.168.2.0/24 -p tcp --dport 22 -j ACCEPT
[root@c ~]# iptables -t filter -nL INPUT --line-numbers
Chain INPUT (policy DROP)
num target prot opt source destination
1 ACCEPT tcp -- 192.168.2.0/24 0.0.0.0/0 tcp dpt:22
2 ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:22
[root@c ~]# iptables -D INPUT 2
删除之前的全网段ssh连接,造成的结果的非192.168.2.0网段的ssh连接掉线
[root@c ~]# iptables-save > /etc/sysconfig/iptables
禁Ping相关策略处理(发送出去echo-request;进入包echo reply)
允许本机ping其他主机,不允许别人ping自己
[root@c ~]# iptables -t filter -nL INPUT --line-numbers
Chain INPUT (policy DROP)
num target prot opt source destination
1 ACCEPT icmp -- 0.0.0.0/0 0.0.0.0/0 icmptype 0
2 ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:22
[root@c ~]# iptables -t filter -A INPUT -p icmp --icmp-type echo-reply -j ACCEPT
清理所有的规则
[root@c ~]# iptables -t filter -P INPUT ACCEPT
[root@c ~]# iptables -t filter -F INPUT
[root@c ~]# iptables-save > /etc/sysconfig/iptables
[root@c ~]# iptables -t filter -nL
Chain INPUT (policy ACCEPT)
target prot opt source destination
Chain FORWARD (policy ACCEPT)
target prot opt source destination
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
网络型防火墙(控制数据包是否允许经过自己)filter表 FORWARD链
加网关:route add default gw 网关
查看网关:route -n
[root@c ~]# iptables -t filter -nL FORWARD --line-numbers
Chain FORWARD (policy DROP)
num target prot opt source destination
1 ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:80
2 ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp spt:80
[root@c ~]# iptables -t filter -A FORWARD -p tcp --dport 22 -j ACCEPT
[root@c ~]# iptables -t filter -A FORWARD -p tcp --sport 22 -j ACCEPT
[root@c ~]# iptables -t filter -nL FORWARD --line-numbers
Chain FORWARD (policy DROP)
num target prot opt source destination
1 ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:80
2 ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp spt:80
3 ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:22
4 ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp spt:22
可以从外网连接到内网的服务器
常见的扩展条件类型
选项 | 用法 |
---|---|
MAC地址匹配 | -m mac --mac-source MAC地址 |
多端口匹配 | -m multiport --sports 源端口列表 --dports 目标端口列表 |
IP范围匹配 | -m iprange --src-range IP1-IP2, -m iprange --dst-range IP1-IP2 |
为特定的网段设置条件
[root@c ~]# iptables -t filter -A FORWARD -p icmp -j ACCEPT
[root@c ~]# iptables -t filter -I FORWARD 5 -p icmp -m iprange --src-range 192.168.4.50-192.168.4.60 -j DROP
[root@c ~]# iptables -t filter -nL FORWARD --line-numbers
Chain FORWARD (policy DROP)
num target prot opt source destination
1 ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:80
2 ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp spt:80
3 ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:22
4 ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp spt:22
5 DROP icmp -- 0.0.0.0/0 0.0.0.0/0 source IP range 192.168.4.50-192.168.4.60
6 ACCEPT icmp -- 0.0.0.0/0 0.0.0.0/0
禁掉不让通过的主机MAC地址
[root@c ~]# iptables -t filter -I FORWARD 5 -p icmp -m mac --mac-so[root@c ~]# iptables -t filter -I FORWARD 5 -p icmp -m mac --mac-source 52:54:00:44:bc:5e -j DROP
[root@c ~]# iptables -t filter -nL FORWARD --line-numbers
Chain FORWARD (policy DROP)
num target prot opt source destination
1 ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:80
2 ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp spt:80
3 ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:22
4 ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp spt:22
5 DROP icmp -- 0.0.0.0/0 0.0.0.0/0 MAC 52:54:00:44:BC:5E
6 ACCEPT icmp -- 0.0.0.0/0 0.0.0.0/0
多端口一块进行限制或开放
[root@c ~]# iptables -t filter -A FORWARD -p tcp -m multiport --dports 22,80,3306 -j ACCEPT
[root@c ~]# iptables -t filter -nL FORWARD --line-numbers
Chain FORWARD (policy DROP)
num target prot opt source destination
1 ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:80
2 ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp spt:80
3 ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:22
4 ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp spt:22
5 DROP icmp -- 0.0.0.0/0 0.0.0.0/0 MAC 52:54:00:44:BC:5E
6 ACCEPT icmp -- 0.0.0.0/0 0.0.0.0/0
7 ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 multiport dports 22,80,3306
[root@c ~]# iptables -t filter -D FORWARD 1
[root@c ~]# iptables -t filter -D FORWARD 1
[root@c ~]# iptables -t filter -D FORWARD 1
[root@c ~]# iptables -t filter -D FORWARD 1
[root@c ~]# iptables -t filter -nL FORWARD --line-numbers
Chain FORWARD (policy DROP)
num target prot opt source destination
1 DROP icmp -- 0.0.0.0/0 0.0.0.0/0 MAC 52:54:00:44:BC:5E
2 ACCEPT icmp -- 0.0.0.0/0 0.0.0.0/0
3 ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 multiport dports 22,80,3306
[root@c ~]# iptables -t filter -A FORWARD -p tcp -m multiport --sports 22,80,3306 -j ACCEPT
[root@c ~]# iptables -t filter -nL FORWARD --line-numbers
Chain FORWARD (policy DROP)
num target prot opt source destination
1 DROP icmp -- 0.0.0.0/0 0.0.0.0/0 MAC 52:54:00:44:BC:5E
2 ACCEPT icmp -- 0.0.0.0/0 0.0.0.0/0
3 ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 multiport dports 22,80,3306
4 ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 multiport sports 22,80,3306
删除网关命令:route del default gw 192.168.2.45