it-swarm-vi.com

Lời khuyên cho một cấu hình iptables an toàn để bảo vệ khỏi các cuộc tấn công. (phía khách hàng!)

Ví dụ riêng:

###############
# KERNEL PARAMETER CONFIGURATION

# PREVENT YOU SYSTEM FROM ANSWERING ICMP ECHO REQUESTS
echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all

# DROP ICMP ECHO-REQUEST MESSAGES SENT TO BROADCAST OR MULTICAST ADDRESSES
echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts

# DONT ACCEPT ICMP REDIRECT MESSAGES
echo 0 > /proc/sys/net/ipv4/conf/all/accept_redirects

# DONT SEND ICMP REDIRECT MESSAGES
echo 0 > /proc/sys/net/ipv4/conf/all/send_redirects

# DROP SOURCE ROUTED PACKETS
echo 0 > /proc/sys/net/ipv4/conf/all/accept_source_route

# ENABLE TCP SYN COOKIE PROTECTION FROM SYN FLOODS
echo 1 > /proc/sys/net/ipv4/tcp_syncookies

# ENABLE SOURCE ADDRESS SPOOFING PROTECTION
echo 1 > /proc/sys/net/ipv4/conf/all/rp_filter

# LOG PACKETS WITH IMPOSSIBLE ADDRESSES (DUE TO WRONG ROUTES) ON YOUR NETWORK
echo 1 > /proc/sys/net/ipv4/conf/all/log_martians

# DISABLE IPV4 FORWARDING
echo 0 > /proc/sys/net/ipv4/ip_forward

###############
# INPUT

# DROP INVALID
$IPTABLES -A INPUT -m state --state INVALID -j DROP

# ALLOW ONLY ESTABLISHED, RELATED
$IPTABLES -A INPUT -p tcp -i $PUBIF -m state --state ESTABLISHED,RELATED -j ACCEPT
$IPTABLES -A INPUT -p udp -i $PUBIF -m state --state ESTABLISHED,RELATED -j ACCEPT

# DROP INVALID SYN PACKETS
$IPTABLES -A INPUT -p tcp --tcp-flags ALL ACK,RST,SYN,FIN -j DROP
$IPTABLES -A INPUT -p tcp --tcp-flags SYN,FIN SYN,FIN -j DROP
$IPTABLES -A INPUT -p tcp --tcp-flags SYN,RST SYN,RST -j DROP

# MAKE SURE NEW INCOMING TCP CONNECTIONS ARE SYN PACKETS; OTHERWISE WE NEED TO DROP THEM 
$IPTABLES -A INPUT -p tcp ! --syn -m state --state NEW -j DROP

# DROP PACKETS WITH INCOMING FRAGMENTS. THIS ATTACK RESULT INTO LINUX SERVER PANIC SUCH DATA LOSS
$IPTABLES -A INPUT -f -j DROP

# DROP INCOMING MALFORMED XMAS PACKETS
$IPTABLES -A INPUT -p tcp --tcp-flags ALL ALL -j DROP

# DROP INCOMING MALFORMED NULL PACKETS
$IPTABLES -A INPUT -p tcp --tcp-flags ALL NONE -j DROP

###############
# OUTPUT

# DROP INVALID
$IPTABLES -A OUTPUT -m state --state INVALID -j DROP

# DROP INVALID SYN PACKETS
$IPTABLES -A OUTPUT -p tcp --tcp-flags ALL ACK,RST,SYN,FIN -j DROP
$IPTABLES -A OUTPUT -p tcp --tcp-flags SYN,FIN SYN,FIN -j DROP
$IPTABLES -A OUTPUT -p tcp --tcp-flags SYN,RST SYN,RST -j DROP

# MAKE SURE NEW OUTGOING TCP CONNECTIONS ARE SYN PACKETS; OTHERWISE WE NEED TO DROP THEM 
$IPTABLES -A OUTPUT -p tcp ! --syn -m state --state NEW -j DROP

