Showing posts with label Network. Show all posts
Showing posts with label Network. Show all posts

Thursday, April 14, 2016

Find number of unique IP’s and active connections to Web server

In computing, netstat (network statistics) is a command-line tool that displays network connections (both incoming and outgoing), routing tables, and a number of network interface (network interface controller or software-defined network interface) and network protocol statistics. It is available on Unix-like operating systems including OS X, Linux, Solaris, and BSD, and is available on Windows NT-based operating systems including Windows XP, Windows Vista, Windows 7 and Windows 8. Find number Unique IP's and active connections to Web server - blackMORE Ops
It is used for finding problems in the network and to determine the amount of traffic on the network as a performance measurement.
netstat is the most frequent tool used for monitoring network connections on a Linux servers. netstat returns a variety of information on active connections such as their current status, what hosts are involved, and which programs are involved. You can also see information about the routing table and even get statistics on your network interfaces. netstat is a good all-around utility and it is an essential tool for the Linux administrators.
If you just type netstat, it would display a long list of information that’s usually more than you want to go through at any given time. The trick is that how to keeping the information useful and what you’re looking for and how to tell netstat to only display that information.
Users can also use man netstat command to get detailed netstat help and manual where there are lots of configurable options and flags to get meaningful lists and results.

The Holy Grail of netstat – My way

My requirements are simple:
  1. I want to see all users connected to my server
  2. I only want to see users on port 80 (http)
  3. I want to see total number of connections per IP
  4. I don’t want to see my own server’s IP in the output
  5. I want to sort them Max to Min.
Following commands will do just that. I am using the usual netstatty things. I will break down each command as I go:

Step 1: Show active connections – TCP and UDP Internet  (w/o servers)

First of all lets just check the active TCP and UDP connections.
netstat -ntu
-ntu = TCP and UDP connections in numeric order (w/o servers).

Step 2: Show all active connections – (/w servers and established)

Well, that’s good. But how do I know what ports I am listening to? I need that cause I want to check that my server is not listening to any funky ports. If it does, then I got either mis-configured services or my server is compromised.
So I will just add ‘ -a ‘ flag in this command.
netstat -antu
-antu = All TCP and UDP connections in numeric order (with servers and established)
I’ve seen way too many guides where people go an use ‘ plan ‘ flag .. ‘ -a ‘ already includes everything, ‘ -l ‘ is not required.

Step 3: Show all active connections to Web server

Now that I have a decent output, I can start working on it. In this particular output, I got all sorts active TCP and UDP Internet connections on every open port. I want to narrow it down to port 80 only (HTTP Port). I will use grep to narrow down on that.
netstat -antu | grep :80
Nice, now I see active TCP and UDP Internet connections on port 80 only. (in fact it will be all TCP as HTTP is a TCP service). You can use netstat -anu to list UDP connections.

Step 4: Show all active connections to Web server excluding self IP’s

So far I managed to list all active TCP and UDP connections and filter my results for port 80. But I can see few entries like following:
tcp        0      0 0.0.0.0:80                  0.0.0.0:*                   LISTEN      
tcp        0      0 :::80                       :::*                        LISTEN
I don’t want to exclude that as it is just loopback address. I am more interested to see foreign IP’s connected to my website. So I will just use grep -v to exclude these connections.
netstat -antu | grep :80 | grep -v LISTEN

>> Sample output

root@kali [~]# netstat -antu | grep :80 | grep -v LISTEN 
tcp        0      0 127.0.0.1:80             202.28.177.61:59818         SYN_RECV    
tcp        0      0 127.0.0.1:80             202.28.177.61:40560         SYN_RECV    
tcp        0      0 127.0.0.1:80             202.28.177.61:50523         SYN_RECV    
tcp        0      0 127.0.0.1:80             202.28.177.61:55520         SYN_RECV    
tcp        0      0 127.0.0.1:80             68.204.187.5:50420          TIME_WAIT   
tcp        0      0 127.0.0.1:80             202.28.177.61:41423         TIME_WAIT   
tcp        0      0 127.0.0.1:80             24.232.175.224:45254        TIME_WAIT   
tcp        0      0 127.0.0.1:80             68.204.187.5:50465          TIME_WAIT   
tcp        0      0 127.0.0.1:80             202.28.177.61:43653         TIME_WAIT   
tcp        0      0 127.0.0.1:80             202.28.177.61:33851         TIME_WAIT

Step 5: Show all active connections to Web server – IP: Port only

