防火墙的使用

防火墙是一种网络安全设备或软件,用于监视和控制进出网络的数据流量。它根据预定义的安全规则,允许或阻止特定的流量。

一、Linux 中的主流防火墙工具

工具特点
iptables传统的防火墙工具,基于 netfilter,功能强大但复杂。
firewalldCentOS 7+ 默认,iptables 的封装,支持动态修改规则。
nftables新一代替代 iptables 的工具,CentOS 8+/Debian10+ 推荐使用。
ufwUbuntu 默认简单防火墙,适合新手。

二、Firewalld 基本使用

1. 启动与状态管理

# 启动 firewalld 服务
systemctl start firewalld

# 设置开机自启
systemctl enable firewalld

# 查看防火墙状态
firewall-cmd --state

2. 查看规则

# 查看当前区域
firewall-cmd --get-active-zones

# 查看默认区域
firewall-cmd --get-default-zone

# 查看某区域的已开启服务
firewall-cmd --zone=public --list-all

3.添加规则

(1)允许某服务(如 HTTP)

# 永久开放80端口(http服务)
firewall-cmd --permanent --zone=public --add-service=http

# 应用更改
firewall-cmd --reload

(2)允许指定端口(如 8080/tcp)

firewall-cmd --permanent --zone=public --add-port=8080/tcp
firewall-cmd --reload

(3)允许 IP 白名单

# 允许某 IP 访问所有端口
firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="192.168.1.100" accept'
firewall-cmd --reload

(4)屏蔽某个 IP

firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="192.168.1.101" reject'
firewall-cmd --reload

4. 删除规则

# 移除某端口
firewall-cmd --permanent --zone=public --remove-port=8080/tcp

# 移除某服务
firewall-cmd --permanent --zone=public --remove-service=http

# 移除 rich-rule
firewall-cmd --permanent --remove-rich-rule='rule family="ipv4" source address="192.168.1.101" reject'

# 重载生效
firewall-cmd --reload

三、iptables 使用

1. 查看规则

iptables -L -n -v

2. 添加端口开放规则

# 开放80端口
iptables -A INPUT -p tcp --dport 80 -j ACCEPT

3. 阻止某IP访问

iptables -A INPUT -s 192.168.1.101 -j DROP

4. 保存配置

# 保存规则(CentOS 7)
service iptables save

四、表与链

表(table) 是对功能的分类,防火墙功能 (filter表) ,共享上网,端口转发 (nat表)

链对数据流进行处理,需要使用不同的链(数据流入(INPUT),数据流出(OUTPUT))

iptables 是 4表5链

4表: filter表 nat表 raw表 mangle表

5链: INPUT、 OUTPUT 、FORWARD、 PREROUTING 、POSTROUTING

链名称说明
INPUT进入本机的数据包
OUTPUT从本机发出的数据包
FORWARD转发的数据包(如路由器)
PREROUTING数据包进入防火墙前(用于 NAT)
POSTROUTING数据包离开防火墙后(用于 NAT)

五、安装iptables

yum -y install iptables-service

#命令
iptables -nL   #默认filter表
iptables -t nat -nL   #查看nat表

#例子
[root@localhost ~]# 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
ACCEPT     icmp --  0.0.0.0/0            0.0.0.0/0           
ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0           
ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0            state NEW tcp dpt:22
REJECT     all  --  0.0.0.0/0            0.0.0.0/0            reject-with icmp-host-prohibited

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination         
REJECT     all  --  0.0.0.0/0            0.0.0.0/0            reject-with icmp-host-prohibited

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination         

六、iptables命令参数

参数含义
-A添加规则(Append)
-I插入规则(Insert),默认插入到第1条
-D删除规则(Delete)
-R替换规则(Replace)
-L列出规则(List)
-F清空规则(Flush)
-N新建一个用户自定义链(New chain)
-X删除用户自定义链(Delete chain)
-P设置默认策略(Policy)
-E重命名链(Rename)
-Z将计数器归零(Zero counters)

1、匹配条件(匹配模块)

