kịch bản cố vấn quy tắc iptables


9

Có một máy chủ không có bất kỳ bảo vệ iptables nào :ACCEPT all..

Có thể có các ứng dụng tùy chỉnh trên máy chủ này.

Nếu chúng ta cần phải làm cứng máy chủ này (vì vậy hãy từ chối tất cả và chỉ để những gì cần thiết cho các ứng dụng) với các quy tắc iptables nghiêm ngặt, chúng ta phải tìm hiểu bằng tay rằng ứng dụng nào sử dụng dst/src port/protocolvà sau đó chúng ta phải viết các quy tắc iptables cho họ ..

Câu hỏi : có tập lệnh nào có thể giúp thu thập những thông tin này từ một máy đang chạy không? (từ nhật ký?) - Và tự động tạo quy tắc iptables?

Giống như có audit2allowtrên SELinux. Chỉ dành cho iptables!

Máy không thể bị cúp!

Ví dụ: tập lệnh "MAGIC" sẽ chạy một tuần / tháng trên máy, thu thập thông tin, sau đó, sau một tuần / tháng, tập lệnh sẽ có thể tạo tệp quy tắc iptables mà chúng ta có thể sử dụng.

Nhiều người có thể gặp phải tình huống này (cách làm cứng máy chủ liên quan đến iptables). Và thật tuyệt nếu có một kịch bản / giải pháp có thể làm điều này: \


Ngoài ra, chặn tất cả mọi thứ và chỉ để những gì cần thiết thông qua. Bạn có thể tìm ra những gì cần thiết với một tcpdump chạy trong một tuần hoặc lâu hơn.
Lawrence

Không thể có bất kỳ sự cố ngừng hoạt động nào trên máy này :)
evachristine 04/07 '

1
Thế còn fail2ban
totti

1
Bạn có thể theo dõi lưu lượng truy cập hoặc kiểm tra các cổng mở, nhưng bạn có thể sẽ bỏ lỡ, nhưng lưu lượng đi quan trọng (cập nhật bảo mật đặc biệt, thư được gửi trong các trường hợp hiếm gặp, ...). Miễn là bạn chỉ muốn lọc lưu lượng đến, giám sát có thể là một tùy chọn.
jofel

Điều này hoàn toàn có thể làm được, bạn có thể viết kịch bản một cách để xây dựng bộ quy tắc từ các ứng dụng đang chạy và các cổng tiếp xúc. Nhưng bạn thực sự không muốn làm điều này bởi vì 1) trong hầu hết các trường hợp, không phải tất cả các dịch vụ đều cần được tiếp xúc với mạng và 2) có thể có những dịch vụ mà bạn hoàn toàn không muốn tiếp xúc với mạng. Thay vào đó hãy làm bằng tay, một lần, thiết lập một bộ quy tắc tốt và đi từ đó. Một cách để làm điều đó một cách an toàn là xây dựng bộ quy tắc với các quy tắc THÀNH LẬP / LIÊN QUAN và CHẤP NHẬN sau đó kiểm tra các quy tắc có liên quan phù hợp với lưu lượng truy cập. Khi bạn hài lòng, hãy thay đổi chính sách INPUT để loại bỏ.
Pedro

Câu trả lời:


2

Làm thủ công

sudo ss -tuanp

hoặc là

sudo netstat -tuanp

Giải trình:

-t - show tcp sockets
-u - show udp sockets
-a - show all sockets
-n - show numeric, don't resolve 
-p - show process name

1

Chạy tcpdumptrên máy trong một tuần hoặc lâu hơn để nắm bắt lưu lượng trung bình. Sau đó, bạn có thể duyệt lưu lượng bằng cách sử dụng wireshark sau để xem cổng nào đang được sử dụng.

Lệnh cho điều này sẽ là tcpdump -i <interface> -s 65535 -w <some-file>

Sau đó, bạn có thể ánh xạ lại phần này bằng cách sử dụng netstat -tuanpđể xem các ứng dụng / ứng dụng đang sử dụng cổng nào.

