Linux 系统下管理防火墙规则的管理程序有两种,分别是iptables防火墙与firewall防火墙,虽然现在新版系统中早已不在使用Iptables,新版本系统中默认安装firewall管理程序,相比于Iptables更具有灵活性。
Iptables 防火墙
替换系统防火墙: 在Centos7系统中默认防火墙管理工具不是iptables,当需要使用时则需要自己安装替换.
[root@localhost ~] [root@localhost ~]
[root@localhost ~]
[root@localhost ~] [root@localhost ~]
|
查询完整防火墙规则: 使用 -L -n --line-numbers
参数查看防火墙默认配置规则.
[root@localhost ~] [root@localhost ~] 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
|
设置防火墙默认拒绝: 设置默认拒绝规则,把 INPUT
链设置为默认拒绝,也就是拒绝所有连接请求.
[root@localhost ~] [root@localhost ~]
Chain INPUT (policy DROP) 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
|
开启防火墙ICMP回显: 在默认规则拒绝的情况下,设置开启ICMP测试,允许主机ping通.
[root@localhost ~] [root@localhost ~]
Chain INPUT (policy DROP) num target prot opt source destination 1 ACCEPT icmp -- 0.0.0.0/0 0.0.0.0/0
Chain FORWARD (policy ACCEPT) num target prot opt source destination
Chain OUTPUT (policy ACCEPT) num target prot opt source destination
|
允许客户SSH远程连接: 在默认拒绝的情况下,设置开启22号端口,允许远程ssh连接到本机.
[root@localhost ~] [root@localhost ~]
[root@localhost ~] Chain INPUT (policy ACCEPT) num target prot opt source destination 1 ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:22 Chain OUTPUT (policy ACCEPT) num target prot opt source destination 1 ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp spt:22
|
删除指定规则: 在默认拒绝的情况下,删除INPUT链,第2条数据,删除ICMP规则.
[root@localhost ~] 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 2 ACCEPT icmp -- 0.0.0.0/0 0.0.0.0/0
[root@localhost ~] [root@localhost ~] 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
|
指定允许网段访问: 在默认拒绝的情况下,设置只允许192.168.1.0/24
网段的主机访问本机的22号端口.
[root@localhost ~] [root@localhost ~] [root@localhost ~]
Chain INPUT (policy DROP) num target prot opt source destination 1 ACCEPT tcp -- 192.168.1.0/24 0.0.0.0/0 tcp dpt:22
Chain OUTPUT (policy ACCEPT) num target prot opt source destination 1 ACCEPT tcp -- 192.168.1.0/24 0.0.0.0/0 tcp spt:22
|
拒绝访问指定端口: 在INPUT规则链中,添加拒绝所有人访问本机的8888号端口.
[root@localhost ~] [root@localhost ~] Chain INPUT (policy DROP) num target prot opt source destination 1 REJECT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:8888 reject-with icmp-port-unreachable 2 ACCEPT tcp -- 192.168.1.0/24 0.0.0.0/0 tcp dpt:22
|
拒绝访问指定主机网段的端口: 在INPUT规则链中,添加拒绝192.168.1.20
主机访问本机的80端口.
[root@localhost ~] [root@localhost ~]
Chain INPUT (policy DROP) num target prot opt source destination 1 REJECT tcp -- 192.168.1.20 0.0.0.0/0 tcp dpt:80 reject-with icmp-port-unreachable 2 REJECT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:8888 reject-with icmp-port-unreachable 3 ACCEPT tcp -- 192.168.1.0/24 0.0.0.0/0 tcp dpt:22
|
拒绝访问指定端口范围: 在INPUT规则链中,添加拒绝所有主机访问本机1000-2000端口.
[root@localhost ~] [root@localhost ~] [root@localhost ~]
Chain INPUT (policy DROP) num target prot opt source destination 1 REJECT tcp -- 192.168.1.20 0.0.0.0/0 tcp dpt:80 reject-with icmp-port-unreachable 2 REJECT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:8888 reject-with icmp-port-unreachable 3 ACCEPT tcp -- 192.168.1.0/24 0.0.0.0/0 tcp dpt:22 4 REJECT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpts:1000:2000 reject-with icmp-port-unreachable 5 REJECT udp -- 0.0.0.0/0 0.0.0.0/0 udp dpts:1000:2000 reject-with icmp-port-unreachable
|
SNAT-源地址转换<内网映射到公网>: 从本地发出的数据包,经过SNAT后,会自动伪装成公网的IP,并以公网IP访问指定服务.
[root@localhost ~]
-o -s --to-source
|
DNAT-目标地址转换<公网映射到内网>: 从公网接收的数据包,经过DNAT后,会自动将数据包转到指定的内网主机.
[root@localhost ~]
--to-destination -i -d -dport
|
限制物理请求连接数: iptables可以利用connlimit
模块实现限制同一IP针对某个端口的连接数.
允许限制每个客户端IP的并发连接数,即每个IP同时连接到一个服务器个数,还可以限制内网用户的网络使用,对服务器而言则可以限制每个IP发起的连接数.
[root@localhost ~] [root@localhost ~]
[root@localhost ~]
[root@localhost ~]
[root@localhost ~]
[root@localhost ~] [root@localhost ~]
|
配置基本防火墙规则: 我们可以在新安装的系统中依次执行下方代码,来配置一个基本的防火墙规则.
iptables --delete-chain iptables --flush
iptables -P INPUT DROP iptables -P FORWARD DROP iptables -P OUTPUT ACCEPT iptables -A INPUT -i lo -j ACCEPT
iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT iptables -A OUTPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -I INPUT -p tcp --dport 80 -m connlimit --connlimit-above 10 -j DROP iptables -I INPUT -p tcp --dport 443 -m connlimit --connlimit-above 10 -j DROP
iptables -A INPUT -p tcp -m tcp --dport 80 -j ACCEPT iptables -A INPUT -p tcp -m tcp --dport 20 -j ACCEPT iptables -A INPUT -p tcp -m tcp --dport 21 -j ACCEPT iptables -A INPUT -p tcp -m tcp --dport 25 -j ACCEPT iptables -A INPUT -p tcp -m tcp --dport 443 -j ACCEPT iptables -A INPUT -p tcp -m tcp --dport 873 -j ACCEPT
iptables -A INPUT -p tcp -m tcp --dport 22 -j ACCEPT iptables -A OUTPUT -p tcp -m tcp --dport 22 -j ACCEPT
iptables -A INPUT -p icmp -m icmp --icmp-type 8 -j ACCEPT iptables -A INPUT -p icmp -m icmp --icmp-type 11 -j ACCEPT
iptables -A OUTPUT -p udp -m udp -d 8.8.8.8 --dport 53 -j ACCEPT iptables -A OUTPUT -p udp -m udp -d 114.114.114.114 --dport 53 -j ACCEPT
iptables-save
|
生产常用配置规则: 下面是收藏的一些生成环境下常用规则的配置,一般情况下配置这些规则足够使用.
iptables -t filter -P INPUT DROP iptables -t filter -A INPUT -p tcp --dport 80 -j ACCEPT iptables -t filter -A INPUT -p tcp --dport 443 -j ACCEPT iptables -t filter -A INPUT -p tcp --dport 22 -j ACCEPT
iptables -t filter -A INPUT -p tcp --dport 80 -j ACCEPT iptables -t filter -I INPUT -p tcp --dport 443-j ACCEPT iptables -t filter -I INPUT 2 -p tcp --dport 443 -j ACCEPT iptables -t filter -A INPUT -p tcp --dport 80 -j DROP iptables -I INPUT 2 -p icmp -j DROP iptables -t filter -D INPUT 3
iptables -A FORWARD -s 192.168.1.10 -j REJECT iptables -I INPUT -s 10.20.30.0/24 -j DROP iptables -A INPUT -i eth1 -s 192.168.0.0/16 -j DROP iptables -A INPUT -o eth0 -s 192.168.1.0/24 -j DROP iptables -A INPUT -p tcp --dport 20:21 -j ACCEPT
iptables -I INPUT -p tcp -m multiport --dport 80-90,85 -j ACCEPT iptables -A FORWARD -p tcp -m iprange --src-range 192.168.1.10-192.168.1.100 -j ACCEPT
|
firewall 防火墙
firewalld服务拥有基于CLI和基于GUI的两种工作方式,相比于iptables防火墙firewall支持动态更新的技术并且加入的区域(zone)相关的概念.简单来说,区域就是firewall预先准备了几套防火墙策略的集合,从而实现防火墙之间策列的快速切换技术,从而极大地提升了防火墙的快速切换应用效率.
区域 |
默认策略规则 |
trusted |
允许所有数据包 |
home |
拒绝流入流量,但是与ssh,mdns,ipp-client,dhcpv6-client服务则允许通过 |
internal |
等同于home区域 |
work |
拒绝流入流量,但是与ssh,ipp-client,dhcpv6-client服务则允许通过 |
public |
拒绝流入流量,但是与ssh,ipp-client,dhcpv6-client服务则允许通过 |
external |
拒绝流入流量,但是与ssh服务相关则允许通过 |
dmz |
拒绝流入流量,但是与ssh服务相关则允许通过 |
block |
拒绝流入流量,除非与流出的流量相关 |
drop |
拒绝流入流量,除非与流出的流量相关 |
防火墙状态查询命令: 一些防火墙常用状态查询命令,firewall防火墙只需要指定完整参数即可查询防火墙当前状态.
[root@localhost ~] [root@localhost ~] [root@localhost ~] [root@localhost ~] [root@localhost ~] [root@localhost ~]
|
防火墙服务放行命令: 首先我们通过参数--panic-on
拒绝所有,并通过--add-service
放行NFS服务所对应的端口号.
[root@localhost ~] [root@localhost ~]
[root@localhost ~] [root@localhost ~] [root@localhost ~] [root@localhost ~]
[root@localhost ~] [root@localhost ~]
[root@localhost ~] [root@localhost ~] rule family="ipv4" source address="192.168.1.0/24" service name="https" accept
|
防火墙端口放行命令: 我们可使用--add-port
命令增加开启某端口,也可使用--remove-port
阻止某端口,使用端口号与服务名均可.
[root@localhost ~] [root@localhost ~] [root@localhost ~]
[root@localhost ~] [root@localhost ~]
[root@localhost ~] [root@localhost ~]
[root@localhost ~] [root@localhost ~]
[root@localhost ~]
[root@localhost ~] success [root@localhost ~] 8080-8081/tcp
[root@localhost ~]
|
防火墙配置端口转发: 端口转发功能当用户访问本机80端口是自动转发到本机或目标主机的某个端口上.
[root@localhost ~]
[root@localhost ~]
[root@localhost ~]
|
查询与设置默认区域: 查询firewall服务当前所使用的区域,同时设置服务新的默认区域为external
区域.
[root@localhost ~] public
[root@localhost ~] public
[root@localhost ~] success [root@localhost ~] external
|
修改默认区域到新区域: 修改ens32
网口的public
区域到external
区域,并永久生效.
[root@localhost ~] public
[root@localhost ~] [root@localhost ~] success
[root@localhost ~] external
|
设置某区域服务状态: 设置某个区域是否允许请求SSH和HTTPS协议的流量.
[root@localhost ~] yes [root@localhost ~] no
[root@localhost ~] success [root@localhost ~] success
[root@localhost ~] success [root@localhost ~] success
|
设置端口转发策略: 在192.168.1.0/24
网络中的系统,访问本地端口5423
将被转发到本地的80
端口.
允许/移除访问端口: 批量允许或移除某个区域内某个主机的端口策略.
firewall-cmd --zone=public --add-rich-rule 'rule family="ipv4" source address="192.168.1.10" accept' --permanent firewall-cmd --zone=public --remove-rich-rule 'rule family="ipv4" source address="192.168.1.10" accept' --permanent firewall-cmd --zone=public --remove-rich-rule 'rule family="ipv4" source address="192.168.1.10" drop' --permanent
firewall-cmd --zone=public --add-rich-rule 'rule family="ipv4" source address="192.168.2.0/24" accept' --permanent firewall-cmd --zone=public --add-rich-rule 'rule family="ipv4" source address="192.168.1.10" port port=22 protocol=tcp reject' --permanent firewall-cmd --zone=public --remove-rich-rule 'rule family="ipv4" source address="192.168.1.10" port port=22 protocol=tcp reject' --permanent
|