Now I want to do more. I want to exclude everything and only list foreign IP addresses. I need some sort of filter. awk is exactly the tool I need to use here. But how do I know which field to filter?
Let’s look at a sample output from previous command.
tcp        0      0 127.0.0.1:80             202.28.177.61:59818         SYN_RECV
In the above line, I am only interested on the foreign IP 202.28.177.61. awk has the capability to do data extraction. Let’s count the fields.
(1)tcp    (2)0    (3)0  (4)127.0.0.1:80   (5)202.28.177.61:59818         (6)SYN_RECV
Note that, 127.0.0.1:80 and 202.28.177.61:59818 is counted as one field as they don’t have any spaces.
So, let’s try to list the 5th field which contains all the foreign IP addresses.
netstat -antu | grep :80 | grep -v LISTEN | awk '{print $5}'

>> Sample output

root@kali [~]# netstat -antu | grep :80 | grep -v LISTEN | awk '{print $5}' 
113.173.16.70:26985
50.106.33.249:49292
113.173.16.70:26982
66.87.131.102:4370
113.173.16.70:26996
175.143.49.222:19709
66.87.131.102:4386
87.76.5.167:18296
23.24.156.251:57306
222.66.184.182:56000

Step 6: Show all active connections to Web server – IP’s only

The last output looks good to me. I managed to list only foreign addresses. But If you look closely, you will see same foreign IP is listed more than once on different ports. It is essentially the same user (or groups of users behind same proxy).
Let’s go one step further, I now want to see foreign IP’s only without their originating ports. I will be using cut for that. cut will allow me to cut every line at the first space character and take the first piece.
netstat -antu | grep :80 | grep -v LISTEN | awk '{print $5}' | cut -d: -f1
I am using -d: to let cut know that I am using the (:) colon character as the field delimiter.
By using -f1 I am telling cut to give me the first field (which is the IP address before the colon character).

>> Sample output

root@kali [~]# netstat -antu | grep :80 | grep -v LISTEN | awk '{print $5}' | cut -d: -f1  
99.104.23.221
99.104.23.221
2.50.116.13
5.239.12.118
99.104.23.221
99.104.23.221
66.249.81.52
99.104.23.221
218.80.192.208
99.104.23.221

Step 7: Show all active connections to Web server – sorted and unique

Now the output contains only foreign IP addresses. We now need to sort them, and then pipe it to uniq command so that we are left with unique foreign IP in a sorted manner. I also want uniq command to count the number of connections per IP.
netstat -antu | grep :80 | grep -v LISTEN | awk '{print $5}' | cut -d: -f1 | sort | uniq -c
uniq -c will count total number of connections per IP.

>> Sample output

root@kali [~]# netstat -antu | grep :80 | grep -v LISTEN | awk '{print $5}' | cut -d: -f1 | sort | uniq -c
     14 112.204.9.125
      1 113.173.16.70
      4 124.176.50.119
      1 125.163.235.42
      1 175.136.237.182
      1 178.26.19.53
      1 180.76.6.44
     12 202.28.177.61

Step 8: Show all active connections to Web server – connection count

But hang on, uniq -c did count it and sorted them as per IP addresses. Let’s re-sort this list to show Max to Min number of connections per unique IP (foreign IP’s only).
netstat -antu | grep :80 | grep -v LISTEN | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -rn

>> Sample output

root@kali [~]# netstat -ntu | grep :80 | grep -v LISTEN | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -rn 
     44 92.45.59.194
     37 121.52.153.215
     35 212.14.31.37
     28 76.177.223.119
     28 37.228.105.222
     27 182.186.25.222
      8 13.1.89.53
      6 127.0.0.1

Step 9: Show all active connections to Web server – exclude self IP’s

It’s all good so far. But I can see my own server’s IP in that list. (i.e. 127.0.0.1). If I can just exclude that, I will be left with Foreign IP’s only. I will use grep -v to exclude that line.
root@kali [~]# netstat -ntu | grep :80 | grep -v LISTEN | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -rn | grep -v 127.0.0.1

>> Sample output

root@kali [~]# netstat -ntu | grep :80 | grep -v LISTEN | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -rn | grep -v 127.0.0.1
     45 108.168.173.83
     36 174.45.176.119
     35 70.39.187.230
     34 175.144.92.225
     24 139.195.97.102
     19 69.142.186.97
     18 150.101.190.51
     12 50.150.246.167

Step 10: Final count of all active IP’s to Web server

This is now working just the way I wanted. Let’s do a final count of total number of unique IP’s connected to my server.
root@kali [~]# netstat -ntu | grep :80 | grep -v LISTEN | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -rn | grep -v 127.0.0.1 | wc -l

>> Sample output

root@kali [~]# netstat -ntu | grep :80 | grep -v LISTEN | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -rn | grep -v 127.0.0.1 | wc -l
768
wc -l does a line count..
It means I’ve got 768 unique IP’s connected right now.

