Thứ Ba, 18 tháng 2, 2014

// // Leave a Comment

Cài đặt và cấu hình IPTABLES - CentOS 6.4

Mô hình bài lab:
Client------------------eth2(172.16.100.254/16)-Firewall--eth1(192.168.1.106)----------Internet
IP: 172.16.100.10
GW: 172.16.100.254/16  
Server(dịch vụ)
IP: 172.16.100.3
GW: 172.16.100.254 

I. GIỚI THIỆU VỀ IPTABLES:

Bảo mật mạng là một vấn đề quan trọng hàng đầu đối việc lập một website, cũng như nhiều dịch vụ khác trên mạng. Một trong những cách bảo vệ là sử dụng firewall. Bài viết này sẽcho thấy làm sao để chuyển một Linux server thành:
• Một firewall đồng thời cho mail server, web server, DNS server.
• Một thiết bị dẫn đường (router) sẽ dùng NAT và chuyển tiếp cổng (port forwarding ) để vừa bảo vệ hệ thống mạng của bạn, vừa cho phép một web server công khai chia sẻ địa chỉ IP firewall.


Một trong những firewall thông dụng nhất chạy trên Linux là iptables. Ta sẽ xem qua một số chức năng của iptables:
• Tích hợp tốt với Linux kernel, để cải thiện sự tin cậy và tốc độ chạy iptables.
• Quan sát kỹ tất cảcác gói dữ liệu. Điều này cho phép firewall theo dõi mỗi một kết nối thông qua nó, và dĩ nhiên là xem xét nội dung của từng luồng dữ liệu để từđó tiên liệu hành động kế tiếp của các giao thức. Điều này rất quan trọng trong việc hỗ trợcác giao thức FTP, DNS ….
• Lọc gói dựa trên địa chỉ MAC và các cờ trong TCP header. Điều này giúp ngăn chặn việc tấn công bằng cách sử dụng các gói dị dạng (malformed packets) và ngăn chặn việc truy cập từ nội bộ đến một mạng khác bất chấp IP của nó.
• Ghi chép hệ thống (System logging) cho phép việc điều chỉnh mức độ của báo cáo
• Hỗ trợ việc tính hợp các chương trình Web proxy chẳng như Squid.
• Ngặn chặn các kiểu tấn công từ chối dịch vụ.


II. SỬ DỤNG IPTABLES:
1.  Khởi động iptables:
Câu lệnh start, stop, và restart iptables:
[root@websrv ~]# service iptables start
[root@websrv ~]# service iptables stop
[root@websrv ~]# service iptables restart
Để khởi động iptables mỗi khi khởi động máy:
[root@websrv ~]# chkconfig iptables on
 Xem tình trạng của iptables:
[root@websrv ~]# service iptables status
2. Xử lý gói trong iptables:

Tất cả mọi gói dữ liệu đều được kiểm tra bởi iptables bằng cách dùng các bảng tuần tự xây dựng sẵn (queues).  

Có 3 loại bảng này gồm: - Các bảng gọi là các queue, các mục con trong mỗi bảng là chain
+ Mangle: chịu trách nhiệm thay đổi các bits chất lượng dịch vụ trong TCP header như TOS (type of service), TTL (time to live), và MARK.
+ Filter: chịu trách nhiệm lọc gói dữ liệu. Nó gồm có 3 quy tắc nhỏ(chain) để giúp bạn thiết lập các nguyên tắc lọc gói, gồm:
• Forward chain: lọc gói khi đi đến đến các server khác/ Cho phép packet nguồn chuyển qua firewall.
• Input chain: lọc gói khi đi vào trong server./ Cho phép những gói tin đi vào từ firewall.
• Output chain: lọc gói khi ra khỏi server. /Cho phép những gói tin đi ra từ firewall
+ NAT: gồm có 2 loại:
• Pre-routing chain: thay đổi địa chỉ đến của gói dữ liệu khi cần thiết. NAT từ ngoài vào trong nội bộ. Quá trình NAT sẽ thực hiện trước khi thực thi cơ chế routing - DNAT
• Post-routing chain: thay đổi địa chỉ nguồn của gói dữ liệu khi cần thiết. NAT từ trong ra ngoài. Quá trình NAT sẽ thực hiện sau khi thực hiện cơ chế định tuyến. Quá trình này nhằm thay đổi địa chỉ nguồn của gói tin - Source NAT hay SNAT.
OUPUT:  Trong loại này firewall thực hiện quá trình NAT.


