Giao diện mạng ảo và NAT vô hiệu hóa truy cập localhost cho MySQL và Apache


1

Tôi đang chạy Ubuntu Server 12.04 và gần đây tôi đã cấu hình nó để làm NAT cho máy tính xách tay của mình. Vì máy chủ chỉ có một NIC, tôi đã làm theo hướng dẫn trực tuyến để tạo một thiết bị mạng ảo (eth0: 0) có địa chỉ IP LAN, sau đó cấu hình thêm iptables và UFW để cho phép chia sẻ internet. Tuy nhiên, chỉ vài ngày trước, tôi phát hiện ra rằng một trong những trang PHP được lưu trữ trên máy chủ không thành công mà không có lý do rõ ràng. Một chút đào đã tiết lộ rằng máy chủ MySQL đã bắt đầu từ chối các kết nối từ localhost. Điều tương tự cũng xảy ra với một trang (PhpMyAdmin) được định cấu hình để chỉ có thể truy cập từ localhost (trong Apache2).

Các lỗi, như thể hiện bởi $mysql --protocol=tcp -u root -ptrông giống như

ERROR 1130 (HY000): Host '<host name of eth0>' is not allowed to connect to this MySQL server

Tuy nhiên, điều buồn cười là, tôi đã cấu hình máy chủ mysql để cho phép truy cập root từ localhost (chỉ). Hơn nữa, máy chủ mysql chỉ nghe trên 127.0.0.1:3306, như được hiển thị bởi:

sudo netstat -npa | head
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
tcp        0      0 127.0.0.1:3306          0.0.0.0:*               LISTEN      1029/mysqld

điều đó có nghĩa là kết nối chỉ có thể đến từ 127.0.0.1 (Lưu ý rằng MySQL đang hoạt động vì tôi vẫn có thể kết nối với nó thông qua các ổ cắm tên miền unix)

Trên thực tế, dường như tất cả các kết nối tcp có nguồn gốc từ 127.0.0.1 đến 127.0.0.1 xuất hiện với bất kỳ trình nền cục bộ nào đến từ địa chỉ IP eth0. Thật vậy, apache2 cho phép tôi truy cập PhpMyAdmin sau khi tôi thêm allow <eth0 IP address>.

Sau đây là các cấu hình mạng của tôi (được điều chỉnh lại):

/ etc / host:

127.0.0.1       localhost
211.x.x.x   <host name of eth0>      <server name>
#IPv6 Defaults follows ....

/ etc / mạng / giao diện:

auto lo
iface lo inet loopback

auto eth0
iface eth0 inet static
address 211.x.x.x
netmask 255.255.255.0
gateway 211.x.x.x
dns-nameservers 8.8.8.8
# dns-* options are implemented by the resolvconf package, if installed
dns-search xxxxxxx.com
hwaddress ether xx:xx:xx:xx:xx:xx

auto eth0:0
iface eth0:0 inet static
address 192.168.57.254
netmask 255.255.254.0
broadcast 192.168.57.255
network 192.168.57.0

/etc/ufw/sysctl.conf:

#Uncommented the following lines
net/ipv4/ip_forward=1
net/ipv6/conf/default/forwarding=1

/ etc / default / ufw:

DEFAULT_FORWARD_POLICY="ACCEPT" #Changed DROP to ACCEPT

/etc/init/iNET-shared.conf (tập lệnh khởi động tôi đã viết), phần tập lệnh bắt đầu trước:

iptables -A FORWARD -o eth0 -i eth0:0 -s 192.168.57.22 -m conntrack --ctstate NEW -j ACCEPT
iptables -A FORWARD -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
iptables -A POSTROUTING -t nat -j MASQUERADE

Một lần nữa lưu ý rằng vấn đề của tôi ở đây là các chương trình không thể truy cập dịch vụ tcp localhost , từ chính máy chủ và quyền truy cập đó bị chặn vì các dịch vụ có quyền kiểm soát truy cập chỉ cho phép 127.0.0.1. Tôi không gặp vấn đề gì khi kết nối (như trong các kết nối TCP) với các dịch vụ qua tcp, ngay cả khi các dịch vụ chỉ nghe trên 127.0.0.1. Tôi KHÔNG muốn kết nối với các dịch vụ từ một máy tính khác.

Câu trả lời:


0

Có vẻ như vấn đề là quy tắc NAT iptables thứ ba. Vì tôi không chỉ định và lọc quy tắc cho quy tắc gốc POSTROUTING cuối cùng, nên bằng cách nào đó, nó khớp với các gói localhost và dịch địa chỉ IP nguồn của chúng sang eth0địa chỉ. Một kịch bản khởi động cố định được hiển thị dưới đây:

iptables -A FORWARD -o eth0 -i eth0:0 -s 192.168.57.22 -m conntrack --ctstate NEW -j ACCEPT
iptables -A FORWARD -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
iptables -A POSTROUTING -s 192.168.57.22 -t nat -j MASQUERADE

Lưu ý các -s 192.168.57.22tùy chọn bổ sung .

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.