+ All Categories
Home > Documents > An Iptables Guide & Tutorial

An Iptables Guide & Tutorial

Date post: 06-Apr-2018
Category:
Upload: -
View: 247 times
Download: 1 times
Share this document with a friend

of 49

Transcript
  • 8/2/2019 An Iptables Guide & Tutorial

    1/49

    An iptables guide & tutorial - iptablesrocks.org

    home | syntax & structure | examples | faq | contact | links

    Welcome to Iptablesrocks.org

    come to iptablesrocks.org! Iptablesrocks was created to provide a publicly available, easy to understand guide and tutorial for the installatiofiguration of iptables. Iptables is a linux package for managing IPv4 (and optionally IPv6) packet filtering and NAT (Network Address Transla

    bles can be configured to function as a firewall, a NAT mechanism, a packet filter or all 3 at once. The diversity of capabilities possible with kes it a secure, stable and economical alterative to hardware based firewalls and routers or costly 3rd party firewall software. Iptables can alve as a rendundant firewall in conjunction with a hardware firewall, providing you with an extra layer of security. Iptablesrocks.org covers theallation of iptables in a Redhat environment, the syntax and structure associated with iptables and a collection a pre-configured iptablesfigurations for a variety of applications. This site is currently under development. Enjoy!

    The iptablesrocks.org iptables firewall setup guide Quick links to need specific iptables configurat

    overview of the iptablesrocks firewall

    p 1:System requirements & Pre-configuration

    p 2:Deploying a safety net.

    p 3:The iptables firewall ruleset

    p 4: Testing functionality

    p 5:Installing Iptables Log Analyzer

    p 6:Maintaining & modifying your firewall and starting it on boot

    p 7:Feedback

    general web server firewall

    linux gateway w/DSL connection

    linux gateway w/Cable connection

    sever to server trusted connections

    word of advise: Before you make any changes to your iptables configuration, you should read about pre-configuration precautions!

    2666

    home | syntax & structure | examples | faq | contact | links

    Site last modified:February 13, 2004 15:27:51

    ttp://www.iptablesrocks.org/ [2/13/2004 8:04:42 PM]

    http://www.rocksproject.org/mailto:[email protected]
  • 8/2/2019 An Iptables Guide & Tutorial

    2/49

    ptablesrocks.org - Syntax & Structure

    home | syntax & structure | examples | faq | contact | links

    Syntax & Structure

    iptables manual page is the best resource for learning all of the possible syntax options for iptables:

    bles man page

    An iptables syntax quick reference

    king a look at what you have

    ables -L [chain] - Lists your current iptables configuration

    king modifications

    ables -A [chain] - Append a rule to a desired chain in the current configuration

    ables -D [chain] - Delete a rule from a desired chain in the current configuration

    ables -R [chain] - Replace an existing rule from a desired chain in the current configuration

    ables - I [chain] - (that's a capital I as in Insert) Insert a new rule into a desired chain of the current configuration

    ables -N [chain]- Create a new chain

    ables -X [chain] - Delete a chain

    tting rid of all rules and starting over

    able -X - Delete all chains

    ables -F - Flush the table of all contents

    porting & Exporting

    ables-save > filename - exports the current iptables configuration to a flat file.

    ables-restore < filename - imports an iptables configuration from a flat file and overwrites the current configuration.

    re syntax & structure information coming soon!

    home | syntax & structure | examples | faq | contact | links

    ttp://www.iptablesrocks.org/syntax/ (1 of 2) [2/13/2004 8:04:43 PM]

  • 8/2/2019 An Iptables Guide & Tutorial

    3/49

    ptablesrocks.org - Syntax & Structure

    Site last modified:February 13, 2004 15:27:51

    ttp://www.iptablesrocks.org/syntax/ (2 of 2) [2/13/2004 8:04:43 PM]

    http://www.rocksproject.org/mailto:[email protected]
  • 8/2/2019 An Iptables Guide & Tutorial

    4/49

  • 8/2/2019 An Iptables Guide & Tutorial

    5/49

    ptablesrocks.org - Examples

    ttp://www.iptablesrocks.org/examples/ (2 of 2) [2/13/2004 8:04:44 PM]

    http://www.rocksproject.org/
  • 8/2/2019 An Iptables Guide & Tutorial

    6/49

  • 8/2/2019 An Iptables Guide & Tutorial

    7/49

    ptablesrocks.org - Contact

    home | syntax & structure | examples | faq | contact | links

    Contact Iptablesrocks.org

    If you would like to contact me, please fill out the form below and then click "Send It!".

    Your name:

    Your e-mail:

    Comments/Questions:

    home | syntax & structure | examples | faq | contact | links

    Site last modified:February 13, 2004 15:27:51

    ttp://www.iptablesrocks.org/contact/ [2/13/2004 8:04:45 PM]

    Send It!

    http://www.rocksproject.org/mailto:[email protected]
  • 8/2/2019 An Iptables Guide & Tutorial

    8/49

    ptablesrocks.org - Links

    home | syntax & structure | examples | faq | contact | links

    Linksollection of useful links.

    Netfilter/Iptables Project - http://www.netfilter.org/

    uxguruz Iptables Tutorial - http://www.linuxguruz.com/iptables/howto/iptables-HOWTO.html

    ailrocks.org - My qmail installation guide

    dnsrocks.org - My djbdns installation guide

    home | syntax & structure | examples | faq | contact | links

    Site last modified:February 13, 2004 15:27:51

    ttp://www.iptablesrocks.org/links/ [2/13/2004 8:04:45 PM]

    http://www.netfilter.org/http://www.linuxguruz.com/iptables/howto/iptables-HOWTO.htmlhttp://www.qmailrocks.org/http://www.djbdnsrocks.org/http://www.rocksproject.org/mailto:[email protected]://www.djbdnsrocks.org/http://www.qmailrocks.org/http://www.linuxguruz.com/iptables/howto/iptables-HOWTO.htmlhttp://www.netfilter.org/
  • 8/2/2019 An Iptables Guide & Tutorial

    9/49

    ptablesrocks.org - Maintaining, modifying and more...

    home | syntax & structure | examples | faq | contact | links

    The iptablesrocks.org iptables firewall setup guidentaining & modifying your firewall and starting it on boot:

    ntenance

    ntaining your iptables firewall is pretty easy. The only thing you will want to keep an eye on is the logs at /var/log/firewall. The logs can let yoen your server is being probed or when an attack is being attempted, this allowing you to take appropriate action. Once you start viewing you

    are going to notice that almost every hour of every day someone is going to be trying to gain access to your server, find an exploit on your sttack your server. This is normal. Attackers simply scan entire networks for vulnerable servers, so don't take scans and attempted intrusions

    sonally. Every publicly available server out there gets probed and scanned all the time, so don't think you are special and that you need to caor something rash like that. The fact is that anytime your see unsuccessful attempts to break into your server or attack it, that's a good thingause it means that the attackers were not able to succeed. It means your server is secure and your firewall is working. In other words, failurelogged are a sign of a secure server.

    may also want to make sure that you have a log rotation schedule set up for the firewall logs. The logs can get quite large, so you will wantp them in check by rotating them out on a regular basis.

    difications

    so you've got your firewall up and running. But what if you need to make a change to the rules? What if you need to open up another port? want to close a certain unused port? What if you want to block someone from your server? Get the answers right here.

    at if I want to open another port?

    le it is possible to append rules to your live iptables configuration, I find that the best way to make changes is to change the firewall script itsn re-import the script back into the iptables configuration. In terms of this site's setup, this means that you will want to edit the /root/primary_f

    Within this config file you can add rules or remove rules and then import the new firewall into the iptables ruleset.

    let's take an example

    mple: I want to allow inbound "tcp" traffic to port 139

    do this you would add the following line to the "INPUT" section of the /root/primary_firewall script:

    NPUT -p tcp -m tcp --dport 139 -j ACCEPT

    s go over what this line does...

    - this tells iptables to "append" the new rule to the current iptables ruleset.

    UT - The new rule will be appended to the "INPUT" portion of the ruleset, which controls inbound server traffic.

    - Indicates what protocol the rule applies to. Popular protocols are "tcp", "udp", "icmp" and several others.

    - Indicates a matching protocal value. Usually, this is set to the same value as the -p flag.

    port - Specifies the destination port to which the traffic will be directed. In this case, it's port 139.

    Instructs the firewall to "jump" to specified state. In this case, request to TCP port 139 "jump" to "ACCEPT" and are threfore accepted and a

    ass through the firewall.

    CEPT - As denoted above, this is the state that the rule "jumps" to. In the example above, any inbound traffic to TCP port 139 will "jump" to CEPT" state, and thus will be able to pass through the firewall.

    he breakdown above should tell you that the rule we are adding is going to allow all inbound traffic to TCP port 139. Once you add that line

    ttp://www.iptablesrocks.org/guide/maintain.php (1 of 3) [2/13/2004 8:04:47 PM]

  • 8/2/2019 An Iptables Guide & Tutorial

    10/49

    ptablesrocks.org - Maintaining, modifying and more...

    PUT" section of the firewall script, you can then import the new firewall with the following command:

    bles-restore < /root/primary_firewall

    w, now wasn't that easy?

    at if I want to close a port?

    answer to this is similar to the previous question. However, you need to remember that your firewall, as it stands now, automatically blocksound, outbound and fowarded traffic by default. The only way that a port gets opened is if there is a rule telling the firewall to open that port.

    s take an example...

    mple: I was to close TCP port 143 inbound.

    he firewall script that comes with this guide, you will notice the following entry that open up inbound traffic to TCP port 143 (For IMAP). That ks like this:

    NPUT -p tcp -m tcp --dport 143 -j ACCEPT

    l, if you wanted to close port 143, all you would have to do is edit the firewall script at /root/primary_firewall and remove that line. Once the lie and you've saved the changes, you would activate the change by re-importing the firewall script back into the iptables ruleset like so

    ables-restore < /root/primary_firewall

    w wasn't that easy?

    w, let's take another example so that I can demonstrate something that you DON'T need to worry about.

    mple: I want to block all inbound traffic to TCP port 3389.

    in, let's take the firewall that comes with this guide. All of the sudden you get it in your head that you need to close TCP port 3389. What to dl, if you take a look at the firewall script you will notice that TCP port 3389 is not mentioned anywhere in the script and, to be more specific,

    ntioned in the "INPUT" portion of the script. Well, since our firewall is configured to block ALL traffic by default and only open ports on reques

    LREADY CLOSED. In other words, you don't need to worry about that port because it has been automatically closed by the firewall. The on

    ould be open is if you created a specific rule that rquested that the port be open. Get it?

    at if I want to completely block someone from my server?

    procedure for this is just the same as the ones above. Basically, all you're going to do is edit the firewall script, add a rule to block whoeverchanges and then re-import the firewall script back into the server's ruleset. Easy as hell.

    et's take an example:

    mple: I want to block anyone from the host 1.2.3.4 from accessing my server.

    en the /root/primary_firewall script and add the following line to the INPUT section of the script:

    NPUT -s 1.2.3.4 -j DROP

    w let's break that down to see what this rule is doing..

    - this tells iptables to "append" the new rule to the current iptables ruleset.

    UT - The new rule will be appended to the "INPUT" portion of the ruleset, which controls inbound server traffic.

    Specifies the source address of the request. In this case we are specifying 1.2.3.4 as the source.

    Instructs the firewall to "jump" to specified state. In this case, request coming from source 1.2.3.4 "jump" to a DENY state, thus blocking anym that addresss from accessing your server at all.

    ttp://www.iptablesrocks.org/guide/maintain.php (2 of 3) [2/13/2004 8:04:47 PM]

  • 8/2/2019 An Iptables Guide & Tutorial

    11/49

  • 8/2/2019 An Iptables Guide & Tutorial

    12/49

    ptablesrocks.org - Feedback

    home | syntax & structure | examples | faq | contact | links

    The iptablesrocks.org iptables firewall setup guidedback:

    Now that you've finished the iptablesrocks.org iptables setup guide, please provide me with some feedback.

    What do you think of the setup guide? It stinks! Not very good It was ok Very helpful Excellent

    Your Name: (required)

    Your E-mail: (required)

    Any comments/suggestions?

    May we post your comments on this website? Yes No(your name & e-mail address will not be posted)

    A note on privacy: Some people worry about providing their e-mail address on the form. You don't need to worry. The onlyreason I require your e-mail address is so that I can personally reply to any questions or comments you may have. I won't put

    your e-mail address on any list or anything like that. I'm hate spam just as much as you do. :)

    home | syntax & structure | examples | faq | contact | links

    Site last modified:February 13, 2004 15:27:51

    ttp://www.iptablesrocks.org/guide/feedback.php [2/13/2004 8:04:47 PM]

    Submit Feedback

    http://www.rocksproject.org/mailto:[email protected]
  • 8/2/2019 An Iptables Guide & Tutorial

    13/49

    ptablesrocks.org - safety precautions

    home | syntax & structure | examples | faq | contact | links

    iptables pre-configuration safety precautionsking changes to your server's firewall/routing configuration can be very tricky. One simple mistake can result in your being completely lockedr server. If the server you are working on is remotely hosted, this can cause prolonged downtime and a tech support nightmare. In short, it c

    or pain in the ass.

    this reason, anytime you are making changes to your server's firewall or routing config via iptables, you should first take a few minutes to

    lement some "disaster recovery" measures that can be automatically triggered should you accidentally lock yourself out of your server.

    enver I'm making any major changes to my firewall, I like to implement a "disaster recovery" measure by means of a crontab entry. I do this ating a simple crontab entry that runs every 15 minutes or so. This crontab entry runs a command which simply resets my server's iptables

    figuration to a completely open setting. That is, it sets my iptables configuration so that the server will accept all incoming, outgoing and forwuests. In this way, should I screw up at some point and lock myself out of my server, I will only need to wait a maximum of 10 minutes beforefirewall rules will be dropped and I'll be able to shell into my server again. If you are a newbie at iptables, or even a seasoned pro, this little

    asure can be a lifesaver. Everyone makes mistakes every now and then, and this measure will ensure that a mistake made in your firewallfiguration doesn't turn into a nightmare!

    here's how you do it....

    into your server as the root user.

    t, create a iptables import script that, when imported, will reset the iptables configuration to a default "accept all" state:

    root/iptables.open

    erPUT ACCEPT [164:15203]RWARD ACCEPT [0:0]TPUT ACCEPT [147:63028]

    MMITangleEROUTING ACCEPT [164:15203]

    PUT ACCEPT [164:15203]RWARD ACCEPT [0:0]TPUT ACCEPT [147:63028]STROUTING ACCEPT [147:63028]MMITtEROUTING ACCEPT [14:672]STROUTING ACCEPT [9:684]TPUT ACCEPT [9:684]

    MMIT

    w save and exit.

    w let's set up a crontab entry that will import the reset configuration every 15 minutes...

    ntab -e

    * * * * /sbin/iptables-restore < /root/iptables.open

    e and exit from the crontab editor

    All done.

    w let's review what this is going to do to your server...

    ce you enable the crontab, your server is going to reset it's iptables configuration every 15 minutes. This means that every 15 minutes you w

    ttp://www.iptablesrocks.org/precautions.php (1 of 2) [2/13/2004 8:04:48 PM]

  • 8/2/2019 An Iptables Guide & Tutorial

    14/49

    ptablesrocks.org - safety precautions

    previous settings and you server will be in a "accept all" state where it accepts any incoming, outgoing and forward packet requests. You cenot want to leave this crontab running if you are not actively working on your iptables configuration. The sole of this crontab is to provide a sashould you accidentally screw up and lock yourself out of your server while you are implementing or testing new iptables configurations. Witntab running, should you lock yourself out you will only have to wait a maximum of 15 minutes before the iptables configuration resets and yo

    e to log into your server again.

    u should always disable this crontab entry once you are finished modifying your iptables configuration.

    home | syntax & structure | examples | faq | contact | links

    Site last modified:February 13, 2004 15:27:51

    ttp://www.iptablesrocks.org/precautions.php (2 of 2) [2/13/2004 8:04:48 PM]

    http://www.rocksproject.org/mailto:[email protected]
  • 8/2/2019 An Iptables Guide & Tutorial

    15/49

    ttp://www.iptablesrocks.org/examples/scripts/web_server.config

    import this saved configuration into your iptables configuration with the following command:

    iptables-restore < web_server.config

    at

    REROUTING ACCEPT [127173:7033011]

    OSTROUTING ACCEPT [31583:2332178]

    UTPUT ACCEPT [32021:2375633]

    MMIT

    angle

    REROUTING ACCEPT [444:43563]

    NPUT ACCEPT [444:43563] :FORWARD ACCEPT [0:0]

    UTPUT ACCEPT [402:144198]

    OSTROUTING ACCEPT [402:144198]

    PREROUTING -p tcp -m tcp --tcp-flags FIN,SYN,RST,PSH,ACK,URG FIN,PSH,URG -j DROP

    PREROUTING -p tcp -m tcp --tcp-flags FIN,SYN,RST,PSH,ACK,URG NONE -j DROP

    PREROUTING -p tcp -m tcp --tcp-flags SYN,RST SYN,RST -j DROP

    PREROUTING -p tcp -m tcp --tcp-flags FIN,SYN FIN,SYN -j DROP

    PREROUTING -p tcp -m tcp --tcp-flags FIN,SYN,RST,PSH,ACK,URG FIN,PSH,URG -j DROP

    PREROUTING -p tcp -m tcp --tcp-flags FIN,SYN,RST,PSH,ACK,URG NONE -j DROP

    PREROUTING -p tcp -m tcp --tcp-flags SYN,RST SYN,RST -j DROP

    PREROUTING -p tcp -m tcp --tcp-flags FIN,SYN FIN,SYN -j DROP

    PREROUTING -p tcp -m tcp --tcp-flags FIN,SYN,RST,PSH,ACK,URG FIN,PSH,URG -j DROP

    PREROUTING -p tcp -m tcp --tcp-flags FIN,SYN,RST,PSH,ACK,URG NONE -j DROPPREROUTING -p tcp -m tcp --tcp-flags SYN,RST SYN,RST -j DROP

    PREROUTING -p tcp -m tcp --tcp-flags FIN,SYN FIN,SYN -j DROP

    PREROUTING -p tcp -m tcp --tcp-flags FIN,SYN,RST,PSH,ACK,URG FIN,PSH,URG -j DROP

    PREROUTING -p tcp -m tcp --tcp-flags FIN,SYN,RST,PSH,ACK,URG NONE -j DROP

    PREROUTING -p tcp -m tcp --tcp-flags SYN,RST SYN,RST -j DROP

    PREROUTING -p tcp -m tcp --tcp-flags FIN,SYN FIN,SYN -j DROP

    MMIT

    ilter

    NPUT DROP [1:242]

    ORWARD DROP [0:0]

    UTPUT DROP [0:0]

    cmp_packets - [0:0]INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT

    INPUT -p tcp -m tcp --dport 20 -j ACCEPT

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

    INPUT -p tcp -m tcp --dport 22 -j ACCEPT

    INPUT -p tcp -m tcp --dport 25 -j ACCEPT

    INPUT -p tcp -m tcp --dport 43 -j ACCEPT

    INPUT -p udp -m udp --dport 53 -j ACCEPT

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

    INPUT -p tcp -m tcp --dport 110 -j ACCEPT

    INPUT -p udp -m udp --dport 123 -j ACCEPT

    INPUT -p tcp -m tcp --dport 143 -j ACCEPT

    INPUT -p tcp -m tcp --dport 443 -j ACCEPT

    INPUT -p tcp -m tcp --dport 783 -j ACCEPT

    INPUT -p tcp -m tcp --dport 993 -j ACCEPT

    INPUT -p tcp -m tcp --dport 3306 -j ACCEPT

    INPUT -p tcp -m tcp --dport 12000 -j ACCEPT

    INPUT -p tcp -m tcp --dport 15000 -j ACCEPT

    INPUT -s 127.0.0.1 -j ACCEPT

    INPUT -p icmp -j icmp_packets

    INPUT -j LOG --log-prefix "IPTABLES-IN Default Drop: " --log-level 7

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

    OUTPUT -p tcp -m tcp --dport 20 -j ACCEPT

    ttp://www.iptablesrocks.org/examples/scripts/web_server.config (1 of 2) [2/13/2004 8:04:48 PM]

  • 8/2/2019 An Iptables Guide & Tutorial

    16/49

    ttp://www.iptablesrocks.org/examples/scripts/web_server.config

    OUTPUT -p tcp -m tcp --dport 21 -j ACCEPT

    OUTPUT -p tcp -m tcp --dport 22 -j ACCEPT

    OUTPUT -p tcp -m tcp --dport 23 -j ACCEPT

    OUTPUT -p tcp -m tcp --dport 25 -j ACCEPT

    OUTPUT -p tcp -m tcp --dport 43 -j ACCEPT

    OUTPUT -p udp -m udp --dport 53 -j ACCEPT

    OUTPUT -p tcp -m tcp --dport 80 -j ACCEPT

    OUTPUT -p tcp -m tcp --dport 110 -j ACCEPT

    OUTPUT -p udp -m udp --dport 123 -j ACCEPT

    OUTPUT -p tcp -m tcp --dport 143 -j ACCEPT

    OUTPUT -p tcp -m tcp --dport 443 -j ACCEPTOUTPUT -p tcp -m tcp --dport 783 -j ACCEPT

    OUTPUT -p tcp -m tcp --dport 993 -j ACCEPT

    OUTPUT -p tcp -m tcp --dport 3306 -j ACCEPT

    OUTPUT -p tcp -m tcp --dport 12000 -j ACCEPT

    OUTPUT -p tcp -m tcp --dport 15000 -j ACCEPT

    OUTPUT -p tcp -m tcp --dport 2210 -j ACCEPT

    OUTPUT -d 127.0.0.1 -j ACCEPT

    OUTPUT -p icmp -j icmp_packets

    OUTPUT -j LOG --log-prefix "IPTABLES-OUT Default Drop: " --log-level 7

    icmp_packets -p icmp -m icmp --icmp-type 0 -j ACCEPT

    icmp_packets -s 127.0.0.1 -p icmp -m icmp --icmp-type 8 -j ACCEPTicmp_packets -p icmp -m icmp --icmp-type 8 -j DROP

    icmp_packets -p icmp -m icmp --icmp-type 3 -j ACCEPT

    icmp_packets -p icmp -m icmp --icmp-type 11 -j ACCEPT

    MMIT

    ttp://www.iptablesrocks.org/examples/scripts/web_server.config (2 of 2) [2/13/2004 8:04:48 PM]

  • 8/2/2019 An Iptables Guide & Tutorial

    17/49

    Manpage of IPTABLES

    ontent-type: text/html

    PTABLES

    ection: (8)

    pdated: Mar 09, 2002

    dexReturn to Main Contents

    NAME

    tables - administration tool for IPv4 packet filtering and NAT

    SYNOPSIS

    tables [-t table] -[ADC] chain rule-specification [options]

    tables [-t table] -I chain [rulenum] rule-specification [options]

    tables [-t table] -R chain rulenum rule-specification [options]

    tables [-t table] -D chain rulenum [options]

    tables [-t table] -[LFZ] [chain] [options]

    tables [-t table] -N chain

    tables [-t table] -X [chain]tables [-t table] -P chain target [options]

    tables [-t table] -E old-chain-name new-chain-name

    DESCRIPTION

    tables is used to set up, maintain, and inspect the tables of IP packet filter rules in the Linux kernel

    everal different tables may be defined. Each table contains a number of built-in chains and may also

    ntain user-defined chains.

    ach chain is a list of rules which can match a set of packets. Each rule specifies what to do with a pa

    at matches. This is called a `target', which may be a jump to a user-defined chain in the same table.

    TARGETS

    ttp://www.iptablesrocks.org/syntax/man_iptables.htm (1 of 20) [2/13/2004 8:04:51 PM]

    http://-/?-http://localhost/cgi-bin/man/man2htmlhttp://localhost/cgi-bin/man/man2htmlhttp://-/?-
  • 8/2/2019 An Iptables Guide & Tutorial

    18/49

    Manpage of IPTABLES

    firewall rule specifies criteria for a packet, and a target. If the packet does not match, the next rule i

    e chain is the examined; if it does match, then the next rule is specified by the value of the target, w

    n be the name of a user-defined chain or one of the special valuesACCEPT,DROP, QUEUE, or

    ETURN.

    CCEPTmeans to let the packet through.DROP means to drop the packet on the floor. QUEUEmea

    pass the packet to userspace (if supported by the kernel).RETURNmeans stop traversing this chaind resume at the next rule in the previous (calling) chain. If the end of a built-in chain is reached or a

    le in a built-in chain with targetRETURNis matched, the target specified by the chain policy

    termines the fate of the packet.

    TABLES

    here are currently three independent tables (which tables are present at any time depends on the kern

    nfiguration options and which modules are present).

    --table table

    This option specifies the packet matching table which the command should operate on. If the

    kernel is configured with automatic module loading, an attempt will be made to load the

    appropriate module for that table if it is not already there.

    The tables are as follows:

    ter

    This is the default table (if no -t option is passed). It contains the built-in chains INPUT (forpackets coming into the box itself), FORWARD (for packets being routed through the box), a

    OUTPUT (for locally-generated packets).

    at

    This table is consulted when a packet that creates a new connection is encountered. It consists

    three built-ins: PREROUTING (for altering packets as soon as they come in), OUTPUT (for

    altering locally-generated packets before routing), and POSTROUTING (for altering packets

    they are about to go out).

    angle

    This table is used for specialized packet alteration. Until kernel 2.4.17 it had two built-in chainPREROUTING (for altering incoming packets before routing) and OUTPUT (for altering lo

    generated packets before routing). Since kernel 2.4.18, three other built-in chains are also

    supported: INPUT (for packets coming into the box itself), FORWARD (for altering packets

    being routed through the box), and POSTROUTING (for altering packets as they are about to

    out).

    ttp://www.iptablesrocks.org/syntax/man_iptables.htm (2 of 20) [2/13/2004 8:04:51 PM]

  • 8/2/2019 An Iptables Guide & Tutorial

    19/49

    Manpage of IPTABLES

    OPTIONS

    he options that are recognized by iptables can be divided into several different groups.

    OMMANDS

    hese options specify the specific action to perform. Only one of them can be specified on the commane unless otherwise specified below. For all the long versions of the command and option names, yo

    ed to use only enough letters to ensure that iptables can differentiate it from all other options.

    A, --append chain rule-specification

    Append one or more rules to the end of the selected chain. When the source and/or destination

    names resolve to more than one address, a rule will be added for each possible address

    combination.

    D, --delete chain rule-specification

    D, --delete chain rulenumDelete one or more rules from the selected chain. There are two versions of this command: the

    can be specified as a number in the chain (starting at 1 for the first rule) or a rule to match.

    --insert chain [rulenum] rule-specification

    Insert one or more rules in the selected chain as the given rule number. So, if the rule number i

    the rule or rules are inserted at the head of the chain. This is also the default if no rule number

    specified.

    R, --replace chain rulenum rule-specification

    Replace a rule in the selected chain. If the source and/or destination names resolve to multiple

    addresses, the command will fail. Rules are numbered starting at 1.L, --list [chain]

    List all rules in the selected chain. If no chain is selected, all chains are listed. As every other

    iptables command, it applies to the specified table (filter is the default), so NAT rules get listed

    iptables -t nat -n -L

    Please note that it is often used with the -n option, in order to avoid long reverse DNS lookups

    is legal to specify the -Z (zero) option as well, in which case the chain(s) will be atomically lis

    and zeroed. The exact output is affected by the other arguments given. The exact rules are

    suppressed until you use

    iptables -L -v

    , --flush [chain]

    Flush the selected chain (all the chains in the table if none is given). This is equivalent to delet

    all the rules one by one.

    , --zero [chain]

    Zero the packet and byte counters in all chains. It is legal to specify the -L, --list (list) option a

    well, to see the counters immediately before they are cleared. (See above.)

    ttp://www.iptablesrocks.org/syntax/man_iptables.htm (3 of 20) [2/13/2004 8:04:51 PM]

  • 8/2/2019 An Iptables Guide & Tutorial

    20/49

    Manpage of IPTABLES

    N, --new-chain chain

    Create a new user-defined chain by the given name. There must be no target of that name alrea

    X, --delete-chain [chain]

    Delete the optional user-defined chain specified. There must be no references to the chain. If t

    are, you must delete or replace the referring rules before the chain can be deleted. If no argume

    is given, it will attempt to delete every non-builtin chain in the table.

    , --policy chain target

    Set the policy for the chain to the given target. See the section TARGETS for the legal targetsOnly built-in (non-user-defined) chains can have policies, and neither built-in nor user-defined

    chains can be policy targets.

    E, --rename-chain old-chain new-chain

    Rename the user specified chain to the user supplied name. This is cosmetic, and has no effect

    the structure of the table.

    Help. Give a (currently very brief) description of the command syntax.

    ARAMETERS

    he following parameters make up a rule specification (as used in the add, delete, insert, replace and

    pend commands).

    , --protocol [!]protocol

    The protocol of the rule or of the packet to check. The specified protocol can be one of tcp, ud

    icmp, or all, or it can be a numeric value, representing one of these protocols or a different one

    protocol name from /etc/protocols is also allowed. A "!" argument before the protocol inverts

    test. The number zero is equivalent to all. Protocol all will match with all protocols and is take

    default when this option is omitted.

    --source [!] address[/mask]

    Source specification.Address can be either a network name, a hostname (please note that

    specifying any name to be resolved with a remote query such as DNS is a really bad idea), a

    network IP address (with /mask), or a plain IP address. The maskcan be either a network mask

    a plain number, specifying the number of 1's at the left side of the network mask. Thus, a mask

    24 is equivalent to 255.255.255.0. A "!" argument before the address specification inverts thesense of the address. The flag --src is an alias for this option.

    , --destination [!] address[/mask]

    Destination specification. See the description of the -s (source) flag for a detailed description o

    the syntax. The flag --dst is an alias for this option.

    --jump target

    This specifies the target of the rule; i.e., what to do if the packet matches it. The target can be

    user-defined chain (other than the one this rule is in), one of the special builtin targets which

    decide the fate of the packet immediately, or an extension (see EXTENSIONS below). If this

    ttp://www.iptablesrocks.org/syntax/man_iptables.htm (4 of 20) [2/13/2004 8:04:51 PM]

  • 8/2/2019 An Iptables Guide & Tutorial

    21/49

    Manpage of IPTABLES

    option is omitted in a rule, then matching the rule will have no effect on the packet's fate, but t

    counters on the rule will be incremented.

    --in-interface [!] name

    Name of an interface via which a packet is going to be received (only for packets entering the

    INPUT, FORWARD and PREROUTING chains). When the "!" argument is used before the

    interface name, the sense is inverted. If the interface name ends in a "+", then any interface wh

    begins with this name will match. If this option is omitted, any interface name will match.

    , --out-interface [!] nameName of an interface via which a packet is going to be sent (for packets entering the FORWA

    OUTPUT and POSTROUTING chains). When the "!" argument is used before the interface

    name, the sense is inverted. If the interface name ends in a "+", then any interface which begin

    with this name will match. If this option is omitted, any interface name will match.

    -f, --fragment

    This means that the rule only refers to second and further fragments of fragmented packets. Si

    there is no way to tell the source or destination ports of such a packet (or ICMP type), such a

    packet will not match any rules which specify them. When the "!" argument precedes the "-f"

    the rule will only match head fragments, or unfragmented packets., --set-counters PKTS BYTES

    This enables the administrator to initialize the packet and byte counters of a rule (during INSE

    APPEND,REPLACE operations).

    THER OPTIONS

    he following additional options can be specified:

    , --verbose

    Verbose output. This option makes the list command show the interface name, the rule options

    any), and the TOS masks. The packet and byte counters are also listed, with the suffix 'K', 'M'

    'G' for 1000, 1,000,000 and 1,000,000,000 multipliers respectively (but see the -x flag to chan

    this). For appending, insertion, deletion and replacement, this causes detailed information on t

    rule or rules to be printed.

    , --numeric

    Numeric output. IP addresses and port numbers will be printed in numeric format. By default,

    program will try to display them as host names, network names, or services (whenever applica

    , --exact

    Expand numbers. Display the exact value of the packet and byte counters, instead of only the

    rounded number in K's (multiples of 1000) M's (multiples of 1000K) or G's (multiples of 1000

    This option is only relevant for the -L command.

    ine-numbers

    When listing rules, add line numbers to the beginning of each rule, corresponding to that rule's

    ttp://www.iptablesrocks.org/syntax/man_iptables.htm (5 of 20) [2/13/2004 8:04:51 PM]

  • 8/2/2019 An Iptables Guide & Tutorial

    22/49

    Manpage of IPTABLES

    position in the chain.

    modprobe=command

    When adding or inserting rules into a chain, use command to load any necessary modules (tar

    match extensions, etc).

    MATCH EXTENSIONS

    tables can use extended packet matching modules. These are loaded in two ways: implicitly, when

    protocol is specified, or with the -m or --match options, followed by the matching module name; a

    ese, various extra command line options become available, depending on the specific module. You

    ecify multiple extended match modules in one line, and you can use the -h or --help options after th

    odule has been specified to receive help specific to that module.

    he following are included in the base package, and most of these can be preceded by a ! to invert thense of the match.

    cp

    hese extensions are loaded if `--protocol tcp' is specified. It provides the following options:

    source-port [!]port[:port]

    Source port or port range specification. This can either be a service name or a port number. An

    inclusive range can also be specified, using the formatport:port. If the first port is omitted, "0

    assumed; if the last is omitted, "65535" is assumed. If the second port greater then the first the

    will be swapped. The flag --sport is a convenient alias for this option.

    destination-port [!]port[:port]

    Destination port or port range specification. The flag --dport is a convenient alias for this opti

    tcp-flags [!] maskcomp

    Match when the TCP flags are as specified. The first argument is the flags which we should

    examine, written as a comma-separated list, and the second argument is a comma-separated lis

    flags which must be set. Flags are: SYN ACK FIN RST URG PSH ALL NONE. Hence the

    command

    iptables -A FORWARD -p tcp --tcp-flags SYN,ACK,FIN,RST SYN

    will only match packets with the SYN flag set, and the ACK, FIN and RST flags unset.

    --syn

    Only match TCP packets with the SYN bit set and the ACK and FIN bits cleared. Such packet

    used to request TCP connection initiation; for example, blocking such packets coming in an

    interface will prevent incoming TCP connections, but outgoing TCP connections will be

    unaffected. It is equivalent to --tcp-flags SYN,RST,ACK SYN. If the "!" flag precedes the "-

    ttp://www.iptablesrocks.org/syntax/man_iptables.htm (6 of 20) [2/13/2004 8:04:51 PM]

  • 8/2/2019 An Iptables Guide & Tutorial

    23/49

    Manpage of IPTABLES

    syn", the sense of the option is inverted.

    tcp-option [!] number

    Match if TCP option set.

    mss value[:value]

    Match TCP SYN or SYN/ACK packets with the specified MSS value (or range), which contro

    maximum packet size for that connection.

    dp

    hese extensions are loaded if `--protocol udp' is specified. It provides the following options:

    source-port [!]port[:port]

    Source port or port range specification. See the description of the --source-port option of the

    extension for details.destination-port [!]port[:port]

    Destination port or port range specification. See the description of the --destination-port optio

    the TCP extension for details.

    cmp

    his extension is loaded if `--protocol icmp' is specified. It provides the following option:

    cmp-type [!] typename

    This allows specification of the ICMP type, which can be a numeric ICMP type, or one of the

    ICMP type names shown by the command

    iptables -p icmp -h

    mac

    mac-source [!] address

    Match source MAC address. It must be of the form XX:XX:XX:XX:XX:XX. Note that this on

    makes sense for packets coming from an Ethernet device and entering the PREROUTING,

    FORWARD or INPUT chains.

    ttp://www.iptablesrocks.org/syntax/man_iptables.htm (7 of 20) [2/13/2004 8:04:51 PM]

  • 8/2/2019 An Iptables Guide & Tutorial

    24/49

    Manpage of IPTABLES

    mit

    his module matches at a limited rate using a token bucket filter. A rule using this extension will matc

    ntil this limit is reached (unless the `!' flag is used). It can be used in combination with the LOG targ

    give limited logging, for example.

    imit rate

    Maximum average matching rate: specified as a number, with an optional `/second', `/minute',

    `/hour', or /day' suffix; the default is 3/hour.

    imit-burst number

    Maximum initial number of packets to match: this number gets recharged by one every time th

    limit specified above is not reached, up to this number; the default is 5.

    multiport

    his module matches a set of source or destination ports. Up to 15 ports can be specified. It can only b

    ed in conjunction with -p tcp or -p udp.

    source-portsport[,port[,port...]]

    Match if the source port is one of the given ports. The flag --sports is a convenient alias for th

    option.destination-portsport[,port[,port...]]

    Match if the destination port is one of the given ports. The flag --dports is a convenient alias f

    this option.

    portsport[,port[,port...]]

    Match if the both the source and destination ports are equal to each other and to one of the giv

    ports.

    mark

    his module matches the netfilter mark field associated with a packet (which can be set using the MA

    rget below).

    mark value[/mask]

    Matches packets with the given unsigned mark value (if a mask is specified, this is logically

    ttp://www.iptablesrocks.org/syntax/man_iptables.htm (8 of 20) [2/13/2004 8:04:51 PM]

  • 8/2/2019 An Iptables Guide & Tutorial

    25/49

    Manpage of IPTABLES

    ANDed with the mask before the comparison).

    wner

    his module attempts to match various characteristics of the packet creator, for locally-generated pac

    is only valid in the OUTPUT chain, and even this some packets (such as ICMP ping responses) ma

    ve no owner, and hence never match.

    uid-owner userid

    Matches if the packet was created by a process with the given effective user id.

    gid-owner groupid

    Matches if the packet was created by a process with the given effective group id.

    pid-ownerprocessid

    Matches if the packet was created by a process with the given process id.

    sid-owner sessionid

    Matches if the packet was created by a process in the given session group.

    cmd-owner name

    Matches if the packet was created by a process with the given command name. (this option is

    present only if iptables was compiled under a kernel supporting this feature)

    tate

    his module, when combined with connection tracking, allows access to the connection tracking state

    is packet.

    state state

    Where state is a comma separated list of the connection states to match. Possible states are

    INVALID meaning that the packet is associated with no known connection, ESTABLISHED

    meaning that the packet is associated with a connection which has seen packets in both directi

    NEW meaning that the packet has started a new connection, or otherwise associated with aconnection which has not seen packets in both directions, and RELATED meaning that the pa

    is starting a new connection, but is associated with an existing connection, such as an FTP dat

    transfer, or an ICMP error.

    onntrack

    ttp://www.iptablesrocks.org/syntax/man_iptables.htm (9 of 20) [2/13/2004 8:04:51 PM]

  • 8/2/2019 An Iptables Guide & Tutorial

    26/49

    Manpage of IPTABLES

    his module, when combined with connection tracking, allows access to more connection tracking

    formation than the "state" match. (this module is present only if iptables was compiled under a kern

    pporting this feature)

    ctstate state

    Where state is a comma separated list of the connection states to match. Possible states are

    INVALID meaning that the packet is associated with no known connection, ESTABLISHEDmeaning that the packet is associated with a connection which has seen packets in both directi

    NEW meaning that the packet has started a new connection, or otherwise associated with a

    connection which has not seen packets in both directions, and RELATED meaning that the pa

    is starting a new connection, but is associated with an existing connection, such as an FTP dat

    transfer, or an ICMP error. SNAT A virtual state, matching if the original source address diffe

    from the reply destination. DNAT A virtual state, matching if the original destination differs f

    the reply source.

    ctprotoproto

    Protocol to match (by number or name)

    ctorigsrc [!] address[/mask]

    Match against original source address

    ctorigdst [!] address[/mask]

    Match against original destination address

    ctreplsrc [!] address[/mask]

    Match against reply source address

    ctrepldst [!] address[/mask]

    Match against reply destination address

    ctstatus [NONE|EXPECTED|SEEN_REPLY|ASSURED][,...]

    Match against internal conntrack states

    ctexpire time[:time]

    Match remaining lifetime in seconds against given value or range of values (inclusive)

    scp

    his module matches the 6 bit DSCP field within the TOS field in the IP header. DSCP has supersedeOS within the IETF.

    dscp value

    Match against a numeric (decimal or hex) value [0-32].

    dscp-classDiffServ Class

    Match the DiffServ class. This value may be any of the BE, EF, AFxx or CSx classes. It will th

    be converted into it's according numeric value.

    ttp://www.iptablesrocks.org/syntax/man_iptables.htm (10 of 20) [2/13/2004 8:04:51 PM]

  • 8/2/2019 An Iptables Guide & Tutorial

    27/49

    Manpage of IPTABLES

    kttype

    his module matches the link-layer packet type.

    pkt-type [unicast|broadcast|multicast]

    os

    his module matches the 8 bits of Type of Service field in the IP header (ie. including the precedence

    ts).

    tos tosThe argument is either a standard name, (use

    iptables -m tos -h

    to see the list), or a numeric value to match.

    h

    his module matches the SPIs in AH header of IPSec packets.

    ahspi [!] spi[:spi]

    sp

    his module matches the SPIs in ESP header of IPSec packets.

    espspi [!] spi[:spi]

    ength

    ttp://www.iptablesrocks.org/syntax/man_iptables.htm (11 of 20) [2/13/2004 8:04:51 PM]

  • 8/2/2019 An Iptables Guide & Tutorial

    28/49

    Manpage of IPTABLES

    his module matches the length of a packet against a specific value or range of values.

    ength length[:length]

    l

    his module matches the time to live field in the IP header.

    ttl ttl

    Matches the given TTL value.

    nclean

    his module takes no options, but attempts to match packets which seem malformed or unusual. This

    garded as experimental.

    TARGET EXTENSIONS

    tables can use extended target modules: the following are included in the standard distribution.

    OG

    urn on kernel logging of matching packets. When this option is set for a rule, the Linux kernel will p

    me information on all matching packets (like most IP header fields) via the kernel log (where it can

    ad with dmesg or syslogd(8)). This is a "non-terminating target", i.e. rule traversal continues at the n

    le. So if you want to LOG the packets you refuse, use two separate rules with the same matching

    iteria, first using target LOG then DROP (or REJECT).

    og-level level

    Level of logging (numeric or see syslog.conf(5)).

    og-prefixprefix

    Prefix log messages with the specified prefix; up to 29 letters long, and useful for distinguishin

    messages in the logs.

    og-tcp-sequence

    Log TCP sequence numbers. This is a security risk if the log is readable by users.

    ttp://www.iptablesrocks.org/syntax/man_iptables.htm (12 of 20) [2/13/2004 8:04:51 PM]

    http://localhost/cgi-bin/man/man2html?8+syslogdhttp://localhost/cgi-bin/man/man2html?5+syslog.confhttp://localhost/cgi-bin/man/man2html?5+syslog.confhttp://localhost/cgi-bin/man/man2html?8+syslogd
  • 8/2/2019 An Iptables Guide & Tutorial

    29/49

    Manpage of IPTABLES

    og-tcp-options

    Log options from the TCP packet header.

    og-ip-options

    Log options from the IP packet header.

    MARK

    his is used to set the netfilter mark value associated with the packet. It is only valid in the mangle ta

    can for example be used in conjunction with iproute2.

    set-mark mark

    EJECT

    his is used to send back an error packet in response to the matched packet: otherwise it is equivalent

    ROP so it is a terminating TARGET, ending rule traversal. This target is only valid in the INPUT,

    ORWARD and OUTPUT chains, and user-defined chains which are only called from those chains

    llowing option controls the nature of the error packet returned:

    reject-with type

    The type given can be icmp-net-unreachable, icmp-host-unreachable, icmp-port-unreachaicmp-proto-unreachable, icmp-net-prohibited oricmp-host-prohibited, which return the

    appropriate ICMP error message (port-unreachable is the default). The option tcp-reset can

    used on rules which only match the TCP protocol: this causes a TCP RST packet to be sent ba

    This is mainly useful for blocking ident(113/tcp) probes which frequently occur when sending

    mail to broken mail hosts (which won't accept your mail otherwise).

    OS

    his is used to set the 8-bit Type of Service field in the IP header. It is only valid in the mangle table

    set-tos tos

    You can use a numeric TOS values, or use

    iptables -j TOS -h

    ttp://www.iptablesrocks.org/syntax/man_iptables.htm (13 of 20) [2/13/2004 8:04:51 PM]

  • 8/2/2019 An Iptables Guide & Tutorial

    30/49

    Manpage of IPTABLES

    to see the list of valid TOS names.

    MIRROR

    his is an experimental demonstration target which inverts the source and destination fields in the IP

    ader and retransmits the packet. It is only valid in the INPUT, FORWARD and PREROUTING

    ains, and user-defined chains which are only called from those chains. Note that the outgoing packe

    e NOT seen by any packet filtering chains, connection tracking or NAT, to avoid loops and other

    oblems.

    NAT

    his target is only valid in the nat table, in the POSTROUTING chain. It specifies that the source

    dress of the packet should be modified (and all future packets in this connection will also be mangld rules should cease being examined. It takes one type of option:

    to-source ipaddr[-ipaddr][:port-port]

    which can specify a single new source IP address, an inclusive range of IP addresses, and

    optionally, a port range (which is only valid if the rule also specifies -p tcp or -p udp). If no p

    range is specified, then source ports below 512 will be mapped to other ports below 512: those

    between 512 and 1023 inclusive will be mapped to ports below 1024, and other ports will be

    mapped to 1024 or above. Where possible, no port alteration will occur.

    ou can add several --to-source options. If you specify morethan one source address, either via an address range or multiple --to-source options, a simple r

    robin (one after another in cycle) takes place between these adresses.

    NAT

    his target is only valid in the nat table, in the PREROUTING and OUTPUT chains, and user-defin

    ains which are only called from those chains. It specifies that the destination address of the packet

    ould be modified (and all future packets in this connection will also be mangled), and rules should

    ase being examined. It takes one type of option:

    to-destination ipaddr[-ipaddr][:port-port]

    which can specify a single new destination IP address, an inclusive range of IP addresses, and

    optionally, a port range (which is only valid if the rule also specifies -p tcp or -p udp). If no p

    range is specified, then the destination port will never be modified.

    ttp://www.iptablesrocks.org/syntax/man_iptables.htm (14 of 20) [2/13/2004 8:04:51 PM]

  • 8/2/2019 An Iptables Guide & Tutorial

    31/49

    Manpage of IPTABLES

    ou can add several --to-destination options. If you specify more

    than one destination address, either via an address range or multiple --to-destination options, a

    simple round-robin (one after another in cycle) load balancing takes place between these adres

    MASQUERADE

    his target is only valid in the nat table, in the POSTROUTING chain. It should only be used with

    ynamically assigned IP (dialup) connections: if you have a static IP address, you should use the SNA

    rget. Masquerading is equivalent to specifying a mapping to the IP address of the interface the pack

    oing out, but also has the effect that connections areforgotten when the interface goes down. This is

    rrect behavior when the next dialup is unlikely to have the same interface address (and hence any

    tablished connections are lost anyway). It takes one option:

    to-portsport[-port]

    This specifies a range of source ports to use, overriding the default SNAT source port-selectio

    heuristics (see above). This is only valid if the rule also specifies -p tcp or -p udp.

    EDIRECT

    his target is only valid in the nat table, in the PREROUTING and OUTPUT chains, and user-defin

    ains which are only called from those chains. It alters the destination IP address to send the packet e machine itself (locally-generated packets are mapped to the 127.0.0.1 address). It takes one option

    to-portsport[-port]

    This specifies a destination port or range of ports to use: without this, the destination port is ne

    altered. This is only valid if the rule also specifies -p tcp or -p udp.

    LOG

    his target provides userspace logging of matching packets. When this target is set for a rule, the Linu

    rnel will multicast this packet through a netlinksocket. One or more userspace processes may then

    bscribe to various multicast groups and receive the packets. Like LOG, this is a "non-terminating

    rget", i.e. rule traversal continues at the next rule.

    ulog-nlgroup nlgroup

    ttp://www.iptablesrocks.org/syntax/man_iptables.htm (15 of 20) [2/13/2004 8:04:51 PM]

  • 8/2/2019 An Iptables Guide & Tutorial

    32/49

    Manpage of IPTABLES

    This specifies the netlink group (1-32) to which the packet is sent. Default value is 1.

    ulog-prefixprefix

    Prefix log messages with the specified prefix; up to 32 characters long, and useful for

    distinguishing messages in the logs.

    ulog-cprange size

    Number of bytes to be copied to userspace. A value of 0 always copies the entire packet,

    regardless of its size. Default is 0.

    ulog-qthreshold sizeNumber of packet to queue inside kernel. Setting this value to, e.g. 10 accumulates ten packets

    inside the kernel and transmits them as one netlink multipart message to userspace. Default is

    (for backwards compatibility).

    CPMSS

    his target allows to alter the MSS value of TCP SYN packets, to control the maximum size for that

    nnection (usually limiting it to your outgoing interface's MTU minus 40). Of course, it can only be

    conjunction with -p tcp.

    his target is used to overcome criminally braindead ISPs or servers which block ICMP Fragmentatio

    eeded packets. The symptoms of this problem are that everything works fine from your Linux

    ewall/router, but machines behind it can never exchange large packets:

    ) Web browsers connect, then hang with no data received.

    ) Small mail works fine, but large emails hang.

    ) ssh works fine, but scp hangs after initial handshaking.

    orkaround: activate this option and add a rule to your firewall configuration like:

    ptables -A FORWARD -p tcp --tcp-flags SYN,RST SYN \

    -j TCPMSS --clamp-mss-to-pmtu

    set-mss value

    Explicitly set MSS option to specified value.

    clamp-mss-to-pmtu

    Automatically clamp MSS value to (path_MTU - 40).

    hese options are mutually exclusive.

    SCP

    ttp://www.iptablesrocks.org/syntax/man_iptables.htm (16 of 20) [2/13/2004 8:04:51 PM]

  • 8/2/2019 An Iptables Guide & Tutorial

    33/49

    Manpage of IPTABLES

    his target allows to alter the value of the DSCP bits within the TOS header of the IPv4 packet. As th

    anipulates a packet, it can only be used in the mangle table.

    set-dscp value

    Set the DSCP field to a numerical value (can be decimal or hex)

    set-dscp-class class

    Set the DSCP field to a DiffServ class.

    CN

    his target allows to selectively work around known ECN blackholes. It can only be used in the mang

    ble.

    ecn-tcp-remove

    Remove all ECN bits from the TCP header. Of course, it can only be used in conjunction with

    tcp.

    DIAGNOSTICS

    arious error messages are printed to standard error. The exit code is 0 for correct functioning. Errors

    hich appear to be caused by invalid or abused command line parameters cause an exit code of 2, and

    her errors cause an exit code of 1.

    BUGS

    ugs? What's this? ;-) Well... the counters are not reliable on sparc64.

    COMPATIBILITY WITH IPCHAINS

    his iptables is very similar to ipchains by Rusty Russell. The main difference is that the chains INP

    d OUTPUT are only traversed for packets coming into the local host and originating from the loca

    ost respectively. Hence every packet only passes through one of the three chains; previously a forwa

    cket would pass through all three.

    ttp://www.iptablesrocks.org/syntax/man_iptables.htm (17 of 20) [2/13/2004 8:04:51 PM]

  • 8/2/2019 An Iptables Guide & Tutorial

    34/49

    Manpage of IPTABLES

    he other main difference is that -i refers to the input interface; -o refers to the output interface, and b

    e available for packets entering the FORWARD chain.

    tables is a pure packet filter when using the default `filter' table, with optional extension modules. T

    ould simplify much of the previous confusion over the combination of IP masquerading and packet

    tering seen previously. So the following options are handled differently:

    MASQ

    M -S

    M -L

    here are several other changes in iptables.

    SEE ALSO

    tables-save(8), iptables-restore(8), ip6tables(8), ip6tables-save(8), ip6tables-restore(8). The pac

    tering-HOWTO details iptables usage for packet filtering, the NAT-HOWTO details NAT, the netf

    tensions-HOWTO details the extensions that are not in the standard distribution, and the netfilter-

    cking-HOWTO details the netfilter internals.

    ee http://www.netfilter.org/.

    AUTHORS

    usty Russell wrote iptables, in early consultation with Michael Neuling.

    arc Boucher made Rusty abandon ipnatctl by lobbying for a generic packet selection framework in

    tables, then wrote the mangle table, the owner match, the mark stuff, and ran around doing cool stuf

    erywhere.

    mes Morris wrote the TOS target, and tos match.

    zsef Kadlecsik wrote the REJECT target.

    arald Welte wrote the ULOG target, TTL, DSCP, ECN matches and targets.

    he Netfilter Core Team is: Marc Boucher, Jozsef Kadlecsik, James Morris, Harald Welte and Rusty

    ussell.

    an page written by Herve Eychenne .

    ttp://www.iptablesrocks.org/syntax/man_iptables.htm (18 of 20) [2/13/2004 8:04:51 PM]

    http://localhost/cgi-bin/man/man2html?8+iptables-savehttp://localhost/cgi-bin/man/man2html?8+iptables-restorehttp://localhost/cgi-bin/man/man2html?8+ip6tableshttp://localhost/cgi-bin/man/man2html?8+ip6tables-savehttp://localhost/cgi-bin/man/man2html?8+ip6tables-restorehttp://www.netfilter.org/mailto:[email protected]:[email protected]://www.netfilter.org/http://localhost/cgi-bin/man/man2html?8+ip6tables-restorehttp://localhost/cgi-bin/man/man2html?8+ip6tables-savehttp://localhost/cgi-bin/man/man2html?8+ip6tableshttp://localhost/cgi-bin/man/man2html?8+iptables-restorehttp://localhost/cgi-bin/man/man2html?8+iptables-save
  • 8/2/2019 An Iptables Guide & Tutorial

    35/49

    Manpage of IPTABLES

    ndex

    AME

    YNOPSISESCRIPTION

    ARGETS

    ABLES

    PTIONS

    COMMANDS

    PARAMETERS

    OTHER OPTIONS

    ATCH EXTENSIONStcp

    udp

    icmp

    mac

    limit

    multiport

    mark

    ownerstate

    conntrack

    dscp

    pkttype

    tos

    ah

    esp

    length

    ttl

    unclean

    ARGET EXTENSIONS

    LOG

    MARK

    REJECT

    TOS

    ttp://www.iptablesrocks.org/syntax/man_iptables.htm (19 of 20) [2/13/2004 8:04:51 PM]

    http://-/?-http://-/?-http://-/?-http://-/?-http://-/?-http://-/?-http://-/?-http://-/?-http://-/?-http://-/?-http://-/?-http://-/?-http://-/?-http://-/?-http://-/?-http://-/?-http://-/?-http://-/?-http://-/?-http://-/?-http://-/?-http://-/?-http://-/?-http://-/?-http://-/?-http://-/?-http://-/?-http://-/?-http://-/?-http://-/?-http://-/?-http://-/?-http://-/?-http://-/?-http://-/?-http://-/?-http://-/?-http://-/?-http://-/?-http://-/?-http://-/?-http://-/?-http://-/?-http://-/?-http://-/?-http://-/?-http://-/?-http://-/?-http://-/?-http://-/?-http://-/?-http://-/?-http://-/?-http://-/?-http://-/?-http://-/?-http://-/?-http://-/?-http://-/?-http://-/?-http://-/?-http://-/?-http://-/?-http://-/?-http://-/?-http://-/?-
  • 8/2/2019 An Iptables Guide & Tutorial

    36/49

    Manpage of IPTABLES

    MIRROR

    SNAT

    DNAT

    MASQUERADE

    REDIRECT

    ULOG

    TCPMSSDSCP

    ECN

    IAGNOSTICS

    UGS

    OMPATIBILITY WITH IPCHAINS

    EE ALSO

    UTHORS

    his document was created by man2html, using the manual pages.

    me: 05:21:18 GMT, January 07, 2004

    ttp://www.iptablesrocks.org/syntax/man_iptables.htm (20 of 20) [2/13/2004 8:04:51 PM]

    http://-/?-http://-/?-http://-/?-http://-/?-http://-/?-http://-/?-http://-/?-http://-/?-http://-/?-http://-/?-http://-/?-http://-/?-http://-/?-http://-/?-http://localhost/cgi-bin/man/man2htmlhttp://localhost/cgi-bin/man/man2htmlhttp://-/?-http://-/?-http://-/?-http://-/?-http://-/?-http://-/?-http://-/?-http://-/?-http://-/?-http://-/?-http://-/?-http://-/?-http://-/?-http://-/?-
  • 8/2/2019 An Iptables Guide & Tutorial

    37/49

    ttp://www.iptablesrocks.org/guide/

    home | syntax & structure | examples | faq | contact | links

    The iptablesrocks.org iptables firewall setup guideoverview:

    iptablesrocks.org iptables firewall is geared for a typical webserver running the following services:

    HTP and HTTPSPS

    TPP3

    AP and IMAPSSQL

    en running a typical web server, you need a firewall that is secure and offers protection, but you also need one that allows all needed traffic e to enter and leave the server so that your server's day to day operations can carry on unimpeded. This particular iptables configuration doeowing:

    ses the "mangle" portion of the table to effectively block and/or confuse most port scans. These rules deal with FIN,SYN,RST,PSH,ACK,UR

    ,PSH and URG packets.

    stablishes a secure foundation by initially blocking all incoming, outgoing and forwarded packets COMPLETELY.

    With all incoming packets dropped by default, it then grants incoming access to a select number of ports. These ports are ports that a typical

    ver might allow.

    en inbound ports include: 20 & 21 (ftp), 22 (ssh), 25 (smtp), 53 (dns), 80 (http), 110 (pop), 143 (imap), 443 (https), 993 (imaps)

    With all outbound packets dropped by default, it then grants outbound access to a select number of ports. These ports are posts that a typica

    ver might allow.

    en outbound ports include: 20 & 21 (ftp), 22 (ssh), 25 (smtp), 43 (whois), 53 (dns), 80 (http), 110 (pop), 143 (imap), 443 (https), 993 (imaps)

    ll requests to prohibited ports are logged to a custom log file. Additional logging is also possible.

    n installation of "Iptables Log Analyzer", which you provides a web based tool to monitor the firewall logs.

    Start the installation here

    home | syntax & structure | examples | faq | contact | links

    Site last modified:February 13, 2004 15:27:51

    ttp://www.iptablesrocks.org/guide/ [2/13/2004 8:04:52 PM]

    http://www.rocksproject.org/mailto:[email protected]
  • 8/2/2019 An Iptables Guide & Tutorial

    38/49

    ptablesrocks.org - Preparation

    home | syntax & structure | examples | faq | contact | links

    The iptablesrocks.org iptables firewall setup guidetem Requirements/Installation:

    bles is geared for Linux type operating systems. This setup guide is geared for Redhat Linux and Redhat Enterprise Linux. However you ca

    bably apply this to any other Linux distro that Iptables will run on. In order to run this setup, you will obviously need to have iptables installedr server.

    a Redhat server, you can usually find out if you have the iptables RPM package installed by running the following commnand:

    m -q iptables

    tables is installed, you should get an output like this:

    bles-1.2.8-12

    tables is not installed on your server, you can either download the RPM from Redhat's site or, if your server is registered with Redhat Netwoate service, you can install iptables directly from Redhat with the following command:

    date -i iptables

    -configuration:

    part of the preparation for our new iptables firewall, we're going to adjust the kernel logging configuration so that the firewall will log its activittom logfile. Here's how you do it...

    etc/syslog.conf

    the following to the syslog.conf file:

    Tables loggingernel messages.n.debug;kern.info /var/log/firewall

    e and exit the file.

    w let's activate the changes...

    /rc.d/init.d/syslog restart

    r kernel should now log the activity of the soon to be firewall to /var/log/firewall. Once we start up the iptables firewall, the /var/log/firewall filelocation of the logging output of the firewall. This output will, in turn, be analyzed by the "Iptables Log Analyzer" tool and put in to a web acceuser friendly format. Woohoo!

    last thing you will want to do is to add a module to your kernel. The "ip_conntrack_ftp" module will need to be added so that FTP sessions cction correctly. If you don't add this module, the firewall will prevent proper FTP sessions. Fortunately, adding the module is easy. Jus run theowing command:

    mod ip_conntrack_ftp

    a! The module is added. You may want to add that line to your server's /etc/rc.local file to ensure that the module loads on boot. We'll coverr in the guide.

    ttp://www.iptablesrocks.org/guide/preparation.php (1 of 2) [2/13/2004 8:04:52 PM]

  • 8/2/2019 An Iptables Guide & Tutorial

    39/49

    ptablesrocks.org - Preparation

    Proceed to the next step

    home | syntax & structure | examples | faq | contact | links

    Site last modified:February 13, 2004 15:27:51

    ttp://www.iptablesrocks.org/guide/preparation.php (2 of 2) [2/13/2004 8:04:52 PM]

    http://www.rocksproject.org/mailto:[email protected]
  • 8/2/2019 An Iptables Guide & Tutorial

    40/49

    ptablesrocks.org - Deploying a Safetynet

    home | syntax & structure | examples | faq | contact | links

    The iptablesrocks.org iptables firewall setup guideploying a Safetynet:

    s next step is of critical importance. Whenever you start toying around with the firewall settings of any server, you will want to deploy a mean

    to regain access to the server should you accidentally lock yourself out. This may sound silly at first, but it can be very easy to lock yourselfr server when making firewall adjustments, no matter how skilled you are. It only takes a tiny syntax error or a missed flag somewhere in thewall script to lock your server down to a point where you cannot access it. While locking yourself out of a server that you have physical accesthat big of a deal, it can be a nightmare if you lock yourself out of a server that you don't have physical access to. This is certainly the case iver is being hosted somewhere. If you don't believe me, try skipping this step and you may end up learning your lesson the hard way.

    unately, safeguarding against an accidental server lock down is not difficult. The procedure only takes a couple of minutes and can be a lifehere's how you do it:

    safety net is simply going to be a firewall reset script that runs of our server's crontab. We will set the script to run at regular intervals. In theuld you lock yourself out of your server, all you'll have to do is sit back and wait for the script to execute and for the firewall to reset.

    et's create the reset script...

    oot/firewall_reset

    tables firewall reset scripterPUT ACCEPT [164:15203]RWARD ACCEPT [0:0]TPUT ACCEPT [147:63028]

    MMIT

    angleEROUTING ACCEPT [164:15203]

    PUT ACCEPT [164:15203]RWARD ACCEPT [0:0]

    TPUT ACCEPT [147:63028]STROUTING ACCEPT [147:63028]MMIT

    tEROUTING ACCEPT [14:672]STROUTING ACCEPT [9:684]TPUT ACCEPT [9:684]

    MMIT

    e and exit the file

    w let's test the reset script. The following command will utilize the "iptables-import" tool, which is used to import an iptables config script direciptables ruleset. When we import the above iptables configuration into the ruleset, it will completely reset your firewall and put your server is

    lly "open" state where all packets are allowed to freely move in and out of your server. If you've locked yourself out of your server, this will dtakes and let you back in.

    bles-restore < /root/firewall_reset

    ou don't get an error, the script worked. The last thing you will want to do is to actually look at the iptables status just to make sure that your sompletely open as it should be. The following command will display your current iptables status:

    bles -L

    open firewall should look similar to this:

    ttp://www.iptablesrocks.org/guide/safetynet.php (1 of 2) [2/13/2004 8:04:53 PM]

  • 8/2/2019 An Iptables Guide & Tutorial

    41/49

    ptablesrocks.org - Deploying a Safetynet

    ain INPUT (policy ACCEPT)get prot opt source destination

    ain FORWARD (policy ACCEPT)get prot opt source destination

    ain OUTPUT (policy ACCEPT)get prot opt source destination

    you can see, the INPUT, OUTPUT and FORWARD chains of your firewall are now set to a default "ACCEPT" state. This means that your seaccept any packets, be they OUTBOUDN, INBOUND or FORWARDED. In other words, you have no firewall at this point. So now that we kn

    pt works, let's put it into the server's crontab.We'll create a crontab entry that resets the firewall every 15 minutes.

    ntab -e

    5,30,45 * * * * /sbin/iptables-restore < /root/firewall_reset

    t's it. Now save and exit out of the crontab editor.

    t's it. Until the crontab is disabled, your server's iptables ruleset will reset every 15 minutes. This means that if you lock yourself out later on up guide, you'll only have to wait a maximum of 15 minutes before the firewall resets and the erroneous rules are dropped.

    e: Obviously, once you finally get your firewall safely configured you will want to disable this crontab entry. ;)

    now let's get down to business and deploy the firewall script!

    Proceed to the next step

    home | syntax & structure | examples | faq | contact | links

    Site last modified:February 13, 2004 15:27:51

    ttp://www.iptablesrocks.org/guide/safetynet.php (2 of 2) [2/13/2004 8:04:53 PM]

    http://www.rocksproject.org/mailto:[email protected]
  • 8/2/2019 An Iptables Guide & Tutorial

    42/49

    ptablesrocks.org - Deploying the firewall

    home | syntax & structure | examples | faq | contact | links

    The iptablesrocks.org iptables firewall setup guideploying the firewall:

    l, it's finally time to create the main firewall ruleset script. We will simply create an importable iptables ruleset script and then import it into th

    bles ruleset on your server. As soon as we import it, it instantly becomes active. So let's get started.

    ate the firewall script...

    oot/primary_firewall

    e NAT portion of the ruleset. Used for Network Address Transalation.sually not needed on a typical web server, but it's there if you need it.tEROUTING ACCEPT [127173:7033011]STROUTING ACCEPT [31583:2332178]TPUT ACCEPT [32021:2375633]

    MMIT

    e Mangle portion of the ruleset. Here is where unwanted packet types get dropped.is helps in making port scans against your server a bit more time consuming and difficult, but not impossible.

    angleEROUTING ACCEPT [444:43563]

    PUT ACCEPT [444:43563]RWARD ACCEPT [0:0]TPUT ACCEPT [402:144198]STROUTING ACCEPT [402:144198]

    PREROUTING -p tcp -m tcp --tcp-flags FIN,SYN,RST,PSH,ACK,URG FIN,PSH,URG -j DROPPREROUTING -p tcp -m tcp --tcp-flags FIN,SYN,RST,PSH,ACK,URG NONE -j DROPPREROUTING -p tcp -m tcp --tcp-flags SYN,RST SYN,RST -j DROPPREROUTING -p tcp -m tcp --tcp-flags FIN,SYN FIN,SYN -j DROPPREROUTING -p tcp -m tcp --tcp-flags FIN,SYN,RST,PSH,ACK,URG FIN,PSH,URG -j DROP

    PREROUTING -p tcp -m tcp --tcp-flags FIN,SYN,RST,PSH,ACK,URG NONE -j DROPPREROUTING -p tcp -m tcp --tcp-flags SYN,RST SYN,RST -j DROPPREROUTING -p tcp -m tcp --tcp-flags FIN,SYN FIN,SYN -j DROPPREROUTING -p tcp -m tcp --tcp-flags FIN,SYN,RST,PSH,ACK,URG FIN,PSH,URG -j DROPPREROUTING -p tcp -m tcp --tcp-flags FIN,SYN,RST,PSH,ACK,URG NONE -j DROPPREROUTING -p tcp -m tcp --tcp-flags SYN,RST SYN,RST -j DROPPREROUTING -p tcp -m tcp --tcp-flags FIN,SYN FIN,SYN -j DROPPREROUTING -p tcp -m tcp --tcp-flags FIN,SYN,RST,PSH,ACK,URG FIN,PSH,URG -j DROPPREROUTING -p tcp -m tcp --tcp-flags FIN,SYN,RST,PSH,ACK,URG NONE -j DROPPREROUTING -p tcp -m tcp --tcp-flags SYN,RST SYN,RST -j DROPPREROUTING -p tcp -m tcp --tcp-flags FIN,SYN FIN,SYN -j DROPMMIT

    e FILTER section of the ruleset is where we initially drop all packets and then selectively open certain ports.

    e will also enable logging of all dropped requests.erPUT DROP [1:242]RWARD DROP [0:0]TPUT DROP [0:0]G_DROP - [0:0]G_ACCEPT - [0:0]

    mp_packets - [0:0]

    rst, we cover the INPUT rules, or the rules for incoming requests.ote how at the end we log any incoming packets that are not accepted.NPUT -m state --state RELATED,ESTABLISHED -j ACCEPTNPUT -p tcp -m tcp --dport 20 -j ACCEPTNPUT -p tcp -m tcp --dport 21 -j ACCEPT

    ttp://www.iptablesrocks.org/guide/ruleset.php (1 of 4) [2/13/2004 8:04:54 PM]

  • 8/2/2019 An Iptables Guide & Tutorial

    43/49

    ptablesrocks.org - Deploying the firewall

    NPUT -p tcp -m tcp --dport 22 -j LOG_ACCEPTNPUT -p tcp -m tcp --dport 25 -j LOG_ACCEPTNPUT -p tcp -m tcp --dport 43 -j ACCEPTNPUT -p udp -m udp --dport 53 -j ACCEPTNPUT -p tcp -m tcp --dport 80 -j ACCEPTNPUT -p tcp -m tcp --dport 110 -j ACCEPTNPUT -p tcp -m tcp --dport 143 -j ACCEPTNPUT -p tcp -m tcp --dport 443 -j ACCEPTcomment the next line if you are running Spamassassin on your serverINPUT -p tcp -m tcp --dport 783 -j ACCEPT

    NPUT -p tcp -m tcp --dport 993 -j ACCEPTNPUT -p tcp -m tcp --dport 3306 -j ACCEPTNPUT -s 127.0.0.1 -j ACCEPTNPUT -p icmp -j icmp_packetsNPUT -j LOG_DROP

    ext, we cover the OUTPUT rules, or the rules for all outgoing traffic.ote how at the end we log any outbound packets that are not accepted.OUTPUT -m state --state RELATED,ESTABLISHED -j ACCEPTOUTPUT -p tcp -m tcp --dport 20 -j ACCEPTOUTPUT -p tcp -m tcp --dport 21 -j ACCEPTOUTPUT -p tcp -m tcp --dport 22 -j ACCEPTOUTPUT -p tcp -m tcp --dport 23 -j ACCEPTOUTPUT -p tcp -m tcp --dport 25 -j ACCEPTOUTPUT -p tcp -m tcp --dport 43 -j ACCEPT

    OUTPUT -p udp -m udp --dport 53 -j ACCEPTOUTPUT -p tcp -m tcp --dport 80 -j ACCEPTOUTPUT -p tcp -m tcp --dport 110 -j ACCEPTOUTPUT -p tcp -m tcp --dport 143 -j ACCEPTOUTPUT -p tcp -m tcp --dport 443 -j ACCEPTcomment the next line if you are running Spamassassin on your serverOUTPUT -p tcp -m tcp --dport 783 -j ACCEPT

    OUTPUT -p tcp -m tcp --dport 993 -j ACCEPTOUTPUT -p tcp -m tcp --dport 3306 -j ACCEPTOUTPUT -d 127.0.0.1 -j ACCEPTOUTPUT -p icmp -j icmp_packetsOUTPUT -j LOG_DROP

    ere we have 2 sets of logging rules. One for dropped packets to log all dropped requests and one for accepted packets, should we

    og any accepted requesets.LOG_DROP -j LOG --log-prefix "[IPTABLES DROP] : " --log-tcp-options --log-ip-optionsLOG_DROP -j DROP

    LOG_ACCEPT -j LOG --log-prefix "[IPTABLES ACCEPT] : " --log-tcp-options --log-ip-optionsLOG_ACCEPT -j ACCEPT

    nd finally, a rule to deal with ICMP requests. We drop all ping requests except from our own server.ake sure you replace 1.2.3.4 with the IP address of your server.cmp_packets -p icmp -m icmp --icmp-type 0 -j ACCEPTcmp_packets -s 1.2.3.4 -p icmp -m icmp --icmp-type 8 -j ACCEPTcmp_packets -p icmp -m icmp --icmp-type 8 -j DROPcmp_packets -p icmp -m icmp --icmp-type 3 -j ACCEPTcmp_packets -p icmp -m icmp --icmp-type 11 -j ACCEPT

    MMIT

    e and exit the file.

    w import the firewall into your server's iptables ruleset...

    bles-restore < /root/primary_firewall

    ou don't get any errors, your firewall should now be active. So let's take a look at the iptables status and see what it looks like.

    bles -L

    ttp://www.iptablesrocks.org/guide/ruleset.php (2 of 4) [2/13/2004 8:04:54 PM]

  • 8/2/2019 An Iptables Guide & Tutorial

    44/49

    ptablesrocks.org - Deploying the firewall

    should see an output like this:

    ain INPUT (policy DROP)get prot opt source destinationCEPT all -- anywhere anywhere state RELATED,ESTABLISHEDCEPT tcp -- anywhere anywhere tcp dpt:ftp-dataCEPT tcp -- anywhere anywhere tcp dpt:ftpG_ACCEPT tcp -- anywhere anywhere tcp dpt:sshG_ACCEPT tcp -- anywhere anywhere tcp dpt:smtpCEPT tcp -- anywhere anywhere tcp dpt:nicnameCEPT udp -- anywhere anywhere udp dpt:domain

    CEPT tcp -- anywhere anywhere tcp dpt:httpCEPT tcp -- anywhere anywhere tcp dpt:pop3CEPT tcp -- anywhere anywhere tcp dpt:imapCEPT tcp -- anywhere anywhere tcp dpt:httpsCEPT tcp -- anywhere anywhere tcp dpt:imapsCEPT tcp -- anywhere anywhere tcp dpt:mysqlCEPT all -- localhost.localdomain anywherep_packets icmp -- anywhere anywhere

    G_DROP all -- anywhere anywhere

    ain FORWARD (policy DROP)get prot opt source destination

    ain OUTPUT (policy DROP)

    get prot opt source destinationCEPT all -- anywhere anywhere state RELATED,ESTABLISHEDCEPT tcp -- anywhere anywhere tcp dpt:ftp-dataCEPT tcp -- anywhere anywhere tcp dpt:ftpCEPT tcp -- anywhere anywhere tcp dpt:sshCEPT tcp -- anywhere anywhere tcp dpt:telnetCEPT tcp -- anywhere anywhere tcp dpt:smtpCEPT tcp -- anywhere anywhere tcp dpt:nicnameCEPT udp -- anywhere anywhere udp dpt:domainCEPT tcp -- anywhere anywhere tcp dpt:httpCEPT tcp -- anywhere anywhere tcp dpt:pop3CEPT tcp -- anywhere anywhere tcp dpt:imapCEPT tcp -- anywhere anywhere tcp dpt:httpsCEPT tcp -- anywhere anywhere tcp dpt:imaps

    CEPT tcp -- anywhere anywhere tcp dpt:mysqlCEPT all -- anywhere localhost.localdomainp_packets icmp -- anywhere anywhere

    G_DROP all -- anywhere anywhere

    ain LOG_ACCEPT (2 references)get prot opt source destinationG all -- anywhere anywhere LOG level warning tcp-options ip-options prefix `[IPTABLES ACCEPT] : 'CEPT all -- anywhere anywhere

    ain LOG_DROP (2 references)get prot opt source destinationG all -- anywhere anywhere LOG level warning tcp-options ip-options prefix `[IPTABLES DROP] : 'OP all -- anywhere anywhere

    ain icmp_packets (2 references)get prot opt source destinationCEPT icmp -- anywhere anywhere icmp echo-replyCEPT icmp -- yourhostname anywhere icmp echo-requestOP icmp -- anywhere anywhere icmp echo-requestCEPT icmp -- anywhere anywhere icmp destination-unreachableCEPT icmp -- anywhere anywhere icmp time-exceeded

    gratulations. Your server now has an active firewall. Technically speaking, you can stop here and you should have a decent firewall set up fb server. In the next few steps we will test the functionality of the firewall and we will also install a log analyzer that will provide us with a webmonitor. Additionally, I'll show you how to ensure that your new firewall starts up on boot.

    ttp://www.iptablesrocks.org/guide/ruleset.php (3 of 4) [2/13/2004 8:04:54 PM]

  • 8/2/2019 An Iptables Guide & Tutorial

    45/49

    ptablesrocks.org - Deploying the firewall

    ortant Note: Now that your firewall is up and running, you will want to disable the "safetynet" crontab so that your firewall will remrunning.

    Proceed to the next step

    home | syntax & structure | examples | faq | contact | links

    Site last modified:February 13, 2004 15:27:51

    ttp://www.iptablesrocks.org/guide/ruleset.php (4 of 4) [2/13/2004 8:04:54 PM]

    http://www.rocksproject.org/mailto:[email protected]
  • 8/2/2019 An Iptables Guide & Tutorial

    46/49

    ptablesrocks.org - Testing your new firewall

    home | syntax & structure | examples | faq | contact | links

    The iptablesrocks.org iptables firewall setup guideting your new firewall:

    h you firewall now up and running, it's time to run a few simple tests on it to make sure it's doing it's job.

    m a remote server, try the following:

    SH to your server. A successful connection will be logged in the firewall logs at /var/log/firewall. This will ensure that the ACCEPT logging fuworking correctly.

    un the "nmap" utility against your server (nmap 1.2.3.4, where 1.2.3.4 is your server's IP). The default namp attempt will probably fail. This i

    can add other flags to the nmap probe to further test the server. While your firewall won't be albo to block ALL portscans, it should block make the others a bit more time consuming and troublesome. A portion nmap probe's activities should be logged in the /var/log/firewall logfile. Ties will confirm that the server's DROP logging functions are working correctly.

    ry to ping your server. This should fail, since all ping requests are being dropped by the firewall.

    TP to your server and test for full FTP functionality. If you can't get directly listings, you will need to add the "ip_conntrack_ftp" module with tmmand "insmod ip_conntrack_ftp".

    assuming all your tests went smoothly your firewall should be in good shape. In the next step, we'll install the "Iptables Log Analyzer" packach will allow you to view your log entries in a nice web based environment.

    Proceed to the next step

    home | syntax & structure | examples | faq | contact | links

    Site last modified:February 13, 2004 15:27:51

    ttp://www.iptablesrocks.org/guide/test.php [2/13/2004 8:04:54 PM]

    http://www.rocksproject.org/mailto:[email protected]
  • 8/2/2019 An Iptables Guide & Tutorial

    47/49

  • 8/2/2019 An Iptables Guide & Tutorial

    48/49

    ptablesrocks.org - Iptables Log Analyzer

    ost of the MySQL database_host="localhost";

    ser of the MySQL database_user="iptables_user";

    assword of the MySQL databaseake sure you enter your "iptables_user" password in place of the red x's below_password="xxxxxx";

    ame of the database_name="iptables";

    RL Path to your installation_base="/firewall/";

    bug modebug=1;

    e default number of record displayedfault_number=20;

    e default chain displayed

    fault_chain="ALL";

    e default date for packets (10000 means any)fault_date=10000;

    e default ignored portsfault_ignored_ports= array();

    e and exit the file.

    w we will configure and install the database feeder script.

    cripts/feed_db.pl

    ke sure the following configuration section is set properly. Make sure you enter the "iptables_user" mysql password where the x's are.

    $dsn = 'DBI:mysql:iptables:localhost';$db_user_name = 'iptables_admin';$db_password = 'xxxxx';$log_file = '/var/log/syslog';$pid_file = "/var/run/iptablelog.pid";

    e and exit the file.

    w we will copy the database feeder script to a location from which it can be easily called:

    feed_db.pl /usr/local/bin/

    t, copy the init.d script called "iptablelog" to your server's init.d directory..

    scripts/iptablelog /etc/rc.d/init.d/

    e: I've already pre-configured the "iptableslog" init.d script, but you may want to customize it further depending on your needs.

    let's start it up!

    /init.d/iptablelog start

    ttp://www.iptablesrocks.org/guide/analyze.php (2 of 3) [2/13/2004 8:04:55 PM]

  • 8/2/2019 An Iptables Guide & Tutorial

    49/49

    ptablesrocks.org - Iptables Log Analyzer

    ght! That should be it. Iptables Log Analyzer should now be running! So, let's take a look at the web interface.

    en a browser and go to: http://www.yourdomain.com/firewall

    should get the Iptables Log Analyzer screen. It's pretty self explanatory, so just play around with it for a while and you'll figure it out. If you dany logs yet, you can trigger a test by logging out of your server and then logging in again via SSH. The SSH connection will be recorded inbles logs and this will appear on the Iptables Log Analyzer screen. If you need more help with Iptables Log Analyzer, check out the homepa

    ://www.gege.org/iptables/.

    he next step, we'll cover firewall maintenence as well as step to modify your firewall when needed. We'll also go over how to ensure that you

    wall starts up on boot.

    Proceed to the next step

    home | syntax & structure | examples | faq | contact | links

    Site last modified:February 13, 2004 15:27:51

    http://www.gege.org/iptables/http://www.rocksproject.org/mailto:[email protected]://www.gege.org/iptables/

Recommended