Làm cách nào để chặn tất cả các cổng ngoại trừ 80.443 với iptables? [bản sao]


14

Chặn tất cả các cổng (vào và ra) thật dễ dàng nhưng thật khó với từ "ngoại trừ". Tôi không biết bất kỳ quy tắc nào thỏa mãn điều kiện.

PS: Tôi biết câu hỏi này không có gì mới. Nhưng trên thực tế, tôi đã không tìm thấy bất cứ điều gì giúp đỡ. Vì vậy, hãy giúp tôi!


Bạn không thể đóng TẤT CẢ các cổng và sau đó MỞ một cổng duy nhất trong dòng tiếp theo?
sinni800

Tôi làm điều này: iptables -P INPUT DROP iptables -P OUTPUT DROP iptables -P FORWARD DROP iptables -I INPUT -p tcp --dport 80 -j CHẤP NHẬN ------ Nó không hoạt động!
dùng71169

Câu trả lời:


24

Đầu tiên ! là ký hiệu KHÔNG.

iptables -A INPUT -p tcp -m tcp -m multiport ! --dports 80,443 -j DROP

Thứ hai, các quy tắc bạn đã viết có thể không có kết quả mong đợi. Bạn bỏ mọi thứ, kể cả phản hồi với kết nối trên cổng 80. Do đó, bạn sẽ không thể kết nối với nó cho mục đích của máy chủ web.

Các quy tắc này cho phép các kết nối LIÊN QUAN và THÀNH LẬP để máy chủ web hoạt động, nếu đó thực tế là những gì bạn đang cố gắng thực hiện.

iptables -A INPUT -p tcp -m tcp -m multiport --dports 80,443 -j ACCEPT
<insert further allowed list here>
iptables -A INPUT -m conntrack -j ACCEPT  --ctstate RELATED,ESTABLISHED
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -j DROP
iptables -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A OUTPUT -j DROP
iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD -j DROP

2
Không nên !thoát như thế này \!, nếu vỏ Bash được sử dụng?
Cristian Ciupitu

@CristianCiupitu Không cần phải trốn thoát. Bạn có thể có điều gì đó kỳ lạ đang xảy ra, nhưng trên bash của tôi, tôi không cần phải thoát khỏi nó.
gian mạng

Tôi đã kiểm tra đầu ra của "iptables -nvL" để xem các gói trong kết nối. Nó dường như để làm việc, quy tắc của bạn. Nhưng tôi không thể kiểm tra Nó có thực sự hoạt động hay không ngoại trừ sử dụng một số ứng dụng sử dụng các cổng đó. Ứng dụng sử dụng một cổng không có nghĩa là Nó chỉ sử dụng cổng đó. Vì vậy, bất kỳ đề nghị để kiểm tra?
dùng71169

1
@cybernard, vâng, bạn đúng. Một đồng bằng !không cần phải được trốn thoát. Xin lỗi về báo động sai.
Cristian Ciupitu

3
@MohammadShahid Quy tắc không tự động vĩnh viễn, khởi động lại và nó sẽ biến mất và bạn có thể đăng nhập. Bạn cần thêm 22 vào danh sách các cổng nếu bạn muốn duy trì kết nối ssh.
gian mạng

5
# Set the default policy of the INPUT chain to DROP
iptables -P INPUT DROP

# Accept incomming TCP connections from eth0 on port 80 and 443
iptables -A INPUT -i eth0 -p tcp --dport 80 -j ACCEPT
iptables -A INPUT -i eth0 -p tcp --dport 443 -j ACCEPT

Điều này sẽ cung cấp cho bạn những gì bạn cần


3
Hãy nhớ nếu bạn được kết nối thông qua SSH, bạn nên mở cổng TCP 22
Maximilian Ast

Có, đừng quên cổng SSH của bạn, có lẽ nên thêm cổng SSH của bạn trước khi bạn đặt chính sách mặc định để loại bỏ. ;)
James Little

3

Bạn có thể đặt hành động mặc định của mình thành DROP, sau đó tạo quy tắc ngoại lệ để cho phép 80 và 443, như vậy:

# Setting default policies:
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT ACCEPT

# Exceptions to default policy
iptables -A INPUT -p tcp --dport 80 -j ACCEPT       # HTTP
iptables -A INPUT -p tcp --dport 443 -j ACCEPT      # HTTPS

iptables sẽ đi qua danh sách 'ngoại lệ' cho đến khi tìm thấy kết quả khớp. Sau đó, nó sẽ thực hiện hành động được chỉ định bởi -jtham số (ACCEPT trong trường hợp này). Nếu không tìm thấy kết quả khớp, nó sẽ quay lại chính sách mặc định và bỏ gói.

Lưu ý rằng với cách giải quyết này, mọi tên miền phụ sẽ bị khóa. Ví dụ: với phương pháp này, bạn sẽ làm cho nó hoạt động trên www.mydomain.com, nhưng tên miền phụ của bạn giả sử www.sub.mydomain.com sẽ không mở cho các lỗi DNS.


Nó nên là công việc nhưng nó không phải là. Tôi rất bối rối.
dùng71169

Cái gì không hoạt động? Nó có cho phép tất cả các gói đến hay không? Bạn có thể cập nhật câu hỏi của bạn với đầu ra của iptables -nvL?
mtak

Tại sao bỏ phiếu xuống? Tôi có hoạt động này trong sản xuất vì vậy tôi chắc chắn 100% nó hoạt động.
mtak

Lấy làm tiếc! Không phải tôi, ai đó đã làm điều đó :)) Đúng, Bạn chắc chắn như tôi nhưng Nó không hoạt động. Đó là lý do tại sao tôi phải làm cho câu hỏi.
dùng71169

2
Đừng làm điều này hơn ssh.
Ashesh
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.