Có an toàn để khởi động lại một máy chủ mở internet?


29

Đặc biệt

Tôi có một quy tắc iptables được xác định trên máy chủ đang chạy CentOS. Tôi có được bảo đảm không giao diện mạng sẽ không thành công)?

.


15
Thực sự không phải là một câu hỏi noob cả. Đây thực chất là cách tin tặc xâm nhập vào mạng PlayStation vào năm 2011, gây ra 24 ngày ngừng hoạt động và $ 15MM trong các khu định cư. Khi tường lửa của họ khởi động lại (như họ đã làm hàng tháng), tường lửa đã mở rộng trong một vài khoảnh khắc - dường như đủ dài.
Chris S

@ChrisS Điều kỳ lạ nhất về điều đó, với tôi, là tôi chắc chắn rằng các hệ thống chịu trách nhiệm về mạng đó gần như chắc chắn đủ thông minh để chùn bước nếu ai đó đề nghị tắt tường lửa, nhưng hàng tháng không chớp mắt , tắt nó đi ... và sau đó bật lại. Không chắc chắn sự kết hợp của những điều này sẽ giải thích nó, mặc dù.
Bắn Parthian

Một tùy chọn khác là vô hiệu hóa cổng trên chuyển đổi mạng cho đến khi máy chủ được khởi động hoàn toàn - nếu bạn đang ở trên trang web và có quyền truy cập chuyển đổi. Điều này không lý tưởng, nhưng nó chắc chắn sẽ hoạt động, trừ khi máy chủ có sự phụ thuộc mạng như NFS.
jftuga

@jftuga Chà, chắc chắn rồi. Nhưng sau đó, máy chủ sẽ không được kết nối với Internet và vì vậy giải pháp về mặt kỹ thuật không thuộc phạm vi của câu hỏi này. Nếu tôi ở trên trang web, tôi chỉ có thể rút cáp ethernet trong khi khởi động lại. Và vấn đề cơ bản sẽ vẫn là giải pháp chặn cổng, dù sao đi nữa; rằng một máy tính khác tấn công mạng sẽ không bị chặn bởi tường lửa cục bộ. Nếu bộ định tuyến bị hack, hoặc trục trặc hoặc ai đó trên mạng cục bộ bị xâm phạm, trò chơi vẫn kết thúc.
Bắn Parthian

@jftuga Trên thực tế, vấn đề thậm chí còn tồi tệ hơn thế. Giả sử ai đó đã nhận được một phần mềm để chạy trên máy cục bộ, nhưng tường lửa của tôi không lọc ra, nói rằng quy tắc là các gói gửi đi chỉ được phép nếu chúng được thiết lập hoặc có liên quan và các kết nối mới đến chỉ được phép chuyển đến cổng 80 . Thông thường, điều đó sẽ ngăn chặn một vỏ ngược từ một tài khoản không có đặc quyền. Nhưng nếu kết nối được bắt đầu khi khởi động, nó sẽ được duy trì thông qua khởi tạo tường lửa. Tôi cho rằng điều đó cũng có nghĩa là các quy tắc tường lửa sẽ thay đổi, nhưng đó là một lỗi dễ mắc phải.
Bắn Parthian

Câu trả lời:


18

Ra khỏi hộp, bạn được đảm bảo rằng iptables sẽ bắt đầu trước khi giao diện được đưa lên theo thứ tự của các tập lệnh khởi động. Nhìn vào dòng "chkconfig" trong mỗi tập lệnh khởi động và bạn sẽ thấy các đường chạy được "bật" khi hoạt động, lệnh bắt đầu và lệnh dừng.

Bạn không được đảm bảo rằng giao diện sẽ không được đưa lên nếu quy tắc iptables không được áp dụng đúng cách (hoặc hoàn toàn không).

Ví dụ:
chkconfig: 2345 08 92
Dòng này nói rằng dịch vụ được đề cập sẽ hoạt động ở các mức 2, 3, 4 và 5 và sẽ bắt đầu từ 8 và dừng ở 92. Mọi thứ có giá trị "bắt đầu" lớn hơn sẽ chỉ bắt đầu sau khi tập lệnh này hoàn thành, nhưng lỗi tập lệnh này được coi là hoàn thành và sẽ không ngăn các tập lệnh xuôi dòng chạy.

