iptables firewall trên Linux CentOS 7

bởi | CentOS 7, LPI

Home » LPI » iptables firewall trên Linux CentOS 7

Quản lý iptables firewall

Kiểm phiên bản iptable trên CentOS:
# rpm -qa iptables
iptables-1.4.7-16.el6.x86_64
# iptables --version
iptables v1.4.7
+ Cài đặt iptables
yum install iptables-services
# Kiểm tra trạng thái
systemctl status iptables or service iptables status
# Start
systemctl start iptables or service iptables start
# Khởi động Iptables cùng hệ thống
systemctl enable iptables or chkconfig iptables on 
# xóa tất cả các quy tắc IPtables
iptables -F
# Kiểm tra lại
iptables -L -n -v
# Lưu cấu hình
service iptables save
# Dừng
systemctl stop iptables or service iptables stop
# Tắt khởi động cùng hệ thống
systemctl disable firewalld or chkconfig iptables off

Vị trí lưu file cấu hình iptables

[root@centos7 ~]# vi /etc/sysconfig/iptables
+ Kiểm tra rule một cách đơn giản
iptables -L
ACCEPT: Cho phép
REJECT, DROP: Cấm
+ Hiện thị chi tiết các rule
iptables -L -v -n --line-number
service iptables save # lưu file cấu hình hiện thời vào file /etc/sysconfig/iptables
service iptables restart
+ Kiểm tra các rule của table NAT
iptables -t nat -L
iptables -t nat -L --line-number #kiểm tra chi tiết

Có 2 tables cơ bản

+ Tables FITER, trong tables FILTER có các chain là
* INPUT: Dùng để quản lý traffic đi vào
* OUTPUT: Dùng để quản lý traffic đi ra
* FORWARD: Dùng để quản lý traffic đi ra thông qua máy LINUX
+ Tables NAT, trong tables NAT có các chain
* PREROUTING: Sử dụng để NAT IP trước khi định tuyến
* POSTROUTING: Sử dụng để NAT IP sau khi định tuyến
* OUTPUT: Sử dụng để quản lý traffic từ máy LINUX đi ra ngoài

Cấu hình FITER

Xóa các rule có trong iptables

+ Xóa tất cả các rule
iptables -F
+ Xóa 1 rule tại dòng số 4 trong chain InPut
iptables -D INPUT 4
+ Xóa 1 rule tại dòng số 1 trong chain PREROUTING
iptables -t nat -D PREROUTING 1
+ kiểm tra lại
iptables -L -v -n --line-number
iptables -t -nat -L --line-number
+ Lưu cấu hình
service iptables save
+ Đổi policy từ ACCEPT sang DROP
iptables -P INPUT DROP
iptables -P OUTPUT DROP
iptables -P FORWARD DROP

Cấu hình ping tới IP lookback

# ping 127.0.0.1
Quá trình ping đang fail
# Tạo 2 rule ping vào và reply ra
iptables -A INPUT -i lo -j ACCEPT
iptables -A OUPUT -o lo -j ACCEPT
-A: Append thêm vào dưới cùng của chain
-i: input vào trong interface
-o: output ra khỏi interface
-j: JUMP vào hành động ACCEPT

+ Cấu hình cho phép Ping
# Cấu hình cho phép ping từ máy linux ra ngoài
iptables -A OUTPUT -p icmp --icmp-type echo-request -j ACCEPT
iptables -A INPUT -p icmp --icmp-type echo-reply -j ACCEPT
# Cấu hình cho phép ping từ ngoài vào máy linux
iptables -A INPUT -p icmp --icmp-type echo-request -j ACCEPT
iptables -A OUTPUT -p icmp --icmp-type echo-reply -j ACCEPT

Cấu hình rule ssh

+ Cấu hình rule cho phép SSH vào máy ở card mạng ens33
iptables -A INPUT -i ens33 -p tcp --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -0 ens33 -p tcp --sport 22 -m state --state ESTABLISHED -j ACCEPT

+ Cấu hình rule cho máy LINUX SSH ra ngoài ở card mạng ens33
iptables -A OUTPUT -o ens33 -p tcp --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A INPUT -i ens33 -p tcp --sport 22 -m state --state ESTABLISHED -j ACCEPT

Cấu hình rule query DNS

+ Cấu hình rule cho máy LINUX query DNS ở card mạng ens33
iptables -A OUTPUT -o ens33 -p udp --dport 53 -j ACCEPT
iptables -A INPUT -i ens33 -p udp --sport 53 -j ACCEPT

Cấu hình rule HTTP, HTTPS