# DROP PACKETS WITH OUTGOING FRAGMENTS. THIS ATTACK RESULT INTO LINUX SERVER PANIC SUCH DATA LOSS
$IPTABLES -A OUTPUT -f -j DROP

# DROP OUTGOING MALFORMED XMAS PACKETS
$IPTABLES -A OUTPUT -p tcp --tcp-flags ALL ALL -j DROP

# DROP OUTGOING MALFORMED NULL PACKETS
$IPTABLES -A OUTPUT -p tcp --tcp-flags ALL NONE -j DROP

Chúng ta có thể thu thập nhiều ý tưởng liên quan đến iptables tuyệt vời để bảo vệ khách hàng khỏi các cuộc tấn công không? Ví dụ: "bảo vệ khỏi các cuộc tấn công" của Ubuntu 11.04 Máy tính để bàn.

Cảm ơn bạn!

p.s.: tất nhiên:

$IPTABLES -P INPUT DROP
$IPTABLES -P FORWARD DROP
$IPTABLES -P OUTPUT DROP

p.s.2: cả trên IPv4 và IPv6!

p.s.3: Tôi không cần các quy tắc như: chỉ cho phép UDP và TCP trên cổng 53 bên ngoài, tôi chỉ muốn các quy tắc "bảo vệ" từ ví dụ: portscanning, tấn công, v.v.

p.s.4: PC đứng sau bộ định tuyến/NAT hoặc được kết nối "trực tiếp với internet".

16
LanceBaynes

Tôi nhận thấy có nhiều ý kiến ​​khác nhau, nhưng một thái độ chính của những người thực sự biết về mạng và bảo mật là hầu hết các quy tắc iptables/sysctl này đều dư thừa, nếu không gây hại cho bạn và mạng. Một số sẽ tích cực chỉ trích bạn vì vi phạm với hành vi tiêu chuẩn mà không có lý do. Vài ví dụ:

  • Hành vi TCP/IP tiêu chuẩn là TÌM KIẾM để người ngang hàng nhận được một số gợi ý về những gì đang diễn ra. Có thể ai đó vừa gõ sai URL hoặc quản trị viên của bạn đang đếm máy chủ hoặc ai đó muốn kết nối với máy chủ chơi trò chơi của bạn nhưng đã nhập sai cổng. Với DROP, họ chỉ nhận được thời gian chờ tối nghĩa và khó chịu.

  • Không cần phải bỏ các gói không hợp lệ hoặc không đúng định dạng, tất cả các cuộc tấn công này đã có một thập kỷ. Các nhà phát triển nhân Linux cập nhật hơn nhiều so với bạn về loại gói nào hợp lệ và loại nào không. "Những gì về sai sót trong tương lai", một số có thể tranh luận. Chà, làm thế nào để bạn biết lỗ hổng trong tương lai sẽ nằm trong trình xử lý TCP chứ không phải trong trình phân tích cú pháp iptables TCP?

  • Hầu hết các cài đặt sysctl là mặc định. Nếu họ không, thường có một lý do. Ví dụ, tại sao vô hiệu hóa gửi chuyển hướng? Tôi thấy rất hữu ích khi được một người ngang hàng thông báo rằng việc định tuyến của tôi rất tệ, ngay cả khi tôi sẽ không bao giờ phản ứng ("accept_redirects", default = 0).

  • Với log_martians của bạn và các quy tắc ghi nhật ký khác, tôi hy vọng bạn cũng có hạn ngạch trên/var/log, hoặc sẽ rất vui khi điền từ xa vào đĩa của bạn, thường là giết chết các dịch vụ/ứng dụng của bạn. Ngoài ra, bạn nên sử dụng giới hạn tốc độ cho việc ghi nhật ký hoặc ai đó có thể điền vào hạn ngạch để ngăn bạn nhìn thấy các nỗ lực bruteforce mật khẩu SSH trong auth.log hoặc các nội dung khác. Bạn đang thực sự đọc những bản ghi trên máy tính để bàn? Tôi khuyên bạn nên kiểm tra.

  • Bạn xuất hiện để chặn ICMP. Ngoài vấn đề DHCP được đề cập, điều này cũng ngăn chặn phát hiện PMTU. Nếu không có PMTUD, bạn sẽ có hành vi lạ khi bạn sử dụng hệ thống ở những nơi có kết nối DSL hoặc các cài đặt mạng khác. Một số gói sẽ bị bỏ và không ai nói cho bạn biết tại sao.

  • Lọc các gói đi là loại tối nghĩa. Bạn không tin tưởng chính mình? Bạn thường không nên chạy bất kỳ chương trình nào bạn không thể tin tưởng. Các hệ điều hành hàng hóa hầu như không có khả năng cách ly các chương trình này khỏi việc nghe lén hoặc thậm chí thao túng dữ liệu của chương trình khác (ví dụ: các cuộc tấn công thời gian bộ đệm)

  • Bạn yêu cầu các gói MỚI phải có SYN. Điều này sẽ bị hỏng nếu kết nối a TCP được tiếp tục sau khi trạng thái tương ứng trong iptables đã hết thời gian. Không chắc chắn thời gian chờ mặc định là gì, nhưng một số anh chàng netfilter đã cảnh báo về nó.

