Linux防火墙Iptables设置

Posted by ivo Blog on February 12, 2015

在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