参数含义
-s--source指定源地址(IP/CIDR)
-d--destination指定目标地址
-p--protocol指定协议(如 tcp、udp、icmp)
--sport指定源端口(需配合 -p tcpudp 使用)
--dport指定目标端口(需配合 -p tcpudp 使用)
-i入接口(如 eth0)
-o出接口(如 eth0)
-m匹配扩展模块,如 -m state-m limit
--state连接状态匹配:NEWESTABLISHEDRELATED
-j指定动作

2、常用动作(target)

动作含义
ACCEPT接受数据包
DROP丢弃数据包(最常用的拒绝方式)
REJECT拒绝数据包并通知对方(更“友好”,会发送 RST 等)
LOG日志记录(仅记录不做处理)
SNAT源地址转换(用于 NAT)
DNAT目标地址转换(用于 NAT)
MASQUERADE动态地址伪装(常用于拨号上网后 NAT 出口)
RETURN从子链返回主链

七、配置filter表规则

#拒绝用户访问22端口
iptables -t filter  -A INPUT  -p tcp --dport 22 -j  DROP

1、封ip屏蔽某个ip

iptables -I INPUT -s 10.0.0.7  -j DROP
iptables -I INPUT -s 172.16.1.7   -j DROP
iptables -I INPUT -s 172.16.1.0/24  -j DROP  #网段

2、禁止网段连入(禁止10.0.0.0/24网段访问8080口)

iptables -I INPUT  -s 10.0.0.0/24  -p tcp  --dport 8080  -j DROP

3、只允许指定网段连入(允许172.16.1.0网段)

#方法1: 利用 ! 进行排除
 iptables -I INPUT ! -s 172.16.1.0/24  -j DROP
 
#只准许 10.0.0.0/24 访问 言外之意   除了 10.0.0.0/24 都拒绝
 iptables -I INPUT ! -s 10.0.0.0/24  -j DROP
 
#方法2: 修改链默认规则 修改为拒绝,添加准许先配置好规则 准许规则修改默认规则
iptables -P INPUT DROP   #修改默认规则

4、指定多个端口

iptables -I INPUT  -p tcp  --dport 8888   -j DROP 
iptables -I INPUT  -p tcp  --dport 9999   -j DROP
#指定多个端口
-m multiport   -p tcp   --dport 80,443  
#多端口模块
iptables  -A INPUT   -m multiport -p tcp --dport  80,443  -j ACCEPT

#如果是连续的端口 可以不加上-m multiport
iptables -I INPUT  -p tcp  --dport 1024:65535  -j DROP

5、匹配ICMP类型

#通过防火墙规则 控制是否可以ping
iptables -I INPUT  -p icmp --icmp-type 8  -j DROP
温馨提示: 更加精确的写法是

iptables -t  filter -I  INPUT -p icmp --icmp-type 8 -j DROP

简单写法

iptables -t filter -I INPUT -p icmp -j DROP

6、通过内核参数 控制 禁止被ping

[root@m01 ~]# cat /etc/sysctl.conf 
#/proc/sys/net/ipv4/icmp_echo_ignore_all
#net网络 ipv4协议 icmp协议忽略所有

net.ipv4.icmp_echo_ignore_all = 1

#生效
sysctl -p

八、限制并发及速率

-m limit --limit 10/minute     #每分钟只能有10个数据包每6秒生成


#ping icmp 协议 进行测试
iptables -F 
iptables -I INPUT  -p icmp  -m limit --limit 10/minute  --limit-burst 5   -j ACCEPT 
iptables -A INPUT  -p tcp  --dport -j ACCEPT 
iptables -P INPUT DROP  #所有未明确允许的入站流量将被丢弃。-P

九、防火墙规则的保存与恢复

  • iptables-save 进行备份,默认输出到屏幕

  • iptables-restore 进行恢复,加上文件

  • 写入到/etc/sysconfig/iptables

iptables-save  >/etc/sysconfig/iptables  #备份
cat /etc/sysconfig/iptables