Step 11: Final count of all active connections to Web server

Last but not the least, I want a total count of connections to port 80 from all foreign IP’s.
netstat -ntu | grep :80 | grep -v LISTEN | awk '{print $5}' | cut -d: -f1 | grep -v 127.0.0.1 | wc -l

>> Sample output

root@kali [~]# netstat -ntu | grep :80 | grep -v LISTEN | awk '{print $5}' | cut -d: -f1 | grep -v 127.0.0.1 | wc -l
1847
That means I’ve got 1847 connections opened right now from all external IP’s to port 80 on my server.

Conclusion

netstat is the most useful tool to detect and determine whether a server is under DoS or DDoS attack (Distributed Denial of Service). Whenever a client connects to a server via network, a connection is established and opened on the system. On a busy high load server, the number of connections connected to the server can be run into large amount till hundreds if not thousands. Find out and get a list of connections on the server by each node, client or IP address is useful for system scaling planning, and in most cases, detect and determine whether a web server is under DoS or DDoS attack (Distributed Denial of Service), where an IP sends large amount of connections to the server. To check connection numbers on the server, administrators and webmasters can make use of netstat command.
Do I think my way of using netstat is the best? Absolutely! Why? Cause it always worked for me.
I don’t know whether your sever is running on port 80 or if you’re getting DDoS on a different port (i.e. port 25 or 443), but the above command serves my purpose every time. There’s 10 different ways to skin a cat and I like my way. I’ve broken down my way of using netstat command to the last straw and once you follow it from top to bottom, you will get used to it and in time you will find your own perfect command.
There is no best way, only the way that works for you.

Further helpful links, sources and references:

Following links are awesome and they have lots of examples on how to use netstat. Though they might not be very explanatory, but if you understand the basics, then they are a useful resource to have on netstat.
  1. Netstat on Wiki
  2. The Geek Stuff
  3. My Digital Life
  4. BinaryTides

Saturday, April 2, 2016

Chặn IP Trung Quốc bằng Iptables + Ipset

WHY ? 


Không phải phân biệt chủng tộc hay kích động thù hằn dân tộc nhưng có một sự thật là TQ là nước chiếm tỉ lệ lớn nguồn gốc các cuộc tấn công mạng vào các Website của thế giới nói chung và VN nói riêng. Nhiều website nước ngoài cũng tiến hành chặn IP Trung Quốc để ngủ ngon hơn, mình cũng nên học hỏi.
Lưu ý : Việc chặn IP chỉ là biện pháp đối phó tương đối (chỉ hiệu quả trước một số loại tấn công như DoS, Spam..) . Đối với những kẻ tấn công có chủ đích nhắm vào ứng dụng của bạn thì chúng có thừa thủ đoạn để qua mặt các bộ lọc IP. Về lâu dài, bạn cần định kỳ kiểm trả bảo mật và đảm bảo các quy tắc lập trình an toàn trong quá trình phát triển.

HOW ?


Công cụ :

  • iptables - firewall mặc định trên hầu hết Linux Distro (Lưu ý : CentOS 7 và FC20 trở đi sử dụng firewallD thay thế iptables, cần cài lại iptables thay thế firewallD hoặc viết rule cho firewallD)
  • ipset - công cụ hỗ trợ iptables, có chức năng tạo cái list IP để add rule cho iptables (Cài đặt : yum install ipset hoặc apt-get install ipset)
Tạo file bash script có nội dung :
/etc/china-block.sh
# Tạo list ipset tên china
ipset -N china hash:net # Xóa nội dung file cn.zone cũ (file danh sách IP china) để cập nhật list mới.
rm ~/cn.zone
# Tải list IP Trung Quốc mới nhất về từ site ipdeny, lưu ở home
wget -P ~ http://www.ipdeny.com/ipblocks/data/countries/cn.zone
# Đọc từng dòng trong file cn.zone rồi lưu vào list ipset china
for i in $(cat ~/cn.zone ); do ipset -A china $i; done
# Restore các rule iptables khi khởi động lại
/sbin/iptables-restore < /etc/iptables.firewall.rules
Thêm rule vào file iptables.firewall.rules
-A INPUT -p tcp -m set --match-set china src -j DROP
Chạy thử file china-block.sh
$ sh china-block.sh
Kiểm tra kết quả
$ iptables -L Chain INPUT (policy ACCEPT)
target     prot opt source               destination
...
DROP       tcp  --  anywhere             anywhere             match-set china src
..
Cuối cùng là tạo crontab định kỳ thực hiện sáng sớm mỗi ngày
$ crontab -e * 1 * * * /etc/china-block.sh

