IPTables: chỉ cho phép truy cập SSH, không có gì khác vào hoặc ra


11

Làm cách nào để định cấu hình IPTables để nó chỉ cho phép SSH vào và không cho phép lưu lượng truy cập khác vào hoặc ra ?

Bất kỳ biện pháp phòng ngừa an toàn bất cứ ai có thể đề nghị?

Tôi có một máy chủ mà tôi tin rằng đã được di chuyển khỏi GoDaddy thành công và tôi tin rằng nó không còn được sử dụng.

Nhưng tôi muốn chắc chắn chỉ vì ... bạn không bao giờ biết. :)

Lưu ý rằng đây là một máy chủ chuyên dụng ảo từ GoDaddy ... Điều đó có nghĩa là không có bản sao lưu và hầu như không hỗ trợ.

Câu trả lời:


13

Bạn chỉ cần đặt chính sách mặc định thành DROP trên chuỗi INPUT và OUTPUT.

Để cho phép SSH vào, bạn cần các lệnh sau:

$ sudo iptables -P INPUT DROP
$ sudo iptables -P OUTPUT DROP
$ sudo iptables -A INPUT -i lo -j ACCEPT
$ sudo iptables -A INPUT -p tcp -m tcp --dport 22 -j ACCEPT
$ sudo iptables -A OUTPUT -o lo -j ACCEPT
$ sudo iptables -A OUTPUT -p tcp --sport 22 -m state --state ESTABLISHED -j ACCEPT

Hai lệnh cuối cho phép lưu lượng loopback vì một số ứng dụng được yêu cầu để hoạt động chính xác. Bạn có thể hạn chế quyền truy cập SSH từ IP cụ thể bằng -s source_iptùy chọn.

Thực hiện các lệnh theo thứ tự như trên sẽ khiến phiên SSH hiện tại của bạn bị treo. Điều này là do các lệnh iptables có hiệu lực ngay lập tức. Bạn cần thực thi chúng trong tập lệnh shell để tránh mất khả năng kết nối với máy khi thực hiện chúng từ xa.


4
--state RELATEDvề quy tắc cuối cùng là không cần thiết; --state ESTABLISHEDLà đủ. Bạn cũng có thể muốn cho phép lưu lượng DNS và có thể nên cho phép mọi thứ trên giao diện loopback hoặc tất cả mọi thứ có thể hoạt động rất kỳ quặc.
MadHatter

@MadHatter: Vâng, bạn đặc biệt đúng về nội dung loopback :)
Khaled

Cảm ơn, có thể lấy toàn bộ tập tin từ bạn không? tức là, một cái gì đó tôi có thể sao chép và dán thẳng vào / etc / sysconfig / iptables? Tôi không đủ kinh nghiệm với điều này để tin vào trực giác của mình để thực hiện các chỉnh sửa phù hợp.
Vũ điệu

2
ps. thiết lập kết nối sẽ bị buộc đóng sau lệnh đầu tiên
user956584

3
Bạn thực sự nên thay đổi thứ tự của các lệnh này. Các dòng chính sách sẽ xuất hiện như là những người cuối cùng. Bất cứ ai chỉ cần sao chép điều này vào một phiên ssh sẽ bị HUPed và tắt ngay lập tức
AndreasT

4

Một cái gì đó như thế này:

iptables -A INPUT -p tcp --dport 22 -j ACCEPT
iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -i lo -j ACCEPT
iptables -A INPUT -j REJECT  # or iptables -P INPUT DROP

iptables -A OUTPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
iptables -A OUTPUT -j REJECT # or iptables -P OUTPUT DROP

1
Tôi nghĩ bạn có nghĩa là -i lokhông -s lo; một lần nữa, chỉ ESTABLISHEDcần thiết trong các quy tắc nhà nước, và có lẽ cũng nên có một --sport 22trong đó. Tại sao mọi người rất muốn cho phép RELATED?
MadHatter

@MadHatter: Giới thiệu RELATED: Nó thực sự hữu ích khi kết hợp những thứ không phải là TCP, như trả lời ping và trả lời DNS. Ít nhất, đó là những gì tôi luôn luôn giả định.
Steven Thứ Hai

2
Tôi tin rằng nó sẽ không phù hợp với cả hai. Ví dụ, nó sẽ phù hợp với máy chủ ICMP - phản hồi bị cấm về mặt hành chính, nhưng điều đó cũng hữu ích như nó có được; và nếu không đủ điều kiện, nó sẽ khớp với bất kỳ lưu lượng liên quan nào, không chỉ lưu lượng liên quan đến dòng trước đó.
MadHatter

@MadHatter: Tôi đoán tôi sẽ phải chạy một vài bài kiểm tra để xem bạn có đúng không. Cảm ơn đã thách thức giả định của tôi.
Steven Thứ Hai

Đúng, trạng thái THÀNH LẬP là tất cả những gì cần thiết để khớp với phản hồi DNS UDP và phản hồi tiếng vang ICMP.
Steven Thứ Hai
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.