+ Cấu hình rule cho máy LINUX khởi tạo kết nối tới HTTP, HTTPS ở card mạng ens33
iptables -A OUTPUT -o ens33 -p tcp -m multiport --dport 80,443 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A INPUT -i ens33 -p tcp -m multiport --sport 80,443 -m state --state ESTABLISHED -j ACCEPT
# -m mutiport: load lên module mutiport
# -m state: load lên module khởi tạo kết nối

Cấu hình NAT

Kích hoạt tính năng định tuyến và cấu hình NAT LAN – WAN

+ Kích hoạt tính năng định tuyến traffic từ interface LAN sang interface WAN
# sysctl -w net.ipv4.ip_forward=1
# Để máy tính của bạn có khả năng routing các packet. Lệnh trên chỉ là một thiết lập cấu hình runtime và nếu bạn cần có hiệu lực khi khởi động lại, tìm file sysctl.conf
ls /etc/sysctl.d
99-sysctl.conf
vi /etc/sysctl.d/99-sysctl.conf
thêm dòng net.ipv4.ip_forward = 1 vào trong file

+ Thực hiện NAT IP local trên card mạng LAN thành IP public trên card mạng WAN ens33
# iptables -t nat -A POSTROUTING -s 192.168.85.0/24 -d 0/0 -o ens33 -j MASQUERADE
-A POSTROUTING: thêm vào 1 dòng trong chain POSTROUTING (chain sau khi định tuyến)
-s 192.168.85.0/24: dải mạng ip nguồn
-d 0/0: đi đến bất kỳ dải IP nào
-o ens33: xuất ra card mạng ens33
-j MASQUERADE: jum vào MASQUERADE thực hiện quá trình pass
# Kiểm tra:
iptables -t nat -L --line-number

+ Thiết lập rule cho phép ping từ máy window trong mạng LAN ra ngoài
# iptables -I FORWARD -j ACCEPT -i ens36 -o ens33 -p icmp -s 192.168.85.0/24 --icmp-type echo-request -d 0/0
# iptables -I FORWARD -j ACCEPT -i ens33 -o ens36 -p icmp --icmp-type echo-reply
+ Cho phép cho Client khởi tạo kết nối phân giải DSN
# iptables -I FORWARD -j ACCEPT -i ens36 -o ens33 -p udp -s 192.168.85.0/24 -m state --state NEW,ESTABLISHED -d 0/0 --dport 53
+ Cho phép client khởi tạo kết nối http, https
# iptables -I FORWARD -j ACCEPT -i ens36 -o ens33 -p tcp -s 192.168.85.0/24 -m state --state NEW,ESTABLISHED -d 0/0 --dport 80
# iptables -I FORWARD -j ACCEPT -i ens36 -o ens33 -p tcp -s 192.168.85.0/24 -m state --state NEW,ESTABLISHED -d 0/0 --dport 443
+ Cho phép tất cả các gói tin reply đã được khởi tạo kết nối
# iptables -I FORWARD -j ACCEPT -i ens33 -o ens36 -m state --state ESTABLISHED,RELATED

+ Thử nghiệm filter http website “huthamcauxanh.com”
iptables -I FORWARD -i ens36 -o ens33 -p tcp -m tcp --dport 80 -m string --string "huthamcauxanh.com" --algo bm -j DROP
iptables -I FORWARD -i ens36 -o ens33 -p tcp -m tcp --dport 443 -m string --string "huthamcauxanh.com" --algo bm -j DROP
chặn thêm chiều reply về cho chắc
iptables -I FORWARD -i ens33 -o ens36 -p tcp -m tcp --sport 80 -m string --string "huthamcauxanh.com" --algo bm -j DROP
iptables -I FORWARD -i ens33 -o ens36 -p tcp -m tcp --sport 443 -m string --string "huthamcauxanh.com" --algo bm -j DROP

NAT Port

+ Thử nghiệm NAT PORT TCP/3389 vào máy clinet
# iptables -t nat -A PREROUTING -d 192.168.126.201 -i ens33 -p tcp -m tcp --dport 3389 -j DNAT --to-destination 192.168.85.101:3389
Cấu hình NAT port 3389
-t: mở tables NAT
-A: ghi vào chain PREROUTING nat trước khi định tuyến
-d: IP đích ip WAN
-i: đi vào cổng WAN
-p tcp: protocol tcp
-m tcp: module tcp
–dport 3389: port đích đến tcp
-j DNAT: jum vào destination nat
–to-destination: đẩy vào ip nội bộ 192.168.85.101:3389
# iptables -I FORWARD -p tcp -d 192.168.85.101 --dport 3389 -m state --state NEW,ESTABLISHED -j ACCEPT
cho phép kết nối từ máy client LAN đi ra WAN
# iptables -A FORWARD -j ACCEPT -m state --state ESTABLISHED,RELATED
Cho phép rule tương ứng tất cả giữ liệu phản hồi về