Tải bản đầy đủ (.pdf) (5 trang)

Đề án tốt nghiệp: Công nghệ bảo mật trên đà phát triển của công nghệ thông tin phần 4 doc

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (278.73 KB, 5 trang )

Đề tài: An toàn và bảo mật trên hệ điều hành Linux
Page 16


GVHD:Nguyễn Tấn Khôi Sinh viên thực hiện:
Lê Thị Huyền Trang
Nguyễn Huy Chương

Các tham số dòng lệnh thường gặp của Iptables
1. Gọi trợ giúp
Để gọi trợ giúp về Iptables, bạn gõ lệnh $ man iptables hoặc $ iptables help. Chẳng hạn
nếu bạn cần biết về các tùy chọn của match limit, bạn gõ lệnh $ iptables -m limit help.
2. Các tùy chọn để chỉ định thông số
- chỉ định tên table: -t <tên_table>, ví dụ -t filter, -t nat, nếu không chỉ định table, giá
trị mặc định là filter
- chỉ đinh loại giao thức: -p <tên giao thức>, ví dụ -p tcp, -p udp hoặc -p ! udp để chỉ
định các giao thức không phải là udp
- chỉ định card mạng vào: -i <tên_card_mạng_vào>, ví dụ: -i eth0, -i lo
- chỉ định card mạng ra: -o <tên_card_mạng_ra>, ví dụ: -o eth0, -o pp0
- chỉ định địa chỉ IP nguồn: -s <địa_chỉ_ip_nguồn>, ví dụ: -s 192.168.0.0/24 (mạng
192.168.0 với 24 bít mạng), -s 192.168.0.1-192.168.0.3 (các IP 192.168.0.1,
192.168.0.2, 192.168.0.3).
- chỉ định địa chỉ IP đích: -d <địa_chỉ_ip_đích>, tương tự như -s
- chỉ định cổng nguồn: sport <cổng_nguồn>, ví dụ: sport 21 (cổng 21), sport 22:88
(các cổng 22 88), sport :80 (các cổng <=80), sport 22: (các cổng >=22)
- chỉ định cổng đích: dport <cổng_đích>, tương tự như sport
3. Các tùy chọn để thao tác với chain
- tạo chain mới: iptables -N <tên_chain>
- xóa hết các luật đã tạo trong chain: iptables -X <tên_chain>
- đặt chính sách cho các chain `built-in` (INPUT, OUTPUT & FORWARD): iptables -P
<tên_chain_built-in> <tên policy (DROP hoặc ACCEPT)>, ví dụ: iptables -P INPUT


ACCEPT để chấp nhận các packet vào chain INPUT
- liệt kê các luật có trong chain: iptables -L <tên_chain>
- xóa các luật có trong chain (flush chain): iptables -F <tên_chain>
- reset bộ đếm packet về 0: iptables -Z <tên_chain>
4. Các tùy chọn để thao tác với luật
- thêm luật: -A (append)
- xóa luật: -D (delete)
- thay thế luật: -R (replace)
- chèn thêm luật: -I (insert)
Mình sẽ cho ví dụ minh họa về các tùy chọn này ở phần sau.
Phân biệt giữa ACCEPT, DROP và REJECT packet
- ACCEPT: chấp nhận packet
- DROP: thả packet (không hồi âm cho client)
- REJECT: loại bỏ packet (hồi âm cho client bằng một packet khác)
Ví dụ:
# iptables -A INPUT -i eth0 dport 80 -j ACCEPT chấp nhận các packet vào cổng 80 trên
card mạng eth0
Đề tài: An toàn và bảo mật trên hệ điều hành Linux
Page 17


GVHD:Nguyễn Tấn Khôi Sinh viên thực hiện:
Lê Thị Huyền Trang
Nguyễn Huy Chương
# iptables -A INPUT -i eth0 -p tcp dport 23 -j DROP thả các packet đến cổng 23 dùng
giao thức TCP trên card mạng eth0
# iptables -A INPUT -i eth1 -s ! 10.0.0.1-10.0.0.5 dport 22 -j REJECT reject-with tcp-
reset gởi gói TCP với cờ RST=1 cho các kết nối không đến từ dãy địa chỉ IP 10.0.0.1 5
trên cổng 22, card mạng eth1
# iptables -A INPUT -p udp dport 139 -j REJECT reject-with icmp-port-unreachable

