安装
yum install iptables

清除已有iptables规则
iptables -F
iptables -X
iptables -Z

开放指定的端口
#允许本地回环接口(即运行本机访问本机)
iptables -A INPUT -s 127.0.0.1 -d 127.0.0.1 -j ACCEPT
#允许所有本机向外的访问
iptables -A OUTPUT -j ACCEPT
# 允许访问22端口
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
#允许访问80端口
iptables -A INPUT -p tcp --dport 80 -j ACCEPT

#禁止其他未允许的规则访问
iptables -A INPUT -j REJECT
iptables -A FORWARD -j REJECT

屏蔽IP
#屏蔽单个IP的命令是
iptables -I INPUT -s 123.45.6.7 -j DROP
#封整个段即从123.0.0.1到123.255.255.254的命令
iptables -I INPUT -s 123.0.0.0/8 -j DROP
#封IP段即从123.45.0.1到123.45.255.254的命令
iptables -I INPUT -s 124.45.0.0/16 -j DROP
#封IP段即从123.45.6.1到123.45.6.254的命令是
iptables -I INPUT -s 123.45.6.0/24 -j DROP

查看已添加的iptables规则
iptables -L -n

删除已添加的iptables规则
比如要删除INPUT里序号为8的规则,执行:
iptables -D INPUT 8

保存规则
service iptables save

重启服务
service iptables restart

iptables的配置文件
vi /etc/sysconfig/iptables  

打开主动模式21端口
iptables -A INPUT -p tcp --dport 21 -j ACCEPT  

全部开放FTP传输
加载模块:
modprobe ip_nat_ftp
modprobe ip_conntrack
modprobe ip_conntrack_ftp

加上一条规则:
iptables -A INPUT -m state –state ESTABLISHED,RELATED -j ACCEPT



在Linux服务器被攻击的时候,有的时候会有几个主力IP。如果能拒绝掉这几个IP的攻击的话,会大大减轻服务器的压力,说不定服务器就能恢复正常了。


在Linux下封停IP,有封杀网段和封杀单个IP两种形式。一般来说,现在的攻击者不会使用一个网段的IP来攻击(太招摇了),IP一般都是散列的。于是下面就详细说明一下封杀单个IP的命令,和解封单个IP的命令。

在Linux下,使用ipteables来维护IP规则表。要封停或者是解封IP,其实就是在IP规则表中对入站部分的规则进行添加操作。

要封停一个IP,使用下面这条命令:



iptables -I INPUT -s ***.***.***.*** -j DROP



要解封一个IP,使用下面这条命令:



iptables -D INPUT -s ***.***.***.*** -j DROP



参数-I是表示Insert(添加),-D表示Delete(删除)。后面跟的是规则,INPUT表示入站,***.***.***.***表示要封停的IP,DROP表示放弃连接。

此外,还可以使用下面的命令来查看当前的IP规则表:



iptables -list



比如现在要将123.44.55.66这个IP封杀,就输入:



iptables -I INPUT -s 123.44.55.66 -j DROP



要解封则将-I换成-D即可,前提是iptables已经有这条记录。如果要想清空封掉的IP地址,可以输入:



iptables -flush



要添加IP段到封停列表中,使用下面的命令:



iptables -I INPUT -s 121.0.0.0/8 -j DROP



其实也就是将单个IP封停的IP部分换成了Linux的IP段表达式。关于IP段表达式网上有很多详细解说的,这里就不提了。

相信有了iptables的帮助,解决小的DDoS之类的攻击也不在话下!

附:其他常用的命令
编辑 iptables 文件



vi /etc/sysconfig/iptables



关闭/开启/重启防火墙



/etc/init.d/iptables stop    #start 开启    #restart 重启



验证一下是否规则都已经生效:



iptables -L



保存并重启iptables



/etc/rc.d/init.d/iptables save  service iptables restart






9个常用iptables配置实例



iptables命令可用于配置Linux的包过滤规则,常用于实现防火墙、NAT。咋一看iptables的配置很复杂,掌握规律后,其实用iptables完成指定任务并不难,下面我们通过具体实例,学习iptables的详细用法。

 

1.删除已有规则

在新设定iptables规则时,我们一般先确保旧规则被清除,用以下命令清除旧规则:



iptables -F (or iptables --flush)



 

2.设置chain策略

对于filter table,默认的chain策略为ACCEPT,我们可以通过以下命令修改chain的策略:



iptables -P INPUT DROP iptables -P FORWARD DROP iptables -P OUTPUT DROP