Chống DDOS với iptables

Giới thiệu về iptables

Nguyên tắc làm việc của iptables là nó cho phép người dùng định nghĩa các quy tắc (rules), các quy tắc này nằm trong bộ nhớ và sẽ được iptables kiểm tra để thực thi mỗi khi có một request đến máy chủ. Nếu một request thỏa mãn quy tắc, nó sẽ được thực hiện theo action của quy tắc đó.

Các request được nhận diện bằng các thông số sau:
- địa chỉ nguồn (một ip hay cả một dải ip)
- địa chỉ đích
- giao thức (giao thức phổ biến là TCP/IP)
- cổng (các cổng phổ biến là cổng 80 http, cổng 21 ftp ...)
- interface vật lý (là request đến từ card mạng nào của máy chủ)

Còn các action mà iptables có thể thực hiện là
- ACCEPT cho phép request đó được thực hiện, hay nói đúng hơn là cho gói tin thỏa mãn các điều kiện trên đi qua.
- REJECT không cho phép gói tin đi qua, gửi trả lại địa chỉ xuất phát request một thông báo
- DROP không cho phép gói tin đi qua và cũng không gửi trả lại thông báo gì
- LOG cho phép gói tin đi qua nhưng sẽ ghi log lại để phân tích
- DNAT cho phép gói tin đi qua nhưng dùng NAT để thay thế địa chỉ đích
- SNAT cho phép gói tin đi qua nhưng dùng NAT để thay thế địa chỉ nguồn

Ngoài ra các rules còn được kiểm soát bởi kiểu của request, có 3 kiểu sau đây
- INPUT: là các request đến máy chủ
- FORWARD: là các request đi qua máy chủ (vào cổng mạng này và đi ra cổng mạng khác) nó áp dụng trong trường hợp máy chủ của bạn làm việc như một routing server.
- OUTPUT: áp dụng cho các request đi từ máy chủ ra ngoài (ví dụ bạn không muốn các website trên VPS của bạn truy cập đến một website khác nằm ở đâu đó trên internet).

Các lệnh quản lý iptables


Bạn có thể khởi tạo một rule và kiểm tra iptables ngay từ dùng lệnh của hệ điều hành linux. Dưới đây là một số lệnh cơ bản

Kiểm tra xem dịch vụ iptables đã chạy hay chưa:
     # service iptables status

Nếu như iptables đang chạy nó sẽ liệt kê ra các rules nằm trong 3 kiểu là chain INPUT, chain FORWARD và chain OUTPUT. Nếu như iptables chưa chạy sẽ có thông báo là Firewall is stopped. Lưu ý là trong trường hợp chưa có một rule nào đã được định nghĩa, thì có thể bạn cũng nhận được thông báo Firewall is stopped. Lúc đó bạn chỉ cần thêm vào một rules là iptables sẽ được bật.

Bật dịch vụ iptables
     # service iptables start

Khởi động lại dịch vụ iptables. Thông thường mỗi khi bạn tạo rules từ dòng lệnh, thì các rule này có hiệu lực ngay. Tuy nhiên trong trường hợp bạn tạo rules vào file thì bạn cần dùng lệnh sau để khởi động lại iptables và tải lại các rules từ file

     # service iptables restart

Ghi các rules hiện thời vào file. Thông thường các rules được lưu trong bộ nhớ RAM để thực thi cho nhanh. Tuy nhiên khi tắt máy hoặc khởi động lại, các rules này sẽ không còn. Để lưu lại các rules bạn cần thực hiện lệnh sau:

# service iptables save

Lệnh trên sẽ lưu các rules đang chạy vào file /etc/sysconfig/iptables Sau khi đã có file này, các bạn có thể thêm trực tiếp các rules vào trong file này. Tuy nhiên lưu ý là các rules trong iptables sẽ có tác dụng ngay lập tức vì vậy để tránh tạo ra các rules lỗi, bạn nên tạo các rules trong một file nháp ví dụ như file /etc/sysconfig/iptables.tmp  sau đó chạy kiểm tra iptables bằng lệnh sau:

# iptables-restore < /etc/sysconfig/iptables.tmp

Nếu các bạn muốn lưu các rules đang chạy ra một file bất kỳ (để backup hoặc để gửi cho người khác) thì có thể dùng lệnh sau

# iptables-save > /etc/sysconfig/iptables.backup

Nếu dùng lệnh trên mà không có tên file theo sau, nó sẽ in các rules đang chạy ra màn hình để bạn kiểm tra.

Các lệnh tạo rules cho iptables.


Cú pháp chung cho các lệnh tạo rules của iptables như sau

# iptables [command] [kiểu] [mô tả rule] [-j acction]