gởi gói ICMP `port-unreachable` cho các kết nối đến cổng 139, dùng giao thức UDP
Phân biệt giữa NEW, ESTABLISHED và RELATED
- NEW: mở kết nối mới
- ESTABLISHED: đã thiết lập kết nối
- RELATED: mở một kết nối mới trong kết nối hiện tại
Ví dụ:
# iptables -P INPUT DROP đặt chính sách cho chain INPUT là DROP
# iptables -A INPUT -p tcp syn -m state state NEW -j ACCEPT chỉ chấp nhận các gói
TCP mở kết nối đã set cờ SYN=1
# iptables -A INPUT -m state state ESTABLISHED,RELATED -j ACCEPT không đóng các
kết nối đang được thiết lập,đồng thời cũng cho phép mở các kết nối mới trong kết nối
được thiết lập
# iptables -A INPUT -p tcp -j DROP các gói TCP còn lại đều bị DROP
Tùy chọn limit, limit-burst
limit-burst: mức đỉnh, tính bằng số packet
limit: tốc độ khi chạm mức đỉnh, tính bằng số packet/s(giây), m(phút), d(giờ) hoặc
h(ngày)
Mình lấy ví dụ cụ thể để bạn dễ hiểu:
# iptables -N test
# iptables -A test -m limit limit-burst 5 limit 2/m -j RETURN
# iptables -A test -j DROP
# iptables -A INPUT -i lo -p icmp icmp-type echo-request -j test
Đầu tiên lệnh iptables -N test để tạo một chain mới tên là test (table mặc định là
filter). Tùy chọn -A test (append) để thêm luật mới vào chain test. Đối với chain test,
mình giới hạn limit-burst ở mức 5 gói, limit là 2 gói/phút, nếu thỏa luật sẽ trở về
(RETURN) còn không sẽ bị DROP. Sau đó mình nối thêm chain test vào chain INPUT với
tùy chọn card mạng vào là lo, giao thức icmp, loại icmp là echo-request. Luật này sẽ giới
hạn các gói PING tới lo là 2 gói/phút sau khi đã đạt tới 5 gói.Bạn thử ping đến localhost
xem sao?
$ ping -c 10 localhost

Chỉ 5 gói đầu trong phút đầu tiên được chấp nhận, thỏa luật RETURN đó. Bây giờ đã đạt
đến mức đỉnh là 5 gói, lập tức Iptables sẽ giới hạn PING tới lo là 2 gói trên mỗi phút bất
chấp có bao nhiêu gói được PING tới lo đi nữa. Nếu trong phút tới không có gói nào PING
tới, Iptables sẽ giảm limit đi 2 gói tức là tốc độ đang là 2 gói/phút sẽ tăng lên 4 gói/phút.
Nếu trong phút nữa không có gói đến, limit sẽ giảm đi 2 nữa là trở về lại trạng thái cũ
chưa đạt đến mức đỉnh 5 gói. Quá trình cứ tiếp tục như vậy. Bạn chỉ cần nhớ đơn giản là
khi đã đạt tới mức đỉnh, tốc độ sẽ bị giới hạn bởi tham số limit. Nếu trong một đơn vị
thời gian tới không có gói đến, tốc độ sẽ tăng lên đúng bằng limit đến khi trở lại trạng
thái chưa đạt mức limit-burst thì thôi.
Để xem các luật trong Iptables bạn gõ lệnh $ iptables -L -nv (-L tất cả các luật trong tất
cả các chain, table mặc định là filter, -n liệt kê ở dạng số, v để xem chi tiết)
# iptables -L -nv
Chain INPUT (policy ACCEPT 10 packets, 840 bytes)
pkts bytes target prot opt in out source destination
10 840 test icmp lo * 0.0.0.0/0 0.0.0.0/0 icmp type 8

Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
Đề tài: An toàn và bảo mật trên hệ điều hành Linux
Page 18


GVHD:Nguyễn Tấn Khôi Sinh viên thực hiện:
Lê Thị Huyền Trang
Nguyễn Huy Chương
pkts bytes target prot opt in out source destination

Chain OUTPUT (policy ACCEPT 15 packets, 1260 bytes)
pkts bytes target prot opt in out source destination

Chain test (1 references)

