Lesson 9 防火墙 iptables 和 firewalld
...# -n 显示源 -v 详细信息 -x 自动转换为KB\MB等单位-L写在最后列出所有规则 --line 增加行号# num:规则的编号(行号)# pkts:数据包的数量# bytes:数据包的字节数# target:动作(放行、拒绝)# port:端口# in:入站的网卡# out:出站网卡# 保存设置,否则重启系统后恢复默认设置# 注意:不能使用systemctl save iptabl
·
防火墙
firewalld iptables:防火墙的工具,用于修改防火墙防御策略。
netfilter :真正实施策略的防火墙主题。
iptables
安装
[root@server ~]# dnf install iptables-nft-services -y
开启iptables服务前要关闭防火墙 两个只能存在一个(iptables 与 firewalld都不是真正的防火墙,它们都只是用来定义防火墙策略的防火墙管理工具而已,即只是一种服务,而真正使用规则干活的是内核的netfilter,当前Linux 系统中存在多个防火墙管理工具,旨在方便运维人员管理 Linux 系统中的防火墙策略,我们只需要配置妥当其中的一个就足够了。)(Euler中默认使用的是firewalld,且与iptables之间有冲突,如果需要使用 iptables 需要先停止firewalld再进行安装: )
# 查看过滤表详情 (完整的写法 iptables -t filter -nxvL --line-numbers)n显示源 x取消单位 v详细信息 L写在最后列出所有规则
[root@server ~]# iptables -nL
Chain INPUT (policy ACCEPT)
target prot opt source destination
ACCEPT all -- 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED
....
# -n 显示源 -v 详细信息 -x 自动转换为KB\MB等单位
-L写在最后列出所有规则 --line 增加行号
# num:规则的编号(行号)
# pkts:数据包的数量
# bytes:数据包的字节数
# target:动作(放行、拒绝)
# port:端口
# in:入站的网卡
# out:出站网卡
# 添加插入 -A -I
# 如果要在列表中末尾添加新规则使用 -A
[root@server ~]# iptables -A INPUT -p tcp --dport 80 -j ACCEPT
[root@server ~]# iptables -nL --line
Chain INPUT (policy ACCEPT)
num target prot opt source destination
....
5 REJECT all -- 0.0.0.0/0 0.0.0.0/0 reject-with icmp-host-prohibited
6 ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:80
Chain FORWARD (policy ACCEPT)
....
# 插入一条规则 允许任意ip 访问80端口
[root@Server ~]# iptables (-t filter)-I INPUT 5 -p tcp --dport 80 -j ACCEPT
# 实现以上命令后 无需关闭防火墙即可访问 nginx 默认发布目录
# 删除一条策略 -D 表名 -行号
# 删除一条策略
[root@Server ~]# iptables -D INPUT 6
[root@Server ~]# iptables -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
# 修改一条规则 -R
# 修改一条规则
[root@Server ~]# iptables -R INPUT 6 -p all -j ACCEPT
[root@Server ~]# iptables -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 ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:80
6 ACCEPT all -- 0.0.0.0/0 0.0.0.0/0
# -F 清空表中所有规则(内存中)(F:flush是“冲洗、冲掉”的意思)
# -F 清空表中所有规则(内存中)
[root@Server ~]# iptables -F
[root@Server ~]# iptables -nL --line-numbers
Chain INPUT (policy ACCEPT)
num target prot opt source destination
Chain FORWARD (policy ACCEPT)
num target prot opt source destination
Chain OUTPUT (policy ACCEPT)
num target prot opt source destination
# 保存设置(将自定义的规则保存到配置文件中),否则重启系统后恢复默认设置
[root@server ~]# service iptables save
iptables: Saving firewall rules to /etc/sysconfig/iptables: [ OK ]
# 保存设置,否则重启系统后恢复默认设置
# 注意:不能使用systemctl save iptables 命令
# 查看
[root@server ~]# vim /etc/sysconfig/iptables
# iptables的规则配置文件保存在 /etc/sysconfig/iptables
# 如果要将自定义的规则保存到配置文件中 调用一下命令
[root@Server ~]# service iptables save
iptables: Saving firewall rules to /etc/sysconfig/iptables: [ OK ]
练习
# 不允许ssh远程登录
[root@Server ~]# iptables -R INPUT 4 -p tcp --dport 22 -j REJECT
[root@Server ~]# iptables -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 REJECT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:22 reject-with icmp-port-unreachable
5 ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:80
6 ACCEPT all -- 0.0.0.0/0 0.0.0.0/0
# 允许172.25.254.200使用ssh远程登录
[root@Server ~]# iptables -A INPUT -s 172.25.254.200 -p tcp --dport 22 -j ACCEPT
[root@Server ~]# iptables -nL --line-numbers
Chain INPUT (policy ACCEPT)
num target prot opt source destination
1 ACCEPT tcp -- 172.25.254.200 0.0.0.0/0 tcp dpt:22
Chain FORWARD (policy ACCEPT)
num target prot opt source destination
Chain OUTPUT (policy ACCEPT)
num target prot opt source destination
# 拒绝所有其他ip登录
[root@Server ~]# iptables -A INPUT -p tcp --dport 22 -j REJECT
[root@Server ~]# Read from remote host 172.25.254.100: Operation timed out
Connection to 172.25.254.100 closed.
client_loop: send disconnect: Broken pipe
# 允许非172.25.254.200的ip登录
[root@Server ~]# iptables -A INPUT -s 172.25.254.200 -p tcp --dport 22 -j REJECT
[root@Server ~]# iptables -A INPUT ! -s 172.25.254.200 -p tcp --dport 22 -j ACCEPT
[root@Server ~]# iptables -nL
Chain INPUT (policy ACCEPT)
target prot opt source destination
ACCEPT tcp -- !172.25.254.200 0.0.0.0/0 tcp dpt:22
firewalld
firewalld 配置文件
/etc/firewalld:配置文件主区(用户配置文件,可以自行修改)
/lib/firewalld:预先定义好服务文件(系统配置文件,尽量不要修改)
firewalld的zone
根据信任级别分成9个默认zone
| 区域 | 默认策略规则 |
|---|---|
| trusted(信任区域) | 允许所有的传入流量 |
| home (家庭区域) | 允许与SSH、MDNS(多播DNS)、IPP客户端、samba-客户端、DHCPv6客户端、cockpit(服务器管理工具)服务匹配的流量传入,其余拒绝 |
| internal (内部区域) | 默认值时与homel区域相同 |
| work(工作区域) | 允许 与SSH、DHCPv6客户端、cockpit服务匹配的流量传入,其余拒绝、 |
| public (公共区域) | 允许与SSH或DHCPv6客户端、cockpit服务匹配的流量传入,其余拒绝 (是默认区域) |
| external(外部区域) | 允许与SSH服务匹配的流量传入,其余拒绝 |
| dmz (隔离区域) | 也称为非军事区域,内外网络之间增加的一层网络,起到缓冲作用,允许与SSH服务匹配的流量传入,其余拒绝 |
| block (阻塞区域) | 拒绝所有传入流量,返回icmp-host-prohibited消息 |
| drop (丢去区域) | 丢弃所有传入流量,且没有任何回复,类似DROP |
# 查看防火墙状态
[root@Server ~]# firewall-cmd --list-all
public (active)
target: default
icmp-block-inversion: no
interfaces: enp0s5
sources:
services: cockpit dhcpv6-client ssh
ports:
protocols:
forward: yes
masquerade: no
forward-ports:
source-ports:
icmp-blocks:
rich rules:
# 获取防火墙的区域信息
[root@Server ~]# firewall-cmd --get-default-zone
public
# 查看系统中有哪些防御区域
[root@Server ~]# firewall-cmd --get-zones
block dmz drop external home internal nm-shared public trusted work
# 设置防火墙的区域
[root@Server ~]# firewall-cmd --set-default-zone=dmz
success
[root@Server ~]# firewall-cmd --list-all
dmz (active)
target: default
icmp-block-inversion: no
interfaces: enp0s5
sources:
services: ssh
ports:
protocols:
forward: yes
masquerade: no
forward-ports:
source-ports:
icmp-blocks:
rich rules:
服务文件保存的目录
# /lib/firewalld/zones
# 制作自定义的服务 # 需重启火墙获取新增服务文件
[root@Server services]# cp http.xml nginx.xml
[root@Server services]# vim nginx.xml
....
<?xml version="1.0" encoding="utf-8"?>
<service>
<short>Nginx</short>
<description>this is a russian httpd</description>
<port protocol="tcp" port="80"/>
<port protocol="tcp" port="443"/>
<port protocol="tcp" port="7777"/>
</service>
....
# 添加自定义的服务
[root@Server services]# firewall-cmd --add-service=nginx
success
练习
# 添加ip规则
[root@Server services]# firewall-cmd --add-source=172.25.254.200 --zone=dmz
success
# 移除ip规则
[root@Server services]# firewall-cmd --remove-source=172.25.254.200
success
[root@Server services]# firewall-cmd --get-active-zones
public
interfaces: enp0s5
# 移除网卡
[root@Server services]# firewall-cmd --remove-interface=enp0s5
success
# 添加网卡到指定区域
[root@Server services]# firewall-cmd --add-interface=enp0s5 --zone=dmz
success
# 修改网卡到指定区域
[root@Server services]# firewall-cmd --change-interface=enp0s5 --zone=public
success
# 添加允许端口
[root@Server services]# firewall-cmd --add-port=7777/tcp
success
# 移除允许端口
[root@Server services]# firewall-cmd --remove-port=7777/tcp
success更多推荐
所有评论(0)