Làm cách nào tôi có thể chặn tất cả trừ ba cổng trong Ubuntu?


22

Làm cách nào tôi có thể chặn tất cả các cổng ngoại trừ 1962, 999, 12020?

Một cổng cho SSH và hai cổng khác cho một loại tập lệnh. Vì vậy, nó là cần thiết để cho phép đi trên các cổng này, phải không?

Iptables của tôi:

# Generated by iptables-save v1.4.4 on Sat Feb 25 17:25:21 2012
*mangle
:PREROUTING ACCEPT [643521:136954367]
:INPUT ACCEPT [643521:136954367]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [645723:99904505]
:POSTROUTING ACCEPT [645723:99904505]
COMMIT
# Completed on Sat Feb 25 17:25:21 2012
# Generated by iptables-save v1.4.4 on Sat Feb 25 17:25:21 2012
*filter
:INPUT ACCEPT [643490:136950781]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [645723:99904505]
-A INPUT -p tcp -m tcp --dport 1962 -j ACCEPT 
-A INPUT -p tcp -m tcp --dport 999 -j ACCEPT 
COMMIT
# Completed on Sat Feb 25 17:25:21 2012
# Generated by iptables-save v1.4.4 on Sat Feb 25 17:25:21 2012
*nat
:PREROUTING ACCEPT [5673:734891]
:POSTROUTING ACCEPT [2816:179474]
:OUTPUT ACCEPT [2816:179474]
COMMIT
# Completed on Sat Feb 25 17:25:21 2012

Xin lỗi, nhưng tôi là một người mới thực sự khi nói đến công cụ này và tôi chỉ muốn làm cho máy chủ của tôi an toàn hơn.


Tại sao không sử dụng UFW?
Soviero

Câu trả lời:


25

Lúc đầu, bạn phải luôn luôn xả nước để chắc chắn những gì đã được xác định là gì

iptables -F

Sau đó, đặt chính sách mặc định của chuỗi INPUT thành DROP nếu kết thúc đạt được và không có quy tắc nào khớp:

iptables -P INPUT DROP

Để đảm bảo loopback không bị ảnh hưởng, bạn nên thêm

iptables -A INPUT -i lo -p all -j ACCEPT
iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT

để cho phép tất cả lưu lượng truy cập trên lo-if và mọi lưu lượng không hợp lệ cho các kết nối bạn đã thiết lập. Sau đó, thêm mọi quy tắc bạn cần cho các dịch vụ của mình (đừng quên mở ssh nếu bạn cần nó! Bạn sẽ ra ngoài) :

iptables -A INPUT -p tcp -m tcp --dport 1962 -j ACCEPT 
iptables -A INPUT -p tcp -m tcp --dport 999 -j ACCEPT 
iptables -A INPUT -p tcp -m tcp --dport 12020 -j ACCEPT 

Một mẹo nhỏ tôi làm để giữ cho bản thân và những người khác không vô tình khoan lỗ vào bảo mật cuối cùng tôi cũng thêm vào:

iptables -A INPUT -j DROP

Dòng này khớp với mọi thứ cho chuỗi INPUT và chính sách sẽ không nhận được gì. lợi thế của điều này là ngay cả khi bạn thêm quy tắc ACCEPT vào lúc nào đó sau khi khởi tạo quy tắc của mình, nó sẽ không bao giờ bị kiểm tra vì mọi thứ đều bị hủy trước đó. Vì vậy, nó đảm bảo bạn phải giữ mọi thứ ở một nơi.

Đối với câu hỏi của bạn, toàn bộ điều này trông như thế này tóm tắt:

iptables -F
iptables -P INPUT DROP
iptables -A INPUT -i lo -p all -j ACCEPT
iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A INPUT -p tcp -m tcp --dport 1962 -j ACCEPT 
iptables -A INPUT -p tcp -m tcp --dport 999 -j ACCEPT 
iptables -A INPUT -p tcp -m tcp --dport 12020 -j ACCEPT 
iptables -A INPUT -j DROP

1
Chỉ cần làm rõ: -Pthiết lập chính sách trên chuỗi. Nó không thực sự thêm một quy tắc. Chính sách của chuỗi biểu thị hành động được thực hiện trên gói nếu kết thúc chuỗi. Do đó, thật thông minh khi thêm quy tắc của bạn trước khi đặt DROPchính sách.
Belmin Fernandez

Nếu tôi nhớ chính xác, thông thường, không cần đặt chính sách ở đâu, có lẽ tôi nên chỉnh sửa một chút.
Mose

3
một lưu ý: hãy cẩn thận thiết lập từ chối và xóa chính sách mặc định khi thiết lập tường lửa qua ssh. Bạn sẽ tự khóa mình. Vâng, tôi đã làm điều này. :-) Bây giờ tôi thường đưa ra quy tắc cuối cùng iptables -A INPUT -j DROPthay vào đó, vì lý do đó.
Sirex

Tôi nhấn mạnh cảnh báo ssh của tôi một chút ;-)
Mose

@Mose: Nói chung là không quan trọng. Tôi đã cố gắng làm nổi bật điều đó. Nhưng nó có thể khiến bạn bị khóa vì nó đã được đề cập rồi.
Belmin Fernandez

20

Trả lời từ một người mới giống như bạn :-) Tôi cũng cần bảo mật máy chủ Ubuntu của mình, học iptables là một nỗi đau mà tôi không thể vượt qua. UFW (Uncomplicated Firewall) là một chương trình giúp cấu hình tường lửa dễ dàng nhất có thể.

  • cài đặt ufw:

    sudo apt-get install ufw
    
  • vô hiệu hóa nó ngay lập tức (tôi phải cứu boot-boot vì tôi đã bị khóa khỏi đăng nhập SSH của riêng tôi):

    sudo ufw disable
    
  • đặt "từ chối" làm quy tắc mặc định (điều này chặn tất cả các cổng):

    sudo ufw default deny
    
  • cho phép các cổng bạn cần:

    sudo ufw allow to 1962
    sudo ufw allow to 999
    sudo ufw allow to 12020
    
    sudo ufw allow from 1962
    sudo ufw allow from 999
    sudo ufw allow from 12020
    
  • nếu bạn chắc chắn các quy tắc trên không phá vỡ kết nối ssh của bạn, hãy bật ufw:

    sudo ufw enable
    

Tài liệu được viết tốt và cung cấp thêm ví dụ: https://help.ubfox.com/community/UFW


1
Khi làm việc với các cấu hình tường lửa, có thể là một ý tưởng tốt để tạo một công việc định kỳ vô hiệu hóa lại tường lửa. Chỉ trong trường hợp bạn bị khóa.
pymkin

Lưu ý rằng điều này không hoạt động với ufw 0,35, ném các lỗi như ERROR: Bad destination addressERROR: Bad source address
Dave

Và làm thế nào để cho phép tất cả các cổng ngoại trừ một cổng cho một giao diện cụ thể? Tôi đang sử dụng quy tắc từ chối mặc định và muốn chặn cổng DNS 53 trên giao diện ethernet để ngăn rò rỉ DNS khi sử dụng VPN. Hiện tại tôi phải cho phép tất cả các cổng mà tôi muốn sử dụng cho các dải IP riêng không thuận tiện.
baptx
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.