Dịch vụ phân giải tên miền

Một phần của tài liệu tìm hiểu và cài đặt hệ thống firewall kết hợp với proxy để bảo vệ hệ thống mạng bên trong (Trang 60)

DNS sử dụng giao thức kết nối dựa trên cả UDP và TCP. Có nhiều kiểu kết nối, thông thường nhất là từ client đến server, hoặc kết nối ngang hàng giữa

# 0.*.*.* - Can't be blocked unilaterally with DHCP # 169.254.0.0/16 - Link Local Networks

# 192.0.2.0/24 - TEST-NET

$IPT -A INPUT -i $INTERNET -s 0.0.0.0/8 -j DROP $IPT -A INPUT -i $INTERNET -s 169.254.0.0/16 -j DROP $IPT -A INPUT -i $INTERNET -s 192.0.2.0/24 -j DROP $IPT -A INPUT -i $INTERNET -s $CLASS_E -j DROP $IPT -A INPUT -i $INTERNET -s $CLASS_D -j DROP

Trang 60

server chuyển tiếp đến server chính, và cuối cùng là kết nối giữa server chính và server phụ.

Hình 2.4 Phân giải địa chỉ client-to-server

2.7.1.1. Cho phép ngƣời dùng phân giải địa chỉ

Đóng vai trò là một client, giả sử máy đó không phải là một DNS server. Mỗi yêu cầu phân giải sẽ được chuyển đến bộ phân giải, sau đó yêu cầu này sẽ được chuyển đến một trong những server được cấu hình trong /etc/resolv.conf. Những luật sau cần ưu tiên hơn các luật sử dùng tên chứ không phải địa chỉ IP, nếu những địa chỉ này không được định nghĩa trong file /etc/hosts.

Trang 61

Những luật sau đây dự phòng cho trường match rất hiếm khi chuỗi phân giải quá dài không chứa đủ trong một gói datagram UDP.

2.7.1.2. Cho phép làm một DNS server trung chuyển

Cấu hình một DNS server trung chuyển có thể tăng hiệu quả làm việc. Khi BIND được cấu hình làm một DNS server trung chuyển, nó hoạt động như là một server đối với máy trạm bên trong và như là một client đối với một DNS server khác bên ngoài. Thay vì sử dụng kết nối từ một cổng không ưu tiên, BIND sử dụng cổng 53 của chính nó để gửi yêu cầu phân giải.

$IPT -A OUTPUT -o $INTERNET -p tcp -s $IPADDR \ --sport $UNPRIVPORTS -d $NAMESERVER --dport 53 \ -m state --state NEW -j ACCEPT

NAMESERVER ="my.name.server" # (TCP/UDP) DNS

$IPT -A OUTPUT -o $INTERNET -p udp -s $IPADDR \ --sport $UNPRIVPORTS -d $NAMESERVER --dport 53 \ -m state --state NEW -j ACCEPT

Trang 62

Hình 2.5 Phân giải địa chỉ khi có server trung chuyển.

2.7.2. Cho phép một số dịch vụ TCP thông dụng

2.7.2.1. Email

Email là dịch vụ hầu hết mọi người dùng đều cần. Email được gửi bằng giao thức SMTP có cổng TCP là 25. Email nhận thông qua một trong ba giao thức SMTP, IMAP, POP. POP và IMAP là dịch vụ nhận mail. POP hoạt động tại cổng 110 còn IMAP hoạt động tại cổng 143. Chi tiết hoạt động của ba giao thức trên thể hiện trong bảng sau:

Để gửi mail ta thường gửi thông qua một relay mail do ISP cung cấp. Nếu biết được địa chỉ relay mail của ISP ta xây dựng luật như sau:

$IPT -A OUTPUT -o $INTERNET -p udp -s $IPADDR \ --sport 53 -d $NAMESERVER --dport 53 \ -m state --state NEW -j ACCEPT

Trang 63

Ngược lại ta có thể cho phép gửi mail đến mợi server nếu không biết đích xác địa chỉ của ISP relay mail.

Để nhận được email ta cũng phải xây dựng luật để cho phép. Những luật sau cho phép ta nhận mail bằng một SMTP server.

Trong trường match ta không sử dụng một SMTP server bên trong, ta có thể sử dụng dịch vụ mail do ISP cung cấp. Trong trường hơp ISP sử dụng một POP server, ta phải cấu hình luật để nhận mail như là một POP client.

Trong trường match ISP sử dụng IMAP server thì ta cũng phải sẽ thay số hiệu cổng --dport thành cổng 143.

2.7.2.2. Telnet