Xin lưu ý câu trả lời này áp dụng cho CentOS 6 trở về trước, không nhất thiết phải cho CentOS 7. Cá nhân tôi chưa nghiên cứu đủ 7 để trả lời câu hỏi này cho 7.


1
+1 Và ... không được nhìn con ngựa quà trong miệng, bởi vì câu trả lời của bạn khá hữu ích, nhưng ... Bạn có biết bất kỳ cách tiêu chuẩn nào để cung cấp dịch vụ theo thứ tự phụ thuộc, để nếu một lần thất bại Đầu chuỗi tiếp theo không bắt đầu? Ồ và cũng có thể nếu ai đó quản lý để phá vỡ tường lửa (bằng cách nào đó) rằng giao diện mạng sẽ "đi xuống cùng với con tàu"? Lý tưởng nhất là tôi muốn mọi thứ đều thất bại an toàn, ngay cả khi có ý định ai đó có 0 ngày để làm tường lửa ...
Parthian Shot

5
Với các tập lệnh khởi động SysV (ví dụ như CentOS 6 trở về trước), không có cách nào tốt để làm như vậy. CentOS 7 thực hiện các phụ thuộc như bạn muốn - nếu B phụ thuộc vào A và A không thành công, B không bắt đầu. Đối với 7, để xem phụ thuộc sử dụng systemctl list-dependencies --all(Tôi chỉ nhìn vào trang man trong 30 giây trước).
Giăng

Mặc dù tin tức đó là một chút thất vọng (hiện tại tôi đang ở trên 6), nhưng ít nhất bây giờ tôi biết rằng sửa đổi các tập lệnh init là một hack khủng khiếp chấp nhận được.
Bắn Parthian

5
Hãy cẩn thận về việc sửa đổi các tập lệnh init - làm như vậy có thể gây ra cảnh báo sai trên bất kỳ phần mềm phát hiện xâm nhập nào bạn có thể có, và các sửa đổi sẽ bị ghi đè nếu initscriptsgói được cập nhật (ví dụ: bản phát hành errata). Tôi thực sự không khuyên bạn nên làm điều đó.
Giăng

Tôi chưa thiết lập IDS, vì vậy báo động sai hiện tại không phải là vấn đề (máy chủ chưa hoạt động và tôi biết tôi chưa sẵn sàng để triển khai; câu hỏi này là một phần trong sự chuẩn bị của tôi. Nhưng tôi sẽ đặt một HIDS). Tôi sẽ cẩn thận hết mức có thể, và nếu có một cách không liên quan đến việc sửa đổi thủ công các phần cốt lõi của cấu hình init, tôi chắc chắn sẽ làm điều đó.
Bắn Parthian

1

Bạn cũng có thể sử dụng tùy chọn ifup-post tính bằng centos:

/ etc / sysconfig / tập lệnh mạng / ifup-post

Được gọi khi bất kỳ thiết bị mạng nào NGOẠI TRỪ một thiết bị SLIP xuất hiện. Gọi / etc / sysconfig / network-scripts / ifup-tuyến để hiển thị các tuyến tĩnh phụ thuộc vào thiết bị đó. Gọi / etc / sysconfig / network-scripts / ifup-aliases để hiển thị bí danh cho thiết bị đó. Đặt tên máy chủ nếu nó chưa được đặt và có thể tìm thấy tên máy chủ cho IP cho thiết bị đó. Gửi SIGIO đến bất kỳ chương trình nào đã yêu cầu thông báo về các sự kiện mạng.

Có thể được mở rộng để sửa cấu hình dịch vụ tên, gọi các tập lệnh tùy ý, vv, nếu cần.

Kịch bản lệnh này chạy và sau phần trên (ifup-route và ifup-aliases), nó tìm kiếm ifup-local

if [ -x /sbin/ifup-local ]; then
   /sbin/ifup-local ${DEVICE}
fi

Vì vậy, bạn có thể tạo tệp này và đảm bảo rằng nó gọi lại iptables một lần nữa bằng cách sử dụng iptables-restore:

iptables-restore < /etc/sysconfig/iptables

1

Một phụ lục nhỏ: để đảm bảo các quy tắc cần thiết sẽ có ở lần tới khi bạn khởi động máy chủ, hãy lưu nó với

sudo sh -c "iptables-save > /etc/iptables.rules"
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.