Ubuntu 10.10 Maverick Meerkat에서 Intel GMA 945를 사용해서 듀얼모니터 사용하기
10.04에서도 intel driver 관련하여 문제가 있었는데 또 발생했다. ㅠ.ㅜ
이번에는 지난번에 발생한 문제와 상황이 좀 다른듯하여 구글님의 도움을 받아보기로 하였다.
관련 페이지는 아래 참조 링크.
결론은 xorg-edgers PPA를 추가하고 패키지를 업데이트하면 된다는 것이다.
다음의 명령 몇개 입력해주고 재부팅하면 끝.
$ sudo apt-get update
$ sudo apt-get upgrade
만약 위의 방법으로 패키지를 업데이트 했는데도 문제가 해결이 안되었을 경우, 일단 업데이트한 패키지를 제거하기 위해서 다음의 명령을 입력해준다.
참조 : https://bugs.launchpad.net/ubuntu/+source/xserver-xorg-video-intel/+bug/619663
iptables와 swatch로 ssh brute force attack 막기
### BEGIN INIT INFO
# Provides: iptables
# Required-Start: networking ifupdown $local_fs
# Required-Stop:
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
### END INIT INFO
IPTABLES=/sbin/iptables
EXT_ETH=eth0
${IPTABLES} -F
${IPTABLES} -t nat -F
${IPTABLES} -X BLACKLISTCHECK
${IPTABLES} -P INPUT ACCEPT
${IPTABLES} -P OUTPUT ACCEPT
${IPTABLES} -P FORWARD ACCEPT
${IPTABLES} -A INPUT -j ACCEPT -i lo
${IPTABLES} -A INPUT -j ACCEPT -p icmp --icmp-type any
${IPTABLES} -A INPUT -j ACCEPT -m state --state ESTABLISHED,RELATED
${IPTABLES} -N BLACKLISTCHECK
${IPTABLES} -A INPUT -j BLACKLISTCHECK -i ${EXT_ETH} -m state --state NEW -p tcp --dport 22
for x in `cat /tmp/ssh_evil`; do
${IPTABLES} -I BLACKLISTCHECK -s $x -j DROP
done
# 80, 22번 포트만 오픈
${IPTABLES} -A INPUT -j ACCEPT -i ${EXT_ETH} -m state --state NEW -p tcp --dport 22
${IPTABLES} -A INPUT -j ACCEPT -i ${EXT_ETH} -m state --state NEW -p tcp --dport 80
${IPTABLES} -I INPUT -p tcp --dport 22 -m state --state NEW -m recent --set
${IPTABLES} -I INPUT -p tcp --dport 22 -m state --state NEW -m recent --update --seconds 60 --hitcount 6 -j LOG --log-prefix "SSH_brute_force "
${IPTABLES} -A INPUT -j REJECT --reject-with icmp-host-prohibited
/etc/init.d/swatch 파일이 없다면 다음의 내용으로 생성한다. (permission은 775)
### BEGIN INIT INFO
# Provides: swatch
# Required-Start: networking ifupdown $local_fs
# Required-Stop:
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
### END INIT INFO
PATH="/sbin:/bin:/usr/sbin:/usr/bin"
NAME="swatch"
DAEMON="/usr/bin/swatch"
DESC="simple watcher"
CONFFILE="/etc/swatch.conf"
#LOGFILE="/var/log/secure"
LOGFILE="/var/log/syslog"
PIDFILE="/var/run/swatch.pid"
OPTS="--config-file=$CONFFILE --tail-file=$LOGFILE --pid-file=$PIDFILE --awk-field-syntax --tail-args='-F' --daemon"
test -x $DAEMON || exit 0
start() {
if [ ! -f "$CONFFILE" ]; then
echo "Error: $CONFFILE does not exist."
exit 1
fi
if [ ! -f "$LOGFILE" ]; then
echo "Error: $LOGFILE does not exist."
exit 1
fi
if [ -f "$PIDFILE" ]
then
echo "Error: $NAME is already running."
else
$DAEMON $OPTS >/dev/null 2>&1
fi
}
stop() {
if [ -f "$PIDFILE" ]
then
PID=`cat $PIDFILE`
if ps h $PID > /dev/null
then
pkill -P $PID
kill $PID
else
echo "Error: $NAME is not running, but PID file exists. Deleting it."
fi
rm -f $PIDFILE
else
echo "Error: $NAME is not running."
fi
}
case "$1" in
start)
echo "Starting $DESC: $NAME"
start
;;
stop)
echo "Stopping $DESC: $NAME"
stop
;;
restart)
echo "Restarting $DESC: $NAME"
stop
sleep 1
start
;;
*)
echo "Usage: $0 start|stop|restart"
exit 1
;;
esac
exit 0
swatch.conf에는 다음을 추가한다.
watchfor /([a-zA-Z]{3})\s+([0-9]{1,2}) ([0-9]{2}:[0-9]{2}:[0-9]{2}) ([a-zA-Z0-9_-]+) kernel: \[.*\] SSH_brute_force .*SRC=(.*) DST=/
exec "$sshscript '$*' >> /var/log/swatch.log"
throttle 00:00:30
swatch에서 실행할 스크립트를 만든다.
/root/swatch-ssh 파일의 내용은 다음처럼 구성한다. (역시 permission은 775)
(다른 기능도 같이 하는 스크립트에서 일부만 발췌함)
if ARGV.length==0 && ARGV.length < 2
puts "Error!! Argument must more than 1 words!!"
puts "ex) swatch-ssh message"
exit 1
else
begin
message = ""
argv_msg = ARGV[0].split
host = argv_msg[3]
beginflag = false
for qs in argv_msg do
message = message + (message!=""?" ":"") + qs if beginflag == true
beginflag = true if qs == host
end
# for 3ware modules message
message.sub!(/kernel: \[[0-9\s]+\.[0-9]+\] /, '')
message.sub!(/\(.*\)/, '')
smsmessage = sprintf("[%s]%s\n", host, message)
# smsmessage.gsub!(' ', '_')
smsmessage.sub!(/\[mgm\]/, '')
smsmessage.sub!(/SSH_brute_force .* SRC=/, '')
smsmessage.sub!(/ DST=.*/, '')
File.open("/tmp/ssh_deny", 'a') {|f| f.write(smsmessage) }
command = sprintf("cat /tmp/ssh_evil /tmp/ssh_deny | sort -u > /tmp/ssh_uniq_evil ; rm /tmp/ssh_deny ; cp /tmp/ssh_uniq_evil /tmp/ssh_evil ; /etc/init.d/iptables")
# printf("%s\n", command)
system(command)
end
end
exit 0
이제 모든 준비는 완료되었습니다.
iptables 스크립트를 실행시키고 swatch를 restart하면 끝.
touch /tmp/ssh_evil
update-rc.d iptables defaults 20
update-rc.d swatch defaults 20
/etc/init.d/iptables
/etc/init.d/swatch restart
위에서 설정한 내용은 다음과 같습니다.
1. iptables를 설정하여 ssh 연결이 1분에 6번 이상 연결되면 kernel에 log를 남기게 됩니다.
2. swatch에서는 iptables가 남긴 kernel log를 발견하게 되면 /root/swatch-ssh 스크립트를 실행시킵니다.
3. /root/swatch-ssh 스크립트에서는 해당 IP Address를 /tmp/ssh_evil 파일에 남기는 동시에 /etc/init.d/iptables 스크립트를 실행시켜서 발견된 IP Addreess를 통해서 들어오는 연결을 차단합니다.
위의 1,2,3 과정을 반복하면서 ssh brute force attack이 발견되면 해당 IP Address를 지속적으로 차단합니다.
작성자 : 저입니다. ^^
openafs 사용시 sysctl_check_dir: failed: /afs .1 ref: /kernel .1 와 같은 에러가 발생하면....
sysctl_check_dir: failed: /afs .1 ref: /kernel .1
sysctl table check failed: /afs .1 Inconsistent directory names
현재 운영중인 OS는 Ubuntu 8.04 LTS Hardy Heron이며 다음과 같이 작업하여 문제를 해결하였다. 64bit amd64를 사용중이다.
wget http://mirrors.kernel.org/ubuntu/pool/universe/o/openafs/openafs-modules-source_1.4.11+dfsg-4_amd64.deb
mv modules modules.old
dpkg -i openafs-modules-source_1.4.11+dfsg-4_amd64.deb
## module-assistant를 실행해서 openafs-modules를 build하고 설치
m-a -t a-i openafs-
원인은 아마 Ubuntu 8.04와 openafs 1.4.6이 호환성이 좋지 않아서가 아닐까하는 추측만 남았다.
mkfs.xfs 옵션 설정
sw는 disk의 갯수에 맞게 수정 (8개 raid5의 경우 7)
su는 raid stripe size에 맞추어서 수정 (raid 구성시 설정을 256k로 하였음)
fail2ban - brute force attack, dictionary attack 방어
횟수를 지정할 수 있으며 다양한 서비스를 지원하고 있으므로 sshd, vsftpd등의 brute force attack도 방어할 수 있다.
http://www.fail2ban.org/
Logitech G5 on Ubuntu 8.04 hardy heron
Logitech G5의 버튼중 Tilt-Wheel 과 Back 버튼이 동작을 안해서 동작시키려 한다.
xorg.conf에는 기본 설정만으로 동작하므로 무시
xbindkeys 및 xvkbd 패키지를 설치한다.
~/.xbindkeys를 다음과 같이 만든다.
m:0x0 + b:8
"/usr/bin/xvkbd -xsendevent -text "\[Alt_L]\[Right]""
m:0x0 + b:7
"/usr/bin/xvkbd -xsendevent -text "\[Alt_L]\[Left]""
m:0x0 + b:6
위 설정대로라면 Right-Tilt-Wheel은 Back 기능을 Left-Tilt-Wheel은 Forward 기능을 하게된다.
물론 Back 버튼은 Back 기능을 하게된다.
이제 xbindkeys 를 실행하면 Tilt-Wheel 과 Back 버튼이 동작하게 된다.
Ubuntu 8.04 LTS 에서 MySQL max_connections 886 이상 설정하기
그런데 아무리 [mysqld] 섹션에 max_connections 값으로 1200을 설정해도 적용이 안되고 show variables 해보면 max_connections값이 886으로 되어 있다.
이러한 이유에서 찾아보니 다음의 두가지 설정이 중요하였다.
일단 /etc/mysql/my.cnf에는 다음의 설정을 넣어준다.
max_connections = 1200
open-files-limit = 4096
그리고 한 process의 최대 open files 값을 변경하기 위해 /etc/security/limits.conf 에 다음 설정을 추가한다.
mysql hard nofile 4096
mysql 데몬을 재시작하자!
3ware 9650SE 이후의 Controller tw_cli command
tw_cli /c0 add type=raid5 disk=0-7 storsave=protect stripe=64
RAID5, 디스크 0-7번, protect 모드, 64KB Stripe 로 Unit을 생성하는 명령
2. Unit Migrate (Unit 0을 raid5, 256KB Stripe 로 migrate)
tw_cli /c0/u0 migrate type=raid5 stripe=256
* 주로 unit의 기존 설정값을 변환할때 사용
3. storsave 변경 (Unit 0의 storsave 값을 balance로 변경)
tw_cli /c0/u0 set storsave=balance
Ubuntu 8.10 Intrepid Ibex에서 IBM TrackPoint 휠 사용하기
Xorg가 시동중에 hal의 설정을 임의로 불러와 사용하는데 이 부분에서 기존의 Xorg 설정이 무시되기 때문이다.
결국 hal에 설정을 해주어야 Xorg가 해당 설정을 읽어서 TrackPoint의 휠 기능이 동작할 수 있게 된다.
/proc/bus/input/devices 파일을 보면 다음과 같은 내용이 있다.
N: Name="Synaptics Inc. Composite TouchPad / TrackPoint"
P: Phys=usb-0000:00:0b.0-4.4/input0
S: Sysfs=/devices/pci0000:00/0000:00:0b.0/usb1/1-4/1-4.4/1-4.4:1.0/input/input4
U: Uniq=
H: Handlers=mouse2 event4
B: EV=17
B: KEY=70000 0 0 0 0 0 0 0 0
B: REL=3
B: MSC=10
I: Bus=0003 Vendor=06cb Product=0009 Version=0100
N: Name="Synaptics Inc. Composite TouchPad / TrackPoint"
P: Phys=usb-0000:00:0b.0-4.4/input1
S: Sysfs=/devices/pci0000:00/0000:00:0b.0/usb1/1-4/1-4.4/1-4.4:1.1/input/input5
U: Uniq=
H: Handlers=mouse3 event5
B: EV=17
B: KEY=70000 0 0 0 0 0 0 0 0
B: REL=3
B: MSC=10
위에 나오는 내용외에도 각종 input device 관련 내용이 있는데 일단 무시하고 Name 항목을 복사해 두자.
/etc/hal/fdi/policy/mouse-wheel.fdi 파일을 만든다. 내용은 다음과 같다.
<merge key="input.x11_options.EmulateWheel" type="string">true</merge>
<merge key="input.x11_options.EmulateWheelButton" type="string">2</merge>
<merge key="input.x11_options.ZAxsisMapping" type="string">4 5</merge>
<merge key="input.x11_options.Emulate3Buttons" type="string">true</merge>
</match>
위 설정중 match 태그의 string property에 나오는 내용이 위에 /proc/bus/input/devices에서 복사해둔 내용이다.
위 파일을 저장하고 hal 데몬을 재시작한 후 X를 재시작 한다.
이제 IBM TrackPoint의 휠 기능이 동작한다.
참조 : http://www.linlap.com/wiki/Lenovo+Thinkpad+W500
Linux Traffic Control 2
지난번에는 ingress policing을 구현하였는데 이번에는 egress shaping을 구현할 일이 생겼다.
구현할 내용은 local network에 대해서는 최대 트래픽을 사용하지만 internet으로 나가는 트래픽에 대해서는 제한을 두는 것이다.
#!/bin/bash
TC=/sbin/tc
DEV=bond0
MAX=2000
LIMIT=1000
case "$1" in
start)
$TC qdisc del dev $DEV root 2> /dev/null
$TC qdisc add dev $DEV root handle 1: htb default 10
# local network is unrestricted
$TC class add dev $DEV parent 1: classid 1:10 htb rate ${MAX}mbit burst ${MAX}k quantum 1514
$TC qdisc add dev $DEV parent 1:10 handle 10: sfq perturb 10
$TC filter add dev $DEV parent 1:0 protocol ip prio 10 u32 match ip dst 192.168.5.0/24 flowid 1:10
# internet traffic is limited
$TC class add dev $DEV parent 1: classid 1:20 htb rate ${LIMIT}mbit ceil ${LIMIT}mbit burst ${LIMIT}k quantum 1514
$TC qdisc add dev $DEV parent 1:20 handle 20: sfq perturb 10
$TC filter add dev $DEV parent 1:0 protocol ip prio 20 u32 match ip src 0.0.0.0/0 flowid 1:20
;;
stop)
$TC qdisc del dev $DEV root 2> /dev/null
;;
show)
$TC qdisc show dev $DEV
$TC -s class show dev $DEV
$TC -s filter show dev $DEV
;;
*)
echo "Usage: $0 start|stop|show" >&2
exit 3
;;
esac
일단 위의 스크립트 대로 적용하면 2Gbps의 bond0 인터페이스에서 외부로 나가는 트래픽중
'192.168.5.0/24' 대역에 걸리는 트래픽은 $MAX에 정해놓은 수치(위에는 2Gbps)로
그 외 '0.0.0.0/0' (전체 네트웍)으로 나가는 트래픽은 $LIMIT에 정해놓은 수치(위에는 1Gbps)로
나가도록 설정된다.