Về mặt lý thuyết điều này có thể được viết kịch bản.


1

Bạn có thể bắt đầu với một mẫu rất cơ bản như- https://gist.github.com/jiruska/3742890 , chỉ cho phép ssh và ping và thêm bất kỳ thứ gì khác theo cách thủ công.

hack tập lệnh nhanh để tạo quy tắc iptables cho ứng dụng của bạn nghe trên giao diện công cộng (0.0.0.0) / tcp

netstat -lnpt | egrep '0.0.0.0:[0-9]+' | awk '{print $4,$7}' | \
sed -E -e 's/0.0.0.0://g' -e 's|[0-9]+/||' | \
awk '{printf ("iptables -A INPUT -p tcp --dport %5d --syn -m conntrack --ctstate NEW -m comment %s \n", $1,$2) }'

bạn cũng có thể sử dụng iptables -I INPUT <number>để tiêm quy tắc vào một vị trí cụ thể mà bạn có thể liệt kê vớiiptables -nvL --line-numbers INPUT


1

Thật không may, không có tập lệnh nào mà tôi từng thấy có thể chạy trong chế độ học tập hoặc chế độ thụ động ghi nhật ký tất cả việc sử dụng mạng của bạn, lấy kết quả của nó và tạo tường lửa thực tế bằng cách sử dụng iptablestừ nhật ký của nó.

Đặt cược tốt nhất của bạn sẽ là bắt đầu đơn giản và liên tục thêm các phần khác nhau khi bạn bắt đầu hiểu đầy đủ các dịch vụ mà hệ thống của bạn đang cung cấp. Bạn sẽ cần sử dụng các công cụ như netstatđể xem cổng nào đang được sử dụng cho các dịch vụ khác nhau mà bạn lưu trữ, cũng như địa chỉ IP nào đang truy cập vào chúng.

$ sudo netstat -tlpn
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address               Foreign Address             State       PID/Program name   
tcp        0      0 0.0.0.0:25                  0.0.0.0:*                   LISTEN      26292/sendmail      
tcp        0      0 0.0.0.0:890                 0.0.0.0:*                   LISTEN      26149/ypbind        
tcp        0      0 0.0.0.0:445                 0.0.0.0:*                   LISTEN      26321/smbd          
tcp        0      0 127.0.0.1:2207              0.0.0.0:*                   LISTEN      26226/python        
tcp        0      0 127.0.0.1:2208              0.0.0.0:*                   LISTEN      26221/./hpiod       
tcp        0      0 127.0.0.1:199               0.0.0.0:*                   LISTEN      26237/snmpd         
tcp        0      0 0.0.0.0:809                 0.0.0.0:*                   LISTEN      26067/rpc.statd     
tcp        0      0 0.0.0.0:139                 0.0.0.0:*                   LISTEN      26321/smbd          
tcp        0      0 0.0.0.0:587                 0.0.0.0:*                   LISTEN      26292/sendmail      
tcp        0      0 0.0.0.0:111                 0.0.0.0:*                   LISTEN      26038/portmap       
tcp        0      0 0.0.0.0:35604               0.0.0.0:*                   LISTEN      -                   
tcp        0      0 0.0.0.0:22                  0.0.0.0:*                   LISTEN      26249/sshd          
tcp        0      0 0.0.0.0:631                 0.0.0.0:*                   LISTEN      26257/cupsd         
tcp        0      0 :::22                       :::*                        LISTEN      26249/sshd          
tcp        0      0 :::631                      :::*                        LISTEN      26257/cupsd         

LƯU Ý: Ở trên, bạn có thể thấy những dịch vụ nào tôi đang chạy trên máy chủ chấp nhận kết nối TCP, tức là chúng đang "lắng nghe" các kết nối trên các cổng khác nhau.

