Config Proxy for YUM of CentOS

Công ty mình mới bắt đầu áp dụng quy tắc mọi máy tính ra Internet đều phải sử dụng proxy. Nói chung không vấn đề gì lắm về việc thiết lập proxy cho máy mình đang sử dụng là Window. Đơn giản nhất là vào mục cài đặt của GoogleChorme tìm Proxy thì cài đặt được luôn cho cả máy tính (cấu hình của Window).

Nhưng tất cả các máy ảo mình đã tạo trước đó thì đều không truy cập được Internet mặc dù mình đã sử dụng các cấu hình NAT… Sau đó nghĩ rằng cũng phải cài đặt Proxy cho nó như máy vật lý thì máy ảo Window thì cài đặt thành công.

Nhưng đối với máy ảo CentOS thì gặp vấn đề. Việc thường xuyên phải sử dụng command line để cài đặt các gói phần mềm thì đều không thể được. Khi thiết lập proxy cho trình duyệt Firefox thì vào được bình thường nhưng các lệnh YUM thì không thể sử dụng để kết nối internet được. Về sau có một anh đội Network nói sơ qua thì mình mới chỉ thiết lập ở Firefox thì YUM không được, phải thiết lập ở sâu trong config mới đảm bảo được.

Như vậy, để truy cập được Internet thông qua Proxy thì phải thực hiện như sau:

Muốn vào Internet bằng trình duyệt

Cấu hình proxy cho trình duyệt, cụ thể ở đây là Firefox. Nói chung cái này cài đặt rất đơn giản và chỉ cần cài đặt ở Firefox.

Muốn sử dụng các câu lệnh cài đặt phần mềm

Muốn sử dụng các câu lệnh cài đặt phần mềm, YUM, cài đặt… thì phải cấu hình bên trong hệ điều hành CentOS.

Đầu tiên là: Enable proxy for yum in configuration file.

Hoặc đội Network sẽ cung cấp tài khoản và địa chỉ Proxy dùng chung hoặc nếu toàn bộ hệ thống sử dụng join domain thì dùng chính tài khoản join domain để thiết lập proxy.

Để xem config hiện tại:

cat /etc/yum.conf

Để sửa config sử dụng:

sudo vi /etc/yum.conf

Cấu hình proxy thì thêm 3 dòng sau:

 proxy=http://hnoproxy01:8080
proxy_username=user_u
proxy_password=pass_u

Using profile proxy (User specific)

Xem config hiện tại:

cat ~/.bash_profile

Chỉnh sửa config:

vi ~/.bash_profile hoặc sudo vi ~/.bash_profile

Thêm 2 dòng sau vào profile:

http_proxy="http://user_u:pass_u@hnoproxy01:8080"
export http_proxy

Alternate way to configure proxy settings for yum command

Xem cấu hình:

cat /etc/environment

Sửa cấu hình:

sudo vi /etc/environment

Thêm các dòng sau vào file cấu hình:

 export http_proxy=http://user_u:pass_u@hnoproxy01:8080
 export https_proxy=http://user_u:pass_u@hnoproxy01:8080
 export ftp_proxy=http://user_u:pass_u@hnoproxy01:8080
 export no_proxy=127.0.0.1,localhost

Thế là xong, thử cập nhật lại các repo:

yum repolist

Hoặc cập nhật luôn hệ điều hành:

sudo yum install update

Một điều lưu ý xương máu mà mình phải trả giá bằng rất nhiều thời gian là ban đầu mình sử dụng tài khoản proxy dùng chung của Network. Trong các config thì tài khoản ngăn cách địa chỉ proxy bằng ký tự @, mà trong mật khẩu chứa @ nên hệ thống hiểu sai. Khi mình sử dụng tài khoản join domain của mình không có ký tự @ thì được.

Reverse proxy vs Forward proxy

Proxy hay Proxy Server làm nhiệm vụ đứng giữa client và web server ứng dụng. Nó có vai trò bảo vệ client hoặc webserver tùy theo loại của chúng. Có 2 loại proxy là Reverse proxy vs Forward proxy:

