1.firewalld安装
# yum install firewalld firewall-config
# systemctl restart firewalld
# systemctl enable firewalld
2.[6]大模块
一、zone:就是防火墙方案
# firewall-cmd --get-zones
work drop internal external trusted home dmz public block
默认是public,修改如下
# firewall-cmd --set-default-zone=模块名
查看规则
# firewall-cmd --list-all
# firewall-cmd --zone=模块名 --list-all
二、port:端口与服务
# firewall-cmd --add-port=起始端口-结束端口/服务名 增加
# firewall-cmd --remove-port=3000-3005/服务名 删除
三、service
# firewall-cmd --add-service=服务名 增加
# firewall-cmd --remove-service=http 删除
四、rich-rule:复杂规则
# firewall-cmd --add-rich-rule=" rule family="规则组" source address=来源IP service name="服务名" 行为"
范例:
# firewall-cmd --add-service=http
# firewall-cmd --add-rich-rule="rule family="ipva4" source address=10.1.1.12 service name="http" drop"
执行顺序:
如果有service与rich-rule交叉设置,先执行rich-rule。
如果多条rich-rule则
# firewall-cmd --list-all
按序执行!
五、runtime与permanent
模式 | 说明 |
---|---|
runtime | 规则立即生效,重启服务规则就没了 |
permanent | 规则不立即生效,重启服务规则就生效了 |
runtime-to-permanent | 将runtime全部转化为permanent模式,已生效的重启还有(关键) |
# firewall-cmd --模式名 --add-service=服务名
六、panic自闭模式
# firewall-cmd --panic-on
# firewall-cmd --panic-off
云服务器执行这条,就连不上了。慎用。
日、图形界面
# firewall-config
进入图形界面。
注:Xshell需要安装Xmanager
3.安装iptables
# yum install iptables\* -y
# systemctl start iptables.service
# systemctl enable iptables.service
4.四表五链与配置
四表:
Filter表:过滤数据包(常用)
NAT表:用于网络地址转换(IP、端口)
Mangle表:修改数据包的服务类型、TTL、并且可以配置路由实现QOS
Raw表:决定数据包是否被状态跟踪机制处理
五链:
INPUT链——进来的数据包应用此规则链中的规则(常用)
OUTPUT链——外出的数据包应用此规则链中的规则(常用)
FORWARD链——转发数据包时应用此规则链中的规则
PREROUTING链——对数据包作路由选择前应用此链中的规则
POSTROUTING链——对数据包作路由选择后应用此链中的规则
1.INPUT与OUTPUT
查看某一个表的规则列表。
# iptables -L -n -t 表名 --line
清空某个表规则
# iptables -F -t 表名
行为:
REJECT/DROP/ACCEPT...
协议名:
all/icmp/http/tcp...
-A[DIR] 五链:增[删插改] 五链
-s[d] IP:来源[目标] IP
--sport[dport] 端口:来源[目标] 端口
# iptables -t 四表 -A[DIR] 五链 -p 协议名 -s[d] 来源IP[段] --sport[dport] 端口 -j 行为
iptables匹配规则的顺序:
1.从上之下顺序匹配
2.只匹配一次
3.无匹配执行默认策略。
# iptables -L -t 四表 --line
数字:指Insert这条成为List中第[数字]条。
# iptables -t 四表 -I 五链 数字 -p 协议名 -s[d] 来源IP[段/掩码] --sport[dport] 端口 -j 行为
修改:修改链中的第[数字]条规则。
# iptables -t 四表 -R 五链 数字 -p 协议名 -s[d] 来源IP[段/掩码] --sport[dport] 端口 -j 行为
删除第[数字]条。
# iptables -D 五链 INPUT 数字
默认策略:
# iptables -t 表名 -P 五链 行为
保存规则
# iptables-save > /etc/sysconfig/iptables
还原规则
# iptables-restore < /etc/sysconfig/iptables
# systemctl restart iptables
多端口,多IP
# iptables -A ... -p ... -j ... -m iprange --src-range 10.1.1.10-10.1.1.20
# iptables -A ... -p ... -j ... --dport 1:1000
# iptables -A ... -p ... -j ... -m multiport --dport 22,80
这个文件可以编辑,进行配置。
2.FORWARD
指A访问C,中途B来带路。那么B的链为FORWARD。(既不是IN也不是OUT)。
一个模型:
A:1.1.1.1
B:1.1.1.3/2.2.2.3 (双网卡)
C:2.2.2.2
1.A想访问C,不能够。
2.A能访问B的第一块网卡IP(同网段),A无法访问B的第二块网卡IP,就需要B的网卡1介绍他们认识。
所以A需要能访问B的网段,然后以B作为网关,访问B能访问的网段。(A找B认识B的朋友们)
注:此环节B需要开启ip_forward,进行(IP转发)朋友介绍
3.加入B的IP作为网关,就可以正向将信号传递给C了,然后返回。
4.C回去路上能访问B的2号卡IP,但访问不了B的1号卡IP(跟A来时一样)
5.C端加入B2号卡IP的网关。
6.顺利返回。
示例: 在中间B中禁止两边机器互ping
# iptables -A FORWARD -p icmp -j DROP
示例: 禁止A访问B的80
# iptables -A FORWARD -p tcp --dport 80 -s 访问端IP -d 目标IP -j DROP
不常用
3.NAT表与POSTROUTING/PREROUTING链
另一个模型:
A:1.1.1.1
B:1.1.1.3/外网IP(双网卡)
C:外网IP
A扮演客户机,B扮演路由器,C扮演web服务器。
A客户机想访问C服务器:
1.A的内网IP访问B的内网IP
2.B将自己的IP替换掉A的内网IP,来访问C
3.上面的替换过程叫NAT,替换来源IP叫Source NAT,SNAT。
# iptables -t nat -A POSTROUTING -o 外网IP网卡名 -j SNAT --to-source 外网IP
可跟据需求加上诸如端口号,来源IP等等信息
例子:
# iptables -t nat -A POSTROUTING -o ens37 -j SNAT --to-source 10.1.1.11
关键词MASQUERADE可以自动识别路由器IP,自动替换,自动换回。
# iptables -t nat -A POSTROUTING -o ens37 -j MASQUERADE
或:firewalld
# systemctl start firewalld
# firewall-cmd --add-masquerade 不用指从哪个网卡出了
# firewall-cmd --remove-masquerade 删除的写法
另一个模型:
A:外网IP
B:外网IP/1.1.1.1(双网卡)
C:1.1.1.2
A扮演客户机,B扮演LB,C扮演web服务器。
A客户机想访问C服务器:
1.A的外网访问B的外网IP。
2.B将C的IP替换掉自己的IP,并代替A来访问C
3.上面的替换过程叫NAT,替换目标IP叫 Destination NAT,DNAT。
# iptables -t nat -A PREROUTING -i 入口IP网卡名 -p 协议名 --dport 目标端口号 -j DNAT --to-destination 真正的服务器IP
例如:
# iptables -t nat -A PREROUTING -i ens37 -p tcp --dport 80 -j DNAT --to-destination 192.168.1.100
或firewalld:
# systemctl start firewalld
# firewall-cmd --add-forward-port=port=端口号:proto=协议名:toaddr=真正的服务器IP
例如:
# firewall-cmd --add-forward-port=port=80:proto=tcp:toaddr=192.168.1.100
4.DNAT/DNPT
DNAT是对目标的IP地址进行替换,DNPT是对目标的端口进行替换(Port)
这段是真实服务器上用的,将访问自己的端口转移。
# iptables -t nat -A PREROUTING -i 入口网卡名 -p 协议名 --dport 端口号 -j REDIRECT --to-port 新端口
例如:
# iptables -t nat -A PREROUTING -i ens33 -p tcp --dport 80 -j REDIRECT --to-port 8080
这段是LB上用的,将IP和端口都转移。
# iptables -t nat -A PREROUTING -i 入口网卡名 -p 协议名 --dport 端口号 -j DNAT --to 真实服务器IP:新端口
或:firewalld
# systemctl start firewalld
# firewall-cmd --add-forward-port=port=端口号:proto=协议名:toaddr=真实服务器IP:toport=新端口
# firewall-cmd --add-forward-port=port=80:proto=tcp:toaddr=192.168.1.100:toport=8080
5.状态控制
状态类型:
1.NEW 新来的连接
2.ESTABLISHED NEW成功后,都叫这名
3.RELATED 被动产生的数据包。而且这个连接是不属于现在任何连接的。
4.INVALID 恶意的数据包
# iptables -A ... -p ... -j ... -m state --state NEW,ESTABLISHED,RELATED,INVALID