pkts bytes target prot opt in out source destination
5 420 RETURN all * * 0.0.0.0/0 0.0.0.0/0 limit: avg 2/min burst 5
5 420 DROP all * * 0.0.0.0/0 0.0.0.0/0
# iptables -Z reset counter
# iptables -F flush luật
# iptables -X xóa chain đã tạo
Redirect cổng
Iptables hổ trợ tùy chọn -j REDIRECT cho phép bạn đổi hướng cổng một cách dễ dàng. Ví
dụ như SQUID đang listen trên cổng 3128/tcp. Để redirect cổng 80 đến cổng 3128 này
bạn làm như sau:
# iptables -t nat -A PREROUTING -p tcp dport 80 -j REDIRECT to-port 3128
Lưu ý: tùy chọn -j REDIRECT cho có trong chain PREROUTING
SNAT & MASQUERADE

Để tạo kết nối `transparent` giữa mạng LAN 192.168.0.1 với Internet bạn lập cấu hình
cho tường lửa Iptables như sau:
# echo 1 > /proc/sys/net/ipv4/ip_forward cho phép forward các packet qua máy chủ đặt
Iptables
# iptables -t nat -A POSTROUTING -o eth0 -j SNAT to-source 210.40.2.71 đổi IP nguồn
cho các packet ra card mạng eth0 là 210.40.2.71. Khi nhận được packet vào từ Internet,
Iptables sẽ tự động đổi IP đích 210.40.2.71 thành IP đích tương ứng của máy tính trong
mạng LAN 192.168.0/24.
Hoặc bạn có thể dùng MASQUERADE thay cho SNAT như sau:
# iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
(MASQUERADE thường được dùng khi kết nối đến Internet là pp0 và dùng địa chỉ IP
động)






Đề tài: An toàn và bảo mật trên hệ điều hành Linux
Page 19


GVHD:Nguyễn Tấn Khôi Sinh viên thực hiện:
Lê Thị Huyền Trang
Nguyễn Huy Chương
DNAT

Giả sử bạn đặt các máy chủ Proxy, Mail và DNS trong mạng DMZ. Để tạo kết nối trong
suốt từ Internet vào các máy chủ này bạn là như sau:
# echo 1 > /proc/sys/net/ipv4/ip_forward
# iptables -t nat -A PREROUTING -i eth0 -p tcp dport 80 -j DNAT to-destination
192.168.1.2
# iptables -t nat -A PREROUTING -i eth0 -p tcp dport 25 -j DNAT to-destination
192.168.1.3
# iptables -t nat -A PREROUTING -i eth0 -p udp dport 53 -j DNAT to-destination
192.168.1.4
Lập cấu hình Iptables cho máy chủ phục vụ Web
Phần này mình sẽ trình bày qua ví dụ cụ thể và chỉ hướng dẫn các bạn lọc packet vào. Các packet
`forward` và 'output' bạn tự làm nha. Giả sử như máy chủ phục vụ Web kết nối mạng trực tiếp vào
Internet qua card mạng eth0, địa chỉ IP là 1.2.3.4. Bạn cần lập cấu hình tường lửa cho Iptables đáp
ứng các yêu cầu sau:
- cổng TCP 80 (chạy apache) mở cho mọi người truy cập web
- cổng 21 (chạy proftpd) chỉ mở cho webmaster (dùng để upload file lên public_html)
- cổng 22 (chạy openssh) chỉ mở cho admin (cung cấp shell `root` cho admin để nâng cấp & patch lỗi
cho server khi cần)
- cổng UDP 53 (chạy tinydns) để phục vụ tên miền (đây chỉ là ví dụ)
- chỉ chấp nhận ICMP PING tới với code=0x08, các loại packet còn lại đều bị từ chối.

Bước 1: thiết lập các tham số cho nhân
echo 1 > /proc/sys/net/ipv4/tcp_syncookies
echo 10 > /proc/sys/net/ipv4/tcp_fin_timeout
echo 1800 > /proc/sys/net/ipv4/tcp_keepalive_time
echo 0 > /proc/sys/net/ipv4/tcp_window_scaling
echo 0 > /proc/sys/net/ipv4/tcp_sack
echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts
echo 0 > /proc/sys/net/ipv4/conf/eth0/accept_source_route
tcp_syncookies=1 bật chức năng chống DoS SYN qua syncookie của Linux
tcp_fin_timeout=10 đặt thời gian timeout cho quá trình đóng kết nối TCP là 10 giây
tcp_keepalive_time=1800 đặt thời gian giữ kết nối TCP là 1800 giây