以上命令配置将接收、转发和发出包均丢弃,施行比较严格的包管理。由于接收和发包均被设置为丢弃,当进一步配置其他规则的时候,需要注意针对INPUT和OUTPUT分别配置。当然,如果信任本机器往外发包,以上第三条规则可不必配置。

 

3.屏蔽指定ip

有时候我们发现某个ip不停的往服务器发包,这时我们可以使用以下命令,将指定ip发来的包丢弃:



BLOCK_THIS_IP="x.x.x.x" iptables -A INPUT -i eth0 -p tcp -s "$BLOCK_THIS_IP" -j DROP



以上命令设置将由x.x.x.x ip发往eth0网口的tcp包丢弃。

 

4.配置服务项

利用iptables,我们可以对日常用到的服务项进行安全管理,比如设定只能通过指定网段、由指定网口通过SSH连接本机:



iptables -A INPUT -i eth0 -p tcp -s 192.168.100.0/24 --dport 22 -m state --state NEW,ESTABLESHED -j ACCEPT iptables -A OUTPUT -o eth0 -p tcp --sport 22 -m state --state ESTABLISHED -j ACCEPT



若要支持由本机通过SSH连接其他机器,由于在本机端口建立连接,因而还需要设置以下规则:



iptables -A INPUT -i eth0 -p tcp -s 192.168.100.0/24 --dport 22 -m state --state ESTABLESHED -j ACCEPT iptables -A OUTPUT -o eth0 -p tcp --sport 22 -m state --state NEW,ESTABLISHED -j ACCEPT



类似的,对于HTTP/HTTPS(80/443)、pop3(110)、rsync(873)、MySQL(3306)等基于tcp连接的服务,也可以参照上述命令配置。

 

对于基于udp的dns服务,使用以下命令开启端口服务:



iptables -A OUTPUT -p udp -o eth0 --dport 53 -j ACCEPT iptables -A INPUT -p udp -i eth0 --sport 53 -j ACCEPT



 

5.网口转发配置

对于用作防火墙或网关的服务器,一个网口连接到公网,其他网口的包转发到该网口实现内网向公网通信,假设eth0连接内网,eth1连接公网,配置规则如下:



iptables -A FORWARD -i eth0 -o eth1 -j ACCEPT



 

6.端口转发配置

对于端口,我们也可以运用iptables完成转发配置:



iptables -t nat -A PREROUTING -p tcp -d 192.168.102.37 --dport 422 -j DNAT --to 192.168.102.37:22



以上命令将422端口的包转发到22端口,因而通过422端口也可进行SSH连接,当然对于422端口,我们也需要像以上“4.配置服务项”一节一样,配置其支持连接建立的规则。

 

7.DoS攻击防范

利用扩展模块limit,我们还可以配置iptables规则,实现DoS攻击防范:



iptables -A INPUT -p tcp --dport 80 -m limit --limit 25/minute --limit-burst 100 -j ACCEPT



--litmit 25/minute 指示每分钟限制最大连接数为25

--litmit-burst 100 指示当总连接数超过100时,启动 litmit/minute 限制

 

8.配置web流量均衡

我们可以将一台服务器作为前端服务器,利用iptables进行流量分发,配置方法如下:



iptables过滤某个方向的转发 iptables屏蔽范围端口_运维



iptables -A PREROUTING -i eth0 -p tcp --dport 80 -m state --state NEW -m nth --counter 0 --every 3 --packet 0 -j DNAT --to-destination 192.168.1.101:80 iptables -A PREROUTING -i eth0 -p tcp --dport 80 -m state --state NEW -m nth --counter 0 --every 3 --packet 0 -j DNAT --to-destination 192.168.1.102:80 iptables -A PREROUTING -i eth0 -p tcp --dport 80 -m state --state NEW -m nth --counter 0 --every 3 --packet 0 -j DNAT --to-destination 192.168.1.103:80



iptables过滤某个方向的转发 iptables屏蔽范围端口_运维



以上配置规则用到nth扩展模块,将80端口的流量均衡到三台服务器。

 

9.将丢弃包情况记入日志

使用LOG目标和syslog服务,我们可以记录某协议某端口下的收发包情况。拿记录丢包情况举例,可以通过以下方式实现。

首先自定义一个chain:



iptables -N LOGGING



其次将所有接收包导入LOGGING chain中:



iptables -A INPUT -j LOGGING



然后设置日志前缀、日志级别:



iptables -A LOGGING -m limit --limit 2/min -j LOG --log-prefix "IPTables Packet Dropped: " --log-level 7



最后将包倒向DROP,将包丢弃:



iptables -A LOGGING -j DROP



另可以配置syslog.conf文件,指定iptables的日志输出。