linux 网络配置和 squid 代理缓存
ip地址设置:
systemd-networkd
和 networkmanager
都可以用来管理网卡,但一个网卡只能被其一管理。其中 systemd-network
是系统默认的,network-manager
需要安装,可以使用命令 sudo apt install network-manager
安装。
可分别用 networkctl
和 nmcli device
两条命令查看 systemd-networkd
和 networkmanager
正在管理的网卡,标记为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
规范编写 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
默认端口10051。
把 /usr/share/zabbix
软链接到 /var/www/html
下。然而发现在/etc/zabbix
下的 nginx.conf
貌似并不起作用。
Q.E.D.