跳转至

防火墙命令

一、firewalld

1.查看防火墙的状态

Bash
firewall-cmd --state
# 或
systemctl status firewalld

2.启动防火墙

Bash
# 如果不行,可以在firewalld后面加上.service
systemctl start firewalld

3.关闭防火墙

Bash
systemctl stop firewalld

4.永久关闭SElinux

Bash
# 把 SELINUX=enforcing 修改为 SELINUX=disabled
vim /etc/selinux/config

5.开机时禁用防火墙

Bash
systemctl disable firewalld

6.查看已开放的端口

Bash
firewall-cmd --list-ports

7.查询指定端口是否已经开放

Bash
# 也有可能返回firewalld is not running,此时需要打开防火墙在开放端口
firewall-cmd --query-port=3307/tcp   # 返回 yes/no

8.添加指定需要开放的端口

Bash
firewall-cmd --add-port=3307/tcp --permanent
# 或
firewall-cmd --zone=public --add-port=80/tcp --permanent

9.移除指定端口

Bash
firewall-cmd --permanent --remove-port=8848/tcp

10.重启防火墙

Bash
firewall-cmd --reload

11.查看服务名称

firewalld 中的服务名称基于 服务的名称定义,而不是操作系统中的具体进程名称。

查看所有服务名称:

Bash
firewall-cmd --get-services

查看允许的服务:

Bash
firewall-cmd --list-services

查看指定的服务名称:

Bash
firewall-cmd --info-service=http

二、iptables

1.显示所有规则详细信息

Bash
iptables -nvL

-L:列出链chain上面的所有规则,如果没有指定链,列出表上所有链的所有规则。

-v:显示执行过程详细信息。

2.显示所有规则详细信息及规则号

Bash
iptables -nvL --line-number

--line-number:显示出规则号。

3.允许(拒绝)某个内网ip访问服务器所有服务端口

3.1 将规则放到最后面

Bash
iptables -A INPUT -s 10.18.88.135 -j ACCEPT/REJECT

-A:在规则链的末尾加入新规则。

-s:匹配来源地址IP/MASK。

-j:执行的动作目标。

3.2 将规则放到最前面

Bash
iptables -I INPUT -s 10.18.88.135 -j ACCEPT/REJECT

3.3 将规则放到指定的规则号(如5)前面

Bash
iptables -I INPUT 5 -s 10.18.88.135 -j ACCEPT/REJECT

3.4 允许(拒绝)某个内网ip访问服务器的某个端口(如远程端口22)

Bash
iptables -A INPUT -s 10.18.88.135 -p tcp --dport 22 -j ACCEPT/REJECT

-p:指定要匹配数据报的协议类型。

--dport:匹配目标端口号。

3.5 删除指定的规则号(如5)

Bash
iptables -D INPUT 5

3.6 清空指定链INPUT上面的所有规则

Bash
iptables -F INPUT

3.7 删除指定链INPUT

该链必须没有被其它任何规则引用,而且这条上必须没有任何规则:

Bash
iptables -X INPUT

4.示例

以下示例都是直接将命令写到 /etc/sysconfig/iptables 配置文件中。

4.1 示例一

只允许服务器 IP 地址 172.18.0.95 访问PG数据库 172.18.0.30

Bash
-A INPUT -s 172.18.0.95 -p tcp -m state --state NEW -m tcp --dport 5432 -j ACCEPT

参数解释:

  • -A INPUT:这个选项表示规则被添加到 INPUT 链中,INPUT 链用于处理进入本地机器的数据包。
  • -s 172.18.0.95:指定规则仅适用于来源 IP 地址为 172.18.0.95 的数据包。
  • -p tcp:指定该规则适用于 TCP 协议的数据包。
  • -m state --state NEW:这表示规则仅匹配新建连接的请求。NEW 表示连接是新的,而不是与现有连接的状态相关的数据包。
  • -m tcp --dport 5432:这指定规则只适用于目标端口为 5432 的 TCP 数据包,5432 是 PostgreSQL 默认的端口号。
  • -j ACCEPT:这表示匹配该规则的数据包将被接受并允许通过防火墙。

4.2 示例二

允许服务器 IP 地址 172.18.0.36 访问本机任意端口:

Bash
-A INPUT -s 172.18.0.36/32 -j ACCEPT

4.3 示例三

禁止任何 IP 访问本机:

Bash
-A INPUT -j REJECT --reject-with icmp-host-prohibited

参数解释:

  • --reject-with icmp-host-prohibited:这指定了拒绝时返回的 ICMP 错误类型。在这个规则中,icmp-host-prohibited 表示当数据包被拒绝时,系统会发送一个 ICMP host-prohibited 错误消息,告知发送方目标主机不可达。

4.4 示例四

禁止任何 IP 经过本机转发流量:

Bash
-A FORWARD -j REJECT --reject-with icmp-host-prohibited

参数解释:

  • -A FORWARD:这表示规则被添加到 FORWARD 链。FORWARD 链负责处理 经过本地机器转发的流量。即,当数据包不是要发送到本机,而是从一个网络接口转发到另一个接口时,FORWARD 链会处理这些数据包。