Sẽ không có gì khó khăn khi bắt đầu với những thứ như SSH (cổng 22) và HTTP (cổng 80), nếu những thứ này là điển hình cho hệ thống của bạn, vì vậy tôi sẽ thực hiện các loại dịch vụ này cùng một lúc. Đối với các dịch vụ khác như LDAP hoặc NIS, bạn có thể muốn thực hiện những điều này theo cách được kiểm soát nhiều hơn, đảm bảo mọi thứ không bị phá vỡ khi bạn giới thiệu chúng.

Các công cụ như FireHOL , Firewall Builder (fwbuilder) và eztables có thể hữu ích khi bạn tấn công dự án này, vì chúng cung cấp một lớp trừu tượng đẹp từ việc phải xây dựng các iptablequy tắc tùy chỉnh bằng tay, có thể rất khó.

Lửa

FireHOL là một ngôn ngữ (và một chương trình để chạy nó), xây dựng các tường lửa an toàn, trạng thái của bất kỳ sự phức tạp nào từ các cấu hình dễ hiểu, dễ đọc của con người.

thí dụ

transparent_squid 8080 "squid root" inface eth0

interface eth0 mylan
    policy accept

interface ppp+ internet
    server smtp accept
    server http accept
    server ftp  accept
    server ssh  accept src example.firehol.org

    client all  accept

router mylan2internet inface eth0 outface ppp+
    masquerade
    route all accept
nhà thi đấu

Fwbuilder là một công cụ tường lửa đồ họa độc đáo cho phép người dùng tạo các đối tượng và sau đó kéo và thả các đối tượng đó vào tường lửa, để xây dựng một hệ thống bảo mật mạnh mẽ cho một PC hoặc một mạng PC. Fwbuilder hỗ trợ một loạt các tường lửa (Cisco ASA / PIX, Linux iptables, ipfilter của FreeBSD, pf của OpenBSD, v.v.), vì vậy các quy tắc của nó có thể được triển khai trên nhiều nền tảng. Chúng ta hãy xem việc sử dụng Fwbuilder trên Linux, điều này có thể trở thành một vấn đề trọn đời với một hệ thống bảo mật mạnh mẽ.

thí dụ

   fwbuilder

eztables

Eztables cho phép bạn nhanh chóng cấu hình tường lửa mà không cần chạm vào iptables. Cú pháp quy tắc tường lửa được thiết kế để dễ đọc và áp dụng.

Đây là cách bạn cho phép toàn bộ internet truy cập máy chủ web của mình trên cổng TCP 80:

  allow_in any $eth0 any 80/tcp

Eztables được thiết kế đơn giản, nhưng mạnh mẽ. Sẽ không thành vấn đề nếu bạn muốn bảo vệ máy tính xách tay của mình, đang thiết lập bộ định tuyến gia đình hoặc xây dựng tường lửa công ty.

Sử dụng Fail2Ban

Với một iptablestường lửa thô sơ, bạn có thể muốn khen ngợi nó bằng cách sử dụng một công cụ như Fail2Ban .

đoạn trích

Fail2ban quét các tệp nhật ký (ví dụ / var / log / apache / error_log) và cấm các IP hiển thị các dấu hiệu độc hại - quá nhiều lỗi mật khẩu, tìm cách khai thác, v.v. Nói chung Fail2Ban được sử dụng để cập nhật các quy tắc tường lửa để từ chối các địa chỉ IP trong một khoảng thời gian xác định, mặc dù mọi hành động khác tùy ý (ví dụ gửi email) cũng có thể được định cấu hình. Fail2Ban đi kèm với các bộ lọc cho các dịch vụ khác nhau (apache, chuyển phát nhanh, ssh, v.v.).

Sử dụng các công cụ như thế này sẽ giúp hạn chế sự phơi nhiễm mà hệ thống của bạn sẽ phải chịu đựng khi bạn tiếp tục làm cứng nó. Ngay cả sau khi bạn khá tin rằng hệ thống của bạn đã bị cứng, bạn vẫn có thể muốn tiếp tục sử dụng Fail2Ban như một phần của các biện pháp bảo mật của mình.

Người giới thiệu


0

Sử dụng các quy tắc iptable để ghi nhật ký các kết nối mới, điều đó cũng sẽ ghi lại udp.