[root@oldboy-m01 ~]# iptables -D INPUT 1 
[root@oldboy-m01 ~]# iptables -nL

iptables-restore < etc/sysconfig/iptables  #恢复

十、实际生产用法

iptables -F   #清空所有规则链(默认链和用户自定义链)中的规则条目,但保留链本身
iptables -X   #删除所有用户自定义的链。系统默认的 INPUT/OUTPUT/FORWARD 不会被删除
iptables -Z   #将所有链上的 计数器 归零(packet count / byte count)。这对统计流量的时候有用。
iptables -nL  #列出当前所有链的规则,但:
-n 表示以数字形式显示 IP 和端口(不反向解析 DNS),速度快。
-L 表示列出所有链中的规则
        
iptables -A INPUT -p tcp --dport 22 -j ACCEPT

设置允许本机通讯规则

# 允许本机回环lo接口数据流量流出与流入


# -i 数据进入的时候
iptables -A INPUT -i lo -j ACCEPT
# -o 数据流出的时候
iptables -A OUTPUT -o lo -j ACCEPT
  • 配置默认规则及 放行 80 443端口

iptables -A INPUT  -m multiport -p tcp  --dport 443,80   -j ACCEPT

[root@m01 ~]# iptables -A INPUT -s 10.0.0.0/24 -j ACCEPT 
[root@m01 ~]# iptables -A INPUT -s 172.16.1.0/24 -j ACCEPT 
#此处还可以添加 vpn网段 比如说 10.7.1.0/24

  • 修改默认的规则为拒绝INPUT

iptables -P INPUT DROP 
iptables -P FORWARD ACCEPT 
iptables -P OUTPUT ACCEPT

十一、NAT 表和链

iptablesnat 表用于网络地址转换(NAT),常用于实现以下功能:

  •  源地址转换(SNAT):多台主机通过一台公网IP上网(常用于内网出网)

  •  目标地址转换(DNAT):将访问某个公网IP:端口转发到内网主机(端口映射)

  • MASQUERADE(伪装):动态获取公网IP时(如拨号),自动伪装为当前公网IP

  • 链名称作用位置
    PREROUTING数据包刚到达防火墙(还没路由)
    POSTROUTING数据包离开防火墙(路由之后)
    OUTPUT本机发送的数据包(很少使用)

一、SNAT:多台内网主机通过一台公网IP上网

场景:内网网段 192.168.1.0/24 通过公网 IP 203.0.113.100 出网

# 启用 IP 转发
echo 1 > /proc/sys/net/ipv4/ip_forward

# 将源地址转换为公网 IP
iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o eth0 -j SNAT --to-source 203.0.113.100

二、MASQUERADE:动态公网 IP(如拨号 PPPoE)

场景:内网设备通过 eth1 出网,eth0 为动态公网地址

# 启用 IP 转发
echo 1 > /proc/sys/net/ipv4/ip_forward

# 动态伪装(自动使用 eth0 的 IP)
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

MASQUERADE 适用于 PPPoE、DHCP、4G 这种动态公网地址

三、DNAT:端口映射(公网访问转发到内网)

场景:公网访问 203.0.113.100:8080 转发到内网 192.168.1.10:80

# 将访问公网的 8080 转发到内网的 192.168.1.10:80
iptables -t nat -A PREROUTING -p tcp -d 203.0.113.100 --dport 8080 -j DNAT --to-destination 192.168.1.10:80

# 允许转发
iptables -A FORWARD -p tcp -d 192.168.1.10 --dport 80 -j ACCEPT

四、查看 NAT 表规则

iptables -t nat -L -n -v

五、保存 NAT 设置

# 保存规则(持久化)
service iptables save
# 或手动保存
iptables-save > /etc/sysconfig/iptables
目标命令
内网通过公网 IP 出网(固定 IP)SNAT + POSTROUTING
内网通过公网 IP 出网(动态 IP)MASQUERADE + POSTROUTING
公网访问内网服务DNAT + PREROUTING + FORWARD

#####有待补充。。。。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值