Linux网络代理服务器搭建及使用
测试环境
- 代理服务器:centos 7
- 使用代理的客户端:win 10
搭建代理服务器
centos安装代理软件:squid
yum install squid -y yum install httpd-tools -y
创建账户密码文件
mkdir /etc/squid/ htpasswd -cd /etc/squid/passwords your_username #提示输入密码,比如输入!@#$%- -!gagaga ok #按ctrl+c退出
接下来重中之重,修改配置文件,首先打开配置文件(也可用vi)
vim /etc/squid/squid.conf
因为要是验证用户名密码才能使用我们的代理服务器,所以这里要在最后一行再增加很多很多行- -,如下。
auth_param basic program /usr/lib64/squid/basic_ncsa_auth /etc/squid/passwords acl auth_user proxy_auth REQUIRED http_access allow auth_user cache_mem 64 MB maximum_object_size 4 MB minimum_object_size 0 KB maximum_object_size_in_memory 4096 KB cache_dir ufs /var/spool/squid 100 16 256 cache_log /var/log/squid/cache.log access_log /var/log/squid/access.log logfile_rotate 60 cache_swap_high 95 cache_swap_low 90 # Hide client ip # forwarded_for delete # Deny request for original source of a request follow_x_forwarded_for deny all # See below request_header_access X-Forwarded-For deny all request_header_access Via deny all http_port 0.0.0.0:(your port不要复制粘贴哦!) visible_hostname squid.packet-pushers.net
记得要注释这些行
#http_access allow localnet #http_access allow localhost 类似这些的东东
作为IT人员,我们严谨的做一下“单元测试”,看看配置文件有没有问题,终端输入指令:squid -k parse
如果没问题是不会报错的,如下
2020/03/20 14:23:12| Startup: Initializing Authentication Schemes …
2020/03/20 14:23:12| Startup: Initialized Authentication Scheme ‘basic’
2020/03/20 14:23:12| Startup: Initialized Authentication Scheme ‘digest’
2020/03/20 14:23:12| Startup: Initialized Authentication Scheme ‘negotiate’
2020/03/20 14:23:12| Startup: Initialized Authentication Scheme ‘ntlm’
2020/03/20 14:23:12| Startup: Initialized Authentication.
……#省略了n行- –
OK,既然没问题,那就开启代理服务器吧!
#(停止为stop) systemctl start squid.service #开机自启动 systemctl enable squid.service
客户端使用代理服务器
打开浏览器的internet属性选项,如下设置之后就可以使用代理服务器上网喽(当然还会弹出窗口,让您输入用户名密码)
Linux设置网络代理
设置网络代理操作简介
设置临时代理(仅在当前shell会话生效)
# export http_proxy=http://ip:port # export https_proxy=http://ip:port
设置永久代理
# vi /etc/profile # export http_proxy=http://ip:port # export https_proxy=http://ip:port # source /etc/profile
取消代理
# unset http_proxy # unset https_proxy
有关网络代理的几个环境变量
环境变量 |
介绍 |
取值 |
http_proxy |
http协议的网络连接使用该代理。 |
ip:port http://ip:port socks://ip:port socks4://ip:port socks4://ip:port |
https_proxy |
https协议的网络连接使用该代理。 |
同上 |
ftp_proxy |
ftp协议使用该代理。 |
同上 |
all_proxy |
所有网络协议的网络连接都使用该代理, all_proxy变量的优先级低于http_proxy等。 |
同上 |
no_proxy |
无需代理的主机和域名, 支持通配符, 多个主机/域名之间使用逗号间隔。 |
localhost,10.*,*.ad.com, |
几个环境变量中,all_proxy指定了全部协议都可以通过这个代理,它的优先级要低于其他变量。
例如系统配置了http_proxy和all_proxy变量,则curl在进行http访问的时候会通过http_proxy指定的代理,在进行https访问的时会首先尝试通过https_proxy指定的代理,但是由于并没有设置https_proxy,最终all_proxy指定的代理生效。
代理协议简介
export http_proxy=http://ip:port
这里的两个http可能会引起误解,简单解释就是:
环境变量http_proxy指明了为哪种网络协议配置代理,这里是http协议。即只有http协议的网络请求会使用该环境变量配置的代理,其它网络协议,sftp等,则不会使用该环境变量配置的代理。
而其取值中的http,则表示的是代理服务器的服务协议,即系统与代理服务通信时使用的协议,比较常见的代理协议有
- http://
- https://
- socks://
另外还有
- ss://
- ssr://
- vmess://
等。
绝大部分程序都会支持http://协议的代理,大部分程序会支持socks://协议。
ss://、ssr://、vmess://等代理协议需要专用软件支持,并且由这些专用软件将另外将数据转换为http://、socks://协议以供其他应用使用。
http/https代理
工作在应用层上,能够代理客户机的http和https访问请求。
socks代理
工作在会话层,可以代理包括HTTP、HTTPS、POP3、SMTP、FTP、SFTP等各种类型的网络请求。
SOCKS 代理又分为 SOCKS4 和 SOCKS5。
SOCK4仅支持TCP,SOCKS5 代理则既支持 TCP 协议又支持 UDP 协议,还支持身份验证机制、服务器端域名解析等。
可以明确使用
- socks4://ip:port
- socks5://ip:port
来区分协议版本,特别地,用socks5h://来替代socks5://,可以让域名解析在代理服务器进行,防止DNS污染。
使用示例
1. 访问特定网络地址,无法访问
# wget http://www.google.com --2022-11-25 20:26:46-- https://www.google.com/ Resolving www.google.com (www.google.com)... 104.244.46.63, 2001::480e:cf5f Connecting to www.google.com (www.google.com)|104.244.46.63|:443... ^C
2. 配置网络代理
# export https_proxy=http://xx.xx.xx.xx:9707
重新执行
# wget http://www.google.com
仍然无法访问,这是因为本次网络访问使用的是http协议,而设置的环境变量却是https_proxy,假设改用https来访问:
# wget https://www.google.com
则访问成功;同理,如果配置的是环境变量是http_proxy:
# export http_proxy=http://xx.xx.xx.xx:9707
则网络请求:
# wget http://www.google.com
能够执行成功。
常见问题
代理无效
网络代理的环境变量只能算是建议,实际运行的程序不一定会去使用环境变量配置的网络代理,此时对应程序将绕过代理配置直接执行网络连接,表现为代理配置无效。
另外,还有环境变量的大小写问题,有的应用可能会去读取HTTP_PROXY等大写的环境变量,此时自然读取不到对应的值,这种情况下,可以通过对大小写的环境变量同时设置的方式来保证兼容性,例如:
# export http_proxy=http://xx.xx.xx.xx:9707 # export HTTP_PROXY=http://xx.xx.xx.xx:9707 # export Http_Proxy=http://xx.xx.xx.xx:9707
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持IT俱乐部。