Trong đó kiểu là INPUT, FORWARD, hoặc OUTPUT như đã nói ở trên. Acction = ACCEPT, REJECT, DROP.... như đã nói ở trên, còn command, các bạn có thể tham khảo danh sách các command bằng cách gõ lệnh:

# iptables -h

Các command thông dụng là:
      - I  (Thêm một quy tắc mới vào iptable)
      - A (chèn thêm các mô tả vào một quy tắc)
      - D (xóa bỏ một quy tắc)

Còn đoạn mô tả rule thì được xây dựng từ địa chỉ nguồn, địa chỉ đích, cổng dịch vụ, cổng mạng.... các bạn tìm hiểu các rule này qua các ví dụ sau:

- Rule 1: chặn một địa chỉ bên ngoài đến interface ethe0 và truy xuất cổng 80 giao thức tcp,  tới địa chỉ đích 27.118.22.10
      -s 116.10.191.15 -i ethe0 -d 27.118.22.10 -p tcp --dport 80

- Rule 2:  chặn một network (cả một dải ip) truy xuất các cổng 3000 đến 4000 của địa chỉ 27.118.22.10
      -s 116.10.191.0/24 -d 27.118.22.10 -p tcp --dport 3000:4000

- Rule 3: Cấm một ip dùng cổng 20 (ftp) truy xuất đến máy chủ
      -s 116.10.191.15 -d 27.118.22.10 -p tcp --sport 20

Giải thích các option:

      -s (chỉ ra địa chỉ nguồn của gói tin)
      -d (chỉ ra địa chỉ đích của gói tin)
      -p (chỉ ra giao thức, có thể là tcp, icmp, udp....)
      -dport (chỉ ra các cổng dịch vụ ở địa chỉ ip đích )
      -sport (chỉ ra các cổng dịch vụ của ip nguồn)
      -i (chỉ ra cổng vật lý mà gói tin xuất hiện ví dụ cổng ethe0)

Tham khảo các option khác bằng lệnh # iptables -h

Bây giở chúng ta sẽ ghép các thành phần trên để tạo thành một rule thực sự. Giả sử chúng ta cần cấm tất cả các gói tin có địa chỉ IP nguồn đến từ một network là 116.10.191.0 đi đến VPS của chúng ta, bất kể là gói tin đó sử dụng giao thức gì, dịch vụ gì, và bất kể nó đòi truy xuất đến địa chỉ IP nào, chúng ta gõ lệnh sau trực tiếp vào dòng lệnh của hệ điều hành

# iptables -I INPUT -s 116.10.191.0/24 -j DROP

Ngay sau khi gõ lệnh trên, toàn bộ các host có địa chỉ IP là 116.10.191.x sẽ không còn truy xuất được đến máy VPS của bạn nữa.  Nếu muốn xóa bỏ quy tắc trên, chúng ta gõ lệnh

# iptables -D INPUT -s 116.10.191.0/24 -j DROP

Sau khi thực hiện việc tạo, thêm bớt các rule, các bạn nhớ dùng lệnh sau để ghi lại các rules để nếu như có khởi động lại VPS thì iptables có thể dùng lại các rule này.

# service iptables save

Sau đó cũng cần phải đặt chế độ tự khởi động dịch vụ iptables mỗi lần khởi động VPS bằng lệnh sau:

# chkconfig iptable on

Áp dụng iptables


Qua các bước trên các bạn đã biết cách dùng iptables để ngăn chặn các truy xuất từ các IP xấu. Vậy bây giờ chúng ta sẽ dùng nó như thế nào? Để chống lại các cuộc tấn công DDOS, chúng ta có nhiều phương án khác nhau.

Cách thứ nhất: Phân tích log

Phân tích thường xuyên file log để biết IP nào hay trọc phá VPS và block ip đó. Các bạn hãy xem toàn bộ file /var/log/secure để biết được các request bất thường hay đến từ địa chỉ IP nào. Sau đó  các bạn tạo ra một file shell như sau để dùng nhiều lần

# cd /etc/sysconfig/
# vi iptables.sh (sau đó đặt các lệnh tạo rules của iptables vào trong file này)
# chmod +x iptables.sh   (cho phép chạy file này)
# ./iptables.sh  (chạy file để tạo ra các rules)

Từ nay về sau mỗi khi phát hiện một ip xấu nào, bạn chỉ cần thêm một dòng vào file iptables.sh này và chạy nó thì các rules sẽ được tạo ra.

Cách thứ 2: Chặn IP theo vùng

