Monday, March 13, 2017

[ LINUX] HƯỚNG DẪN CẤU HÌNH IPTABLES

HƯỚNG DẪN CẤU HÌNH IPTABLES
1.      Đối với dòng Linux nói chung:
Sử dụng 2 lệnh chính sau:
-         “iptables-save”: save lại toàn bộ rule set ra 1 file text có định dạng đặc biệt
-         “iptables-restore”: load file text đó lại vào rule của iptables
Ưu điểm:
-         Đặc điểm của 2 lệnh này đó là nó thực hiện việc save và load toàn bộ rule set chỉ 1 request duy nhất, do vậy tốc độ sẽ nhanh hơn so với việc dùng add từng dòng lệnh rất nhiều, nhất là đối với số lượng rule lớn.
-         Nếu một trong các rule bị sai cú pháp, hệ thống sẽ báo lỗi và bộ rule mới không được áp dụng, hệ thống vẫn giữ bộ rule cũ.
Lệnh iptables-save:
#iptables-save > /etc/iptables-save
Lưu ý: /etc/iptables-save là file sẽ lưu lệnh iptables, có thể thay đổi thành file bất kỳ.
Lệnh iptables-restore:
#iptables-restore  < /etc/iptables-save
Tất cả các rules, trong file /etc/iptables-save sẽ được load và áp dụng vào iptables
Ý nghĩa của một file được lưu ra bằng lệnh iptables-save
Ví dụ:
# Firewall configuration written by system-config-firewall
# Manual customization of this file is not recommended.
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT
-A INPUT -j REJECT --reject-with icmp-host-prohibited
-A FORWARD -j REJECT --reject-with icmp-host-prohibited
COMMIT
 Trong đó:
-         “*filter”: Là chỉ bắt đầu các rule của table filter, table dùng để viết các rule lọc gói tin
-         :INPUT ACCEPT [0:0]
o   INPUT: Là chain của iptables, table filter có 3 chain là INPUT, OUTPUT, FORWARD. Trong đó INPUT là thời điểm gói tin đi vào hệ thống, OUTPUT là thời điểm gói tin đi ra hệ thống, còn FORWARD là thời điểm gói tin đi từ card mạng này sang card mạng khác.
o   ACCEPT: Chain policy của chain INPUT, OUTPUT và FORWARD. Ý nghĩa: Nếu gói tin sau khi được kiểm tra bởi tất cả các rule của iptables mà không có rule nào khớp thì gói tin sẽ được ACCEPT.
o   [0:0]: Số đầu tiên chỉ ra số lượng gói tin, số thứ 2 chỉ ra dung lượng của các gói tin. Đây là các thông số thống kê về các gói tin không khớp luật nào của iptables, và do đó được thực hiện Chain policy là ACCEPT.
-         Các luật tiếp theo: Là luật lọc của iptables, sẽ áp dụng từ trên xuống dưới.
-         COMMIT: Đánh dấu kết thúc bảng filter.
Cách sửa luật iptables:
Tạo 1 file có nội dung như sau, ví dụ là file /etc/iptables:
# Firewall configuration written by system-config-firewall
# Manual customization of this file is not recommended.
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
########Cho phép các gói tin thuộc 1 connection đang tồn tại hoặc có liên quan đến 1 connection đang tồn tại đi vào, không cần phải kiểm tra#####
-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
-A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
########Cho phép ping echo request đến server#######
-A INPUT -p icmp --icmp-type 8 -j ACCEPT
########Những gói tin từ card mạng loopback thì không cần lọc######
-A INPUT -i lo -j ACCEPT
######Thêm các luật lọc chiều INPUT tại đây##########
###Ví dụ luật lọc INPUT SSH cho 1 IP hoặc 1 dải IP###
-A INPUT -m state --state NEW -s 192.168.1.10 -m tcp -p tcp --dport 22 -j ACCEPT
-A INPUT -m state --state NEW -s 192.168.2.0/24 -m tcp -p tcp --dport 22 -j ACCEPT
###Ví dụ luật cho phép HTTP##########################
-A INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT
###Ví dụ luật cho phép SNMP của ipms#################
-A INPUT -m state --state NEW -m udp -p udp --dport 161 -j ACCEPT
######Thêm các luật lọc chiều OUTPUT tại đây##########
######Chỉ khi server cần chủ động tạo kết nối ra ngoài thì mới cần thêm các luật tiếp theo#####
###Ví dụ cho phép từ server hiện tại được ssh đến server 10.10.10.10######
-A OUTPUT -m state --state NEW -d 10.10.10.10 -m tcp -p tcp --dport 22 -j ACCEPT
#####Chặn toàn bộ các kết nối còn lại, ghi log lại trước khi chặn######
-A INPUT -j LOG --log-level 4 --log-prefix "IPTABLES DROP"
-A FORWARD -j LOG --log-level 4 --log-prefix "IPTABLES DROP"
-A OUTPUT -j LOG --log-level 4 --log-prefix "IPTABLES DROP"
-A INPUT -j REJECT --reject-with icmp-host-prohibited
-A FORWARD -j REJECT --reject-with icmp-host-prohibited
-A OUTPUT -j REJECT --reject-with icmp-host-prohibited
COMMIT
Cách cấu hình để iptables nạp các rule khi server khởi động lại:
Sửa trong file /etc/rc.local
Thêm 1 dòng sau
iptables-restore  < /etc/iptables
Cách tạm thời tắt tất cả các luật của iptables để troubleshoot:
Sử dụng các lệnh sau
#iptables -F
#iptables -X
#iptables -P INPUT ACCEPT
#iptables -P OUTPUT ACCEPT
#iptables -P FORWARD ACCEPT
Ý nghĩa các lệnh:
-         Lệnh đầu tiên để xóa tất cả các rule trong tất cả các chain của iptables
-         Lệnh thứ 2 xóa tất cả các chain do người dùng tự tạo
-         Lệnh thứ 3,4,5 thiết lập chain policy cho chain INPUT, OUTPUT, FORWARD là ACCEPT. Khi đấy server cho phép toàn bộ kết nối vào / ra server.
Chú ý: Chỉ dùng bộ lệnh này trong trường hợp cần tắt toàn bộ luật iptables để troubleshoot kết nối.
2.      Đối với dòng có deamon iptables (như Redhat)
Riêng đối với các dòng Redhat như Centos, Redhat, Fedora, Oracle enterprise Linux … thì có init script và file config riêng cho việc chạy iptables. Khi đấy không cần dùng lệnh iptables-save, iptables-restore như trên.
Để sử dụng iptables có thể sử dụng init script là /etc/init.d/iptables:
-         “/etc/init.d/iptables save”: lưu các rule vào file /etc/sysconfig/iptables, tương đương với lệnh iptables-save > /etc/sysconfig/iptables
-         “/etc/init.d/iptables stop”: flush (xóa) tất cả các rule, các chain người dùng tự định nghĩa và thiết lập lại chain policy
-         “/etc/init.d/iptables start”: load rule từ file /etc/sysconfig/iptables, tương đương với lệnh iptables-restore < /etc/sysconfig/iptables
-         “/etc/init.d/iptables restart”: thực hiện lệnh stop rồi sau đó là start
Để chạy lệnh “#/etc/init.d/iptables start” khi khởi động server thì dùng lệnh
#chkconfig iptables on
Như vậy khi đó iptables sẽ tự động nạp rule ở file /etc/sysconfig/iptables
Có thêm file cấu hình /etc/sysconfig/iptables-conf cho scrip init ở trên
-         Các tham số về việc load module của iptables
o   IPTABLES_MODULES: danh sách các module sẽ được load mỗi khi start iptables lên.
o   IPTABLES_MODULES_UNLOAD="yes": có reload lại các module mỗi khi iptables stop hoặc restart hay không. Mặc định là có.
-         Các tham số về việc có save rule của iptables
o   IPTABLES_SAVE_ON_STOP="no": có save lại rule hiện tại khi iptables stop hay không. Mặc định là không.
o   IPTABLES_SAVE_ON_RESTART="no": có save lại rule hiện tại khi iptables restart hay không. Mặc định là không.

-         Do script init của iptables sẽ save và load rule mặc định trong file /etc/sysconfig/iptables nên có thể chỉnh sửa các rule trực tiếp trong file này, sau đó restart lại iptables thì các rule mới sẽ được áp dụng

0 nhận xét:

Post a Comment