【Linux】网络连接失败/ 防火墙配置/ iptables配置

本文介绍Linux系统中firewalld与iptables防火墙的基本操作命令,并详细解析PostgreSQL数据库的配置方法,包括如何开放端口、修改监听地址、设置认证方法等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

防火墙分类:常用的linux系统防火墙有firewall 和 iptables 

(CentOS7)

1、防火墙 firewalld:

(1)设置开机启用防火墙:systemctl enable firewalld.service

(2)设置开机禁用防火墙:systemctl disable firewalld.service

(3)启动防火墙:systemctl start firewalld

(4)关闭防火墙:systemctl stop firewalld

(5)检查防火墙状态:systemctl status firewalld 

举例查看防火墙状态:

2.确定linux服务器是否可以访问外网:

2.1 ping www.baidu.com 

  解释:ping用来检查网络是否通畅或者网络连接速度的命令;但是绝对存在能ping通,但是上不了外网的情况

2.2 curl www.baidu.com -v

 解释:此处是测试服务器对服务器的通路,如果访问百度能顺利返回200,说明和外网是通畅的,通常我们程序所依赖的外网环境都是需要curl命令去测试的。首要前提就是curl能够接通百度,排除网络问题引起的访问异常。

3、设置 iptables 防火墙

1)Linux防火墙开放端口

iptables是linux下的防火墙,同时也是服务名称。

service  iptables  status        查看防火墙状态
service  iptables  start           开启防火墙
service  iptables  stop           关闭防火墙
service  iptables  restart        重启防火墙

2)防火墙开放特定端口:

①文件 /etc/sysconfig/iptables    

②添加:
     -A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 8080 -j ACCEPT

        // 数字8080代表开放8080端口,也可以改成其他的端口

③重启防火墙

3)保存对防火墙的设置

serivce iptables save

4)查看iptables规则及编号

iptables -nL --line-number

5)关闭所有的INPUT FORWARD(转发) OUTPUT的所有端口

iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT DROP

6)只打开22端口

iptables -A  INPUT -p tcp --dport 22 -j ACCEPT
iptables -A OUTPUT -p tcp --sport 22 -j ACCEPT

参数讲解:

–A 参数就看成是添加一条规则
–p 指定是什么协议,我们常用的tcp 协议,当然也有udp,例如53端口的DNS
–dport 就是目标端口,当数据从外部进入服务器为目标端口
–sport 数据从服务器出去,则为数据源端口使用 
–j 就是指定是 ACCEPT -接收 或者 DROP 不接收

禁止某个IP访问

iptables -A INPUT -p tcp -s 192.168.1.2 -j DROP
–s 参数是来源(即192.168.1.2)
后面拒绝就是DROP 

删除规则
iptables -D INPUT 2
删除INPUT链编号为2的规则

Linux 防火墙关闭


1、永久生效

开启 :chkconfig iptables on
关闭 :chkconfig iptables off

2、临时生效

开启:service iptables start
关闭:service iptables stop

查看状态:service iptables status


【问题整理】

查看postgresql的配置

查看 PostgreSQL 数据库的配置可以通过几种方式进行,具体取决于你想查看的配置类型(比如是服务器级别的配置、客户端连接配置,还是数据库级别的配置)。以下是一些常用的方法:

1. 使用 SHOW 命令查看运行时配置

在 PostgreSQL 的 psql 命令行工具中,你可以使用 SHOW 命令来查看当前会话或服务器的某些运行时配置。例如,要查看 work_mem 的值,你可以执行:

SHOW work_mem;

要查看所有可以设置的配置及其当前值,你可以查看 postgresql.conf 文件中的配置选项,但请注意,SHOW ALL 命令并不直接存在。不过,你可以通过查询系统目录来获取所有运行时参数和它们的值:

SELECT * FROM pg_settings;

2. 查看 postgresql.conf 文件

