iptables的基本语法规则参考:
1、查看现有的iptables规则:
- sudo iptables -L
2、允许已建立的连接接收数据:
- sudo ptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
3、开放常见端口22
- sudo iptables -A INPUT -p tcp -i eth0 --dport ssh(22) -j ACCEPT
- sudo iptables -A INPUT -p tcp -i eth0 --dport telnet(23) -j ACCEPT
- sudo iptables -A INPUT -p tcp -i eth0 --dport www(80) -j ACCEPT
4、对每一个报文,iptables依次测试每一条规则,看报文于规则是否相匹配。一旦找到一条匹配的规则, 就根据此规则中指定的行动,对报文进行处置,而对后面的规则不再进行测试。因此,如果我们在规则表的 末尾添加一条规则,让iptables丢弃所有报
- sudo iptables -A INPUT -j DROP
5、仍有一个问题,就是环回接口也被阻断了。刚才添加DROP规则的时候其实就可以使用-i eth0来解决这一
问题。然而我们也可以为环回接口添加一条新规则来解决这个问题。但是不能将新规则追加到末尾,因为前
一条规则已经把所有报文都丢弃了,而应该把它插到DROP规则前面,即规则表中第五行的位置(即DROP之前)
- iptables -I INPUT 5 -i lo -j ACCEPT
6、sudo iptables -L -v查看详细详细
7、iptables-save > /etc/iptables.up.rules(保存当前iptables的设置)
可以vi编辑 /etc/iptables.up.rules
编辑后 iptables-restore < /etc/iptables.up.rules
8、这样设置的iptables每次开机后就失效了,开机自动配置
- a. iptables-save > /etc/iptables.up.rules
- b. vi /etc/network/interfaces(最后-s 手动选择截图区域或者窗口两行为我们自己所加的)
- auto eth0
- iface eth0 inet dhcp
- pre-up iptables-restore < /etc/iptables.up.rules
- post-down iptables-restore < /etc/iptables.down.rules
9、清楚iptables规则
- sudo iptables -F
10、丢弃所有来自127.0.0.1的ICMP包(eg:ping)
- sudo iptables -A INPUT -s 127.0.0.1 -p icmp -j DROP
11、有时一个包太大,不可能适合所有线路。这样的话,包会被分成片,然后当作多个包发送。最终重组这些分片来重建整个包
- sudo iptables -A OUTPUT -f -d 192.168.1.1 -j DROP(丢弃任何发往192.168.1.1的分片)
12、有时只允许单向的TCP连接会很有用。例如,你可能会允许连接到外部WWW服务器,但不会允许来自那个服务器的连接。 最简单的举动可能是阻止来自那个服务器的包,可惜,TCP连接需要包双向传送(才能正常工作)。
解决办法是,只阻挡那些用来请求连接的包。这些包称为SYN包(OK,从技术上说,它们的SYN标志被设置,而没有设置RST和ACK标志,不过我们简单的称为SYN包)。通过只阻止这种包,我们就可以阻止来自那些地方的连接企图。'--syn'标志是这样用的:只对指定了TCP协议的规则有效。例如,指定来自192.168.1.1的连接请求。
- sudo iptables -A INPUT -p TCP -s 192.168.1.1 --syn
【编辑推荐】