Netfilter là firewall cơ bản cho các máy chủ Linux.Nó được đưa vào như một phần của các hệ điều hành kể trên và được cấu hình mặc định có hiệu lực trên hệ thống.Firewall này được quản lý thông qua chương trình iptables.Netfilter lọc các gói tin tại tần kernel, trước khi hệ thống hoặc các phần mềm tầng ứng dụng xử lý gói tin đó.
Iptables Config File
Mặc định trong RHEL / CentOS / Fedora file cấu hình của iptables là :
/etc/sysconfig/iptables
Xem các rules (luật) mặc định:
Hãy gõ dòng lệnh sau:
iptables --line-numbers -n -L
Bạn sẽ nhận được kết quả trả về có nội dung tương tự như sau:
Chain INPUT (policy ACCEPT)
num target prot opt source destination
1 RH-Firewall-1-INPUT all -- 0.0.0.0/0 0.0.0.0/0
Chain FORWARD (policy ACCEPT)
num target prot opt source destination
1 RH-Firewall-1-INPUT all -- 0.0.0.0/0 0.0.0.0/0
Chain OUTPUT (policy ACCEPT)
num target prot opt source destination
Chain RH-Firewall-1-INPUT (2 references)
num target prot opt source destination
1 ACCEPT all -- 0.0.0.0/0 0.0.0.0/0
2 ACCEPT icmp -- 0.0.0.0/0 0.0.0.0/0 icmp type 255
3 ACCEPT udp -- 0.0.0.0/0 224.0.0.251 udp dpt:5353
4 ACCEPT udp -- 0.0.0.0/0 0.0.0.0/0 udp dpt:53
5 ACCEPT all -- 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED
6 ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 state NEW tcp dpt:22
7 ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 state NEW tcp dpt:53
8 REJECT all -- 0.0.0.0/0 0.0.0.0/0 reject-with icmp-host-prohibited
Bật / tắt / khởi động lại firewall
Sử dụng các lệnh sau:
chkconfig iptables on
service iptables start
# Khởi động lạifirewall
service iptables restart
# Tắt firewall
service iptables stop
Tìm hiểu sâu hơn về Firewall iptables
Trong iptables có tất cả 4 kiểu sự kiện như sau:
- INPUT: Các gói tin gửi đến hệ thống từ bên ngoài.Sử dụng sự kiện này để chặn các cổng (port) gửi đến như 80,25,110 hoặc các ip nguồn, subnet (chẳng hạn như 202.54.1.20/29).
- OUTPUT: Chỉ các gói tin được tạo ra từ hệ thống.
- FORWARD: Các gói tin được gửi thông qua thiết bị khác.Thường dùng trong trường hợp cài đặt máy chủ Linux như một router.Ví dụ, eth0 kết nối với modem ADSL / Cable và eth1 kết nối với mạng LAN. Sử dụng FORWARD để gửi và nhận các gói tin truy cập từ mạng LAN với Internet.
- RH-Firewall-1-INPUT: Tùy chỉnh các sự kiện, nó sẽ gọi đến 3 kiểu sự kiện trên là INPUT,OUTPUT và FORWARD.
Quy trình xử lý gói tin:
- Bắt đầu từ rules đầu tiên
- Chạy đến khi gói tin phù hợp với một điều kiện trong các config đã cấu hình.
- Nếu có sự phù hợp trong các rules, gói tin sẽ được xử lý bằng REJECT, ACCEPT, DROP.
Các cách xử lý gói tin:
- ACCEPT cho phép gói tin đi qua.
- REJECT loại bỏ và gửi thông báo lỗi đến địa chỉ nguồn gửi gói tin.
- DROP xóa gói tin mà không thông báo đến địa chỉ nguồn gửi gói tin.
Cấu hình /etc/sysconfig/iptables
Bạn có thể sử dụng vi hoặc nano như sau:
nano /etc/sysconfig/iptables
Nội dung của file sẽ theo mẫu bên dưới:
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
:RH-Firewall-1-INPUT - [0:0]
-A INPUT -j RH-Firewall-1-INPUT
-A FORWARD -j RH-Firewall-1-INPUT
-A RH-Firewall-1-INPUT -i lo -j ACCEPT
-A RH-Firewall-1-INPUT -p icmp --icmp-type any -j ACCEPT
-A RH-Firewall-1-INPUT -p udp --dport 5353 -d 224.0.0.251 -j ACCEPT
-A RH-Firewall-1-INPUT -p udp -m udp --dport 53 -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 53 -j ACCEPT
-A RH-Firewall-1-INPUT -j REJECT --reject-with icmp-host-prohibited
COMMIT
Chặn tất cả gói tin:
Tìm các dòng:
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
Chỉnh sửa thành:
:INPUT DROP [0:0]
:FORWARD DROP [0:0]
Ghi lại log và xóa DROP các gói tin từ nguồn chỉ định:
Thêm các dòng sau vào file cấu hình, trước chữ COMMIT cuối cùng file:
-A INPUT -i eth0 -s 10.0.0.0/8 -j LOG --log-prefix "IP DROP SPOOF "
-A INPUT -i eth0 -s 172.16.0.0/12 -j LOG --log-prefix "IP DROP SPOOF "
-A INPUT -i eth0 -s 192.168.0.0/16 -j LOG --log-prefix "IP DROP SPOOF "
-A INPUT -i eth0 -s 224.0.0.0/4 -j LOG --log-prefix "IP DROP MULTICAST "
-A INPUT -i eth0 -s 240.0.0.0/5 -j LOG --log-prefix "IP DROP SPOOF "
-A INPUT -i eth0 -d 127.0.0.0/8 -j LOG --log-prefix "IP DROP LOOPBACK "
-A INPUT -i eth0 -s 169.254.0.0/16 -j LOG --log-prefix "IP DROP MULTICAST "
-A INPUT -i eth0 -s 0.0.0.0/8 -j LOG --log-prefix "IP DROP "
-A INPUT -i eth0 -s 240.0.0.0/4 -j LOG --log-prefix "IP DROP "
-A INPUT -i eth0 -s 255.255.255.255/32 -j LOG --log-prefix "IP DROP "
-A INPUT -i eth0 -s 168.254.0.0/16 -j LOG --log-prefix "IP DROP "
-A INPUT -i eth0 -s 248.0.0.0/5 -j LOG --log-prefix "IP DROP "
Ghi lại log và DROP tất cả các gói tin:
Tìm dòng sau:
-A RH-Firewall-1-INPUT -j REJECT --reject-with icmp-host-prohibited
COMMIT
Sửa thành:
-A RH-Firewall-1-INPUT -j LOG
-A RH-Firewall-1-INPUT -j DROP
COMMIT
Mở port
Để mở port 80 cho webserver thêm dòng sau vào trước COMMIT cuối file:
-A RH-Firewall-1-INPUT -m tcp -p tcp --dport 80 -j ACCEPT
Để mở port 53 cho DNS server thêm dòng sau vào trước COMMIT cuối file:
-A RH-Firewall-1-INPUT -m tcp -p tcp --dport 53 -j ACCEPT
-A RH-Firewall-1-INPUT -m udp -p tcp --dport 53 -j ACCEPT
Để mở port 443 cho HTTPS thêm dòng sau vào trước COMMIT cuối file:
-A RH-Firewall-1-INPUT -m tcp -p tcp --dport 443 -j ACCEPT
Để mở port 25 cho SMTP server thêm dòng sau vào trước COMMIT cuối file:
-A RH-Firewall-1-INPUT -m tcp -p tcp --dport 25 -j ACCEPT
Chỉ chấp nhận cho sử dụng SSH từ ip nguồn 192.168.1.0/24:
-A RH-Firewall-1-INPUT -s 192.168.1.0/24 -m state --state NEW -p tcp --dport 22 -j ACCEPT
….
Lưu lại file và restart iptables:
# service iptables restart
# iptables -vnL --line-numbers
Hy vọng bài viết này có thể giúp ích cho các bạn, giúp bạn hiểu hơn về hệ thống firewall cơ bản nhưng rất hiểu quả: iptables.