postgresql.conf 是 PostgreSQL 的主要配置文件,它包含了数据库服务器的配置参数。这个文件通常位于 PostgreSQL 的数据目录中。你可以直接查看这个文件来了解哪些配置被设置以及它们的值。不过,请注意,postgresql.conf 中的值可能因为服务器运行时的重载(例如使用 ALTER SYSTEM 命令)而有所不同。

3. 使用 ALTER SYSTEM 命令查看和修改配置

从 PostgreSQL 12 开始,ALTER SYSTEM 命令被引入以允许在不重启服务器的情况下更改配置参数。虽然它主要用于修改配置,但你也可以通过查询 pg_settings 视图来间接地查看哪些参数已被设置为“alter system”设置。注意,这并不会直接显示 ALTER SYSTEM 命令的历史,但你可以通过比较 pg_settings 中的 source 列来识别哪些设置是通过 ALTER SYSTEM 设置的。

4. 使用系统视图 pg_settings

如前面所述,pg_settings 视图是查看当前 PostgreSQL 实例配置参数的强大工具。它不仅显示了参数的值,还提供了关于参数来源(如 postgresql.confpostgresql.auto.conf、命令行参数等)的信息。

5. 查看 postgresql.auto.conf 文件

当使用 ALTER SYSTEM 命令更改配置时,这些更改会被记录在 postgresql.auto.conf 文件中,该文件也位于 PostgreSQL 的数据目录中。这个文件主要用于存储动态更改的配置参数,以便在不编辑 postgresql.conf 的情况下应用这些更改。

结论

查看 PostgreSQL 的配置通常涉及检查 postgresql.conf 文件和/或使用 pg_settings 视图来查询当前的配置参数和它们的值。如果你正在使用 PostgreSQL 12 或更高版本,并希望在不重启服务器的情况下更改配置,那么 ALTER SYSTEM 命令和 postgresql.auto.conf 文件也是值得关注的。

 


如何删除iptables规则?

删除iptables规则的具体方法取决于你想要删除的规则类型以及你的具体需求。以下是一些常见的删除iptables规则的方法:

一、删除单个规则

  1. 使用规则编号
    • 首先,你需要查看当前的iptables规则,并找到你想要删除的规则的编号。可以使用以下命令并添加--line-numbers选项来显示规则的编号:
      sudo iptables -L --line-numbers
    • 然后,使用iptables -D命令加上链名和规则编号来删除规则。例如,如果你想要删除INPUT链中的第2条规则,可以使用:
      sudo iptables -D INPUT 2
  2. 使用规则的具体内容
    • 这种方法通常不太常用,因为需要精确匹配规则的所有部分,包括协议、源地址、目标地址、端口号等。在实践中,这种方法可能会比较复杂和容易出错。

二、删除指定链中的所有规则

如果你想要删除某个链中的所有规则,可以使用iptables -F命令加上链名。例如,要删除INPUT链中的所有规则,可以使用:

sudo iptables -F INPUT

这个命令会清空INPUT链中的所有规则,但不会影响其他链的规则。

三、删除自定义链及其规则

如果你的规则是在自定义链中定义的,你需要首先删除自定义链中的所有规则,然后才能删除自定义链本身。删除自定义链中所有规则的方法与删除内置链中规则的方法相同,即使用iptables -F命令。删除自定义链本身则使用iptables -X命令加上链名。例如:

sudo iptables -F MY_CUSTOM_CHAIN
sudo iptables -X MY_CUSTOM_CHAIN

这里MY_CUSTOM_CHAIN是自定义链的名称。

四、保存iptables规则

在删除iptables规则后,你可能需要保存修改后的规则,以防止重启服务器后规则被重置。保存iptables规则的方法取决于你的Linux发行版。在一些系统中,你可以使用iptables-save命令将当前的iptables规则保存到文件中,然后在系统启动时自动加载这些规则。例如:

sudo iptables-save > /etc/sysconfig/iptables

