Appleex
Appleex
Published on 2023-02-13 / 140 Visits
1
0

运维 | 最全防火墙设置

最全防火墙设置

前言

本篇文章主要记录一些防火墙常用设置(持续更新中)

CentOS 防火墙相关

CentOS 中防火墙程序主要是 firewall 和 iptables,CentOS7 中 firewall 服务已经默认安装好了,而 iptables 服务需要自己用 yum install iptabes-services 来安装。

firewall

查看防火墙状态

systemctl status firewalld
# 或
systemctl status firewalld.service

防火墙运行状态

firewall-cmd --state

查看端口开放情况

查询端口开放列表

firewall-cmd --zone=public --list-ports
# 或
netstat -ntlp    # 此命令若无法运行请先安装:yum install net-tools -y

查询指定端口是否已开

firewall-cmd --query-port=端口号/tcp
# 提示yes表示开启,no表示未开启

查看防火墙规则

firewall-cmd --zone=public --list-all

开启防火墙

systemctl start firewalld 
# 或
systemctl start firewalld.service 

若遇到无法开启,可以执行

systemctl unmask firewalld.service 
systemctl start firewalld.service

关闭防火墙

临时停止防火墙:

systemctl stop firewalld
# 或
systemctl stop firewalld.service

永久关闭防火墙:

systemctl disable firewalld.service

重启防火墙

systemctl restart firewalld.service

禁止开机启动

systemctl disable firewalld.service

开启开机启动

systemctl enable firewalld.service

开放或关闭指定端口

--zone=public:表示作用域为公共
--permanent:表示永久生效

开放端口

firewall-cmd --zone=public --add-port=端口号/tcp --permanent

重载入添加的端口

firewall-cmd --reload

查询指定端口是否开启成功

firewall-cmd --query-port=端口号/tcp

移除指定端口

firewall-cmd --permanent --remove-port=端口号/tcp

查看指定端口是否被占用

lsof -i tcp:6666    # 查看所有6666端口使用情况
# 或
netstat -ntulp | grep 6666   #查看所有6666端口使用情况,此命令也可以查出占用端口的进程

查看&关闭占用进程

查看进程详细信息:

ps 11111  # 11111为进程的PID

杀掉进程:

kill -9 11111

查询已开放的端口

netstat -anp

查看服务是否开机启动

systemctl is-enabled firewalld.service

查看已启动的服务列表

systemctl list-unit-files | grep enabled

查看启动失败的服务列表

systemctl --failed

示例说明

firewall-cmd --permanent --zone=public --add-rich-rule='rule family="ipv4" source address="192.168.0.4/24" service name="http" accept'    
firewall-cmd --permanent --zone=public --remove-rich-rule='rule family="ipv4" source address="192.168.0.4/24" service name="http" accept' 
firewall-cmd --permanent --add-rich-rule 'rule family=ipv4 source address=192.168.0.1/2 port port=80 protocol=tcp accept'     
firewall-cmd --permanent --remove-rich-rule 'rule family=ipv4 source address=192.168.0.1/2 port port=80 protocol=tcp accept'     

firewall-cmd --query-masquerade  # 检查是否允许伪装IP
firewall-cmd --add-masquerade    # 允许防火墙伪装IP
firewall-cmd --remove-masquerade # 禁止防火墙伪装IP

firewall-cmd --add-forward-port=port=80:proto=tcp:toport=8080   # 将80端口的流量转发至8080
firewall-cmd --add-forward-port=proto=80:proto=tcp:toaddr=192.168.1.0.1 # 将80端口的流量转发至192.168.0.1
firewall-cmd --add-forward-port=proto=80:proto=tcp:toaddr=192.168.0.1:toport=8080 # 将80端口的流量转发至192.168.0.1的8080端口

iptables

centos7 以下版本使用

安装

检查 yum 更新

yum check update

然后执行

yum install iptables-services

初始化配置

systemctl enable iptables

启动服务

systemctl start iptables
# 或
systemctl start iptables.service

查看状态

service iptables status
# 或
systemctl status iptables.service

查看打开的端口

/etc/init.d/iptables status

开放指定端口

/sbin/iptables -I INPUT -p tcp --dport 端口号 -j ACCEPT

# 保存
/etc/rc.d/init.d/iptables save

查看或编辑配置添加指定端口

查看或编辑配置文件内容

vi /etc/sysconfig/iptables

文件内容示例 (仅参考)

*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 3306 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 443 -j ACCEPT
-A INPUT -j REJECT --reject-with icmp-host-prohibited
-A FORWARD -j REJECT --reject-with icmp-host-prohibited

可以看到已经开放的端口,如果需要添加指定端口,可按照示例继续往下添加

重启防火墙

systemctl restart iptables.service
systemctl enable iptables.service

关闭防火墙

  • 即时生效,重启后复原
# 开启防火墙
service iptables start
# 关闭防火墙
service iptables stop

#或
systemctl stop iptables.service
  • 永久性生效,重启后不会复原
# 开启防火墙
chkconfig iptables on
# 关闭防火墙
chkconfig iptables off
# 检查防火墙
chkconfig --list | grep iptablesiptables       0:off1:off2:on3:on4:on5:on6:off # 由此可见:2/3/4/5都是开机启动,数字代表runlevel等级

Debian&Ubuntu 防火墙相关

有两种防火墙,可自由选择,当然在后面的命令中需要选择对应的命令方可执行,一般系统会自带 ufwiptables 可能需要安装,自己可以先试

iptables

安装

apt-get update
apt-get install iptables-persistent

开启防火墙

service iptables start

放行指定端口

iptables -A INPUT -p tcp --dport 端口号 -j ACCEPT

重启防火墙

service iptables restart

查看防火墙现有规则

iptables -L -n -v

查看所有端口号

netstat -ntlp	# 此命令如果无法运行请先安装:apt-get install net-tools -y

查看指定端口是否被占用

lsof -i tcp:6666    # 查看所有6666端口使用情况
# 或
netstat -ntulp |grep 6666   # 查看所有6666端口使用情况,此命令也可以查出占用端口的进程

查看&关闭占用进程

kill -9 [PID]

禁止开机启动

service iptables stop

开启开机启动

service iptables save

查看防火墙状态

service iptables status

关闭防火墙

service iptables stop

ufw

安装

apt-get update
apt-get install ufw

开启防火墙

ufw enable

放行指定端口

放行 tcp 或者 udp 端口:

ufw allow 端口号/tcp

放行 tcp 与 udp 端口:

ufw allow 端口号

删除指定端口:

ufw delete allow 端口号

重启防火墙

ufw reload

查看防火墙现有规则

ufw status

查看刚添加的规则:

ufw show added

查看所有端口号

netstat -ntlp    # 此命令如果无法运行请先安装:apt-get install net-tools -y

查看指定端口是否被占用

lsof -i tcp:6666    #查看所有6666端口使用情况

# 或
netstat -ntulp |grep 6666   #查看所有6666端口使用情况,此命令也可以查出占用端口的进程

查看&关闭占用进程

kill -9 PID

禁止开机启动

ufw disable

开启开机启动

ufw enable

查看防火墙状态

ufw status verbose

关闭防火墙

ufw disable

重置防火墙配置

ufw reset

参考文献


Comment