วันพฤหัสบดีที่ 21 สิงหาคม พ.ศ. 2551

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

http://www.thaitux.info/book/export/html/479

ปรับตั้ง 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

คลังบทความของบล็อก