1- Forward proxy thường được sử dụng trong các doanh nghiệp. Nó cùng với với tường lửa, router để bảo vệ, kiểm soát người dùng ra ngoài Internet. Proxy này ghi log, cho phép người dùng được truy cập các trang web nào, thời điểm nào… Đảm bảo tính ẩn danh của người dùng trước các web ghi lại thông tin người truy cập.

2- Reverse proxy thì ngược lại, nó tiến hành bảo vệ web server trước các client. Nó tiến hành ghi log, đứng trước bảo vệ các webserver đằng sau, ngăn không cho client gửi yêu cầu tới webserver trực tiếp. Nó cũng đóng vai trò như các bộ điều hướng, kiểm soát các client để phân bổ tới các ứng dụng định sẵn. Hơn nữa Reverse proxy có thể đóng thêm vai trò cân bằng tải (Load Balancer)

Tìm hiểu tiếp phần này thấy có khá nhiều thứ hay ho. Ta mở rộng thêm các khái niệm về Load Balancer, High-Availability đi kèm là HAProxy và Keepalived.

Đối với Apache thì có các module Proxy, module HAProxy, module Keepalived để làm Cân bằng tải.
Chuyên biệt hơn ta có Piranha Load Balancer, với cấu hình trực quan để làm Load Balancer.

Ta cũng có thể sử dụng NGINX làm proxy cho Apache.

Một số link tham khảo thêm Reverse proxy vs Forward proxy:
https://tech.bizflycloud.vn/tong-quan-ve-haproxy-va-load-balancing-20180712085354307.htm
http://congdonglinux.vn/piranha-load-balancer/
https://anninhmang.edu.vn/cau-hinh-high-available-load-balancer-voi-haproxy-va-keepalived/
https://vicloud.vn/community/huong-dan-su-dung-apache-nhu-mot-reverse-proxy-bang-cong-cu-mod-proxy-tren-centos-7-376.html
https://thachpham.com/linux-webserver/nginx-reverse-proxy-cho-apache.html
https://kipalog.com/posts/Web-Server—Tan-man-PHP-Handler-va-Apache

Sự cố về proxy đối với hệ thống

Hệ thống bên mình trao đổi dữ liệu với đối tác thông qua webservice. Ngoài việc sử dụng VPN site to site với đối tác, Virtual IP và tường lửa để bảo mật thông tin. Vì bên mình sử dụng chính Database Oracle để gọi webservice của đối tác nên để tránh rủi ro thì giữa Database và đối tác sẽ sử dụng một con server khác cài Proxy để làm trung gian.

Con database trước khi gọi webservice thì phải tiến hành gọi hàm set proxy tới địa chỉ server proxy kia. Con Proxy có nhiệm vụ làm trung gian gửi thông tin đi và đón nhận từ webservice đối tác trả về rồi đưa ngược trở lại database.

“Câu hỏi: Không rõ nếu mình không dùng database để gọi trực tiếp webservice đối tác nữa mà dùng một server khác (như con proxy) có code xử lý việc lấy thông tin từ webservice để cập nhật vào DB của mình thì liệu có an toàn không?”

Sự cố: Sự cố xảy ra do mình suy nghĩ, đặt vai trò máy tính của mình như là con Database, tiến hành set proxy cho máy tính của mình là địa chỉ IP của con proxy sau đó gọi webservice để kiểm tra. Bởi vì máy tính của mình cũng như database không được trực tiếp truy cập webservice mà phải thông qua con Proxy. Do máy tính của mình có nhiều các kết nối – ứng dụng khác nhau (thư điện tử, skype, trình duyệt…) gây sập con Proxy kia.

Một anh team đội mình nói làm thế không an toàn, không ai làm thế mà không nêu rõ lý do. Còn anh bên mạng thì nói không được làm thế nhưng về nguyên tắc không thể chết Proxy được. Bởi các request ngoài webservice đối tác sẽ không có kết quả phản hồi vì Proxy không trả lời những thứ nó không biết là gì. Mình ậm từ sẽ không làm vậy nữa nhưng cũng không thỏa mãn về cách trả lời như vậy. Mình muốn nghe giải thích nhưng có vẻ mọi người không muốn chia sẻ kiến thức???

Mình cần phải đọc thêm về phần này, thử nghiệm và hiểu rõ nhất có thể.