Câu hỏi là về UFW, nhưng câu trả lời này sử dụng trực tiếp iptables và có thể không phải là điều mong muốn.
Bạn có thể chặn các gói mạng đi và đến, ngoại trừ các gói SSH của bạn bằng tập lệnh iptables này:
#!/bin/sh
FWVER=0.01
#
# ask1393247 Smythies 2022.02.16 Ver:0.01
# Xem tại đây:
# https://askubuntu.com/questions/1393247/does-ufw-allow-all-incoming-traffic-in-response-to-outbound-requests?noredirect=1#comment2409932_1393247
# chạy dưới dạng sudo trên s19.
# Bắt đầu từ bên dưới:
#
# ask1368071 Smythies 2021.10.08 Ver:0.01
# Xem tại đây:
# https://askubuntu.com/questions/1368071/iptables-that-only-allow-incoming-traffic-to-openssh-and-block-all-other-traffic
# chạy dưới dạng sudo trên s19.
# mục nhật ký chỉ dành cho mỗi gói ssh MỚI. Có vẻ như không hợp lý khi ghi nhật ký mọi gói ssh, nhưng có thể thực hiện được.
#
echo "Đang tải phiên bản bộ quy tắc ask1393247 $FWVER..\n"
# Vị trí của chương trình iptables
#
IPTABLES=/sbin/iptables
#Đặt các giao diện và địa chỉ BÊN NGOÀI và NỘI BỘ cho mạng
#
# Đặt cho máy tính Smythies s19 (để thử nghiệm). Chỉnh sửa cho máy tính của ask1393247.
EXTIF="br0"
EXTIP="192.168.111.136"
MẠNG="192.168.111.0/24"
VŨ TRỤ="0.0.0.0/0"
# Xóa mọi cấu hình trước đó
# Hãy cẩn thận ở đây. Tôi có thể làm điều này trên s19, nhưng không biết
# về máy tính của người dùng khác.
#
echo " Xóa mọi quy tắc hiện có và đặt chính sách mặc định.."
$IPTABLES -P INPUT DROP
$IPTABLES -F INPUT
$IPTABLES -P OUTPUT DROP
ĐẦU RA $IPTABLES -F
$IPTABLES -P CHẤP NHẬN VỀ PHÍA TRƯỚC
$IPTABLES -F PHÍA TRƯỚC
$IPTABLES -t nat -F
# Xóa chuỗi do người dùng xác định
$IPTABLES -X
# Đặt lại tất cả các bộ đếm IPTABLES
$IPTABLES -Z
# Smythies: Trong khi tài liệu tham khảo của tôi không có nó, tôi nghĩ điều này là cần thiết.
$IPTABLES -t nat -Z
# giao diện loopback hợp lệ.
#
$IPTABLES -A INPUT -i lo -s $UNIVERSE -d $UNIVERSE -j CHẤP NHẬN
# Cho phép mọi lưu lượng truy cập liên quan quay lại máy chủ trong.
# Không rõ lý do, ask1393247 không muốn phiên bản chung. Vì vậy, nhận xét ra.)
#$IPTABLES -A INPUT -i $EXTIF -s $UNIVERSE -d $EXTIP -m state --state ĐÃ THÀNH LẬP,LIÊN QUAN -j CHẤP NHẬN
# ask1393247 có vẻ muốn cái này:
lặp lại "cờ 1"
$IPTABLES -A INPUT -i $EXTIF -s $UNIVERSE -d $EXTIP -m state --state ESTABLISHED,RELATED -p tcp --dport 22 -j ACCEPT
lặp lại "cờ 2"
# Cho phép và đăng nhập các kết nối SSH mới. Không cần thiết nếu bạn không muốn đăng nhập phiên, nhưng sau đó bạn cần thêm MỚI ở trên.
# Lưu ý: Tôi sử dụng cổng 22, vì dù sao thì không ai khác có thể vào được đây. Thay đổi cổng của bạn.
#
$IPTABLES -A INPUT -i $EXTIF -m state --state NEW -p tcp -s $UNIVERSE -d $EXTIP --dport 22 -j LOG --log-prefix "ssh traffic:" --log-level info
$IPTABLES -A INPUT -i $EXTIF -m state --state NEW -p tcp -s $UNIVERSE -d $EXTIP --dport 22 -j CHẤP NHẬN
# Bây giờ, cũng chỉ cho ra ssh:
$IPTABLES -A OUTPUT -o $EXTIF -p tcp --sport 22 -m state --state THIẾT LẬP, LIÊN QUAN -j CHẤP NHẬN
# Lưu ý: nếu máy tính của bạn sử dụng DCHP, thì bạn cần phải cho phép nó, cả vào và ra.
# Xong.
#
echo ask1393247 phiên bản bộ quy tắc $FWVER đã xong.
Và đây là kết quả:
doug@s19:~/iptables/misc$ sudo iptables -xvnL
Chuỗi INPUT (chính sách DROP 133 gói, 11819 byte)
pkts byte đích prot chọn không tham gia đích nguồn
0 0 CHẤP NHẬN tất cả -- lo * 0.0.0.0/0 0.0.0.0/0
202 13689 CHẤP NHẬN tcp -- br0 * 0.0.0.0/0 192.168.111.136 trạng thái LIÊN QUAN, THÀNH LẬP tcp dpt:22
4 280 LOG tcp -- br0 * 0.0.0.0/0 192.168.111.136 trạng thái Tcp MỚI dpt:22 Cờ LOG 0 tiền tố mức 6 "lưu lượng ssh:"
4 280 CHẤP NHẬN tcp -- br0 * 0.0.0.0/0 192.168.111.136 trạng thái tcp MỚI dpt:22
Chuỗi FORWARD (chính sách CHẤP NHẬN 0 gói, 0 byte)
pkts byte đích prot chọn không tham gia đích nguồn
OUTPUT chuỗi (chính sách DROP 14 gói, 3240 byte)
pkts byte đích prot chọn không tham gia đích nguồn
164 25505 CHẤP NHẬN tcp -- * br0 0.0.0.0/0 0.0.0.0/0 tcp spt:22 trạng thái LIÊN QUAN, ĐÃ THÀNH LẬP