Nhận xét thấy là các cuộc tấn công DDOS thường đến từ các quốc gia như Trung Quôc, Hàn Quốc... trong khi VPS của bạn không có khách hàng nào ở các quốc gia này thì bạn có thể chặn toàn bộ IP của các nước có nghi ngờ xuất phát các cuộc tấn công DDOS như sau:

Đầu tiên bạn cần có danh sách ip của các quốc gia này. Ví dụ danh sách các IP hay tấn công DDOS từ Trung Quốc các bạn có thể lấy ở link này: http://www.ipdeny.com/ipblocks/data/countries/cn.zone

Khi đã có link, các bạn lấy danh sách ip đó về một file gọi là iptables.block.list bằng lệnh sau

# wget -c --output-document=iptables.block.list http://www.ipdeny.com/ipblocks/data/countries/cn.zone

Sau khi có file danh sách này bạn viết một script như sau:

#vi iptables.sh
Nội dung file:
#!/bin/bash
WORKDIR="/root"
#######################################
cd $WORKDIR
if [ -f iptables.block.list ]; then
  iptables -F
  BLOCKDB="iptables.block.list"
  IPS=$(grep -Ev "^#" $BLOCKDB)
  for i in $IPS
  do
    iptables -A INPUT -s $i -j DROP
  done
fi

Tiếp theo là chạy file iptables.block.list và nhớ save danh sách bằng lệnh service iptables save như các bước trên.


File iptables-config


File /etc/sysconfig/iptables-config có chứa một số cấu hình cho dịch vụ iptables. Các bạn cũng nên tìm hiểu một số lệnh trong file này để ứng dụng.

IPTABLES_SAVE_ON_STOP = "no"  Giá trị này nên chuyển thành "yes" khi đó mỗi lần stop iptables (hay là khi tắt máy) thì các rules trong bộ nhớ sẽ được save vào file /etc/sysconfig/iptables để tải lại các lần sau

IPTABLES_SAVE_ON_RESTART ="no"  Giá trị này nếu sửa thành "yes" thì mỗi khi restart dịch vụ iptables, các rules cũng được ghi lại vào file

... ngoài ra còn một số tham số khác các bạn tự tìm hiểu thêm

Nguyên tắc cuối cùng: chống tự tử

Những ai đã từng làm filtering và firewalling đều có những bài học xương máu về việc tự sát. Đó là trong khi mải mê tạo ra các rules để ngăn chặn các cuộc tấn công, vô tình chúng ta cấm luôn cả ip của chính mình và kể từ đó không còn access được vào server nữa. Để tránh gặp phải thảm cảnh này, các bạn nên tuân thủ một số nguyên tắc sau:

1- The First match rule.

Trước khi tạo bất cứ một rules nào bạn cần phải tạo một rule cho phép chính mình và đặt ở đầu file iptables. Bởi vì mọi firewall đều làm việc theo nguyên tắc duyệt các rule từ trên xuống dưới, nếu thỏa mãn thì áp dụng ngay bất kể các rule bên dưới có match hay không. Vậy nên các trong khi thao tác với iptables, bạn cần biết IP của máy mình đang dùng là gì. Nếu có ip tĩnh thì quá tốt, nếu không thì cũng phải biết dải ip mà ADSL của mình thường xuyên được cấp. Sau đó tạo một rules đầu tiên trong file iptables như sau:

-A INPUT -s 111.111.111.111/32 -j ACCEPT

Trong đó 111.111.111.111 giả định là ip mà máy của bạn đang dùng. Nếu như bạn có một dài IP hay dùng thì thay bằng dòng

-A INPUT -s 111.111.111.0/24 -j ACCEPT

Như vậy bất kể sau đó bạn có khai báo một lệnh DROP hay REJECT nào thì ip của bạn vẫn access được đến server mà không sợ thiết lập rules "tự tử" cấm chính mình.

2- Alway got the second road.

Cho dù bạn cẩn thận đến đâu, kể cả khi bạn đã áp dụng nguyên tắc thứ nhất thì vẫn có thể bạn không access được vào server, chẳng hạn như bạn đã mở ip của bạn, nhưng mạng của nhà cung cấp dịch vụ lại cấm ip của bạn thì sao? hoặc giả bạn cho phép dải ip ở công ty của bạn access, nhưng bạn đang ở quán cafe wifi và muốn access vào VPS thì sao? Để tránh tình huống này bạn cần tạo ra một rule thứ 2 cho phép một máy dự phòng và máy này thì bạn có thể remote từ xa vào để thao tác. Hãy add thêm dòng lệnh sau vào ngay bên dưới dòng lệnh nêu trên trong file iptables

-A INPUT -s 222.222.222.222/32 -j ACCEPT

trong đó 222.222.222.222 là máy dự phòng để bạn có thể access vào máy chủ khi mà IP thứ nhất bị cấm.