Vì vậy, khi nào một máy tính để bàn nên có tường lửa?

  • Nếu có một cuộc tấn công cụ thể trong tin tức rằng hệ điều hành hoặc máy chủ hiện tại của bạn dễ bị tấn công và một trong những cách khắc phục nhanh được đề xuất là quy tắc tường lửa.

  • Bạn phải chạy một số dịch vụ không cho phép cấu hình an toàn. Hầu hết làm, và phần còn lại được thay thế tốt nhất bằng các lựa chọn thay thế an toàn.

  • Bạn có các mạng phức tạp hơn với một số VM và/hoặc giao diện trên máy tính để bàn của bạn.

Công cụ đầu tiên và quan trọng nhất cho bảo mật mạng của bạn là cập nhật hệ thống. Thứ hai, có netstat và nmap, bạn nên sử dụng để tìm và xác nhận những dịch vụ bạn đang chạy. Sau đó, chỉ cần vô hiệu hóa những người bạn không cần hoặc giới hạn họ thành 127.0.0.1.

Phần thưởng nếu bạn đọc đến nay: Các gói được THÀNH LẬP, LIÊN QUAN hoặc MỚI, mọi thứ khác bạn thả. Bạn cũng bỏ MỚI trừ khi chỉ có SYN được đặt. Kể từ khi THÀNH LẬP, LIÊN QUAN dường như kiểm tra các cờ, điều này làm cho tất cả các quy tắc --tcp-flags và cả quy tắc -f trở nên dư thừa. Tương tự đối với OUTPUT, nhưng vì không có gói nào được CHẤP NHẬN cho OUTPUT dù sao đi nữa, điều đó có lẽ không thành vấn đề.

22
pepe

Tôi sẽ cẩn thận khi tạo các phần này của cùng một bộ quy tắc cho các thiết bị trong mạng đáng tin cậy và các thiết bị trong DMZ. Bằng cách sử dụng các quy tắc bạn đã xác định ở đó, bạn sẽ không trả lời máy chủ DHCP hỏi (ICMP echo) nếu IP của bạn đang được sử dụng. Điều này có thể dẫn đến một tình huống địa chỉ trùng lặp.

Tôi sẽ tạo hai bộ quy tắc khác nhau để áp dụng cho từng kịch bản, một cái gì đó giống như những gì được liệt kê ở trên là cơ sở tốt cho máy DMZ, nhưng tạo ra một số thách thức trên mạng LAN thông thường.

Ngoài ra, tôi chắc chắn sẽ khuyên bạn nên thêm đăng nhập vào martian, thả ra, kết nối bị rơi trong nước, v.v ... Điều này có thể rất quan trọng để khắc phục sự cố và có thể là dữ liệu hữu ích hơn cho SIEM của bạn để ăn.

6
Ori

