Để 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
|