文章参考于:
Centos7安装防火墙firewall
https://www.cnblogs.com/anxminise/p/9650104.html
防火墙(firewalld与iptables)
https://blog.csdn.net/weixin_40658000/article/details/78708375
CentOS7 防火墙(firewall)的操作命令
https://www.cnblogs.com/leoxuan/p/8275343.html
https://blog.csdn.net/wangleiqqaaaaa/article/details/103408656
特此感谢!
环境
系统:centos7.2
[root@VM-0-11-centos logs]# cat /etc/redhat-release
CentOS Linux release 7.2.1511 (Core)
防火墙策略
3.1 firewall与iptables
在centos7之前的系统使用的防火墙策略为iptables,从centos7之后的系统使用的是firewall命令动态管理iptables,底层也是用的iptables。而firewall和iptables的命令也是有很大区别的。当然centos7也可以使用iptables作为防火墙。
3.2 防火墙开启、关闭、状态查看
首先,输入命令确认自己的系统版本
$ cat /etc/redhat-release
可以查看到系统版本为Centos7.5版本,一般centos7都是默认安装firewall防火墙的,如需写在安装请使用yum命令安装与卸载,本文不做单独讲解。
查看防火墙状态(此命令与文章之后的命令为centos7系统的firewall命令,并不适用与centos7以下的系统)
$ systemctl status firewalld.service
或者使用firewall命令查看
$ firewall-cmd --state
running表示防火墙开启,not running标识防火墙关闭
启动防火墙命令
$ systemctl start firewalld.service
关闭防火墙命令
$ systemctl stop firewalld.service
重启防火墙命令
$ systemctl restart firewalld.service
设置开机启动命令
$ systemctl enable firewalld.service
禁止开机启动命令
$ systemctl disable firewalld.service
查看是否开机启动命令
$ systemctl is-enabled firewalld.service
3.3 防火墙添加策略
再添加防火墙策略前先确保防火墙为开启状态,然后执行命令。目前只介绍几种常见防火墙策略命令,如有特殊需求的请自行百度,此文章会在以后工作中遇到新需求后持续更新。
1.允许指定ip访问指定端口号
$ firewall-cmd --permanent --add-rich-rule=“rule family=“ipv4” source address=”" port protocol="" port="" accept"
例子:
$ firewall-cmd --permanent --add-rich-rule=“rule family=“ipv4” source address=“10.92.183.44” port protocol=“tcp” port=“22” accept” #允许10.92.183.44 访问22端口
2.允许指定ip段访问指定端口号
$ firewall-cmd --permanent --add-rich-rule=“rule family=“ipv4” source address=“10.92.183.0/24” port protocol=“tcp” port=“22” accept” #允许10.92.183.0网段 访问22端口
3.允许指定ip段访问指定端口段
$ firewall-cmd --permanent --add-rich-rule=“rule family=“ipv4” source address=“10.92.183.0/24” port protocol=“tcp” port=“7000-9100” accept” #允许10.92.183.0网段 访问7000-9100端口
参数解读 –permanent
在执行命令时,如果没有带 --permanent 参数表示配置立即生效,但是不会对该配置进行存储,相当于重启服务器就会丢失。如果带上则会将配置存储到配置文件,,但是这种仅仅是将配置存储到文件,却并不会实时生效,需要执行 firewall-cmd --reload 命令重载配置才会生效。
使用–permanent 参数后需重启防火墙策略才会生效
$ firewall-cmd --reload
查看防火墙策略
$ firewall-cmd --list-all
应急命令
firewall-cmd --panic-on # 拒绝所有流量,远程连接会立即断开,只有本地能登陆
firewall-cmd --panic-off # 取消应急模式,但需要重启firewalld后才可以远程ssh
firewall-cmd --query-panic # 查看是否为应急模式
服务
firewall-cmd --add-service=<service name> #添加服务
firewall-cmd --remove-service=<service name> #移除服务
端口
firewall-cmd --add-port=<port>/<protocol> #添加端口/协议(TCP/UDP)
firewall-cmd --remove-port=<port>/<protocol> #移除端口/协议(TCP/UDP)
firewall-cmd --list-ports #查看开放的端口
协议
firewall-cmd --add-protocol=<protocol> # 允许协议 (例:icmp,即允许ping)
firewall-cmd --remove-protocol=<protocol> # 取消协议
firewall-cmd --list-protocols # 查看允许的协议
允许指定ip的所有流量
firewall-cmd --add-rich-rule="rule family="ipv4" source address="<ip>" accept"
例如:
firewall-cmd --add-rich-rule="rule family="ipv4" source address="192.168.2.208" protocol value="icmp" accept" # 允许192.168.2.208主机的icmp协议,即允许192.168.2.208主机ping
允许指定ip访问指定服务
firewall-cmd --add-rich-rule="rule family="ipv4" source address="<ip>" service name="<service name>" accept"
例如
firewall-cmd --add-rich-rule="rule family="ipv4" source address="192.168.2.208" service name="ssh" accept" # 允许192.168.2.208主机访问ssh服务
允许指定ip访问指定端口
firewall-cmd --add-rich-rule="rule family="ipv4" source address="<ip>" port protocol="<port protocol>" port="<port>" accept"
例
firewall-cmd --add-rich-rule="rule family="ipv4" source address="192.168.2.1" port protocol="tcp" port="22" accept" # 允许192.168.2.1主机访问22端口
将指定ip改为网段
8-11 的各个命令都支持 source address 设置为网段,即这个网段的ip都是适配这个规则:
例如:
firewall-cmd --zone=drop --add-rich-rule=“rule family=“ipv4” source address=“192.168.2.0/24” port protocol=“tcp” port=“22” accept”
表示允许192.168.2.0/24网段的主机访问22端口 。
禁止指定ip/网段
8-12 各个命令中,将 accept 设置为 reject表示拒绝,设置为 drop表示直接丢弃(会返回timeout连接超时)
例如:
firewall-cmd --zone=drop --add-rich-rule=“rule family=“ipv4” source address=“192.168.2.0/24” port protocol=“tcp” port=“22” reject”
表示禁止192.168.2.0/24网段的主机访问22端口 。
CentOS7默认的防火墙不是iptables,而是firewalle.
安装iptable iptable-service
#先检查是否安装了iptables
service iptables status
#安装iptables
yum install -y iptables
#升级iptables
yum update iptables
#安装iptables-services
yum install iptables-services
当前iptables的配置情况
iptables -L -n
清除默认的防火墙规则
#首先要在清楚前将policy INPUT改成ACCEPT,表示接受一切请求
#这个一定要做
iptables -P INPUT ACCEPT
#清空默认所有规则
iptables -F
#清空自定义的所有规则
iptables -X
#计数器置为0
iptables -Z
配置防火墙规则
#允许来自于lo接口的数据包
#若没有此规则,你将不能通过127.0.0.1访问本地服务,例ping 127.0.0.1
iptables -A INPUT -i lo -j ACCEPT
#ssh端口22
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
#允许icmp包通过,–允许ping
iptables -A INPUT -p icmp -m icmp --icmp-type 8 -j ACCEPT
#允许所有对外请求的返回包
#本机对外请求相当于OUTPUT,对于返回包相当于INPUT
iptables -A INPUT -m state --state ESTABLISHED -j ACCEPT
#允许接受本机请求之后的返回数据 RELATED,是为FTP设置的
iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
#其他入站一律丢弃
iptables -P INPUT DROP
#所有出站一律绿灯
iptables -P OUTPUT ACCEPT
#所有转发一律丢弃
iptables -P FORWARD DROP
#添加内网IP信任
iptables -A INPUT -p tcp -s 172.10.10.2 -j ACCEPT
#过滤所有非以上规则的请求
iptables -P INPUT DROP
#封停一个IP
iptables -I INPUT -s 88.88.88.88 -j DROP
#解封一个IP
iptables -D INPUT -s 88.88.88.88 -j DROP
解决vsftpd在iptables开启后,无法使用被动模式的问题
1.首先在/etc/sysconfig/iptables-config中修改或者添加以下内容
#最新系统可能需要加载一下ftp模块
modprobe ip_conntrack_ftp
modprobe ip_nat_ftp
#添加以下内容,注意顺序不能调换
IPTABLES_MODULES="ip_conntrack_ftp"
IPTABLES_MODULES="ip_nat_ftp"
2.重新设置iptables设置
iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
修改端口/etc/sysconfig/iptables
设定预设规则
-- 请求接入包丢弃
[root@home ~]# iptables -p INPUT DROP
-- 接受响应数据包
[root@home ~]# iptables -p OUTPUT ACCEPT
-- 转发数据包丢弃
[root@home ~]# iptables -p FORWARD DROP
添加防火墙规则
首先添加INPUT链,INPUT链的默认规则是DROP,所以我们就写需要ACCETP(通过)的链。
开启SSH服务端口
[root@tp ~]# iptables -A INPUT -p tcp --dport 22 -j ACCEPT
[root@tp ~]# iptables -A OUTPUT -p tcp --sport 22 -j ACCEPT
注:如果在预设设置把OUTPUT设置成DROP策略的话,就需要设置OUTPUT规则,否则无法进行SSH连接。
[root@localhost ~]# cp -ra /etc/sysconfig/iptables /etc/sysconfig/iptables.`date +%F`
[root@localhost ~]# iptables -P INPUT ACCEPT
[root@localhost ~]# iptables -F
[root@localhost ~]# iptables -X
[root@localhost ~]# iptables -Z
[root@localhost ~]# iptables -A INPUT -i lo -j ACCEPT
[root@localhost ~]# iptables -A INPUT -p tcp --dport 22 -j ACCEPT
[root@localhost ~]# iptables -A INPUT -p icmp -m icmp --icmp-type 8 -j ACCEPT
[root@localhost ~]# iptables -A INPUT -m state --state ESTABLISHED -j ACCEPT
[root@localhost ~]# iptables -P INPUT DROP
[root@localhost ~]# iptables -P OUTPUT ACCEPT
[root@localhost ~]# iptables -P FORWARD DROP
[root@localhost ~]# iptables -A INPUT -p tcp --dport 80 -j ACCEPT
[root@localhost ~]# iptables -A INPUT -p tcp --dport 9998 -j ACCEPT
[root@localhost ~]# iptables -A INPUT -p tcp --dport 1970 -j ACCEPT (根据需要来)
[root@localhost ~]# service iptables save
#######################
#!/bin/sh
iptables -P INPUT ACCEPT
iptables -F
iptables -X
iptables -Z
iptables -A INPUT -i lo -j ACCEPT
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
iptables -A INPUT -p tcp --dport 21 -j ACCEPT
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
iptables -A INPUT -p tcp --dport 443 -j ACCEPT
iptables -A INPUT -p icmp --icmp-type 8 -j ACCEPT
iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -P INPUT DROP
iptables -P OUTPUT ACCEPT
iptables -P FORWARD DROP
service iptables save
systemctl restart iptables.service