VnExperts Academy - Đào tạo, học, thi chứng chỉ Quốc tế Cisco CCNA, CCNP, Microsoft MCP, MCSA, MCITP, Linux, Security+, CEH

Ví dụ về cách cấu hình Iptables PDF Print E-mail
Ở bài trước tôi đã giới thiệu một số kiến thức cơ bản về iptables, bài này tôi xin đưa thêm một số ví dụ cụ thể hy vọng giúp các bạn có thể sử dụng iptables thành thạo hơn.
Để iptables hoạt động đúng bạn cần phải load một số kernel modules hỗ trợ như iptable_nat hỗ trợ NAT, ip_contrack_fpt hỗ trợ FTP, ip_contrack hỗ trợ tính năng xác định trạng thái connection...
load kernel modules có thể thực hiện bằng file /etc/rc.local như sau
# File: /etc/rc.local

# Module to track the state of connections
modprobe ip_conntrack

# Load the iptables active FTP module, requires ip_conntrack
modprobe ip_conntrack_ftp

# Load iptables NAT module when required
modprobe iptable_nat

# Module required for active an FTP server using NAT
modprobe ip_nat_ftp

Trước khi bạn triển khai firewall script của mình bạn nên thay đổi một số thông số linux kernel thông qua file /etc/sysctl.conf để tăng hiệu năng cho firewall của hệ thống như sau

# File: /etc/sysctl.conf

#---------------------------------------------------------------
# Disable routing triangulation. Respond to queries out
# the same interface, not another. Helps to maintain state
# Also protects against IP spoofing
#---------------------------------------------------------------

net/ipv4/conf/all/rp_filter = 1


#---------------------------------------------------------------
# Enable logging of packets with malformed IP addresses
#---------------------------------------------------------------

net/ipv4/conf/all/log_martians = 1


#---------------------------------------------------------------
# Disable redirects
#---------------------------------------------------------------

net/ipv4/conf/all/send_redirects = 0


#---------------------------------------------------------------
# Disable source routed packets
#---------------------------------------------------------------

net/ipv4/conf/all/accept_source_route = 0


#---------------------------------------------------------------
# Disable acceptance of ICMP redirects
#---------------------------------------------------------------

net/ipv4/conf/all/accept_redirects = 0


#---------------------------------------------------------------
# Turn on protection from Denial of Service (DOS) attacks
#---------------------------------------------------------------

net/ipv4/tcp_syncookies = 1


#---------------------------------------------------------------
# Disable responding to ping broadcasts
#---------------------------------------------------------------

net/ipv4/icmp_echo_ignore_broadcasts = 1

#---------------------------------------------------------------
# Enable IP routing. Required if your firewall is protecting a
# network, NAT included
#---------------------------------------------------------------

net/ipv4/ip_forward = 1

chống ip spoofing (thực hiện việc kiểm tra địa chỉ ip nguồn của gói tin, nếu thấy không hợp lệ so với địa chỉ của card mạng mà gói tin đi vào từ đó thì gói tin sẽ bị loại bỏ), log những gói tin có địa chỉ ip không hợp lệ, không cho phép redirect, không route những gói tin đến những hệ thống khác,bật tính năng tcp_syscookies chống kiểu tấn công SYN flood, không trả lời những gói tin ping broadcast, cho phép forward qua hệ thống.

Cho phép hệ thống thực hiện query DNS

iptables -A OUTPUT -p udp -o eth0 --dport 53 --sport 1024:65535 \
-j ACCEPT

iptables -A INPUT -p udp -i eth0 --sport 53 --dport 1024:65535 \

Mở dịch vụ Web và cho phép truy cập hệ thống thông qua dịch vụ SSH

# chỉ cho phép những gói tin thuộc những kết nối đã được chấp nhận đi ra
iptables -A OUTPUT -o eth0 -m state --state ESTABLISHED,RELATED \
-j ACCEPT

# chỉ nhận những kết nối truy cập Web và SSH
iptables -A INPUT -p tcp -i eth0 --dport 22 --sport 1024:65535 \
-m state --state NEW -j ACCEPT
iptables -A INPUT -p tcp -i eth0 --dport 80 --sport 1024:65535 \
-m state --state NEW -j ACCEPT

Cho phép truy cập Internet thông qua hệ thống Firewall

#cho phép thực hiện những kết nối đến cổng 80,443 (http,https) ra bên ngoài.
iptables -A OUTPUT -j ACCEPT -m state \
--state NEW,ESTABLISHED,RELATED -o eth0 -p tcp \
-m multiport --dports 80,443 --sport 1024:65535

#cho phép nhận những gói tin thuộc những kết nối đã được thiết lập
iptables -A INPUT -j ACCEPT -m state --state ESTABLISHED,RELATED \
-i eth0 -p tcp

Cho phép máy của bạn truy cập vào hệ thống Firewall

iptables -A INPUT -j ACCEPT -p all -s 192.168.1.5 -i eth1
iptables -A OUTPUT -j ACCEPT -p all -d 192.168.1.5 -o eth1

192.168.1.5 là địa chỉ ip của máy bạn.

