天天看点

iptables常用命令

##iptables常用命令

清除已有iptables规则

iptables -F

iptables -X

iptables -Z

解释:-F是flush清空规则链,-X是删除规则链,-Z是zero清空所有链。

查看已添加的iptables规则

iptables -L -n

解释:-L 是list列表,-n是number数字显示源和目标。

保存规则

service iptables save

重启服务

service iptables restart

iptables的配置文件

vi /etc/sysconfig/iptables

# Generated by iptables-save v1.4.7 on Fri Jul 28 05:38:00 2017

*filter

:INPUT ACCEPT [0:0]

:FORWARD ACCEPT [0:0]

:OUTPUT ACCEPT [42:3872]

-A INPUT -p tcp -m tcp --dport 21 -j ACCEPT

-A INPUT -p tcp -m tcp --dport 80 -j ACCEPT

-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT

-A INPUT -p icmp -j ACCEPT

-A INPUT -i lo -j ACCEPT

-A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT

-A INPUT -j REJECT --reject-with icmp-host-prohibited

-A FORWARD -j REJECT --reject-with icmp-host-prohibited

COMMIT

# Completed on Fri Jul 28 05:38:00 2017

允许访问22端口

iptables -A INPUT -p tcp --dport 22 -j ACCEPT

打开主动模式21端口

iptables -A INPUT -p tcp --dport 21 -j ACCEPT

开放指定的端口

允许本地回环接口(即运行本机访问本机)

iptables -A INPUT -s 127.0.0.1 -d 127.0.0.1 -j ACCEPT

允许所有本机向外的访问

iptables -A OUTPUT -j ACCEPT

允许访问80端口

插入规则:iptables -I INPUT -p tcp --dport 80 -j ACCEPT

追加规则:iptables -A INPUT -p tcp --dport 80 -j ACCEPT

允许指定IP访问22

iptables -I INPUT -s 192.168.0.19 -p tcp --dport 22 -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规则

比如要删除INPUT里序号为8的规则,执行:

iptables -D INPUT 8

全部开放FTP传输

加载模块:

modprobe ip_nat_ftp

modprobe ip_conntrack

modprobe ip_conntrack_ftp

加上一条规则:

iptables -A INPUT -m state –state ESTABLISHED,RELATED -j ACCEPT

iptables只允许指定ip地址访问指定端口

iptables -A INPUT -s xxx.xxx.xxx.xxx -p tcp --dport 22 -j ACCEPT

iptables -A OUTPUT -d xxx.xxx.xxx.xxx -p tcp --sport 22 -j ACCEPT

上面这两条,请注意--dport为目标端口,当数据从外部进入服务器为目标端口;反之,数据从服务器出去则为数据源端口,使用 --sport

同理,-s是指定源地址,-d是指定目标地址。

关闭所有的端口

iptables -P INPUT DROP

iptables -P OUTPUT DROP

iptables -P FORWARD DROP

yum允许下载随机产生的高端口

iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT

iptables -A INPUT -p udp --sport 53 -j ACCEPT

iptables -A OUTPUT -m state --state RELATED,ESTABLISHED -j ACCEPT

iptables -A OUTPUT -p udp --dport 53 -j ACCEPT

iptables -A OUTPUT -p tcp --sport 10000:65535 -j ACCEPT

----------

使用iptables做网关动态出口IP

Linux自带的防火墙iptables,拿来做网关非常容易(/etc/sysconfig/iptables)。

-A INPUT -p tcp -j ACCEPT

-A INPUT -p udp -j ACCEPT

-A OUTPUT -p tcp -j ACCEPT

-A OUTPUT -p udp -j ACCEPT

-A INPUT -i eth1 -j ACCEPT

-A FORWARD -i eth+ -j ACCEPT # 要允许包转发

*nat # 网关表

-A POSTROUTING -o eth0 -j MASQUERADE # 就这句了,eth0是外网口

另外, 要开启操作系统的包转发功能:

sysctl -w net.ipv4.ip_forward=1

其实主要就是NAT表里的 MASQUERADE 选项,他会自动选择出口。如果要给内网指定的IP段分配特定的出口,则需要使用到SNAT:

*nat

-A POSTROUTING -s 192.168.0.0/16 -o eth0 -j SNAT --to-source 183.10.31.66

好,那如果由于压力大。则需要大量端口,那么就需要多的出口IP。这时就需要用到IP池了:

-A POSTROUTING -o eth0 -j SNAT --to-source 183.10.31.100-183.10.31.200

内外网的端口映射(DMZ)用DNAT也轻松搞定:

-A POSTROUTING -d 192.168.10.31 -j MASQUERADE

-A PREROUTING -p tcp -d 183.10.31.122 --dport 3306 -j DNAT --to 192.168.10.31

此时再对iptables做下优化,就大功告成了

-----------------------

9个常用iptables配置实例

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

1.删除已有规则

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

(or iptables --flush)

2.设置chain策略

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

以上命令配置将接收、转发和发出包均丢弃,施行比较严格的包管理。由于接收和发包均被设置为丢弃,当进一步配置其他规则的时候,需要注意针对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 -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

以上配置规则用到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的日志输出。

------------------------

logger手动记录日志:

来自: http://man.linuxde.net/syslog

任务:要向syslog文件/var/log/messages中记录日志信息: 

logger this is a test log line 

输出:tail  -5  /var/log/messages 

显示的结果:Jan 5 10:07:03 localhost root: this is a test log line

任务:如果要记录特定的标记(tag)可以使用: 

logger  -t  TAG  this  is  a  test  log line 

输出操作:: tail  -5  messages

显示的结果:Jan 5 10:37:14 localhost TAG: this is a test log line

      本文转自rshare 51CTO博客,原文链接:http://blog.51cto.com/1364952/1952212,如需转载请自行联系原作者

继续阅读