前言
最近用 Linux 的时候,经常需要操作端口,开放端口、关闭端口等。比如在服务器上开启 Jupyter notebook 服务,但是因为没有开放端口,访问不到,这时就需要开放端口。为了开放端口,一查发现 Linux 上的网络管理工具挺多的,firewall、ufw、iptables、netstat 等等,一时不知道用哪一个。这篇博客记录一下,Linux 上的 ip 和端口相关的管理,以及 ssh 登录白名单等操作。
概述
详细介绍看 [1],下面概述。
iptables: 不同 Linux 发行版上都有的工具,主要使用来控制 ip 和端口的出和入
firewall: CentOS 上才有的,底层是 iptables
ufw: Ubuntu 上才有,底层也是 iptables
netstat: 查看端口进出的状况
网络一般分为进和出,Linux 一般禁用所有出口,开放所有入口。为了让外部的主机可以访问当前的 Linux,需要让当前的 Linux 允许数据流出,即开放出口或者直接关闭防火墙。现在的云服务提供商,比如阿里云,会有一个安全组,允许我们操作端口的出入,不过这一套安全组和 Linux 自带的防火墙是两套东西。为了访问阿里云的服务器,不仅需要设置安全组,还需要设置 Linux 的防火墙。
iptables
下面记录 iptables 的使用,我用的就是这个。firewall 和 ufw 就不记录了,用到的时候查一下。现在只要知道 CentOS 用 firewall,Ubuntu 用 ufw 就行。防火墙作为一项服务,在 CentOS 上如果用 firewall,需要先关闭 iptables 服务。[1]
[2] [4] 对 iptables 做了非常详细的介绍。[5] 侧重讲使用和原理。
广义上的 iptables 实际上是由 netfilter 和 iptables 两个组件组成。而狭义上的 iptables 是指一个命令行工具,用于配置管理信息包的过滤规则。真正起到信息包过滤作用的是 netfilter 组件。
下面记录命令行工具 iptables 的使用,我并非网络管理人员,只是有时候需要打开关闭一下端口而已,所以下面的记录只记录我需要的几条命令。无非就是查看规则,增加和删除规则。复杂功能等有需要再查,就算学了也记不得哈哈。
查看规则
可以看到不同的 chain,不同的 chain 代表数据流动上的一个节点/关卡。我只需要关注 INPUT 和 OUTPUT 就好了。FORWARD 是转发,如果数据包目的不是本机,会进行转发。
sudo iptables -L # 查看所有规则
sudo iptables -t filter -L # 查看 filter 表上的规则
sudo iptables -L INPUT # 查看 INPUT 节点上的规则
sudo iptables -L OUTPUT # 查看 OUTPUT 节点上的规则
sudo iptables --line -vnL # 列举规则,带有统计信息和编号(用于删除)
添加规则
sudo iptables -A INPUT -p tcp --dport 12346 -j ACCEPT
删除规则
sudo iptables -t filter -D INPUT 3
ssh 黑白名单
[3] 有详细介绍。有时候 ssh 访问不了,不是因为端口问题,而是因为 ssh 进行了黑名单配置。
用户黑白名单:在 /etc/ssh/sshd_config
进行配置
IP 黑白名单:在 /etc/hosts.allow
和 /etc/hosts.deny
进行配置。如果冲突,allow 优先。
参考链接
[1] https://blog.csdn.net/xundh/article/details/79160808
[2] https://blog.konghy.cn/2019/07/21/iptables/
[3] https://www.cnblogs.com/xiaochina/p/5920057.html
[4] https://www.zsythink.net/archives/1199
[5] https://www.zsythink.net/archives/1493