all-in-one 2 (portsentry+iptables+apt-proxy+squid3)
เรื่อง 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 ...
- Printer-friendly version
- 4763 reads







Recent comments