但是,请注意,/etc/sysconfig/iptables这个文件路径可能因发行版而异。在一些系统中,你可能需要将规则保存到其他文件或使用其他工具来管理iptables规则。

五、注意事项

  • 执行iptables命令需要root权限或sudo权限。
  • 在删除iptables规则之前,请务必确保你了解这些规则的作用,并确认删除这些规则不会对你的系统安全或网络功能造成不利影响。
  • 如果你不确定要删除哪些规则,可以先使用iptables -L命令查看当前的规则列表,并仔细分析每条规则的作用。
  • iptables规则默认是临时的,重启系统后可能会丢失。因此,在删除或修改iptables规则后,请务必保存规则并确保它们能够在系统重启后自动加载。

服务器的postgresql在本地访问不了,有哪些配置原因?需要怎么修改?

如果PostgreSQL数据库服务器在本地(假设是指服务器本地网络或同一台机器上)无法访问,可能有几个配置原因导致这种情况。以下是一些常见的配置问题及相应的修改方法:

  1. 监听地址(listen_addresses)
    PostgreSQL默认可能只监听本地连接(localhost或127.0.0.1)。要允许远程连接,你需要修改postgresql.conf文件中的listen_addresses参数。将其设置为'*'来允许从任何地址的连接,或者指定具体的IP地址。

    修改文件(通常位于/etc/postgresql/<version>/main//var/lib/pgsql/<version>/data/目录下):

    listen_addresses = '*'

    修改后需要重启PostgreSQL服务使更改生效。

  2. 认证方法(pg_hba.conf)
    确保pg_hba.conf文件中的认证配置允许从你的IP地址或网络连接到数据库。你需要添加或修改一行,指定连接类型(如host)、数据库、用户、IP地址/CIDR和认证方法(如md5)。

    例如,允许所有用户从任何IP地址使用md5认证连接到所有数据库:

    host all all 0.0.0.0/0 md5

    或者,如果你只想允许特定IP地址或网络段:

    host all all 192.168.1.0/24 md5

    修改后同样需要重启PostgreSQL服务。

  3. 防火墙设置
    确保服务器的防火墙设置允许PostgreSQL使用的端口(默认是5432)的入站连接。你可能需要在防火墙配置中添加一条规则来允许这个端口的连接。

    例如,在使用ufw(Uncomplicated Firewall)的Ubuntu系统上,你可以添加如下规则:

    sudo ufw allow 5432/tcp

    iptables上,你可能需要添加类似这样的规则:

    sudo iptables -A INPUT -p tcp --dport 5432 -j ACCEPT
  4. SELinux或AppArmor配置
    如果你的服务器启用了SELinux(Security-Enhanced Linux)或AppArmor,确保它们的策略允许PostgreSQL接受网络连接。这可能需要调整或更新相关的策略文件。

  5. 网络问题
    确保没有网络问题阻止你的连接请求到达PostgreSQL服务器。检查网络配置、路由表和DNS设置。

  6. 服务未运行
    确保PostgreSQL服务正在运行。你可以使用systemctl status postgresql(或你的具体服务名称)来检查服务状态。

  7. 客户端配置
    确保你的数据库客户端工具或应用配置正确,包括正确的主机名、端口、用户名和密码。

按照这些步骤检查和修改配置后,你应该能够解决PostgreSQL服务器在本地无法访问的问题。如果问题仍然存在,请检查PostgreSQL的日志文件以获取更多信息。


connection to server at "192.168.200.175", port 5432 failed: FATAL: no pg_hba.conf entry for host "192.168.200.175", user "postgres", database "postgres", no encryption

这个错误提示表示 PostgreSQL 数据库服务器在 pg_hba.conf 文件中没有找到允许从 IP 地址 192.168.200.175 连接到数据库 postgres 作为用户 postgres 的条目,并且没有启用加密连接。

解决步骤

  1. 编辑 pg_hba.conf 文件
    • 找到 PostgreSQL 的数据目录,通常可以在 PostgreSQL 的安装文档或启动日志中找到。
    • 在数据目录中,编辑 pg_hba.conf 文件。这个文件控制哪些主机和用户可以连接到数据库服务器。
    • 添加或修改一行以允许从你的 IP 地址连接。例如,如果你想要从任何 IP 地址以密码认证方式连接到数据库,可以添加如下行(注意:出于安全考虑,通常不推荐从任意 IP 允许连接,除非有特定需求):
      host all all 0.0.0.0/0 md5
      或者,如果你只想从特定的 IP 地址(如 192.168.200.175)连接,可以这样设置:
      host postgres postgres 192.168.200.175/32 md5
  2. 配置 SSL/TLS(如果需要)
    • 如果你的环境要求加密连接,你还需要配置 SSL/TLS。这包括生成密钥和证书,并在 postgresql.conf 中启用 SSL。
    • 在 postgresql.conf 文件中,找到并设置以下参数:
      ssl = on
      ssl_cert_file = 'server.crt'
      ssl_key_file = 'server.key'
    • 确保这些文件的路径是正确的,并且 PostgreSQL 服务有权访问它们。
  3. 重新加载或重启 PostgreSQL 服务
    • 修改配置后,你需要重新加载或重启 PostgreSQL 服务以使更改生效。这可以通过操作系统的服务管理工具完成,或者通过 PostgreSQL 提供的命令如 pg_ctl reload 或 systemctl reload postgresql(取决于你的系统和 PostgreSQL 的安装方式)。
  4. 测试连接
    • 使用 psql 或其他数据库客户端工具尝试从 192.168.200.175 连接到 PostgreSQL 服务器,看看问题是否已解决。
  5. 检查防火墙和网络设置
    • 确保没有网络防火墙或安全组规则阻止从你的 IP 地址到 PostgreSQL 服务器端口的连接。

通过以上步骤,你应该能够解决连接失败的问题。如果问题仍然存在,请检查 PostgreSQL 的日志文件以获取更多错误信息。


host all all 172.22.106.144/32 md5 这样配置对吗?

您提供的 pg_hba.conf 配置行:

host all all 172.22.106.144/32 md5

是正确的,用于允许来自 IP 地址 172.22.106.144 的所有用户(all)连接到所有数据库(all),并且要求使用 MD5 加密的密码进行认证。

这里解释一下配置行的各个部分:

  • host:这指定了这是一个针对 TCP/IP 连接的条目。
  • 第一个 all:这表示该规则适用于所有数据库。
  • 第二个 all:这表示该规则适用于所有用户。
  • 172.22.106.144/32:这指定了允许的客户端 IP 地址和子网掩码。由于子网掩码是 /32,这实际上只匹配单个 IP 地址 172.22.106.144
  • md5:这指定了认证方法,即要求客户端在连接时提供密码,并且密码将通过 MD5 加密方式发送到服务器进行验证。

确保在修改 pg_hba.conf 文件后,您已经重新加载了 PostgreSQL 的配置或重启了 PostgreSQL 服务,以使更改生效。这通常可以通过运行以下命令之一来完成(具体取决于您的系统和 PostgreSQL 的安装方式):

# 重新加载配置(推荐,因为它不需要重启服务)
sudo pg_ctl reload -D /path/to/postgresql/data
# 或者,如果您使用的是 systemd
sudo systemctl reload postgresql
# 如果重新加载不起作用,或者您不确定如何操作,可以重启服务
sudo pg_ctl restart -D /path/to/postgresql/data
# 或者,如果您使用的是 systemd
sudo systemctl restart postgresql

请将 /path/to/postgresql/data 替换为您的 PostgreSQL 数据目录的实际路径。

完成这些步骤后,来自 IP 地址 172.22.106.144 的客户端应该能够使用 MD5 加密的密码成功连接到 PostgreSQL 服务器。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值