Friday 18 Jan 2013

Friday 18 Jan 2013

拾人牙慧 From Steven

剛剛跟Thomas提到這個不錯,我已經用在一台機器上了: (1) 先安裝iptables,設定全部不通: (a) 執行以下指令(一次即可) #!/bin/bash iptables --flush iptables -t nat --flush iptables -t mangle --flush iptables --policy INPUT DROP iptables --policy OUTPUT ACCEPT iptables -A INPUT -i lo -j ACCEPT iptables -A INPUT -i eth0 -m state --state ESTABLISHED,RELATED -j ACCEPT

​(b) 然後存起來 iptables-save > /etc/iptables.up.rules

​(c) 設定跟著網路啟動iptables: edit /etc/network/if-pre-up.d/iptables,內容是: #!/bin/bash /sbin/iptables-restore \< /etc/iptables.up.rules

​(d) chmod +x /etc/network/if-pre-up.d/iptables Ref: http://wiki.debian.org/iptables

​(2) 安裝knockd (a) apt-get install knockd (b) /etc/knockd.conf [options] UseSyslog

[openSSH80] sequence = 7000,8000,9000 seq_timeout = 5 command = /sbin/iptables -A INPUT -s %IP% -p tcp --dport 80 -j ACCEPT tcpflags = syn

[closeSSH80] sequence = 7100,8200,8000 seq_timeout = 5 command = /sbin/iptables -D INPUT -s %IP% -p tcp --dport 80 -j ACCEPT tcpflags = syn

這邊是設定敲門7000, 8000, 9000 (client執行knock -v \$server 7000 8000 9000)的時候會開啟firewall 80給來源的IP address連接。可以在ssh server上 跑"iptables -L"就會看到已經開啟連接的機器。敲門7100,8200,8000的話,就關 閉該client的iptable的連線。 當然上述規則可以多設幾個,不同port做不同事情。我們是因為在 /etc/ssh/sshd_config中設定 Port 80 Port 443 來聽ssh,所以才會是80 port.

​(c) 設定預設啟動knockd: 編輯/etc/default/knockd將 START_KNOCKD=0 改成 然後啟動 /etc/init.d/knockd start

用戶端要用的話,可以安裝knockd,然後執行 knock -v \$server 7000 8000 9000 來開門, knock -v \$server 7100 8000 8000 來關門。當然也可以用telnet來達 到, e.g. telnet \$server 7000 telnet \$server 8000 telnet \$server 9000

Steven.

Comments