all-in-one 2 (portsentry+iptables+apt-proxy+squid3)

Topic: 
 

เรื่อง network

ปรับตั้ง interfaces
# vi /etc/network/interfaces

auto eth0
iface eth0 inet static
    address 192.168.1.3
    netmask 255.255.255.0
    network 192.168.1.0
    broadcast 192.168.1.255

auto eth1
iface eth1 inet static
    address 192.168.5.3
    netmask 255.255.255.0
    network 192.168.5.0
    broadcast 192.168.5.255
    gateway 192.168.5.1

เพื่อให้เครือข่ายภายในสามารถออกสู่ภายนอกได้ โดยใช้เซิร์ฟเวอร์ตัวนี้เป็นเกตเวย์ จะตั้งให้ฟอร์เวิร์ดไอพีได้
# vi /etc/sysctl.conf

...
net.ipv4.ip_forward=1

ทำให้มีผลทันที
# echo 1 > /proc/sys/net/ipv4/ip_forward

portsentry + iptables พื้นฐาน

ติดตั้ง
# aptitude install portsentry iptables

สำหรับ portsentry ใช้ค่าปริยายทั้งหมด

สำหรับ iptables จะทำเป็นแบบสคริปต์ ไว้รันเวลาเปิดเครื่อง (จริง ๆ คือ รันตอนอินเทอร์เฟส eth1 เปิดขึ้นมาใช้งาน)
มีการเพิ่มกฎในการบล๊อกไอพีนิดหน่อย ทำให้ลดภาระ web server ในการกรองไอพี

เตรียมไฟล์ข้อมูล
# mkdir -p /sys1/sysb/etc/iptables
# ln -sf /sys1/sysb/etc/iptables /etc
# echo "#BLOCKED IP LIST" >> /etc/iptables/block_ip

สร้างสคริปต์ไว้เรียกตอนเปิด eth1 คือ /usr/local/sbin/d.eth1-iptables
# vi /usr/local/sbin/d.eth1-iptables

#!/bin/bash
# SIMPLE IPTABLES
INTERFACE=eth1
INT_NET=192.168.0.0/16
BLOCK_FILE=/etc/iptables/block_ip

#DELETE OLD RULES
iptables -F > /dev/null
iptables -F -t nat > /dev/null

#NAT
iptables -t nat -A POSTROUTING -o $INTERFACE -j MASQUERADE

#BLOCK SPECIFIC IP
#SORT IP LIST IF DATA CHANGED
touch $BLOCK_FILE "$BLOCK_FILE.bak"
cmp -s "$BLOCK_FILE" "$BLOCK_FILE.bak"
if [ $? -ne 0 ]; then
    TEMP_FILE=/tmp/block_ip
    touch $TEMP_FILE
    mv $BLOCK_FILE "$BLOCK_FILE.bak"
    cat "$BLOCK_FILE.bak" | while read LINE; do
        if [ ${LINE:0:1} == "#" ]; then
            echo $LINE >> $BLOCK_FILE
        else
            echo $LINE >> $TEMP_FILE
        fi
    done
    cat $TEMP_FILE | sort >> $BLOCK_FILE
    rm $TEMP_FILE
fi
#DO BLOCK
cat $BLOCK_FILE | grep -v "#" | cut -d \  -f 1 | while read IP; do
    iptables -A INPUT -s $IP -j DROP
done

#BLOCK ssh INTRUDER BY RATE-LIMIT 4 FOR 600 SECONDS
#FROM http://www.debian-administration.org/articles/187
iptables -I INPUT -p tcp --dport 22 -i $INTERFACE -m state --state NEW -m recent --set
iptables -I INPUT -p tcp --dport 22 -i $INTERFACE -m state --state NEW -m recent --update --seconds 600 --hitcount 4 -j DROP

#FORWARD INTERNAL
iptables -A FORWARD -s $INT_NET -j ACCEPT
iptables -A FORWARD -d $INT_NET -j ACCEPT

