- firewalld
- iptables
- 查看已有的防火墙规则链
- 清空已有的防火墙规则链
- 把 INPUT 规则链的默认策略设置为拒绝
- 向 INPUT 链中添加允许 ICMP 流量进入的策略规则
- 删除 INPUT 规则链中刚刚加入的那条策略
- 把默认策略设置为允许
- 将 INPUT 规则链设置为只允许指定网段的主机访问本机的 22 端口,拒绝来自其他所有主机的流量
- 向 INPUT 规则链中添加拒绝所有人访问本机 12345 端口的策略规则
- 向 INPUT 规则链中添加拒绝 192.168.10.5 主机访问本机 80 端口(Web 服务)的策略规则
- 向 INPUT 规则链中添加拒绝所有主机访问本机 1000~1024 端口的策略规则
- 使得命令再服务器重启后还能生效
firewalld
firewalld 默认的9个区域
区域 | 默认规则策略 |
---|---|
public | 拒绝流入的流量,除非与流出的流量相关;而如果流量与ssh、dhcpv6-client服务相关,则允许流量 |
trusted | 允许所有的数据包流入与流出 |
block | 拒绝流入的流量,除非与流出的流量相关 |
drop | 拒绝流入的流量,除非与流出的流量相关 |
home | 拒绝流入的流量,除非与流出的流量相关;而如果流量与ssh、mdns、ipp-client、amba-client与dhcpv6-client服务相关,则允许流量 |
internal | 等同于home区域 |
work | 拒绝流入的流量,除非与流出的流量数相关;而如果流量与ssh、ipp-client与dhcpv6-client服务相关,则允许流量 |
external | 拒绝流入的流量,除非与流出的流量相关;而如果流量与ssh服务相关,则允许流量 |
dmz | 拒绝流入的流量,除非与流出的流量相关;而如果流量与ssh服务相关,则允许流量 |
firewalld 匹配原则:
一个数据包分为3个部分
源ip地址 目的ip地址 数据
查看数据包源ip ,查询所有区域规则 ,在哪一个区域有源ip规则,就会进哪个区域,不符合 就进入 默认public
查看默认区域:
firewall-cmd --get-default
firewall 命令参数
参数 | 作用 |
---|---|
zone区域相关指令 | |
—get-default-zone | 查询默认的区域名称 |
—set-default-zone=<区域名称> | 设置默认的区域,使其永久生效 |
—get-active-zones | 显示当前正在使用的区域与网卡名称 |
—get-zones | 显示总共可用的区域 |
—new-zone= | 新增区域 |
—delete-zone= | 删除区域 |
services服务相关指令 | |
—get-services | 显示预先定义的服务 |
—add-service=<服务名> | 设置默认区域允许该服务的流量 |
—remove-service=<服务名> | 设置默认区域不再允许该服务的流量 |
—list-services | 显示默认区域允许的服务 |
Port端口相关指令 | |
—add-port=<端口号/协议> | 设置默认区域允许该端口的流量 |
—remove-port=<端口号/协议> | 设置默认区域不再允许该端口的流量 |
—list-port | 显示默认区域允许的端口 |
Interface网卡相关指令 | |
—get-zone-of-interface=<网卡名称> | 查看接口在哪个区域 |
—add-interface=<网卡名称> | 将源自该网卡的所有流量都导向某个指定区域 |
—remove-interface=<网卡名称> | 删除接口 |
—change-interface=<网卡名称> | 将接口与区域进行关联 |
地址源相关命令 | |
—add-source= | 添加来源地址 |
—remove-source= | 移除来源地址 |
其他相关指令 | |
—list-all | 显示当前区域的网卡配置参数、资源、端口以及服务等信息 |
—reload | 让”永久生效”的配置规则立即生效,并覆盖当前的配置规则 |
—panic-on | 阻断一切网络连接 |
—panic-off | 恢复网络连接 |
firewalld 工作常用的命令
启动
systemctl start firewalld
重启
systemctl restart firewalld
关闭
systemctl stop firewalld
查看版本
firewal-cmd --version
查看帮助
firewal-cmd --help
查看打开的端口
firewall-cmd --list-ports
更新防火墙规则
firewall-cmd --reload
添加端口
firewall-cmd --add-port=80/tcp
删除端口
firewall-cmd --remove-port=80/tcp
禁用外部链接
firewall-cmd --zone=block --change-source=0.0.0.0/0
检查当前配置
firewall-cmd --list-all-zones
批量添加端口
firewall-cmd --add-port=80-89/tcp --permanent
删除端口
firewall-cmd --zone=public --remove-port=80/tcp --permanent
查看打开的端口
firewall-cmd --list-ports
拉黑异常ip
firewall-cmd --add-rich-rule="rule family=ipv4 source address=192.168.1.7 reject" --permanent
删除拉黑ip
firewall-cmd --remove-rich-rule="rule family=ipv4 source address=192.168.1.7 reject" --permanent
查看拉黑ip 名单
firewall-cmd --list-rich-rules
端口转发
firewall-cmd --permanent --zone=public --add-forward-port=port=3000:proto=tcp:toaddr=192.168.1.101:toport=85
port=port=3000 对外端口
192.168.1.101 数据层内网ip
toport=85 转发的端口
实战案例
firewall 查看默认zone
firewall-cmd --get-default
修改默认zone
firewall-cmd --set-default-zone=work
把apache服务 加到work zone
firewall-cmd --add-service=http --zone=work
把apache服务 加到work zone 永久生效
firewall-cmd --add-service=ftp --zone=work --permanent
删除防火墙添加的服务规则
firewall-cmd --remove-service=ftp --zone=work --permanent
添加端口 放行端口:
firewall-cmd --add-port=80/tcp
永久生效 添加端口
firewall-cmd --add-port=80/tcp --permanent
查看放行端口列表
firewall-cmd --zone=public --list-ports
删除端口:
firewall-cmd --remove-port=80/tcp --permanent
重载配置
firewall-cmd --reload
批量添加批量端口放行:
firewall-cmd --add-port=80-89/tcp --permanent
拉黑异常ip
firewall-cmd --add-rich-rule="rule family=ipv4 source address=192.168.1.7 reject" --permanent
删除拉黑ip:
firewall-cmd --remove-rich-rule="rule family=ipv4 source address=192.168.1.7 reject" --permanent
查看拉黑ip 名单:
firewall-cmd --list-rich-rules
使用shell 自动化完成 拉黑ip
#!/bin/bash
est=$(netstat -an|grep EST|awk '{print $5}'|awk -F ":" '{print $1}'|sort|uniq -c| sort -nr|awk '{if($1>80) print $2}')
for i in $est
do
firewall-cmd --add-rich-rule="rule family=ipv4 source address=$i reject" --permanent
echo "********************************拉黑异常ip:$i*********************"
done
实现3000端口流量转发到85端口
firewall-cmd --permanent --zone=public --add-forward-port=port=对外端口:proto=tcp:toaddr=数据层内网ip:toport=数据
iptables
查看已有的防火墙规则链
iptables -L
清空已有的防火墙规则链
iptables -F
把 INPUT 规则链的默认策略设置为拒绝
iptables -P INPUT DROP
向 INPUT 链中添加允许 ICMP 流量进入的策略规则
iptables -I INPUT -p icmp -j ACCEPT
删除 INPUT 规则链中刚刚加入的那条策略
iptables -D INPUT 1
把默认策略设置为允许
iptables -P INPUT ACCEPT
将 INPUT 规则链设置为只允许指定网段的主机访问本机的 22 端口,拒绝来自其他所有主机的流量
iptables -I INPUT -s 192.168.10.0/24 -p tcp --dport 22 -j ACCEPT iptables -A INPUT -p tcp --dport 22 -j REJECT
向 INPUT 规则链中添加拒绝所有人访问本机 12345 端口的策略规则
iptables -I INPUT -p tcp --dport 12345 -j REJECT
iptables -I INPUT -p udp --dport 12345 -j REJECT
向 INPUT 规则链中添加拒绝 192.168.10.5 主机访问本机 80 端口(Web 服务)的策略规则
iptables -I INPUT -p tcp -s 192.168.10.5 --dport 80 -j REJECT
向 INPUT 规则链中添加拒绝所有主机访问本机 1000~1024 端口的策略规则
iptables -A INPUT -p tcp --dport 1000:1024 -j REJECT
iptables -A INPUT -p udp --dport 1000:1024 -j REJECT
使得命令再服务器重启后还能生效
service iptables save