在Linux下对防火墙的配置,事实上就是编辑/etc/sysconfig/iptables文件,下面详细介绍。
首先我们可以查看一下服务器各服务的端口是多少:
netstat –apn
检查Iptables是否安装:
service iptables status
如果提示为iptables:unrecognized service,则表示还没有安装,
如果是Centos系统,请执行以下命令安装:
yum install iptables
如果是Debian系统,请执行以下命令安装:
apt-get install iptables
查看本机Iptables的设置情况:
iptables -L -n
如果提示:
Chain INPUT (policy ACCEPT)
target prot opt source destination
Chain FORWARD (policy ACCEPT)
target prot opt source destination
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
表示还没有设置Iptables,如果已经有设置规则,但需要重新设置过,可以通过以下命令清除旧的规则。
清除预设表filter中的所有规则链的规则:
iptables -F
清除预设表filter中使用者自定链中的规则:
iptables -X
将指定链中所有规则的包字节计数器清零:
iptables –Z
允许本地回环接口:
**iptables -A INPUT -s 127.0.0.1 -d 127.0.0.1 -j ACCEPT ** 允许已建立的或相关连的通行:
iptables -A INPUT -m state –state ESTABLISHED,RELATED -j ACCEPT
允许访问22端口,即SSH端口,如果你的SSH端口有修改过,请将命令中的22替换成你的实际SSH端口号:
iptables -A INPUT -p tcp –dport 22 -j ACCEPT iptables -A OUTPUT -p tcp –sport 22 -j ACCEPT
对于Web服务器,我们应该允许访问80端口: ** iptables -A INPUT -p tcp –dport 80 -j ACCEPT**
允许访问数据库: ** iptables -A INPUT -p tcp –dport 3306 -j ACCEPT**
开启邮件服务端口:
iptables -A INPUT -p tcp –dport 110 -j ACCEPT iptables -A INPUT -p tcp –dport 25 -j ACCEPT
开启FTP端口:
iptables -A INPUT -p tcp –dport 21 -j ACCEPT iptables -A INPUT -p tcp –dport 20 -j ACCEPT
如果你想允许用户Ping服务器,需要添加:
iptables -A INPUT -p icmp -j ACCEPT
开启DNS服务器端口:
iptables -A INPUT -p udp –dport 53 -j ACCEPT
在做NAT时,如果FORWARD默认规则是DROP,必须开启转发功能:
iptables -A FORWARD -i eth0 -o eth1 -m state –state RELATED,ESTABLISHED -j ACCEPT iptables -A FORWARD -i eth1 -o eh0 -j ACCEPT
下面进行一些安全的设置,虽然只是轻量级的防攻击,但还是有必要设置一下。
打开syncookie:
sysctl -w net.ipv4.tcp_syncookies=1 &>/dev/null
设置默认TCP连接痴呆时长为10800秒,即3小时:
sysctl -w net.ipv4.netfilter.ip_conntrack_tcp_timeout_established=10800 &>/dev/null
设置支持最大连接数,具体数值需要根据公式来计算,这里以2G内存的32位系统为例:
sysctl -w net.ipv4.ip_conntrack_max=131072 &>/dev/null
计算公式为:
CONNTRACK_MAX = RAMSIZE(内存大小,单位字节)/16384/(bit数/32)
举个例子,32位系统512M内存的服务器,就这样计算:
512x1024x1024/16384/(32/32)=32768
防止SYN攻击(轻量级):
iptables -N syn-flood iptables -A INPUT -p tcp –syn -j syn-flood iptables -A syn-flood -p tcp -m limit –limit 3/s –limit-burst 6 -j RETURN iptables -A syn-flood -j REJECT
对于不管来自哪里的Ip碎片都进行控制,允许每秒通过100个碎片:
iptables -A FORWARD -f -m limit –limit 100/s –limit-burst 100 -j ACCEPT
ICMP包通过的控制,防止ICMP黑客攻击:
iptables -A FORWARD -p icmp -m limit –limit 1/s –limit-burst 10 -j ACCEPT
丢弃坏的TCP包:
iptables -A FORWARD -p TCP ! –syn -m state –state NEW -j LOG –log-prefix “New not syn:” iptables -A FORWARD -p TCP ! –syn -m state –state NEW -j DROP
保存配置文件:
service iptables save
使用以下命令也可以保存:
/etc/rc.d/init.d/iptables save
禁止Iptables中未允许的规则访问:
vi /etc/sysconfig/iptables
修改以下参数:
:INPUT DROP [162:14797] :FORWARD DROP [0:0] :OUTPUT ACCEPT [144:22674]
重启Iptables:
service iptables restart
设置开机自动启动:
chkconfig iptables on
至此,防火墙已经配置好了。在我们设置允许通过的端口时,可以根据自己的需要开放端口,例如DA面板的2222端口:
iptables -A INPUT -p tcp –dport 2222 -j ACCEPT