Đối với PC khách, được kết nối trực tiếp với internet qua ppp, các quy tắc sau đây là một khởi đầu tốt:

iptables -A INPUT -i lo -j ACCEPT
iptables -A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
iptables -A INPUT -p tcp -j REJECT --reject-with tcp-reset
iptables -A INPUT -p udp -j REJECT
ip6tables -A INPUT -i lo -j ACCEPT
ip6tables -A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
ip6tables -A INPUT -p tcp -j REJECT --reject-with tcp-reset
ip6tables -A INPUT -j REJECT
  1. Nó cho phép mọi thứ trên giao diện cục bộ nội bộ.
  2. Nó cho phép bất kỳ gói nào là câu trả lời cho gói bạn gửi đi. Điều này bao gồm các gói trong một kết nối TCP, câu trả lời cho các gói UDP như các truy vấn DNS nhỏ. Đối với giao thức FTP không được mã hóa kiểu cũ, điều này bao gồm kết nối dữ liệu, giả sử ip_conntrack_ftp được tải
  3. Từ chối tất cả các cố gắng để mở một kết nối tcp từ bên ngoài
  4. Từ chối tất cả các gói udp ban đầu (không trả lời).

Ngoài ra, bạn có thể sử dụng -j DROP trong hai quy tắc cuối cùng. Để thảo luận về chủ đề này, hãy xem Từ chối các gói IP có lỗi ICMP hoặc chỉ cần thả chúng?

5
Hendrik Brummermann

Vì vậy, để giải thích câu hỏi của bạn ở đây là những gì tôi đã chạy (và tôi sẽ sử dụng các ví dụ của bạn với các ghi chú, vì tôi không có nhiều bình luận được đưa lên mạng lưới từ khi IPCHAINS chết trong những năm trước.)

Điều này có thể hoạt động cho một hệ thống nội bộ, nhưng bạn sẽ thường dành thời gian để định cấu hình iptables của mình cho các ứng dụng mới không được tính đến. Tôi cũng đã xóa quy tắc SSH của mình, nhưng đó là một quy tắc khá chuẩn mà bạn sẽ thấy (và trong nhiều cấu hình, chỉ có một cấu hình duy nhất bạn sẽ thấy để cho phép nhập liệu.)

###############
# VARIABLE DEFINITIONS
IPTABLES=/sbin/iptables

#Your DHCP Server for input of ICMP packets
DHCPSERVER=127.0.0.1
PUBIF=eth0

# KERNEL PARAMETER CONFIGURATION
#
# DROP ICMP ECHO-REQUEST MESSAGES SENT TO BROADCAST OR MULTICAST ADDRESSES
echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts
#
# DONT ACCEPT ICMP REDIRECT MESSAGES
echo 0 > /proc/sys/net/ipv4/conf/all/accept_redirects
#
# DONT SEND ICMP REDIRECT MESSAGES
echo 0 > /proc/sys/net/ipv4/conf/all/send_redirects
#
# DROP SOURCE ROUTED PACKETS
echo 0 > /proc/sys/net/ipv4/conf/all/accept_source_route
#
# ENABLE TCP SYN COOKIE PROTECTION FROM SYN FLOODS
echo 1 > /proc/sys/net/ipv4/tcp_syncookies
#
# ENABLE SOURCE ADDRESS SPOOFING PROTECTION
echo 1 > /proc/sys/net/ipv4/conf/all/rp_filter

# LOG PACKETS WITH IMPOSSIBLE ADDRESSES (DUE TO WRONG ROUTES) ON YOUR NETWORK
echo 1 > /proc/sys/net/ipv4/conf/all/log_martians

# DISABLE IPV4 FORWARDING
echo 0 > /proc/sys/net/ipv4/ip_forward
###############
$IPTABLES -F
###############
# LOGDROPPER
$IPTABLES -N LOGNDROP > /dev/null 2> /dev/null 
$IPTABLES -F LOGNDROP 
$IPTABLES -A LOGNDROP -j LOG --log-prefix "LOGNDROP: " 
$IPTABLES -A LOGNDROP -j DROP

###############
# LO allowance
$IPTABLES -A INPUT -i lo -j ACCEPT
$IPTABLES -A OUTPUT -o lo -j ACCEPT

###############
# Only bring what you need to survive
$IPTABLES -A INPUT -p icmp -s $DHCPSERVER -j ACCEPT
$IPTABLES -A INPUT -i $PUBIF -s $DHCPSERVER -p tcp --sport 68 --dport 67 -j ACCEPT
$IPTABLES -A INPUT -i $PUBIF -s $DHCPSERVER -p udp --sport 68 --dport 67 -j ACCEPT
###############
# INPUT
#
# DROP INVALID
$IPTABLES -A INPUT -m state --state INVALID -j LOGNDROP

# ALLOW ONLY ESTABLISHED, RELATED
$IPTABLES -A INPUT -p tcp -i $PUBIF -m state --state ESTABLISHED,RELATED -j ACCEPT
$IPTABLES -A INPUT -p udp -i $PUBIF -m state --state ESTABLISHED,RELATED -j ACCEPT

# DROP INVALID SYN PACKETS
$IPTABLES -A INPUT -p tcp --tcp-flags ALL ACK,RST,SYN,FIN -j LOGNDROP
$IPTABLES -A INPUT -p tcp --tcp-flags SYN,FIN SYN,FIN -j LOGNDROP
$IPTABLES -A INPUT -p tcp --tcp-flags SYN,RST SYN,RST -j LOGNDROP

# MAKE SURE NEW INCOMING TCP CONNECTIONS ARE SYN PACKETS; OTHERWISE WE NEED TO DROP THEM
$IPTABLES -A INPUT -p tcp ! --syn -m state --state NEW -j LOGNDROP

# DROP PACKETS WITH INCOMING FRAGMENTS. THIS ATTACK RESULT INTO LINUX SERVER PANIC SUCH DATA LOSS
$IPTABLES -A INPUT -f -j LOGNDROP

# DROP INCOMING MALFORMED XMAS PACKETS
$IPTABLES -A INPUT -p tcp --tcp-flags ALL ALL -j LOGNDROP

# DROP INCOMING MALFORMED NULL PACKETS
$IPTABLES -A INPUT -p tcp --tcp-flags ALL NONE -j LOGNDROP

###############
# OUTPUT

# DROP INVALID
$IPTABLES -A OUTPUT -m state --state INVALID -j LOGNDROP

# DROP INVALID SYN PACKETS
$IPTABLES -A OUTPUT -p tcp --tcp-flags ALL ACK,RST,SYN,FIN -j LOGNDROP
$IPTABLES -A OUTPUT -p tcp --tcp-flags SYN,FIN SYN,FIN -j LOGNDROP
$IPTABLES -A OUTPUT -p tcp --tcp-flags SYN,RST SYN,RST -j LOGNDROP

# DROP PACKETS WITH OUTGOING FRAGMENTS. THIS ATTACK RESULT INTO LINUX SERVER PANIC SUCH DATA LOSS
$IPTABLES -A OUTPUT -f -j LOGNDROP

# DROP OUTGOING MALFORMED XMAS PACKETS
$IPTABLES -A OUTPUT -p tcp --tcp-flags ALL ALL -j LOGNDROP

# DROP OUTGOING MALFORMED NULL PACKETS
$IPTABLES -A OUTPUT -p tcp --tcp-flags ALL NONE -j LOGNDROP

$IPTABLES -P OUTPUT ACCEPT
$IPTABLES -A INPUT -j LOGNDROP
$IPTABLES -A FORWARD -j LOGNDROP

Nếu mạng của bạn ồn ào, hoặc bạn có nhiều thứ đang diễn ra, điều này sẽ nhanh chóng lấp đầy khối lượng nhật ký của bạn. Nhưng tôi bị hoang tưởng, và cũng làm phiền mọi người nếu họ tạo ra các cấu hình gây ồn ào không cần thiết.

4
Ori