Các tham số khác bạn có thể xem chi tiết trong tài liệu đi kèm của nhân Linux.
Bước 2: nạp các môđun cần thiết cho Iptables
Để sử dụng Iptables, bạn cần phải nạp trước các môđun cần thiết. Ví dụ nếu bạn muốn
dùng chức năng LOG trong Iptables, bạn phải nạp môđun ipt_LOG vào trước bằng lệnh #
modprobe ipt_LOG.
Đề tài: An toàn và bảo mật trên hệ điều hành Linux
Page 20


GVHD:Nguyễn Tấn Khôi Sinh viên thực hiện:
Lê Thị Huyền Trang
Nguyễn Huy Chương
MODULES="ip_tables iptable_filter ipt_LOG ipt_limit ipt_REJECT ipt_state
for i in $MODULES; do
/sbin/modprobe $MODULES
done
Bước 3: nguyên tắc đặt luật là "drop trước, accept sau"
Đây là nguyên tắc mà bạn nên tuân theo. Đầu tiên hãy đóng hết các cổng, sau đó mở

dần cách cổng cần thiết. Cách này tránh cho bạn gặp sai sót trong khi đặt luật cho
Iptables.
iptables -P INPUT DROP thả packet trước

iptables -A INPUT -m state state ESTABLISHED,RELATED -j ACCEPT giữ các kết nối hiện
tại và chấp nhận các kết nối có liên quan

iptables -A INPUT -i lo -s 127.0.0.1 -j ACCEPT chấp nhận các gói vào looback từ IP
127.0.0.1
iptables -A INPUT -i lo -s 1.2.3.4 -j ACCEPT và 1.2.3.4

BANNED_IP="10.0.0.0/8 192.168.0.0/16 172.16.0.0/12 224.0.0.0/4 240.0.0.0/5"
for i in $BANNED_IP; do
iptables -A INPUT -i eth0 -s $i -j DROP thả các gói dữ liệu đến từ các IP nằm trong
danh sách cấm BANNER_IP
done
Bước 4: lọc ICMP vào và chặn ngập lụt PING
LOG của Iptables sẽ được ghi vào file /var/log/firewall.log. Bạn phải sửa lại cấu hình cho
SYSLOG như sau:
# vi /etc/syslog.conf
kern.=debug /var/log/firewall.log
# /etc/rc.d/init.d/syslogd restart
Đối với các gói ICMP đến, chúng ta sẽ đẩy qua chain CHECK_PINGFLOOD để kiểm tra
xem hiện tại đang bị ngập lụt PING hay không, sau đó mới cho phép gói vào. Nếu đang bị
ngập lụt PING, môđun LOG sẽ tiến hành ghi nhật kí ở mức giới hạn limit $LOG_LIMIT và
limit-burst $LOG_LIMIT_BURST, các gói PING ngập lụt sẽ bị thả hết.
LOG_LEVEL="debug"

LOG_LIMIT=3/m
LOG_LIMIT_BURST=1


PING_LIMIT=500/s
PING_LIMIT_BURST=100

iptables -A CHECK_PINGFLOOD -m limit limit $PING_LIMIT limit-burst
$PING_LIMIT_BURST -j RETURN
iptables -A CHECK_PINGFLOOD -m limit limit $LOG_LIMIT limit-burst
$LOG_LIMIT_BURST -j LOG log-level $LOG_LEVEL log-prefix "fp=PINGFLOOD:warning
a=DROP "
iptables -A CHECK_PINGFLOOD -j DROP

iptables -A INPUT -i eth0 -p icmp icmp-type echo-request -j CHECK_PINGFLOOD
iptables -A INPUT -i eth0 -p icmp icmp-type echo-request -j ACCEPT
Bước 5: reject quét cổng TCP và UDP
Ở đây bạn tạo sẵn chain reject quét cổng, chúng ta sẽ đẩy vào chain INPUT sau. Đối
với gói TCP, chúng ta reject bằng gói TCP với cờ SYN=1 còn đối với gói UDP, chúng ta sẽ
reject bằng gói ICMP `port-unreachable`

×