以下是iptables的帮助说明:
[root@localhost sahinn]# iptables --help
iptables v1.4.21
Usage: iptables -[ACD] chain rule-specification [options]
iptables -I chain [rulenum] rule-specification [options]
iptables -R chain rulenum rule-specification [options]
iptables -D chain rulenum [options]
iptables -[LS] [chain [rulenum]] [options]
iptables -[FZ] [chain] [options]
iptables -[NX] chain
iptables -E old-chain-name new-chain-name
iptables -P chain target [options]
iptables -h (print this help information)
Commands:
Either long or short options are allowed.
--append -A chain添加规则链Append to chain
--check -C chain 检查是否存在 Check for the existence of a rule
--delete -D chain删除相关规则链 Delete matching rule from chain
--delete -D chain rulenum 根据规则链序号删除
Delete rule rulenum (1 = first) from chain
--insert -I chain [rulenum] 插入规则链(可选序号)
Insert in chain as rulenum (default 1=first)
--replace -R chain rulenum 替换规则链(可选序号)
Replace rule rulenum (1 = first) in chain
--list -L [chain [rulenum]] 列出所有规则链或者可选序号的规则
List the rules in a chain or all chains
--list-rules -S [chain [rulenum]]
Print the rules in a chain or all chains
--flush -F [chain]清空规则链的(注意每个链的管理权限)
Delete all rules in chain or all chains
--zero -Z [chain [rulenum]] 清空链,及链中默认规则的计数器的(有两个计数器,被匹配到多少个数据包,多少个字节)
Zero counters in chain or all chains
--new -N chainNEW 支持用户新建一个链
Create a new user-defined chain
--delete-chain -X [chain]用于删除用户自定义的空链
Delete a user-defined chain
--policy -P chain target 设置默认策略的
--rename-chain -E old-chain new-chain 用来Rename chain主要是用来给用户自定义的链重命名
Change chain name, (moving any references)
Options:
--ipv4 -4 Nothing (line is ignored by ip6tables-restore)
--ipv6 -6 Error (line is ignored by iptables-restore)
[!] --protocol -p proto protocol: by number or name, eg. `tcp'
[!] --source -s address[/mask][...]
source specification
[!] --destination -d address[/mask][...]
destination specification
[!] --in-interface -i input name[+]
network interface name ([+] for wildcard)
--jump -j target
target for rule (may load target extension)
--goto -g chain
jump to chain with no return
--match -m match
extended match (may load extension)
--numeric -n numeric output of addresses and ports
[!] --out-interface -o output name[+]
network interface name ([+] for wildcard)
--table -t table table to manipulate (default: `filter')
--verbose -v verbose mode
--wait -w wait for the xtables lock
--line-numbers print line numbers when listing
--exact -x expand numbers (display exact values)
[!] --fragment -f match second or further fragments only
--modprobe=<command> try to insert modules using this command
--set-counters PKTS BYTES set the counter during insert/append
[!] --version -V print package version.
规则写法
iptables定义规则的方式比较复杂:
格式:iptables [-t table] COMMAND chain CRETIRIA -j ACTION
-t table :3个filter nat mangle
COMMAND:定义如何对规则进行管理
chain:指定你接下来的规则到底是在哪个链上操作的,当定义策略的时候,是可以省略的
CRETIRIA:指定匹配标准
-j ACTION :指定如何进行处理
1. 删除已有规则
设定iptables规则时,先确保清除旧规则,用以下命令清除旧规则:
#--flush -F [chain] Delete all rules in chain or all chains 删除所有的规则
iptables -F 或
iptables --flush
2. 设置chain策略
iptables -P 可以设置策略。
对于filter table,默认的chain策略为ACCEPT,我们可以通过以下命令修改chain的策略:
规则链有以下5个
- PREROUTING (路由前)
- INPUT (数据包流入口)
- FORWARD (转发管卡)
- OUTPUT(数据包出口)
- POSTROUTING(路由后)
注意:
对于filter(定义允许或者不允许的)来讲一般只能做在3个链上:INPUT ,FORWARD ,OUTPUT
对于nat(定义地址转换的 )来讲一般也只能做在3个链上:PREROUTING ,OUTPUT ,POSTROUTING
而mangle(修改报文原数据)则是5个链都可以做:PREROUTING,INPUT,FORWARD,OUTPUT,POSTROUTING
以下为例:
#iptables -P chain target [options]
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT DROP
以上配置是将chain target : 接收(INPUT)、转发(FORWARD)、发出(OUTPUT)包
的option均丢弃(DROP)还有(Accept)。
此处接收和发包均被设置为丢弃,需进一步针对INPUT和OUTPUT分别配置。
第三条规则可不必配置(此处是信任往外发出)。
3. 屏蔽指定ip
如果某个ip不停的往服务器发包,可以使用以下命令,将指定ip发来的包丢弃:
--append -A chainAppend to chain 添加规则链
--in-interface -i input name 流入网卡名
-protocol -p proto protocol 协议名
--source -s address 源地址
--jump -j target 赋予的规则
iptables -A INPUT -i eth1 -p tcp -s “114.112.115.102” -j DROP
以上命令就是添加 ip为114.112.115.102,发往eth1网口的tcp包丢弃(DROP)。
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
–limit 25/minute 指示每分钟限制最大连接数为25
–limit-burst 100 指示当总连接数超过100时,启动 limit/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的日志输出。
确认你的iptables使用了log-level 4参数(前面有一个log-prefix标志). 例如:
DROP everything and Log it
iptables -A INPUT -j LOG –log-level 4
iptables -A INPUT -j DROP
举一个例子, 丢弃和记录所有来自IP地址65.55.11.2的连接信息到/var/log/iptables.log文件.
iptables -A INPUT -s 64.55.11.2 -m limit –limit 5/m –limit-burst 7 -j LOG –log-prefix ‘** HACKERS **’ –log-level 4
iptables -A INPUT -s 64.55.11.2 -j DROP
命令解释:
– log-level 4: 记录的级别. 级别4为警告(warning).
– log-prefix ‘*** TEXT ***’: 这里定义了在日志输出信息前加上TEXT前缀. TEXT信息最长可以是29个字符,
这样你就可以在记录文件中方便找到相关的信息.
查看定义的规则
iptables -L -n -v#查看定义规则的详细信息
原文链接:iptables命令整理,转载请注明来源!