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