Telnet là dịch vụ mạng kém bảo mật. Ngày nay ta nên sử dụng phiên làm việc trên SSH thay vì Telnet. Tuy nhiên nếu cần ta có thể mở dịch vụ này như sau.

Tuy nhiên ta nên giới hạn địa chỉ truy cập nếu có thể bằng cách thêm vào tùy chọn --destination.

$IPT -A OUTPUT -o $INTERNET -p tcp \ -s $IPADDR --sport $UNPRIVPORTS \

--dport 23 -m state --state NEW -j ACCEPT $IPT -A OUTPUT -o $INTERNET -p tcp \

-s $IPADDR --sport $UNPRIVPORTS -d $POP_SERVER \ --dport 110 -m state --state NEW -j ACCEPT

$IPT -A INPUT -i $INTERNET -p tcp \

--sport $UNPRIVPORTS -d $IPADDR --dport 25 \ -m state --state NEW -j ACCEPT

$IPT -A OUTPUT -o $INTERNET -p tcp -s $IPADDR \

--sport $UNPRIVPORTS -d $SMTP_GATEWAY --dport 25 \ -m state --state NEW -j ACCEPT

SMTP_GATEWAY="my.isp.server"

$IPT -A OUTPUT -o $INTERNET -p tcp -s $IPADDR \

--sport $UNPRIVPORTS -d $SMTP_GATEWAY --dport 25 \ -m state --state NEW -j ACCEPT

Trang 64

Để cho phép người dùng bên ngoài telnet vào bên trong ta sẽ thêm những luật sau.

2.7.2.3. SSH

Ngày nay SSH được sử dụng ngày càng nhiều hơn thay cho telnet. SSH là dịch vụ mạng được bảo mật. Gói dữ liệu truyền đi đã được mã hóa. Để cho phép điều khiển một phiên SSH từ máy firewall ta cấu hình lệnh sau.

Tương tự như dịch vụ telnet, ta nên giới hạn lại dải địa chỉ cho phép truy cập ra bên ngoài nếu có thể. Những luật sau sẽ cho phép kết nối SSH từ bên ngoài đến SSH server cục bộ.

2.7.2.4. FTP

FTP là một trong những phương thức truyền dữ liệu, tập tin giữa hai máy trên mạng thông dụng nhất. Ngày nay, FTP sử dụng giao diện web ngày càng trở nên phổ biến. Tuy nhiên, giống như telnet, FTP gửi thông tin xác thực dạng văn bản thuần, vì thế FTP cũng được xem là giao thức kém bảo mật. Thay vào đó ngày nay ta sử dụng giao thức SFTP hay SCP để tăng khả năng bảo mật cho FTP.

FTP thừa kết từ mô hình client/server thuần TCP. FTP sử dụng hai kết nối tách biệt, một để điều khiển lệnh và một để gửi dữ liệu và những thông tin khác. Để cho phép yêu cầu FTP đi ra qua kênh điều khiển, ta cấu hình lệnh sau.

$IPT -A INPUT -i $INTERNET -p tcp --sport $SSH_PORTS \ -d $IPADDR --dport 22 -m state --state NEW -j ACCEPT

$IPT -A OUTPUT -o $INTERNET -p tcp \ -s $IPADDR --sport $SSH_PORTS \

--dport 22 -m state --state NEW -j ACCEPT

$IPT -A INPUT -i $INTERNET -p tcp --sport $UNPRIVPORTS -d $IPADDR --dport 23 -m state --state NEW -j ACCEPT

Trang 65

Để có thể gửi nhận dữ liệu ta phải cho phép FTP hoạt động trên cổng 20. Trong trường match FTP sử dụng port mode.

Ngược lại, khi FTP sử dụng passive mode.

Trong trường match trong mạng có chạy dịch vụ FTP và ta muốn cho phép người dùng bên ngoài có thể truy cập vào trong ta cần thay đổi lại các chain, địa chỉ đích và nguồn cũng như số hiệu cổng tương ứng cho ba mẫu luật trên.

2.7.2.5. Dịch vụ Web

Thông thường dịch vụ web thường lắng nghe ở cổng 80. Để cho phép một truy cập web ra bên ngoài ta thêm những luật sau.

Trong trường match trong mạng dựng lên một trang web tại Firewall và đưa ra cho phép người dùng bên ngoài truy cập vào thì ta cần thêm những luật sau.

Ngày nay vấn đề bảo mật của dịch vụ web cũng cần được nâng cao. Secure Socket Layer (SSL) và Transport Layer Security (TLS). Ta cần cho phép sử dụng giao thức này để có thể truy cập được dịch vụ web

$IPT -A INPUT -i $INTERNET -p tcp \