Bảng 1 : Các loại queues và chain cùng chức năng của nó.

Để có cái nhìn tổng quát đối với việc lọc và xử lý gói trong iptables, ta xem hình sa:



Ta cùng xem qua 1 ví dụ mô tả đường đi của gói dữ liệu.
(gói tin đi qua mỗi bảng sẽ đc thực thi bởi các chain tương ứng với bảng đó)


- Đầu tiên, gói dữ liệu đến mạng A, tiếp đó nó được kiểm tra bởi mangle table PREROUTING chain (nều cần).Tiếp theo là kiểm tra gói dữ liệu bởi nat table's PREROUTING chain đểkiểm tra xem gói dữ liệu có cần DNAT hay không? DNAT sẽthay đổi địa chỉ đích của gói dữ liệu. Rồi gói dữ liệu được dẫn đi.
- Nếu gói dữ liệu đi vào một mạng được bảo vệ, thì nó sẽ được lọc bởi FORWARD chain của filter table, và nếu cần gói dữ liệu sẽ được SNAT trong POSTROUTING chain đểthay đổi IP nguồn trước khi vào mạng B.

- Nếu gói dữ liệu được định hướng đi vào trong bên trong firewall, nó sẽ được kiểm tra bởi INPUT chain trong mangle table, và nếu gói dữ liệu qua được các kiểm tra của INPUT chain trong filter table, nó sẽvào trong các chương trình của server bên trong firewall.
- Khi firewall cần gởi dữ liệu ra ngoài. Gói dữ liệu sẽ được dẫn và đi qua sựkiểm tra của OUTPUT chain trong mangle table( nếu cần ), tiếp đó là kiểm tra trong OUTPUT chain của nat table đểxem DNAT (DNAT sẽthay đổi địa chỉ đến) có cần hay không và OUTPUT chain của filter table sẽkiểm tra gói dữ liệu nhằm phát hiện các gói dữ liệu không được phép gởi đi. Cuối cùng trước khi gói dữ liệu được đưra lại Internet, SNAT and QoS sẽ được kiểm tra trong POSTROUTING chain.

3. Targets:
- Targets là hành động sẽ diễn ra khi một gói dữ liệu được kiểm tra và phù hợp với một yêu cầu nào đó. Khi một target đã được nhận dạng , gói dữ liệu cần nhảy (jump) đểthực hiện các xử lý tiếp theo. Bảng sau liệt kê các targets mà iptables sử dụng.
- Jump  là  cơ chế  chuyển một packet đến một target  nào đó để  xử lý  thêm một  số thao tác khác.

Bảng 2 : Miêu tảcác target mà iptables thường dùng nhất.



- ACCEPT: iptables chấp nhận chuyển data đến đích.
- DROP: iptables khóa những packet.
- LOG: thông tin của packet sẽ gởi vào syslog daemon iptables tiếp tục xử lý luật tiếp theo trong bảng mô tả luật. Nếu luật cuối cùng không match thì sẽ drop packet.Với tùy chọn thông dụng là --log-prefix="string", tức iptables sẽ ghi nhận lại những message bắt đầu bằng chuỗi "string".
- REJECT: ngăn chặn packet và gởi thông báo cho sender. Với tùy chọn thông dụng là --reject-with qualifier , tức qualifier chỉ định loại reject message sẽ được gởi lại cho người gởi. Các loại qualifer sau: icmp-port-unr eachable (default), icmp-net-unreachable, icmp-host-unreachable, icmp-proto-unreachable,…
- DNAT: thayđổi địa chỉ đích của packet. Tùy chọn là --to-destination ipaddress.
- SNAT: thay đổi địa chỉ nguồn của packet. Tùy chọn là --to-source <address> [-address][:<port>-<port>]
- MASQUERADING: được sử dụng để thực hiện kỹ thuật NAT (giả mạo địa chỉ nguồn với địa chỉ của interface của firewall). Tùy chọn là [--to-ports <port>[-<port>]], chỉ định dãy port nguồn sẽ ánh xạ với dãy port ban đầu.

