Linux 网络配置基础

2021-01-12   


linux 网络配置和 squid 代理缓存

ip地址设置:

systemd-networkdnetworkmanager 都可以用来管理网卡,但一个网卡只能被其一管理。其中 systemd-network 是系统默认的,network-manager 需要安装,可以使用命令 sudo apt install network-manager 安装。

可分别用 networkctlnmcli device 两条命令查看 systemd-networkdnetworkmanager 正在管理的网卡,标记为unmanaged的就是没在管的。

netplan 提供一个统一的配置方法。对于desktop版,一般可以直接通过 networkmanager 自己的方式直接进行设置的。

sudo apt install net-tools # 安装后可以使用 ifconfig
sudo systemctl status systemd-networkd # 系统默认的网络管理
sudo apt install network-manager # 安装后可以使用nmtui可视化界面设置ip信息,在桌面版ubuntu的网络设置中可以看到
nmtui # 设置ip地址
systemctl restart network-manager # 网络服务
或者从这里设置:sudo vim /etc/netplan/01-network-manager-all.yaml

设置静态 ip 地址,修改yaml:

network:
  renderer: NetworkManager # 指定使用networkmanager管理网卡,不指定则默认是networkd:systemd-networkd
  ethernets:
    ens33:
      dhcp4: false
      addresses: [192.168.186.131/24, 192.168.186.130/24] # ip和子网掩码, 多ip
      gateway4: 192.168.186.2 # 网关
      nameservers:
          addresses: [8.8.8.8] # 注意修改为静态ip后必须手动设置dns服务器否则无法访问外网
  version: 2

# 使修改生效
sudo netplan apply # 多ip一般要再重启一下网络服务 systemctl restart network-manager

查看网关方法

route -n
ip a # 查看ip情况

DNS 和网关可以是一致的,特别是不知道详细 DNS 的时候就等于使用路由器获取的服务商DNS地址。

附:netplan

netplan工作原理

从前我们需要根据不同的管理工具编写网络配置,现在 Netplan 将管理工具差异性给屏蔽了,只需按照 Netplan 规范编写 YAML 配置即可生效网络配置。注意网络管理的层次关系,本质上仍然是系统内核在管理网络,所以你也可以直接修改内核网络设置。

不过一般推荐使用 netplan 进行设置,这样在 netplan apply 之后系统的内核会更改网络配置。

防火墙 firewalld 服务:

sudo apt install firewalld # 注意安装之后管理要用这个命令了,服务器安全组是网络层次的防护,而防火墙是系统层次的防护
sudo firewall-cmd --list-ports # 查看开放的端口
sudo firewall-cmd --zone=public --add-port=80/tcp --permanent # 开放80 端口
firewall-cmd --zone=public --add-port=3306/tcp --permanent # 数据库
sudo firewall-cmd --reload # 重载防火墙策略
sudo firewall-cmd --zone=public --query-port=80/tcp # 查看80端口是否可访问
sudo firewall-cmd --zone=public --remove-port=80/tcp --permanent # 移除端口
systemctl stop firewalld # 关闭防火墙服务

防火墙 iptables 服务:

netstat -anpt | grep 3128 # 查看端口是否打开
# 允许 tcp 协议通过 eth0 网卡的 80 端口进入服务器
sudo iptables -A INPUT -p tcp -i eth0 --dport 80 -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 80 -j ACCEPT
# 查看目前iptables的规则 
sudo iptables -L -v --line-number
# 删除要删除的规则,这里删除的是第一条规则
sudo iptables -D INPUT 1

上两者用其一即可

squid代理缓存:

apt install squid

squid 默认端口 3128。

# 配置文件主要的结构和重要的需要我们写的东西
acl acl名称 类型(src:来源ip dst:目的地ip port:端口) 具体值 # 相同名称的将叠加
http_access allow/deny acl名称

/etc/squid/squid.conf 配置文件中找到 http_access allow localhost,注释掉,然后增加一条为 http_access allow all,这样所有局域网机器就可以使用代理上网了。

配置代理缓存 squid.conf ,执行顺序是匹配后立即生效,文件的最后一条一般最好是 http_access deny all 表示如果前面没有规则匹配则禁止所有squid连接。

注:配置会引入conf.d 文件夹的配置,所以可以在里面写自己的配置文件 my.conf。

acl localnet src 0.0.0.1-0.255.255.255	# RFC 1122 "this" network (LAN)
acl localnet src 192.168.0.0/16		# RFC 1918 local private network (LAN)
acl localnet src fc00::/7       	# RFC 4193 local private network range
acl localnet src fe80::/10      	# RFC 4291 link-local (directly plugged) machines
acl SSL_ports port 443
acl Safe_ports port 80		# http
acl Safe_ports port 21		# ftp
acl Safe_ports port 443		# https
acl Safe_ports port 70		# gopher
acl Safe_ports port 210		# wais
acl Safe_ports port 777		# multiling http
acl CONNECT method CONNECT
http_access deny !Safe_ports
http_access deny CONNECT !SSL_ports
http_access allow localhost manager
http_access deny manager # 上两句含义是仅允许在本机访问manager规则,不匹配则禁用
include /etc/squid/conf.d/* # 这里文件注释非常长,自己的配置可以放到这个目录中
http_access allow all
http_access deny all
http_port 3128

访问控制例子:

# 禁止访问某个特定网站
acl deny_url url_regex -i www.abc.com # -i 忽略大小写
http_access deny deny_url
# 禁止访问带某些后缀的文件
acl deny_file urlpath_regex -i \.rar$ \.avi$ \.zip$ \.exe$
http_access deny deny_file

贴士:查看文件中所有非注释内容

grep -vE "^#|^$" squid.conf # -E 正则匹配 -v 与匹配相反的

LNMP 架构

nginx和php通信需要FastCGI协议,安装 php7.4-fpm ,默认监听 9000 端口

修改 /etc/nginx/sites-available 配置文件 my.conf:

upstream backend-jenkins {
    server 127.0.0.1:8080;
}

server {
	listen 80 default_server;
	listen [::]:80 default_server;
	# include snippets/snakeoil.conf;
	root /var/www/html;

	server_name www.virtualinux.com;
    return 301 https://$host$request_uri;

}

server {
	listen 443 ssl default_server;
	listen [::]:443 ssl default_server;
	server_name www.virtualinux.com;
	root /var/www/html;
    ssl_certificate "/etc/apache2/ssl/server.crt";
    ssl_certificate_key "/etc/apache2/ssl/server.key";

	location / {
        # proxy_pass http://backend-apache;
        index index.html index.htm index.php; # 网页文件可以是这几种
	}
    # 将php脚本发到FastCGI在127.0.0.1:9000处理
    location ~ \.php$ { # 解析 php 文件的, ~是区分大小的正则匹配
        # fastcgi_pass 127.0.0.1:9000; # 不起作用
        include snippets/fastcgi-php.conf;
        fastcgi_pass unix:/var/run/php/php7.4-fpm.sock; # nginx使用php网页
    }

	location /jenkins {
        proxy_pass http://backend-jenkins;
	}

}

连接数据库时,要和 bind-address 一致 192.168.186.139

zabbix 网络监控

systemctl restart zabbix-agent

https://www.zabbix.com/cn/download?zabbix=5.0&os_distribution=ubuntu&os_version=20.04_focal&db=mysql&ws=nginx

默认端口10051。

/usr/share/zabbix 软链接到 /var/www/html 下。然而发现在/etc/zabbix 下的 nginx.conf 貌似并不起作用。

Q.E.D.


我是星,利剑开刃寒光锋芒的银星,绝不消隐