3- Kiểm tra tất cả mọi thứ trước khi đặt lệnh chkconfig on

Các tác giả iptables đã lường trước rằng người dùng sẽ có thể vô tình tự tử khi thiết lập rule nên họ đặt ra một nguyên tắc là iptables làm việc với các rule thường trực trong RAM và chỉ save xuống iptables để lưu. Đồng thời họ để chế độ ngầm định là iptables sẽ không khởi động mỗi khi reboot máy. Đây là một cơ may cuối cùng khi bạn bị cấm ip. Lúc đó chỉ cần khởi động lại máy là các rules trong RAM sẽ bị xóa sạch và thậm chí là iptables sẽ không khởi động theo máy nên bạn sẽ có thể access lại máy chủ sau khi reboot. Tôn trọng nguyên tắc này bạn cần lưu ý mấy điểm sau:

  • Gõ các rules từ dòng lệnh của linux để rules ghi vào ram chứ không ghi vào file iptables, để kiểm tra xem rule có tác động như thế nào, nếu sau khi ứng dụng rule mà bị ngắt thì khởi động lại server.
  • Save các rule từ RAM sang một file tạm trước khi save vào iptable bằng lệnh iptables-save > filename. Việc này vừa để backup iptables và vừa đảm bảo là các rules được test kỹ trước khi save lại vào file cấu hình.
  • Hãy kiểm tra cẩn thận trước khi gõ lệnh chkconfig iptables on vì sau khi gõ lệnh này, mỗi lần khởi động lại server sẽ tự load file iptables lên và áp dụng các rules ngay, do vậy nếu như đã trót save các lệnh "tự tử" vào file iptables mà lại đặt lệnh chkconfig on cho dịch vụ này thì coi như hết thuốc chữa.

Thursday, February 18, 2016

HƯỚNG DẪN CẤU HÌNH VPN SERVER TRÊN WINDOWS SERVER 2003

MỤC LỤC
  1. Cài đặt windows server 2003 và update các service pack
  2. Cấu hình VPN server
  3. Cấu hình Nat
  4. Cấu hình Filter


Do nhu cầu bảo mật khi truy cập vào các server của công ty từ các mạng public không đáng tin cậy của các thành viên trong công ty. Một kênh kết nối mã hóa dữ liểu cần được thiết lập trên các mạng public không đáng tin cậy cần được xây dựng, giúp cho dữ liệu mà các thành viên truyền đi trên mạng khi truy cập vào các server của công ty được mã hóa. Vì thế, yêu cầu đặt ra là cấu hình một VPN server + NAT   thông qua VPN server này các remote client có thể truy cập các tài nguyên công ty trên mạng public được an toàn.

1.     Cài đặt windows server 2003 và update sevice pack
2.     Cấu hình VPN
Vào Control Panel > Aministrator tools > Routing and Remote Access, cửa sổ Routing and Remote Access hiện ra.

Nhấp phải trên CONGDAT (local) chọn Configure And Enable Routing And Remote Access.


Sau khi màn hình Welcome to the routing and remote access server setup winzard hiện ra, ta nhấnNext.


Chọn mục Remote access (dial-up or vpn). Tiếp tục Nhấn Next


Tại đây ta config server VPN nên ta chọn mục VPN như hình trên, tiếp tục nhấn Next


Tại cửa sổ tiếp theo này, wizard đưa ra các lựa chọn cho ta chọn card mạng nào là card mạng external (card mạng đó đi được internet). Và cũng tại cửa sổ này, ta có thể enable hoặc disable security trên interface external (Enable security on the select interface by setting up static packet filters), nếu ta check mục này, thì tất cả client không the kết nối được vào vpn server vì mặc định, firewall sẽ chặn tấ cả các kết nối của client vào vpn sever. Vì thế tại mục tùy chọn này ,ta có thể uncheck (ta có thể cấu hình mục này sau khi đã cấu hình VPN hoàn tất ), để dể dàng debug lỗi. Tiếp tục nhấn nút Next.


 
Tại đây, ta có thể cấu hình để server VPN cấp ip mạng Internal cho client khi client kết nối vpn vào thành công, có 2 tùy chọn ở đây
      Automatically : Nếu mạng internal có sẳn một DHCP, thì ta chọn tùy chọn này để DHCP đó cấp luôn ip cho các client khi client kết nối VPN vào. Nếu chọn tùy chọn này, bạn phải khai báo DHCP server trong mục DHCP relay agent sau khi đã cấu hình vpn hoàn tất.
      From a specified range of addresses : chọn tùy chọn này giúp ta chỉ định một dãy ip sẽ được cấp cho client khi client kết nối vào vpn server.