4. Các tham sốchuyển mạch quan trọng của Iptables:
Các tham sốsau sẽcho phép Iptables thực hiện các hành động sao cho phù hợp với biểu đồxửlý gói do người sử dụng hoạch định sẵn.
Bảng 3 : Các tham số chuyển mạch (switching) quan trọng của Iptables .

-t <table> Chỉ định bảng cho iptables bao gồm: filter , nat, mangle tables.
-j <target> Nhảy đến một target chain khi packet thỏa luật hiện tại.
-A Thêm luật vào cuối iptables chain.
-F Xóa tất cả các luật trong bảng lựa chọn.
-p <protocol-type> Mô tả các giao thức bao gồm: icmp, tcp, udp và all
-s <ip-address> Chỉ định địa chỉ nguồn
-d <ip-address> Chỉ định địa chỉ đích
-i <interface-name> Chỉ định “input” interface nhận packet
-o <interface-name> Chỉ định "output" interface chuyển packet ra ngoài

- Lệnh hiển thị tất cả các Rule: 
 [root@websrv ~]# iptables -L
Chain INPUT (policy ACCEPT)
target     prot opt source               destination        
ACCEPT     tcp  --  172.16.0.0/16        anywhere            tcp dpt:squid
ACCEPT     tcp  --  172.16.0.0/16        anywhere            tcp dpt:squid
ACCEPT     all  --  anywhere             anywhere            state RELATED,ESTABLISHED
ACCEPT     icmp --  anywhere             anywhere           
ACCEPT     all  --  anywhere             anywhere           
ACCEPT     tcp  --  anywhere             anywhere            tcp dpt:http
ACCEPT     tcp  --  anywhere             anywhere            state NEW tcp dpt:ssh
REJECT     all  --  anywhere             anywhere            reject-with icmp-host-prohibited

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination        
REJECT     all  --  anywhere             anywhere            reject-with icmp-host-prohibited
ACCEPT     all  --  anywhere             anywhere           
ACCEPT     all  --  anywhere             anywhere           
ACCEPT     all  --  anywhere             anywhere           
ACCEPT     all  --  anywhere             anywhere           

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination 
và:
[root@websrv ~]# /etc/init.d/iptables status
Table: filter
Chain INPUT (policy ACCEPT)
num  target     prot opt source               destination        
1    ACCEPT     tcp  --  172.16.0.0/16        0.0.0.0/0           tcp dpt:3128
2    ACCEPT     tcp  --  172.16.0.0/16        0.0.0.0/0           tcp dpt:3128
3    ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0           state RELATED,ESTABLISHED
4    ACCEPT     icmp --  0.0.0.0/0            0.0.0.0/0          
5    ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0          
6    ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0           tcp dpt:80
7    ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0           state NEW tcp dpt:22
8    REJECT     all  --  0.0.0.0/0            0.0.0.0/0           reject-with icmp-host-prohibited

Chain FORWARD (policy ACCEPT)
num  target     prot opt source               destination        
1    REJECT     all  --  0.0.0.0/0            0.0.0.0/0           reject-with icmp-host-prohibited
2    ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0          
3    ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0          
4    ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0          
5    ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0          

Chain OUTPUT (policy ACCEPT)
num  target     prot opt source               destination        

Table: nat
Chain PREROUTING (policy ACCEPT)
num  target     prot opt source               destination        
1    DNAT       tcp  --  0.0.0.0/0            0.0.0.0/0           tcp dpt:80 to:172.16.100.254:3128
2    REDIRECT   tcp  --  0.0.0.0/0            0.0.0.0/0           tcp dpt:80 redir ports 3128

Chain POSTROUTING (policy ACCEPT)
num  target     prot opt source               destination        

Chain OUTPUT (policy ACCEPT)
num  target     prot opt source               destination  

 Ví dụ: Cấu hình cho mạng LAN 172.16.0.0/16 ra internet: - NAT OUT
- Cài đặt IP DNS:
[root@websrv ~]# vi /etc/resolv.conf
; generated by /sbin/dhclient-script
nameserver 8.8.8.8
nameserver 8.8.4.4
- Kích hoạt IP Forwarding:
[root@websrv ~]# echo 1 > /proc/sys/net/ipv4/ip_forward