--sport $UNPRIVPORTS -d $IPADDR --dport 80 \ -m state --state NEW -j ACCEPT

$IPT -A OUTPUT -o $INTERNET -p tcp \ -s $IPADDR --sport $UNPRIVPORTS \

--dport 80 -m state --state NEW -j ACCEPT $IPT -A OUTPUT -o $INTERNET -p tcp \

-s $IPADDR --sport $UNPRIVPORTS \

--dport $UNPRIVPORTS -m state --state NEW -j ACCEPT $IPT -A INPUT -i $INTERNET -p tcp --sport 20 \

-d $IPADDR --dport $UNPRIVPORTS \ -m state --state NEW -j ACCEPT $IPT -A OUTPUT -o $INTERNET -p tcp \ -s $IPADDR --sport $UNPRIVPORTS \

Trang 66

bảo mật. Để cấu hình luật ta chỉ cần thêm luật với số hiệu cổng là 443 thay vì 80 như ở trên.

Một cách truy cập web khác đó là thông qua proxy. Thông thường proxy này do ISP cung cấp. Web proxy thường lắng nghe trên hai cổng 8008 và 8080. SQUID sử dụng cổng mặc định là 3128. Nếu sử dụng một web proxy nào đó, ta nên cho phép đến địa chỉ đó.

2.7.3. Lọc chặn một số thông điệp ICMP

Có bốn loại thông điệp ICMP cần được cho phép đi qua Firewall: Source Quench, Parameter Problem, gói đến Destination Unreachable, và gói đi Destination Unreachable của Fragmentation Needed.

Trong quá trình hoạt động bình thường, thông điệp ICMP không bao giờ bị phân mảnh. Một thông điệp ICMP luôn nằm trọn trong một frame dữ liệu của tầng liên kết dữ liệu. Để an toàn ta nên ngăn chặn những gói tin đã bị phân mảnh. Những gói tin đó thường được sử dụng trong kiểu tấn công từ chối dịch vụ (denial-of-service).

Trong khi đó, loại thông điệp ICMP thứ 4, Source Quench, có thể được gởi khi một nguồn kết nối, thường là một router, đang gửi dữ liệu nhanh hơn nơi nhận dữ liệu. Source Quench được dùng như là một hình thức chính để kiểm soát luồng tại tầng mạng.

$IPT -A INPUT -i $INTERNET -p icmp \

--icmp-type source-quench -d $IPADDR -j ACCEPT

$IPT -A OUTPUT -o $INTERNET -p icmp \

-s $IPADDR --icmp-type source-quench -j ACCEPT $IPT -A INPUT -i $INTERNET --fragment -p icmp -j DROP

WEB_PROXY_SERVER="my.www.proxy" WEB_PROXY_PORT="www.proxy.port"

$IPT -A OUTPUT -o $INTERNET -p tcp \ -s $IPADDR --sport $UNPRIVPORTS \

-d $WEB_PROXY_SERVER --dport $WEB_PROXY_PORT \ -m state --state NEW -j ACCEPT

Trang 67

Một loại thông điệp ICMP khác, Parameter Problem, được gửi khi một gói tin được nhận lại mang những thông tin không đúng trong header, hoặc khi kiểm tra checksum thấy không đúng.

2.8. Logging

Bất kỳ gói tin nào match với một luật đều có thể ghi log với target –jump LOG. Ghi log gói tin sẽ không ảnh hưởng đến tình trạng của gói tin đó thay vào đó gói tin phải phù match với một luật nhận hoặc loại bỏ.

Cần ghi log những gói tin nào thì tùy vào từng trường match. Đôi khi ta cần ghi lại tất cả những gói tin bị ngăn chặn, hoặc chỉ ghi log đối với một số loại gói tin.

2.9. Tối ƣu luật trong Firewall

Mục tiêu của việc tối ưu luật trong Firewall nhằm làm cho máy Firewall chạy tốt hơn, không phải kiểm tra những luật một cách không cần thiết. Tối ưu hóa luật Firewall được chia thành ba mục chính là tổ chức luật, sử dụng module trạng thái, và cuối cùng là sử dụng chain do ta tự định nghĩa.

2.9.1. Tổ chức luật

Ta có thể thực hiện một chút tối ưu nhỏ chỉ với những chain mặc định INPUT, OUTPUT, FORWARD. Trong từng chain, luật được duyệt từ trên xuống từng luật một cho đến khi tìm được luật thích match.

$IPT -A INPUT -i $LAN_INTERFACE -j LOG $IPT -A OUTPUT -o $LAN_INTERFACE -j LOG

$IPT -A INPUT -i $INTERNET -p icmp \

--icmp-type parameter-problem -d $IPADDR -j ACCEPT