iptables -I INPUT -m state --state NEW -j LOG --log-prefix "New inbound connection: "
iptables -I OUTPUT -m state --state NEW -j LOG --log-prefix "New outbound connection: "

Bạn có thể chỉ định khác nhau --log-level để có các bản ghi trong một tệp khác ngoài / var / log / message (bạn sẽ phải định cấu hình trình nền syslog).

Tôi nghĩ bạn nên đọc nhật ký ứng dụng chính vì một số máy chủ có hoạt động rất định kỳ như buổi trưa, cuối tuần, cuối tháng (quý, năm) để bạn không bỏ lỡ một hoạt động mạng quan trọng nào của máy chủ.

Vì máy chủ rất quan trọng, làm cho ma trận lưu lượng mạng của máy chủ trên một bảng tính đẹp (nguồn ip, ip Dest, giao thức, cổng, ứng dụng) sẽ giúp bạn xây dựng các quy tắc.


0

Tôi biết đây không phải là kịch bản và nó không phải là câu trả lời cho câu hỏi của OP nhưng đó là ý tưởng của tôi mà tôi muốn chia sẻ với OP.

Tôi có tất cả các cổng nghe với:

netstat -an | egrep 'tcp .*LISTEN' | awk -F" " '{print $4}' | awk -F":" '{print $NF}'

Có lẽ điều này có thể giúp bạn gần gũi hơn để viết kịch bản của riêng bạn. :)


0

Bạn có thể bắt đầu với một cái gì đó như thế này:

netstat -n -l -p | egrep "^(tcp|tcp6|udp)" | grep LISTEN | sed -r 's!^(tcp|tcp6|udp)\s.*:([0-9]+).*LISTEN\s+.*/(.*)!iptables -A INPUT -p \1 --dport \2 -j ACCEPT # \3!'

và sau đó theo dõi nó với

iptables -P INPUT DROP

hoặc là

iptables -A INPUT -j REJECT --reject-with icmp-host-prohibited

Những gì dòng đầu tiên làm là sử dụng netstat để liệt kê các quá trình nghe và các cổng của chúng. Sau đó, nó sẽ tạo ra các dòng "iptables" để cho phép từng kết nối đến. Sự thay thế regex sed nhỏ đã được tùy chỉnh cho đầu ra netstat trên máy chủ của tôi, vì vậy nó có thể yêu cầu một số điều chỉnh cho bạn. Khi nó hoạt động, bạn nên kết thúc với một cái gì đó trông như:

iptables -A INPUT -p tcp --dport 111 -j ACCEPT # rpcbind       
iptables -A INPUT -p tcp --dport 22 -j ACCEPT # sshd          
iptables -A INPUT -p tcp --dport 25 -j ACCEPT # master        
iptables -A INPUT -p tcp --dport 3306 -j ACCEPT # mysqld        
iptables -A INPUT -p tcp --dport 49476 -j ACCEPT # rpc.statd     
iptables -A INPUT -p tcp --dport 5432 -j ACCEPT # postgres.bin  
iptables -A INPUT -p tcp --dport 55371 -j ACCEPT # rpc.statd

Hai điều quan trọng cần lưu ý:

1) Các quy tắc này không làm cho bạn cho đến khi bạn đặt dòng DROP hoặc RE DỰA ở cuối hoặc đặt chính sách mặc định cho các gói không khớp. Các quy tắc này cho phép các gói, đó là moot, nếu chính sách mặc định cho phép mọi thứ không khớp.

2) Các quy tắc này không rõ ràng về IP nguồn . Từ bài đăng gốc của bạn, có vẻ như bạn muốn cho phép tất cả khách hàng của mình sử dụng máy chủ, sau đó, kiểm tra nhật ký để lấy IP nguồn đi cùng với các cổng đích. Tôi không biết về một công cụ để làm điều đó, vì vậy tập lệnh này sẽ chỉ ngăn mọi người tạo các dịch vụ mới trên máy chủ của bạn, nghe trên các cổng khác ... đó là một cái gì đó .

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.