Hướng dẫn cách chặn PING (chặn giao thức ICMP) trên Linux

Chặn PING luôn được xem là cách khá hữu ích trong trường hợp máy chủ của bạn bị kiểu tấn công DDOS sử dụng tính năng PING (Flood ICMP). Trong bài viết này, hãy cùng theo dõi cách chặn PING trên Linux.

PING (Packet InterNet Gopher) là một tiện ích quản trị máy tính được sử dụng để kiểm tra khả năng kết nối của máy chủ trên giao thức Internet (IP) và dùng để đo thời gian gói tin được gửi từ máy chủ đến máy đích và quay trở về.

Hướng dẫn cách chặn PING (chặn giao thức ICMP) trên Linux

Trên Linux có rất nhiều dịch vụ firewall như shorewall, csf, firewalld,... nhưng nhìn chung sẽ tương tác qua ‘iptables’ -> core module kernel ‘netfilter’. Vì thế mà ta sẽ sử dụng công cụ chính là ‘iptables’ để cấu hình trực tiếp các rule chặn giao thức ICMP (hoạt động PING) trên Linux.

Những option iptables hỗ trợ

Do chúng ta sẽ cần sử dụng chương trình firewall ‘iptables’ để thiết lập các rule tường lửa. Vì thế, bạn cần lưu ý cơ bản một số option sau của nó.

-A: Thêm Rule vào phía dưới bảng rule iptables.

-D: Xóa rule ra

-p: Chỉ định giao thức (ở đây mình sẽ sử dụng giao thức “icmp”)

-icmp-type: Loại chỉ định của giao thức ICMP

-J: Chỉ định đến mục tiêu

Chặn PING đến máy chủ của bạn với một thông báo lỗi

Bạn có thể chặn PING đến máy chủ Linux của bạn với một thông báo lỗi “Destination Port Unreachable”.

# iptables -A INPUT -p icmp --icmp-type echo-request -j REJECT

Kiểm tra:

# iptables -L

Chain INPUT (policy ACCEPT)

target  prot opt source             destination

ACCEPT  all -- anywhere           anywhere state RELATED,ESTABLISHED

ACCEPT  all -- anywhere           anywhere

ACCEPT  tcp -- anywhere           anywhere state NEW tcp dpt:ssh

REJECT  icmp -- anywhere             anywhere icmp echo-request reject-with icmp-port-unreachable

Chain FORWARD (policy ACCEPT)

target  prot opt source             destination

Chain OUTPUT (policy ACCEPT)

target  prot opt source             destination

Kết quả ping thử:

[c:\~]$ ping 192.168.1.69




Pinging 192.168.1.69 with 32 bytes of data:

Reply from 192.168.1.69: Destination port unreachable.

Reply from 192.168.1.69: Destination port unreachable.

Reply from 192.168.1.69: Destination port unreachable.

Reply from 192.168.1.69: Destination port unreachable.




Ping statistics for 192.168.1.69:

Packets: Sent = 4, Received = 4, Lost = 0 (0% loss),

Để chặn PING mà không cần thông báo lỗi nào

Bạn sử dụng DROP là option cho hành động xử lý packet ‘Jump To Target’.

# iptables -A INPUT -p icmp --icmp-type echo-request -j DROP

# iptables -A OUTPUT -p icmp --icmp-type echo-reply -j DROP

Kiểm tra:

# iptables -L

Chain INPUT (policy ACCEPT)

target  prot opt source             destination

DROP    icmp -- anywhere           anywhere icmp echo-request

Chain FORWARD (policy ACCEPT)

target  prot opt source             destination

Chain OUTPUT (policy ACCEPT)

target  prot opt source             destination

DROP    icmp -- anywhere             anywhere icmp echo-reply

Kết quả ping thử:

[c:\~]$ ping 192.168.1.69




Pinging 192.168.1.69 with 32 bytes of data:

Request timed out.

Request timed out.

Request timed out.

Request timed out.




Ping statistics for 192.168.1.69:

Packets: Sent = 4, Received = 0, Lost = 4 (100% loss),

Cho phép PING từ OUTSIDE đến INSIDE

# iptables -A INPUT -p icmp --icmp-type echo-request -j ACCEPT

# iptables -A OUTPUT -p icmp --icmp-type echo-reply -j ACCEPT

Chặn PING từ chính máy chủ của bạn

# iptables -A OUTPUT -p icmp --icmp-type echo-request -j DROP

Kết quả ping thử:

# ping google.com

PING google.com (172.217.161.142) 56(84) bytes of data.

ping: sendmsg: Operation not permitted

ping: sendmsg: Operation not permitted

ping: sendmsg: Operation not permitted

ping: sendmsg: Operation not permitted

ping: sendmsg: Operation not permitted

^C

--- google.com ping statistics ---

5 packets transmitted, 0 received, 100% packet loss, time 4855ms

Cho phép PING từ INSIDE đến OUTSIDE

# iptables -A OUTPUT -p icmp --icmp-type echo-request -j ACCEPT

# iptables -A INPUT -p icmp --icmp-type echo-reply -j ACCEPT

Chặn PING từ cấu hình kernel

Ngoài cách Allow/Deny PING bằng iptables ra, các bạn cũng có thể chặn PING bằng cách cấu hình tinh chỉnh Kernel như sau:

  • Deny PING:

# echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all

Ngược lại Allow PING:

# echo 0 > /proc/sys/net/ipv4/icmp_echo_ignore_all