- Thiết lập NAT trên iptables:
 Xóa hết tất cả các rule đang có trên mỗi bảng của iptables:
[root@websrv ~]# iptables -F
[root@websrv ~]# iptables -t nat -F
[root@websrv ~]# iptables -t mangle -F
 - Lưu và kiểm tra lại:
[root@websrv ~]# service iptables save
iptables: Saving firewall rules to /etc/sysconfig/iptables:[  OK  ]
[root@websrv ~]# iptables -L
Chain INPUT (policy ACCEPT)
target     prot opt source               destination        

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination        

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination        
[root@websrv ~]# service iptables status
Table: mangle
Chain PREROUTING (policy ACCEPT)
num  target     prot opt source               destination        

Chain INPUT (policy ACCEPT)
num  target     prot opt source               destination        

Chain FORWARD (policy ACCEPT)
num  target     prot opt source               destination        

Chain OUTPUT (policy ACCEPT)
num  target     prot opt source               destination        

Chain POSTROUTING (policy ACCEPT)
num  target     prot opt source               destination        

Table: nat
Chain PREROUTING (policy ACCEPT)
num  target     prot opt source               destination        

Chain POSTROUTING (policy ACCEPT)
num  target     prot opt source               destination        

Chain OUTPUT (policy ACCEPT)
num  target     prot opt source               destination        

Table: filter
Chain INPUT (policy ACCEPT)
num  target     prot opt source               destination        

Chain FORWARD (policy ACCEPT)
num  target     prot opt source               destination        

Chain OUTPUT (policy ACCEPT)
num  target     prot opt source               destination        
- Enable NAT bằng lệnh:
[root@websrv ~]# iptables -t nat -A POSTROUTING -o eth1 -j MASQUERADE
[root@websrv ~]# iptables -A FORWARD -i eth2 -j ACCEPT
- Lưu & khởi động lại:
[root@websrv ~]# service iptables save
iptables: Saving firewall rules to /etc/sysconfig/iptables:[  OK  ]
[root@websrv ~]# service iptables restart
iptables: Flushing firewall rules:                         [  OK  ]
iptables: Setting chains to policy ACCEPT: mangle nat filte[  OK  ]
iptables: Unloading modules:                               [  OK  ]
iptables: Applying firewall rules:                         [  OK  ]
 - Kiểm tra lại:
[root@websrv ~]# service iptables status
Table: filter
Chain INPUT (policy ACCEPT)
num  target     prot opt source               destination        

Chain FORWARD (policy ACCEPT)
num  target     prot opt source               destination        
1    ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0          

Chain OUTPUT (policy ACCEPT)
num  target     prot opt source               destination        

Table: nat
Chain PREROUTING (policy ACCEPT)
num  target     prot opt source               destination        

Chain POSTROUTING (policy ACCEPT)
num  target     prot opt source               destination        
1    MASQUERADE  all  --  0.0.0.0/0            0.0.0.0/0          

Chain OUTPUT (policy ACCEPT)
num  target     prot opt source               destination        

Table: mangle
Chain PREROUTING (policy ACCEPT)
num  target     prot opt source               destination        

Chain INPUT (policy ACCEPT)
num  target     prot opt source               destination        

Chain FORWARD (policy ACCEPT)
num  target     prot opt source               destination        

Chain OUTPUT (policy ACCEPT)
num  target     prot opt source               destination        

Chain POSTROUTING (policy ACCEPT)
num  target     prot opt source               destination        

Clien XP có thể truy cấp Webserver trong LAN và LAN có thể ra được internet

 [root@websrv ~]# vi /etc/sysconfig/iptables
# Generated by iptables-save v1.4.7 on Tue Feb 18 05:03:21 2014
*mangle
:PREROUTING ACCEPT [558:62328]
:INPUT ACCEPT [558:62328]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [376:36548]
:POSTROUTING ACCEPT [376:36548]
COMMIT
# Completed on Tue Feb 18 05:03:21 2014
# Generated by iptables-save v1.4.7 on Tue Feb 18 05:03:21 2014
*nat
:PREROUTING ACCEPT [1:72]
:POSTROUTING ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
-A POSTROUTING -o eth1 -j MASQUERADE
COMMIT
# Completed on Tue Feb 18 05:03:21 2014
# Generated by iptables-save v1.4.7 on Tue Feb 18 05:03:21 2014
*filter
:INPUT ACCEPT [41:3936]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [27:2440]
-A FORWARD -i eth2 -j ACCEPT
COMMIT
# Completed on Tue Feb 18 05:03:21 2014

 Ví dụ: Cấu hình Public các dịch vụ bên trong LAN: - NAT IN từ IP 192.168.1.106 vào port 80 của web server 172.16.100.3
 [root@websrv ~]# iptables -t nat -A PREROUTING -d 192.168.1.106 -i eth1 -p tcp -m tcp --dport 80 -j DNAT --to-destination 172.16.100.3:80

[root@websrv ~]# service iptables save
iptables: Saving firewall rules to /etc/sysconfig/iptables:[  OK  ]
[root@websrv ~]# service iptables restart
iptables: Flushing firewall rules:                         [  OK  ]
iptables: Setting chains to policy ACCEPT: filter nat mangl[  OK  ]
iptables: Unloading modules:                               [  OK  ]
iptables: Applying firewall rules:                         [  OK  ]
  Kiểm tra lại:
  

    [root@websrv ~]# service iptables status
    Table: mangle
    Chain PREROUTING (policy ACCEPT)
    num  target     prot opt source               destination      

    Chain INPUT (policy ACCEPT)
    num  target     prot opt source               destination      

    Chain FORWARD (policy ACCEPT)
    num  target     prot opt source               destination      

    Chain OUTPUT (policy ACCEPT)
    num  target     prot opt source               destination      

    Chain POSTROUTING (policy ACCEPT)
    num  target     prot opt source               destination      

    Table: nat
    Chain PREROUTING (policy ACCEPT)
    num  target     prot opt source               destination      
    1    DNAT       tcp  --  0.0.0.0/0            192.168.1.106       tcp dpt:80 to:172.16.100.3:80

    Chain POSTROUTING (policy ACCEPT)
    num  target     prot opt source               destination      
    1    MASQUERADE  all  --  0.0.0.0/0            0.0.0.0/0        

    Chain OUTPUT (policy ACCEPT)
    num  target     prot opt source               destination      

    Table: filter
    Chain INPUT (policy ACCEPT)
    num  target     prot opt source               destination      

    Chain FORWARD (policy ACCEPT)
    num  target     prot opt source               destination      
    1    ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0        

    Chain OUTPUT (policy ACCEPT)
    num  target     prot opt source               destination      

    [root@websrv ~]# cat /etc/sysconfig/iptables
    # Generated by iptables-save v1.4.7 on Tue Feb 18 06:21:32 2014
    *filter
    :INPUT ACCEPT [908:86466]
    :FORWARD ACCEPT [1099:1251917]
    :OUTPUT ACCEPT [528:63672]
    -A FORWARD -i eth2 -j ACCEPT
    COMMIT
    # Completed on Tue Feb 18 06:21:32 2014
    # Generated by iptables-save v1.4.7 on Tue Feb 18 06:21:32 2014
    *nat
    :PREROUTING ACCEPT [1:72]
    :POSTROUTING ACCEPT [0:0]
    :OUTPUT ACCEPT [0:0]
    -A PREROUTING -d 192.168.1.106/32 -i eth1 -p tcp -m tcp --dport 80 -j DNAT --to-destination 172.16.100.3:80
    -A POSTROUTING -o eth1 -j MASQUERADE
    COMMIT
    # Completed on Tue Feb 18 06:21:32 2014
    # Generated by iptables-save v1.4.7 on Tue Feb 18 06:21:32 2014
    *mangle
    :PREROUTING ACCEPT [3022:1457572]
    :INPUT ACCEPT [908:86466]
    :FORWARD ACCEPT [2102:1370170]
    :OUTPUT ACCEPT [528:63672]
    :POSTROUTING ACCEPT [2630:1433842]
    COMMIT
    # Completed on Tue Feb 18 06:21:32 2014

0 nhận xét:

Đăng nhận xét

Lưu ý: Chỉ thành viên của blog này mới được đăng nhận xét.