防火墙是一种网络安全设备或软件,用于监视和控制进出网络的数据流量。它根据预定义的安全规则,允许或阻止特定的流量。
一、Linux 中的主流防火墙工具
工具 特点 iptables 传统的防火墙工具,基于 netfilter,功能强大但复杂。 firewalld CentOS 7+ 默认, iptables的封装,支持动态修改规则。nftables 新一代替代 iptables 的工具,CentOS 8+/Debian10+ 推荐使用。 ufw Ubuntu 默认简单防火墙,适合新手。
二、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 tcp或udp使用)--dport指定目标端口(需配合 -p tcp或udp使用)-i入接口(如 eth0) -o出接口(如 eth0) -m匹配扩展模块,如 -m state、-m limit等--state连接状态匹配: NEW、ESTABLISHED、RELATED等-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 表和链
iptables的nat表用于网络地址转换(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 MASQUERADEMASQUERADE 适用于 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
#####有待补充。。。。

9574

被折叠的 条评论
为什么被折叠?