Masquerading
là một tên gọi khác của NAT, thông qua nó tất cả các gói tin đi qua hệ thống sẽ được sửa lại địa chỉ nguồn thành địa chỉ của hệ thống firewall ( địa chỉ của card mạng firewall hướng ra ngoài ) và nó sẽ được xem như là xuất phát từ hệ thống.
Để hệ thống có khả năng NAT iptables cần phải nạp module iptables_nat, Linux kernel phải hộ trợ tính khả năng forward
(echo 1 > /proc/sys/net/ipv4/ip_forward)
Để thực hiện được masquerading thông qua POSTROUTING chain của bảng NAT bạn cũng cần phải config để iptables cho phép forward gói tin giữa các card mạng, cho phép những gói tin yêu cầu kết nối hoặc của một kết nối đã được thiết lập đi ra ngoài và chỉ cho phép những gói tin của những kết nối đã được thiết lập đi vào hệ thống.

modprobe iptable_nat

echo 1 > /proc/sys/net/ipv4/ip_forward

iptables -A POSTROUTING -t nat -o eth0 -s 192.168.1.0/24 -d 0/0 \
-j MASQUERADE

iptables -A FORWARD -t filter -o eth0 -m state \
--state NEW,ESTABLISHED,RELATED -j ACCEPT

iptables -A FORWARD -t filter -i eth0 -m state \
--state ESTABLISHED,RELATED -j ACCEPT

bạn muốn đặt một Web site được bảo vệ bởi một hệ thống firewall có địa chỉ ip nhận được thông qua DHCP từ ISP.

modprobe iptable_nat
external_int="eth0"
external_ip="`ifconfig $external_int | grep 'inet addr' | \
awk '{print $2}' | sed -e 's/.*://'`"
echo 1 > /proc/sys/net/ipv4/ip_forward
iptables -t nat -A PREROUTING -p tcp -i eth0 -d $external_ip \
--dport 80 --sport 1024:65535 -j DNAT --to 192.168.1.200:8080
iptables -A FORWARD -p tcp -i eth0 -o eth1 -d 192.168.1.200 \
--dport 8080 --sport 1024:65535 -m state --state NEW -j ACCEPT

iptables -A FORWARD -t filter -o eth0 -m state \
--state NEW,ESTABLISHED,RELATED -j ACCEPT

iptables -A FORWARD -t filter -i eth0 -m state \
--state ESTABLISHED,RELATED -j ACCEPT

Hệ thống cho phép nhận những gói tin gửi tới Web Server của bạn từ ngoài vào, trước khi FORWARD nó sửa địa chỉ ip đích và port đích của gói tin thành (192.168.1.200: 8080).
Thực hiện FORWARD những gói tin yêu cầu kết nối từ eth0 sang eth1, cấu hình để FORWARD chain của bảng filter cho phép những gói tin này đi qua.

Static NAT

sử dụng one to one NAT để bên ngoài xem Server của bạn (192.168.1.100) như là có địa chỉ 97.158.253.26
dùng many to one NAT để bên ngoài xem tất cả những hệ thống nằm trong mạng 192.168.1.0 như đều có địa chỉ 97.158.253.26

modprobe iptable_nat

echo 1 > /proc/sys/net/ipv4/ip_forward

iptables -t nat -A PREROUTING -d 97.158.253.26 -i eth0 \
-j DNAT --to-destination 192.168.1.100


iptables -t nat -A POSTROUTING -s 192.168.1.100 -o eth0 \
-j SNAT --to-source 97.158.253.29

iptables -t nat -A POSTROUTING -s 192.168.1.0/24 \
-j SNAT -o eth0 --to-source 97.158.253.29

iptables -A FORWARD -p tcp -i eth0 -o eth1 -d 192.168.1.100 \
-m multiport --dports 80,443,22 \
-m state --state NEW -j ACCEPT

iptables -A FORWARD -t filter -o eth0 -m state \
--state NEW,ESTABLISHED,RELATED -j ACCEPT

iptables -A FORWARD -t filter -i eth0 -m state \
--state ESTABLISHED,RELATED -j ACCEPT

SNAT được dùng để làm cho các kết nối xuất phát từ trong ra ngoài (internet) được xem như xuất phát từ địa chỉ 97.158.253.29
DNAT hướng các gói tin gửi đến địa chỉ 97.158.253.29 vào Server (192.168.1.100)
FORWARD chain chỉ cho chấp nhận những gói tin của các dịch vụ http,https,ssh đi qua.

LOG hệ thống
việc log lại tất cả những gói tin mà bạn loại bỏ tại /var/log/messages sẽ giúp ích cho bạn rất nhiều trong việc troubleshooting iptables.

iptables -A OUTPUT -j LOG
iptables -A INPUT -j LOG
iptables -A FORWARD -j LOG

iptables -A OUTPUT -j DROP
iptables -A INPUT -j DROP
iptables -A FORWARD -j DROP

phần log thường đặt ở vị trí cuối cùng trong các firewall script của iptables.

Khi iptables khởi động nó sẽ tìm kiếm file /etc/sysconfig/iptables để đọc các rule, nếu file này không tồn tại iptables sẽ không khởi động được.
Do đó sau khi cài đặt iptables bạn phải tạo file này

touch /etc/sysconfig/iptables
chmod 600 /etc/sysconfig/iptables

Hải Thắng - thangh@vnexperts.net

Tin liên quan:
Tin mới hơn:
Tin cũ hơn: