Thứ ba, tháng ba 11, 2008

iptables init script

#!/bin/sh
#
# This is a simple iptables firewall script.
# This can be used stand-alone or put in /etc/init.d/firewall.
# This works on both Ubuntu and RedHat systems.
# On Ubuntu, run "update-rc.d firewall defaults" to install this on startup.
# On RedHat, run "chkconfig --add firewall" to install this on startup.
# Note that RedHat has its own iptables init script that needs to be turned
# off if this script is to be used.
#
# Load firewall on boot:
#
# For Ubuntu/Debian you can put an init script into /etc/init.d then link to an 'S' file in /etc/rc2.d
# cp firewall /etc/init.d/firewall
# chmod 755 /etc/init.d/firewall
# cd /etc/rc2.d/
# ln -s ../init.d/firewall S99firewall
#
# For RedHat you need to edit:
# /etc/sysconfig/iptables
# Don't confuse this with /etc/sysconfig/iptables-config.
# Also note that RedHat has a tool called system-security-level that overwrites /etc/sysconfig/iptables,
# so if you run system-security-level you will loose your changes.
# You can edit the file manually or you can use system-security-level.
# Choose one or the other, not both.
# You can also setup the firewall the way you want using the iptables command
# and then save the settings using RedHat's inti.d script:
# /etc/init.d/iptables save
#
# rule by conmale (modified by pnco)
#
# chkconfig: 2345 08 92
# description: This configures iptables.
#
### BEGIN INIT INFO
# Provides: firewall
# Required-Start: $network $local_fs $remote_fs
# Required-Stop: $network $local_fs $remote_fs
# Default-Start: 2 3 4 5
# Default-Stop: S 0 1 6
# Short-Description: This loads iptables with firewall rules.
# Description: This loads iptables with firewall rules. Placed this in /etc/init.d.
# This isn't technically a daemon control script.
# This just puts a familiar interface around iptables.
### END INIT INFO

PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
IF=`route | grep -i 'default' | awk '{print$8}'`
IP=`ifconfig $IF | grep "inet addr" | awk -F":" '{print$2}' | awk '{print $1}'`
IPT="iptables"
NET="any/0"
DNS="203.162.4.190 203.162.4.191"
SERV_TCP="21 22 25 80 443 50000:60000"
SERV_UDP="53 123"
HI_PORTS="1024:65535"
NON_NET="10.0.0.0/8 172.16.0.0/12 192.168.0.0/16 224.0.0.0/4 240.0.0.0/5 169.254.0.0/16 192.0.2.0/24"
OK_ICMP="0 3 4 8 11"

case "$1" in
start)

# Flush any old policies and rules.

$IPT -F
$IPT -P INPUT DROP
$IPT -P OUTPUT DROP
$IPT -P FORWARD DROP

# Allow loopback interface for local services. If you don't use that service then safe comment out its.

$IPT -A INPUT -i lo -j ACCEPT
$IPT -A OUTPUT -o lo -j ACCEPT
$IPT -A FORWARD -i lo -j ACCEPT

# Drop illegal packets

$IPT -A INPUT -m state --state INVALID -m limit --limit 1/s -j LOG --log-prefix "INVALID_STATE: "
$IPT -A INPUT -m state --state INVALID -j DROP
$IPT -A INPUT -i $IF -s $IP -d $IP -m limit --limit 1/s -j LOG --log-prefix "SPOOFING: "
$IPT -A INPUT -i $IF -s $IP -d $IP -j DROP
$IPT -A INPUT -p tcp --tcp-flags ALL FIN,URG,PSH -s $NET -j DROP
$IPT -A INPUT -p tcp --tcp-flags ALL ALL -s $NET -j DROP
$IPT -A INPUT -p tcp --tcp-flags ALL NONE -s $NET -j DROP
$IPT -A INPUT -p tcp --tcp-flags SYN,FIN SYN,FIN -s $NET -j DROP
$IPT -A INPUT -p tcp --tcp-flags FIN,RST FIN,RST -s $NET -j DROP
$IPT -A INPUT -p tcp --tcp-flags FIN,ACK FIN -s $NET -j DROP
$IPT -A INPUT -p tcp --tcp-flags ALL SYN,RST,ACK,FIN,URG -s $NET -j DROP

# New TCP connections must be SYN packets, else DROP

$IPT -A INPUT -p tcp ! --syn -m state --state NEW -s $NET -j DROP

# Drop any packet from private IP

for entry in $NON_NET; do
$IPT -A INPUT -i $IF -s $entry -m limit --limit 1/s -j LOG --log-level 5 --log-prefix "BAD_NET: "
$IPT -A INPUT -i $IF -s $entry -j DROP
done

# Allow some ICMP packet

for item in $OK_ICMP; do
$IPT -A INPUT -i $IF -s $NET -p icmp --icmp-type $item -m state --state ESTABLISHED \
-m limit --limit 1/s --limit-burst 1 -j ACCEPT
$IPT -A OUTPUT -o $IF -s $IP -p icmp --icmp-type $item -m state --state NEW,ESTABLISHED \
-m limit --limit 1/s --limit-burst 1 -j ACCEPT
done

# Allow DNS packet query to trusted DNS server

for entry in $DNS; do
$IPT -A OUTPUT -o $IF -p udp -s $IP --sport $HI_PORTS -d $entry --dport 53 -m state --state NEW -j ACCEPT
$IPT -A INPUT -i $IF -p udp -s $entry --sport 53 -d $IP --dport $HI_PORTS -m state --state ESTABLISHED -j ACCEPT
done

# Allow some UDP services

for port in $SERV_UDP; do
$IPT -A INPUT -i $IF -p udp -s $NET --sport $port -d $IP --dport $port -m state --state NEW,ESTABLISHED \
-m limit --limit 2/s --limit-burst 2 -j ACCEPT
$IPT -A OUTPUT -o $IF -p udp -s $IP --sport $port -d $NET --dport $port -m state --state ESTABLISHED \
-m limit --limit 2/s --limit-burst 2 -j ACCEPT
if test $port -eq 53
then
$IPT -A INPUT -i $IF -p udp -s $NET --sport $port -d $IP --dport $port -m state --state NEW,ESTABLISHED -j ACCEPT
$IPT -A OUTPUT -o $IF -p udp -s $IP --sport $port -d $NET --dport $port -m state --state ESTABLISHED -j ACCEPT
else
$IPT -A INPUT -i $IF -p udp -s $NET --sport $HI_PORTS -d $IP --dport $port -m state --state NEW -j ACCEPT
$IPT -A OUTPUT -o $IF -p udp -s $IP --sport $port -d $NET --dport $HI_PORTS -m state --state ESTABLISHED -j ACCEPT
fi
done

# Allow some TCP services

for port in $ SERV_TCP; do
$IPT -A INPUT -p tcp ! --syn -s $NET --sport $HI_PORTS -d $IP --dport $port -m state --state NEW \
-m limit --limit 1/s -j LOG --log-prefix "INVALID_SERVICE_REQUEST: "
$IPT -A INPUT -p tcp ! --syn -s $NET --sport $HI_PORTS -d $IP --dport $port -m state --state NEW -j DROP
#$IPT -A INPUT -i $IF -p tcp --syn -s $NET --sport $HI_PORTS -d $IP --dport $port -m limit --limit 3/s --limit-burst 5 \
#-m state --state NEW -m connlimit ! --connlimit-above 2 -j ACCEPT
$IPT -A INPUT -i $IF -p tcp --syn -s $NET --sport $HI_PORTS -d $IP --dport $port -m limit --limit 3/s --limit-burst 5 \
-m state --state NEW -j ACCEPT
$IPT -A OUTPUT -o $IF -p tcp ! --syn -s $IP --sport $port -d $NET --dport $HI_PORTS -m state --state ESTABLISHED -j ACCEPT
$IPT -A INPUT -i $IF -p tcp ! --syn -s $NET --sport $HI_PORTS -d $IP --dport $port -m state --state ESTABLISHED -j ACCEPT
done

# Clean up rules

$IPT -A INPUT -i $IF -d $IP -m limit --limit 1/s -j LOG --log-level 5 --log-prefix "BAD_INPUT: "
$IPT -A INPUT -i $IF -d $IP -j DROP
$IPT -A OUTPUT -o $IF -d $IP -m limit --limit 1/s -j LOG --log-level 5 --log-prefix "BAD_OUTPUT: "
$IPT -A OUTPUT -o $IF -d $IP -j DROP
$IPT -A FORWARD -i $IF -d $IP -m limit --limit 1/s -j LOG --log-level 5 --log-prefix "BAD_FORWARD: "
$IPT -A FORWARD -i $IF -d $IP -j DROP
;;
stop)
$IPT -P INPUT ACCEPT
$IPT -P OUTPUT ACCEPT
$IPT -P FORWARD ACCEPT
$IPT -F
$IPT -X
;;
restart)
stop
start
;;
status)
$IPT -L -v
;;
*)
echo "Usage: $0 {start|stop|restart|status}" >&2
exit 1
;;
esac

exit 0

Thứ ba, tháng ba 04, 2008

Linux Firewalls

Đối với các quản trị viên hệ thống linux thì "Làm thế nào để bảo mật hệ thống?" luôn là một câu hỏi dai dẳng. Bất kể bạn là một người mới bắt đầu đến với linux hay là một quản trị viên có một ít kinh nghiệm câu trả lời chính vẫn là firewall. Tuy rằng công tác bảo mật liên quan đến rất nhiều khía cạnh, nhưng việc nắm rõ cánh cổng - nơi từng gói tin dữ liệu ra vào hàng ngày sẽ mang đến cho bạn cái nhìn tổng thể về các hoạt động cuả hệ thống mình. Xin trân trọng giới thiệu đến quý vị đọc giả quyển sách Linux Firewalls, nguồn tham khảo đầy đủ và toàn diện nhất về firewall trên hệ thống linux. Điểm thú vị nhất cuả quyển sách là giới thiệu các loại tấn công phổ biến ở các layer khác nhau cũng như cách phòng thủ trước những loại tấn công này. Ngoài ra cuốn sách cũng giới thiệu một số công cụ bổ sung nhằm phát hiện, ngăn ngừa những cuộc tấn công đang hay sắp diễn ra giúp cho firewall cuả bạn hoạt động một cách trên cả tuyệt vời. Quyển sách đã được Richard Bejtlich đánh giá top những quyển sách hay nhất năm 2007 còn tôi thì đánh giá là một trong những quyển sách đáng được download nhất :D


Thứ tư, tháng bảy 25, 2007

FreeBSD on usb (2)

3. Cài đặt FreeBSD lên usb

- Đưa usb vào và chạy lệnh sau:

#fdisk -BI /dev/da0
#bsdlabel -B -w /dev/da0s1
#newfs /dev/da0s1a
- Mount usb và cài đặt:
#mount /dev/da0s1a /mnt
#cd /usr/src
#make installworld DESTDIR=/mnt
#cd etc
#make distribution DESTDIR=/mnt
#cd ..
#make installkernel DESTDIR=/mnt
- Tạo fstab và rc.conf:
#cp /etc/fstab /mnt/etc
#ee /mnt/etc/fstab
# Device Mountpoint FStype Options Dump Pass
/dev/da0s1a / ufs rw 1 1
/dev/acd0 /cdrom cd9660 ro,noauto 0 0
#cp /etc/rc.conf /mnt/etc
#umount /mnt
Lưu ý: Tập tin rc.conf là tập tin cấu hình hệ thống quan trọng vì vậy bạn hãy tham khảo trang man cẩn thận để tạo ra cấu hình phù hợp nhất với mình. Sau đó bạn hãy khởi động lại máy tính với usb để chắc chắn rằng nó làm việc tốt :mrgreen:

4. Cài đặt phần mềm với ports.

Đến đây chúng ta đã hoàn tất việc cài đặt FreeBSD lên usb, tuy nhiên chỉ có mỗi hệ điều hành. Việc tiếp theo cần làm là cài đặt thêm các ứng dụng yêu thích của mình. Cũng như nhiều bản phân phối linux khác FreeBSD có 1 hệ thống quản lý package riêng và rất độc đáo. Tất cả các pagkage đều được cài đặt từ source và bạn không cần phải quan tâm đến dependencies vì nó sẽ tự động được download và biên dịch.
- Để thực hiện việc này ta cần cài hệ thống ports vào đĩa cứng:
#mkdir /usr/ports
#mkdir /mnt/usr
#mount /dev/ad0s1f /mnt/usr
#mount /dev/acd0 /cdrom
#tar xzvf /cdrom/6.2-RELEASE/ports/ports.tgz -C /mnt/usr
#mount_nullfs /mnt/usr/ports /usr/ports
Từ bây giờ bạn có thể cài đặt bất kỳ software nào bằng cách di chuyển vào thư mục tương ứng và gõ lệnh make install clean. Ví dụ:
#cd /usr/ports/x11-wm/fluxbox
#make install clean
Bạn hãy tham khảo tại đây để biết phần mềm nào là được đặt ở đâu. Bạn cũng nên cập nhật ports tree để có được những phiên bản phần mềm mới nhất. Cách thực hiện điều này thì cũng giống như bước 1, có nghĩa là bạn phải cài đặt gói cvsup-without-gui-16.1h và cấu hình ports-supfile.
#cp /usr/share/example/cvsup/ports-supfile /etc
#ee /etc/ports-supfile
Điều chỉnh dòng 51 lại thành *default host=cvsup.freebsd.org và chạy lệnh sau để update ports tree:
#cvsup -g -L 2 /etc/ports-supfile
Bạn cũng nên cài đặt portupgrade (/usr/ports/ports-mgmt/portupgrade) và portaudit (/usr/ports/ports-mgmt/portaudit) để dễ dàng cho việc nâng cấp sau này cũng như nâng cao bảo mật cho các phần mềm được cài đặt.
Cuối cùng thì sau khi đã cài đặt các phần mềm yêu thích của mình xong thì hãy backup usb cẩn thận phòng khi bạn hào phóng tặng không usb cho ai đó :))