$IPT -A OUTPUT -o $INTERNET -p icmp \

Trang 68

Hình 2.6 Duyệt luật trong chain mặc định

Không có một công thức nào là tối ưu cho việc tối ưu luật. Có tham số chính quyết định cấu hình của một Firewall là trên máy Firewall sẽ chạy những dịch vụ nào và mục đích chính của máy đó là làm gì. Như thế cấu hình luật của một máy Firewall được sử dụng như một máy thường khác với cấu hình luật của một máy được sử dụng để làm lá chắn cho một web server. Ngoài ra còn một tham số thứ ba quyết định đến việc tổ chức luật nữa là vấn đề băng thông mạng, tốc độ kết nối.

Một số cách tối ưu trong việc tổ chức luật như sau:

 Luôn bắt đầu với những luật cấm trước khi đưa thêm luật cho phép những dịch vụ nào đó.

 Dựa vào giao thức, ta nên đặt những luật cho luật cho giao thức TCP lên trước những luật cho giao thức UDP. Bởi vì hầu hết các dịch vụ mạng đều dựa trên giao thức TCP.

 Đặt những luật dành cho những dịch được sử dụng nhiều nhất càng sớm càng tốt. Điều này dựa vào tham số thứ hai trong việc quyết định xây dựng Firewall. Chẳng hạn, ta nên đặt những luật cho dịch vụ web càng sớm càng tốt nếu máy Firewall này được sử dụng làm một web server.

Trang 69

2.9.2. Sử dụng module trạng thái

Sử dụng trạng thái ESTABLISHED và RELATED cốt yếu là cho phép ta chuyển những tất cả luật cho những kết nối bắt đầu từ bên trong đi ra lên trên tất cả những luật khác. Đồng thời cũng loại bỏ được những luật cho phép bên phía server bên ngoài ở nửa sau kết nối.

2.9.3. Sử dụng chain tự định nghĩa

Bảng filter có ba chain mặc định, vĩnh viễn tồn tại là INPUT, OUTPUT, và FORWARD. Iptables cho phép ta xây dựng chain cho chính ta. Những chain này được xem như là target. Thay vì gói tin sẽ được nhận hay ngăn chặn, vòng điều khiển sẽ được chuyển đến chain tự tạo để thực hiện những kiểm tra chuyên biệt hơn liên quan đến luật đã kiểm tra và nhảy vào chain tự tạo. Nếu trong chain tự tạo không có luật match với gói tin và thực thi thì sau khi đã duyệt hết chain tự tạo, điều khiển sẽ trở về với chain gọi và tiếp tục kiểm tra luật đứng sau luật vừa dẫn đến chain tự tạo. Từ chain tự tạo có thể nhảy đến một chain tự tạo khác nếu có luật match.

Chain tự tạo rất hữu dụng trong việc tối ưu tập luật và vì thế rất hay được sử dụng. Chúng giúp ta tổ chức luật theo từng mục thay vì duyệt thẳng từ trên xuống dưới. Sau khi kiểm tra được vài đặc tính mấu chốt gói tin sẽ chuyển vào nhánh khác.

Trang 70

Hình 2.7 Duyệt luật chain tự tạo dựa trên địa chỉ đích của gói tin Một ví dụ khác, sử dụng chain tự tạo để nhảy đến chain tự tạo khác để kiểm tra càng chuyên biệt hơn.

Hình 2.8 Duyệt chain tự tạo dựa vào giao thức

2.10.Một số cấu hình với mạng Perimeter Network

Trong trường match máy Firewall có hai card mạng gói tin cần được xử lý một cách đặc biệt hơn. Những gói tin trung chuyển sẽ duyệt qua luật của chain FORWARD thay vì duyệt qua chain INPUT và OUTPUT. Lưu lượng mạng đối với máy cục bộ Firewall và lưu lượng mạng liên quan đến mạng bên trong sẽ được duyệt qua hai tập luật hoàn toàn khác nhau. Những luật trong chain FORWARD phải chỉ ra cả interface nguồn và interface đích.

Để cho phép truy cập không giới hạn từ bên trong ra bên ngoài qua hai interface đơn gian chỉ cần cho phép mọi giao thức và mọi cổng. Chú ý rằng, máy trạm bên trong có thể bắt đầu gửi yêu cầu kết nối ra bên ngoài nhưng ngược lại thì không cho phép.

$IPT -A FORWARD -i $LAN_INTERFACE -o $EXTERNAL_INTERFACE \

Một phần của tài liệu tìm hiểu và cài đặt hệ thống firewall kết hợp với proxy để bảo vệ hệ thống mạng bên trong (Trang 60)