Trong cả 2 trường hợp, các ip cấp cho client khi client kết nối vpn vào là dãy ip internal của vpn server.
Tại đây ta chọn From a specified range of addresses. Nhấp Next để đến cửa sổ kế tiếp.

Ở cửa sổ kế tiếp, ta khai báo dãy ip internal sẽ cấp cho client khi client kết nối vào vpn. Nhấn next để đến cửa sổ kế tiếp.


Nếu trong mạng hiện thời có sẳn một RADIUS server dùng để xác thực remote client, ta có thể chọn Yes, ngược lại chọn NO, vì Routing And Remote Access có thể tự xác thực các remote client khi client kế nối vào VPN server. đây ta chọn No, use Routing and Remote Access to authenticate connection requests
Nhấn next để đến cửa sổ kế tiếp.


Nhấn Finish để hoàn tất.

3.     Cấp Account VPN client
Trên Desktop, nhấp phải chuột lên My Computer, chọn manage, trong mục Local user and group > user, chọn menu Action > new user
Chọn như hình vẽ, client khi connect vao vpn server sẽ phải đổi lại password của acount đó và client sẽ tự quản lý password account của mình.
Trên panel bên phải, nhấp phải vào user testvpn mà ta mới vừa tạo, chọn Properties.


Trong hộp thọai Properties.
      Trong phần Remote access permission (Dial-in or VPN) : chọn  Allow Access
      Trong phần Assign a static ip address : Chon check box này và nhập địa chỉ ip sẽ được cấp cho client (ip internal)
      Trong phần Apply Static Routes : chọn check box này và nhấp vào Button Static routes. Cửa sổ Static routes hiện ra, nhập địa mạng và subnet mạng của network internal.
Luu ý : phải chọn check box static routes và nhập địa chỉ mạng, thì khi đó, các  client kến nối vào VPN server mới được cấp địa chỉ ip mà đã set ở trên.

4.     Cấu hình Nat
Để client có thể đi internet thông qua kết nối vpn vừa setup ở trên, ta cần phải setup Nat trên VPN server, khi client kết nối vào VPN server thành công, các remote client trên cơ bản trở thành một thành viên của mạng Local Area Network, vì thế khi các client đi internet, cần qua một con Nat tên VPN server.

Trong mục IP Routing, nhấp phải chuột lên General chọn New Routing Protocol
     

Trong cửa sổ New Routing Protocol, chọn Nat/Basic Firewall, chọn Ok.


Trên Panel bên trái, trong mục IP routing. Chọn Nat/Basic Firewall, trên panel bên phải, nhấp phải chuột trên vùng trống chọn New Interface


Trong cửa sổ New interface, lần lượt chọn tất cả các interface. Đầu tiên chọn interface Wan và nhấn Ok, sau đó chọn như hình bên dưới
 Ta chọn như trên vì interface này là interface wan kết nối với internet, nên Nat sẽ chạy trên interface này.
Tương tự cho các interfacecòn lại:InternalLocal area network nhưng để các tùy chọn mặc định và nhấn ok.

4.Cấu hình Filter
Cấu hình firewall là một trong những yêu cầu trong việc cấu hình VPN server.
Ở đây, ta chỉ cấu hình ở mức căn bản(Basic Firewall) mà Windows service 2003 cho phép trên Nat.
Yêu cầu của việc cấu hình Firewall.
      Trên interface External
                  Chặn tất cả các port, chỉ cho phép các port sau đi thông qua:
                  + Port: 1723, port của VPN
                  + Protocol  47: Protocol GRE  dùng để xác thực remote client
                  + Port 3389: port remote desktop, chỉ cho phép các ip đáng tin cậy sử dụng port này
                  + ICMP: chỉ cho phép các ip đáng tin cậy mới có thể ping tới VPN server

Cấu hình
Trên Panel bên trái, chọn mở rộng IP Routing, chọn mục Nat/Basic Firewall, trên Panel bên phải, nhấp phải chuột trên interface Wan, chọn Properties, cửa sổ Properties hiện ra, nhấp Button Inbound Filters

Nhấn Button New để lần lượt setup các rule mà cho phép các gói tin nào được đi thông qua interface wan, sau khi đã setup hoàn tất, chọn radio button Drop all packets except those that meet the criteria below.

Kiểm tra kết nối đến hệ thống: 
Tạo vpn client từ máy tính:
1. Nhập vào địa chỉ IP
2. Thiết lập tham số kết nối


Twitter Delicious Facebook Digg Stumbleupon Favorites More

 
Design by Free WordPress Themes | Bloggerized by Lasantha - Premium Blogger Themes | Powerade Coupons