#DROP REST
iptables -A FORWARD -s ! $INT_NET -j DROP

# chmod 755 /usr/local/sbin/d.eth1-iptables

สร้างไพล์ข้อมูลไอพีที่ต้องการบล๊อก ชื่อ block_ip เอาไว้ที่ /etc/iptables
# vi /etc/iptables/block_ip

#BLOCKED IP LIST
WWW.XXX.YYY.ZZZ    #COMMENT
...

เปลี่ยนตัวเลขเอาตามจริงนะครับ
เวลาเราจะเพิ่มไอพี ก็มาแก้ไขที่ไฟล์นี้

นำกฎมาใช้ตอนเปิดเครื่องใหม่ ผ่าน /etc/network/interfaces
# vi /etc/network/interfaces

...
auto eth1
iface eth1 inet static
    address 192.168.5.3
    netmask 255.255.255.0
    network 192.168.5.0
    broadcast 192.168.5.255
    gateway 192.168.5.1
    post-up /usr/local/sbin/d.eth1-iptables
    pre-down /sbin/iptables-save > /etc/iptables/rules-backup

(เวลาจะปรับปรุงสคริปต์ เอาเนื้อความจาก /etc/iptables/rules-backup มาใช้อ้างอิงดูในการปรับปรุงได้)

สำหรับครั้งแรก ต้องรัน 1 ครั้ง ครั้งต่อไปไม่ต้องแล้ว จะรันผ่านอินเทอร์เฟส eth1 เอง
# /usr/local/sbin/d.eth1-iptables

apt-proxy

เอาไว้เก็บแพกเกจเดเบียน สำหรับเครือข่ายภายใน อันนี้เนื้อหาไม่ค่อยจำเป็น จะเอาเก็บไว้ที่ /sys1/syst

เตรียมไดเรกทอรี่
# mkdir -p /sys1/syst/var/cache/apt-proxy
# ln -sf /sys1/syst/var/cache/apt-proxy /var/cache

ติดตั้งและปรับแต่ง
# aptitude install apt-proxy
# mv /etc/apt-proxy /sys1/sysb/etc
# ln -sf /sys1/sysb/etc/apt-proxy /etc
# vi /etc/apt-proxy/apt-proxy-v2.conf

...
[debian]
backends =
    http://ftp.debianclub.org/debian
    http://ftp.debian.org/debian
...
[security]
backends =
    ftp://security.debian.org/debian-security
    http://security.debian.org/
...

ลูกข่ายสามารถใช้งานผ่าน apt-proxy โดยเปลี่ยน sources.list ดังนี้

...
#deb    http://ftp.debian.org/debian stable main contrib non-free
deb    http://server1.example.com:9999/debian stable main contrib non-free
...
#deb    http://security.debian.org/ stable/updates main contrib non-free
deb    http://server1.example.com:9999/security stable/updates main contrib non-free
...

แก้ปัญหา apt-proxy ชอบตายบ่อย ๆ ด้วยการให้เริ่ม apt-proxy ใหม่ ตอนเที่ยงคืนทุกวัน
# crontab -e

...
5 0 * * * /etc/init.d/apt-proxy restart >&2
...

squid3

เพื่อให้ประหยัดแบนด์วิธสูงสุด ควรติดตั้งพร๊อกซี่สำหรับภายในด้วย
ติดตั้ง
# aptitude install squid3

ปรับเล็กน้อย
# vi /etc/squid3/squid.conf

...
#http_port 3128
#MOVE 3128 TO 8080 AND MAKE TRANSPARENT PROXY
http_port 8080 transparent
...
acl to_localhost dst 127.0.0.0/8
acl ournetwork src 192.168.0.0/16
acl SSL_ports port 443
...
http_access allow localhost
http_access allow ournetwork
...
 

Syndicate

Subscribe to Syndicate

Who's online

There are currently 0 users online.